При котировании заявок стоплосс (и/или) тэйкпрофит выполняются сразу две заявки

При котировании заявок стоплосс (и/или) тэйкпрофит выполняются сразу две заявки
Atom
11/19/2010
ustas


Приветствую уважаемых Михаила и коллег!

При котировании Тейкпрофит стратегии часто выполниляется две заявки. Т.е. выставление новой заявки не отменяет или не успевает отменить старую. Вернее даже так : первая заявка исполнилась, но котирование выставляет вторую заявку (см. лог ниже выставилось две заявки 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. TPS 16:25:03.1320301 Заявка 57878465 на Buy отправлена с ценой 9821 объемом 1. MQS 16:25:04.1340875 Цена текущей 9821 и лучшей 9831. MQS 16:25:04.1340875 Котирование заявки 57878465 на Buy с ценой 9821 объемом 1. MQS 16:25:04.6341161 Котируемая заявка 57878465 исполнилась. SS 16:25:04.6371162 Условие активировано. SS 16:25:04.6381163 Условие удалено. MQS 16:25:05.6441738 Регистрация новой заявки на Buy с ценой 9830 и объемом 1. MQS 16:25:05.6501742 Заявка 57878467 на Buy отправлена с ценой 9830 объемом 1. ///--- Зачем? Первая заявка 57878465 уже исполнена? MQS 16:25:06.6742327 Заканчиваем котирование с неисполненным объемом равный 0 контрактов. MQS 16:25:06.6742327 Стратегия останавливается. MQS 16:25:07.6812903 Котирование отменяет заявку 57878467. MQS 16:25:07.6832905 Стратегия остановлена. TPS 16:25:08.6843477 Котируемая заявка 57878465 исполнилась. TPS 16:25:08.6853478 Стратегия останавливается. TPS 16:25:09.7004058 Котирование отменяет заявку 57878465. TPS 16:25:09.7004058 Стратегия остановлена.


Tags:


Thanks:


1 2  >
ustas

Avatar
Date: 11/19/2010
Reply


Я поставил

trader.IsAsyncMode = false; но случай исполнения одновременно двух заявок повторяется

Вот пример лога котирования

Объём защищаемой заявки всегда = 1 контракт

SS 18:26:53.7031709 Условие активировано. SS 18:26:55.3152631 Условие активировано. SS 18:26:55.5862786 Условие удалено. SS 18:26:55.9923018 Условие активировано. BS 18:26:55.9933019 Стратегия запущена. TPS 18:26:55.9933019 Стратегия запущена. SLS 18:26:55.9933019 Стратегия запущена. SS 18:26:55.9943019 Условие удалено. SLS 18:27:15.3704102 Регистрация защитной заявки с ценой 9835 и объемом 1. MQS 18:27:15.3724103 Стратегия запущена. SLS 18:27:15.3734104 Регистрация новой заявки на Buy с ценой 9835 и объемом 1. SLS 18:27:15.5554208 Заявка 65443321 на Buy отправлена с ценой 9835 объемом 1. MQS 18:27:16.5694788 Цена текущей 9835 и лучшей 9845. MQS 18:27:16.5704788 Котирование заявки 65443321 на Buy с ценой 9835 объемом 1. MQS 18:27:17.2505177 Перекотирование зарегистрировано для заявки 65443323 на Buy с ценой 9845 объемом 1. SS 18:27:17.5585353 Условие активировано. SS 18:27:17.5595354 Условие удалено. MQS 18:27:18.2755764 Заканчиваем котирование с неисполненным объемом равный 0 контрактов. MQS 18:27:18.2765764 Стратегия останавливается. MQS 18:27:19.3056353 Котирование отменяет заявку 65443323. // заявка исполнилась! MQS 18:27:19.3126357 Стратегия остановлена. SLS 18:27:20.3156930 Заканчиваем котирование с неисполненным объемом равный 0 контрактов. SLS 18:27:20.3156930 Стратегия останавливается. SLS 18:27:21.3307511 Котирование отменяет заявку 65443321. SLS 18:27:21.3317512 Стратегия остановлена. TPS 18:28:27.2815233 Регистрация защитной заявки с ценой 9828 и объемом 1. MQS 18:28:27.2815233 Стратегия запущена. TPS 18:28:27.2835234 Регистрация новой заявки на Buy с ценой 9828 и объемом 1. TPS 18:28:27.7445498 Заявка 65443324 на Buy отправлена с ценой 9828 объемом 1. MQS 18:28:28.7506073 Цена текущей 9828 и лучшей 9838. MQS 18:28:28.7516074 Котирование заявки 65443324 на Buy с ценой 9828 объемом 1. MQS 18:28:29.1486301 Перекотирование зарегистрировано для заявки 65443326 на Buy с ценой 9838 объемом 1. MQS 18:28:30.1626881 Заканчиваем котирование с неисполненным объемом равный 0 контрактов. MQS 18:28:30.1626881 Стратегия останавливается. MQS 18:28:31.1657454 Котирование отменяет заявку 65443326. // но заявка уже исполнилась! MQS 18:28:31.1657454 Стратегия остановлена. TPS 18:28:32.2008046 Заканчиваем котирование с неисполненным объемом равный 0 контрактов. TPS 18:28:32.2018047 Стратегия останавливается. TPS 18:28:33.2018619 Котирование отменяет заявку 65443324. TPS 18:28:33.2018619 Стратегия остановлена. BS 18:28:34.2039192 Стратегия останавливается. BS 18:28:34.3219260 Стратегия остановлена.

В итоге отменились заявки 65443321 и 65443324 исполнилось две заявки 65443323 и 65443326

Спасибо и с уважением!

Thanks:

ustas

Avatar
Date: 11/19/2010
Reply


Я понимаю что уже надоел, но я не только туповат но еще и упрямый.

Вот ещё лог где из батч стратегии исполнились обе и Стоп Лосс и Тейк профит хотя BatchFinishModes.First + я в этот раз для разнообразия поставил IsParallel = false

SS 20:44:35.6897295 Условие активировано. SS 20:45:12.1478148 Условие активировано. SS 20:45:12.4638329 Условие удалено. SS 20:45:13.0708676 Условие активировано. BS 20:45:13.0938689 Стратегия запущена. TPS 20:45:13.0968691 Стратегия запущена. SLS 20:45:13.0978691 Стратегия запущена. SS 20:45:13.1008693 Условие удалено. TPS 20:47:19.9481245 Регистрация защитной заявки с ценой 9878 и объемом 1. MQS 20:47:19.9551249 Стратегия запущена. TPS 20:47:19.9561250 Регистрация новой заявки на Buy с ценой 9878 и объемом 1. TPS 20:47:20.6441644 Заявка 74362950 на Buy отправлена с ценой 9878 объемом 1. MQS 20:47:21.6702230 Цена текущей 9878 и лучшей 9888. MQS 20:47:21.6722232 Котирование заявки 74362950 на Buy с ценой 9878 объемом 1. MQS 20:47:22.4322666 Перекотирование зарегистрировано для заявки 74362952 на Buy с ценой 9888 объемом 1. MQS 20:47:23.4343239 Заканчиваем котирование с неисполненным объемом равный 0 контрактов. MQS 20:47:23.4353240 Стратегия останавливается. MQS 20:47:24.4633828 Котирование отменяет заявку 74362952. MQS 20:47:24.4643829 Стратегия остановлена. TPS 20:47:25.4794409 Заканчиваем котирование с неисполненным объемом равный 0 контрактов. TPS 20:47:25.4804410 Стратегия останавливается. TPS 20:47:26.4824983 Котирование отменяет заявку 74362950. TPS 20:47:26.4824983 Стратегия остановлена. SLS 20:50:29.5169673 Регистрация защитной заявки с ценой 9885 и объемом 1. MQS 20:50:29.5169673 Стратегия запущена. SLS 20:50:29.5179673 Регистрация новой заявки на Buy с ценой 9885 и объемом 1. SLS 20:50:29.7039780 Заявка 74362953 на Buy отправлена с ценой 9885 объемом 1. MQS 20:50:30.7250364 Цена текущей 9885 и лучшей 9897. MQS 20:50:30.7260364 Котирование заявки 74362953 на Buy с ценой 9885 объемом 1. MQS 20:50:31.1180588 Перекотирование зарегистрировано для заявки 74362955 на Buy с ценой 9897 объемом 1. MQS 20:50:32.1961205 Заканчиваем котирование с неисполненным объемом равный 0 контрактов. MQS 20:50:32.1961205 Стратегия останавливается. MQS 20:50:33.1971778 Котирование отменяет заявку 74362955. MQS 20:50:33.1971778 Стратегия остановлена. SLS 20:50:34.1982350 Заканчиваем котирование с неисполненным объемом равный 0 контрактов. SLS 20:50:34.1992351 Стратегия останавливается. SLS 20:50:35.2072927 Котирование отменяет заявку 74362953. SLS 20:50:35.2072927 Стратегия остановлена. BS 20:50:36.2093500 Стратегия останавливается. BS 20:50:37.2134075 Стратегия остановлена.

Здесь исполнились заявки 74362952 и 74362955 причём с интрвалом больше 3ёх минут

Всё! Всем приятных выходных! Спасибо и с уважением!

Thanks:

Mikhail Sukhov

Avatar
Date: 11/22/2010
Reply


ustas: Всё! Всем приятных выходных! Спасибо и с уважением!

Инструмент Форцовый? Strategy.IsForst чему равен?

Thanks:

Mikhail Sukhov

Avatar
Date: 11/22/2010
Reply


Еще немного детализации. Такое может быть, если сделки придут позднее обновления состояния заявки. Котирование же в смотрит:

protected virtual bool CanFinish()
{
	return (this.Order.State == OrderStates.Done || this.Order.State == OrderStates.Failed) && this.LeftPosition == 0;
}

Заявка по всей видимости перешла как раз в состояние неактивное. Но сделки не пришли. Попробуйте переопределить CanFinish.

Thanks:

ustas

Avatar
Date: 11/22/2010
Reply


Mikhail Sukhov: Еще немного детализации. Такое может быть, если сделки придут позднее обновления состояния заявки. Котирование же в смотрит:

protected virtual bool CanFinish() { return (this.Order.State == OrderStates.Done || this.Order.State == OrderStates.Failed) && this.LeftPosition == 0; }

> 
> Заявка по всей видимости перешла как раз в состояние неактивное. Но сделки не пришли. Попробуйте переопределить CanFinish.

Спасибо.
IsForts поставлю в true. раньше было не установлено. О результатах сообщу.

А где переопределить CanFinish?  В MarketQuotingStrategy?  Но я же ёё не использую явно.  Или переопределять надо в TakeProfitStrategy и в StopLossStrategy по отдельности? не покажите примерчик переопределения  полностью?


Спасибо и с уважением!
Thanks:

Mikhail Sukhov

Avatar
Date: 11/22/2010
Reply


ustas: А где переопределить CanFinish? В MarketQuotingStrategy?

Надо сначала переопределить ProtectiveStrategy.CreateQuoting и уже в нем возвращать своего наследника от MarketQuotingStrategy с переопределенным CanFinish.

Thanks:

ustas

Avatar
Date: 11/22/2010
Reply


Mikhail Sukhov: Надо сначала переопределить ProtectiveStrategy.CreateQuoting и уже в нем возвращать своего наследника от MarketQuotingStrategy с переопределенным CanFinish. o_O Кажется понял, но ещё не осознал. Спасибо. Ухожу в погружение ...

Спасибо и с уважением.

Thanks:

ustas

Avatar
Date: 11/23/2010
Reply


Mikhail Sukhov: Надо сначала переопределить ProtectiveStrategy.CreateQuoting и уже в нем возвращать своего наследника от MarketQuotingStrategy с переопределенным CanFinish.

  1. Всё таки мне не понятно до конца. Ведь в этом случае переопределения остановится стратегия либо стоп лосс либо тейк профит. Но на BatchStrategy это не повлияет, как я понимаю. - Как в примере лога, который я прислал 19 ноября 2010 г. 21:14:59 Отработали обе стратегии котирования. И интервал между ними был 3 минуты. И заявки пришли 99.99% И был LeftPosition==0. У меня впечатление, возможно неверное, что в BatchStrategy не отрабатывает BatchFinishModes.First.

Поправте меня где я не прав, пжл.

  1. Как можно самому остановить BatchStrategy? Это надо делать просто методом Stop? Надо ли ей делать ChildStrategies.Remove ?

Спасибо и с уважением!

Thanks:

Mikhail Sukhov

Avatar
Date: 11/23/2010
Reply


  1. Это легко проверить. Создайте тестовые стратегии и посмотрите, останавливаются или нет.
  2. Должно останавливаться.
Thanks:

ustas

Avatar
Date: 11/23/2010
Reply


Mikhail Sukhov:

  1. Это легко проверить. Создайте тестовые стратегии и посмотрите, останавливаются или нет.
  2. Должно останавливаться.
  1. Хорошо, но почему тогда не останавливается без переопределения текущая BatchStrategy с установленным BatchFinishModes.First? Логи я уже приводил... И еще не ясно вот то что, -

Вы привели в пример:

protected virtual bool CanFinish()
{
    return (this.Order.State == OrderStates.Done || this.Order.State == OrderStates.Failed) && this.LeftPosition == 0;
}

это то что есть сейчас, как я понял. А на ЧТО именно всё таки надо переопределять я НЕ понял. :(

  1. Я пытаюсь ... делаю так
When(() => takeStop != null && PositionManager.Position == 0 && (takeStop.ProcessState != StrategyProcessStates.Stopped || takeStop.ProcessState != StrategyProcessStates.Stopping)).Do(() =>
          {                
              takeStop.Stop();
              base.ChildStrategies.Remove(takeStop);
          });


но не останавливается ... Спасибо и с уважением!

Thanks:
1 2  >

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy