Добрый день,
Пытаюсь создать тейк профит и стоп лосс по исполнению заявки и получаю следующую ошибку в сообщениях
"{ Параметр "IS_ACTIVE_IN_TIME" для транзакции "Стоп-заявка" типа "ACTIVATED_BY_ORDER_TAKE_PROFIT_AND_STOP_LIMIT_ORDER" не поддерживается.\n,Код ошибки Failed Сообщение Параметр "IS_ACTIVE_IN_TIME" для транзакции "Стоп-заявка" типа "ACTIVATED_BY_ORDER_TAKE_PROFIT_AND_STOP_LIMIT_ORDER" не поддерживается.\n}"
При этом, выставление и обнуление ActiveTime результата не приносит. Создание заявки взято из примеров. Квик 6.02.0.39, S# 4.1.6
private Order CreateTakeProfitAndStopLimit(Portfolio portfolio, Security security, int quantity, decimal stopLossActivationPrice, decimal stopLossExecutionPrice, decimal takeProfitPrice)
{
return new Order
{
Type = OrderTypes.Conditional,
Volume = quantity,
Price = stopLossExecutionPrice,
Security = security,
//ExpiryDate = null,
Portfolio = portfolio,
ExpiryDate = DateTime.MaxValue,
StopCondition = new QuikStopCondition
{
Type = QuikStopConditionTypes.TakeProfitStopLimit,
StopPrice = takeProfitPrice,
StopLimitPrice = stopLossActivationPrice,
Offset = new Unit(0),
Spread = new Unit(0),
ActiveTime = null,
},
};
}
Основной метод
var stopLimit = CreateTakeProfitAndStopLimit(portfolio, FindSecurityByCode(instr.Symbol), quantity, stopLossActivationPrice, stopLossExecutionPrice, takeProfitPrice);
var condition = (QuikStopCondition)stopLimit.StopCondition;
m_trader.RegisterOrder(order);
Thread.Sleep(5 * 1000);
condition.ConditionOrder = order;
m_trader.RegisterOrder(stopLimit);
Это тестовый пример и конечно понятен workaround в виде самостоятельного контроля заявок по исполнению основной, но в плане стаблильности работы проще сразу разместить заявку на сервере брокера.
Если убрать из кода связь с основной заявкой, то ордер прекрасно размещается.
Kommentare (4)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Такая же беда для нынешних библиотек из исходников:
Метод вызова
ActiveTime = null должно устанавливать Transaction.SetActiveInTime(false). Но похоже, каким-то образом этого не происходит или сам этот механизм работает не правильно.
Решение (локальное) TransactionHelper.cs
Работает
Оно неправильно, но спасибо за наводку. Поправим.