VassilSanych
|
Дата: 26.02.2013
|
|
|
|
Такая же беда для нынешних библиотек из исходников: Код
2013/02/26 17:21:37.219| |SS_RIH3@RTS_SPBFUT00066|Регистрация новой Conditional (0x267FA0) заявки на Buy с ценой 152400 и объемом 1.
2013/02/26 17:21:37.263|Error |QuikManager|Ошибка регистрации заявки: StockSharp.Quik.ApiException: Код ошибки Failed Сообщение Параметр "IS_ACTIVE_IN_TIME" для транзакции "Стоп-заявка" типа "ACTIVATED_BY_ORDER_TAKE_PROFIT_AND_STOP_LIMIT_ORDER" не поддерживается.
2013/02/26 17:21:37.264| |StrategyManager|Status:Started, PnL:0, Slippage:0, Position:0, Latency:00:00:00.5006902, ErrorState
2013/02/26 17:21:37.264|Error |SS_RIH3@RTS_SPBFUT00066|Заявка 62088285 (0x267FA0) не была принята по причине StockSharp.Quik.ApiException: Код ошибки Failed Сообщение Параметр "IS_ACTIVE_IN_TIME" для транзакции "Стоп-заявка" типа "ACTIVATED_BY_ORDER_TAKE_PROFIT_AND_STOP_LIMIT_ORDER" не поддерживается.
.
2013/02/26 17:21:37.267| |SS_RIH3@RTS_SPBFUT00066|Заявка 62088285 больше не активна.
Метод вызова Код
var takeProfitOrder = OrderHelper.CreateConditionTakeProfitAndStopLimit(
ruleOrder,
ruleOrder.Price + (ruleOrder.Direction == OrderDirections.Buy ? 100 : -100),
ruleOrder.Price - (ruleOrder.Direction == OrderDirections.Buy ? 100 : -100),
20,
10);
RegisterOrder(takeProfitOrder);
Код
public Order CreateTakeProfitAndStopLimit(
Security security,
OrderDirections direction,
decimal quantity,
decimal stopPrice,
decimal stopLimitPrice,
decimal offset,
decimal spread)
{
var price = direction == OrderDirections.Buy
? stopPrice - spread - offset
: stopPrice + spread + offset;
return new Order
{
Type = OrderTypes.Conditional,
Volume = quantity,
Security = security,
Direction = direction,
Price = price,
//ExpiryDate = ExpirationDate.Value,
Condition = new QuikOrderCondition
{
Type = QuikOrderConditionTypes.TakeProfitStopLimit,
StopPrice = stopPrice,
StopLimitPrice = stopLimitPrice,
Offset = offset,
Spread = spread,
ActiveTime = null,
},
};
}
Код
public Order CreateConditionTakeProfitAndStopLimit(
Order conditionOrder,
decimal stopPrice,
decimal stopLimitPrice,
decimal offset,
decimal spread)
{
var stopLimit = CreateTakeProfitAndStopLimit(
conditionOrder.Security,
conditionOrder.Direction == OrderDirections.Buy ? OrderDirections.Sell : OrderDirections.Buy,
conditionOrder.Volume,
stopPrice,
stopLimitPrice,
offset,
spread);
var condition = (QuikOrderCondition)stopLimit.Condition;
condition.ConditionOrder = conditionOrder;
condition.ConditionOrderPartiallyMatched = true; // PartiallyMatched.IsChecked;
condition.ConditionOrderUseMatchedBalance = true;// UseMatchedBalance.IsChecked;
return stopLimit;
}
ActiveTime = null должно устанавливать Transaction.SetActiveInTime(false). Но похоже, каким-то образом этого не происходит или сам этот механизм работает не правильно.
|