Приветствую уважаемых Михаила и коллег!
При котировании Тейкпрофит стратегии часто выполниляется две заявки. Т.е. выставление новой заявки не отменяет или не успевает отменить старую. Вернее даже так : первая заявка исполнилась, но котирование выставляет вторую заявку (см. лог ниже выставилось две заявки 57878465 и 57878467 и в итоге обе исполнились)
Нельзя ли перерегистрировать заявку вместо удаления старой и создания новой? Хотя вообще непонятно зачем создалась вторая заявка если первая исполнилась? См. лог ниже.
Подскажите как тут лучше делать, пжл.
Спасибо и с уважением!
Вот код BS/SL/TP стратегии
var takeStop = new BatchStrategy(BatchFinishModes.First) { IsParallel = true };
foreach (var mytrade in Program.trader.GetMyTrades(order))
{
var tp = new TakeProfitStrategy(mytrade, 6.Points(Security));// { IsMarket = true };
var sl = new StopLossStrategy(mytrade, 12.Points(Security)) { IsTrailing = true };
tp.UseMarketQuoting = true; tp.PriceExchange = 5.Points(Security); tp.PriceDelta = 10.Points(Security);
sl.UseMarketQuoting = true; sl.PriceExchange = 5.Points(Security); sl.PriceDelta = 10.Points(Security);
takeStop.ChildStrategies.Add(tp);
takeStop.ChildStrategies.Add(sl);
base.ChildStrategies.Add(takeStop);
}
Вот лог. Режим асинхронный если это важно. ( trader.IsAsyncMode = true;) Может в этом дело?
SS 16:17:20.8835910 Условие активировано. BS 16:17:20.8845911 Стратегия запущена. TPS 16:17:20.8845911 Стратегия запущена. SLS 16:17:20.8855912 Стратегия запущена. SS 16:17:20.8865912 Условие удалено. TPS 16:25:03.1210295 Регистрация защитной заявки с ценой 9821 и объемом 1. MQS 16:25:03.1210295 Стратегия запущена. TPS 16:25:03.1220296 Регистрация новой заявки на Buy с ценой 9821 и объемом 1. <mark>TPS 16:25:03.1320301 Заявка 57878465 на Buy отправлена с ценой 9821 объемом 1.</mark> MQS 16:25:04.1340875 Цена текущей 9821 и лучшей 9831. MQS 16:25:04.1340875 Котирование заявки 57878465 на Buy с ценой 9821 объемом 1. <mark>MQS 16:25:04.6341161 Котируемая заявка 57878465 исполнилась.</mark> SS 16:25:04.6371162 Условие активировано. SS 16:25:04.6381163 Условие удалено. MQS 16:25:05.6441738 Регистрация новой заявки на Buy с ценой 9830 и объемом 1. <mark>MQS 16:25:05.6501742 Заявка 57878467 на Buy отправлена с ценой 9830 объемом 1. ///--- Зачем? Первая заявка 57878465 уже исполнена? </mark> MQS 16:25:06.6742327 Заканчиваем котирование с неисполненным объемом равный 0 контрактов. MQS 16:25:06.6742327 Стратегия останавливается. MQS 16:25:07.6812903 Котирование отменяет заявку 57878467. MQS 16:25:07.6832905 Стратегия остановлена. <mark>TPS 16:25:08.6843477 Котируемая заявка 57878465 исполнилась.</mark> TPS 16:25:08.6853478 Стратегия останавливается. TPS 16:25:09.7004058 Котирование отменяет заявку 57878465. TPS 16:25:09.7004058 Стратегия остановлена.
コメント (11)
ログイン または アカウントを作成, コメントを残すにはログインまたは新規登録してください
Я поставил
trader.IsAsyncMode = false; но случай исполнения одновременно двух заявок повторяется
Вот пример лога котирования
Объём защищаемой заявки всегда = 1 контракт
В итоге отменились заявки 65443321 и 65443324 исполнилось две заявки <mark>65443323 и 65443326</mark>
Спасибо и с уважением!
Я понимаю что уже надоел, но я не только туповат но еще и упрямый.
Вот ещё лог где из батч стратегии исполнились обе и Стоп Лосс и Тейк профит хотя BatchFinishModes.First + я в этот раз для разнообразия поставил IsParallel = false
Здесь исполнились заявки 74362952 и 74362955 причём с интрвалом больше 3ёх минут
Всё! Всем приятных выходных! Спасибо и с уважением!
Инструмент Форцовый? Strategy.IsForst чему равен?
Еще немного детализации. Такое может быть, если сделки придут позднее обновления состояния заявки. Котирование же в смотрит:
Заявка по всей видимости перешла как раз в состояние неактивное. Но сделки не пришли. Попробуйте переопределить CanFinish.
protected virtual bool CanFinish() { return (this.Order.State == OrderStates.Done || this.Order.State == OrderStates.Failed) && this.LeftPosition == 0; }
Надо сначала переопределить ProtectiveStrategy.CreateQuoting и уже в нем возвращать своего наследника от MarketQuotingStrategy с переопределенным CanFinish.
Спасибо и с уважением.
Поправте меня где я не прав, пжл.
Спасибо и с уважением!
Вы привели в пример:
это то что есть сейчас, как я понял. А на ЧТО именно всё таки надо переопределять я НЕ понял. :(
но не останавливается ... Спасибо и с уважением!
Посмотрел первоначальный код. Там ошибка. В пакетную стратегию можно добавлять лишь параллельные дочерние стратегии (в новой версии бросается исключение). Иначе BatchStrategy никогда не узнает об исполнении.