Непонятки с MarketQuotingStrategy

Непонятки с MarketQuotingStrategy
Atom
1/31/2012
vfreeman


Может кто подсказать как разобраться с проблемой? Вчера обнаружил что MQS в каких-то случаях выполняет задачу в двойном размере. Я завел топик и выложил там более полное описание, возможно, что название не совсем корректное. Сегодня на другом инструменте столкнулся опять с той же самой проблемой. Судя по журналу MQS пытается переставить заявку в данном случае 42133045, а она к этому моменту уже выполнена. Причем получив ошибку "Вы не можете снять данную заявку" выставляет новую заявку.

13:13:01.880 | | MQS | Перекотирование зарегистрировано для заявки 42133045на Buy с ценой 30295 объемом 1. 13:13:02.145 | Error | MQS | Заявка 42133045 не была принята по причине System.InvalidOperationException: Сервер для транзакции 'ACTION=MOVE_ORDERS; TRANS_ID=42133045; CLASSCODE=SPBFUT; SECCODE=SiH2; MODE=0; FIRST_ORDER_NUMBER=0; FIRST_ORDER_NEW_PRICE=30295; FIRST_ORDER_NEW_QUANTITY=1;' вернул неправильное сообщение 'Вы не можете снять данную заявку' по передвинутым заявкам.. 13:13:02.176 | Error | MQS | Заявка 42133045 не принята биржей по причине 'Сервер для транзакции 'ACTION=MOVE_ORDERS; TRANS_ID=42133045; CLASSCODE=SPBFUT; SECCODE=SiH2; MODE=0; FIRST_ORDER_NUMBER=0; FIRST_ORDER_NEW_PRICE=30295; FIRST_ORDER_NEW_QUANTITY=1;' вернул неправильное сообщение 'Вы не можете снять данную заявку' по передвинутым заявкам.'. 13:13:02.239 | | MQS | Цена текущей NULL и лучшей 30295. 13:13:02.301 | | MQS | Лучший бид 30295 и лучший аск 30297. 13:13:02.411 | | MQS | Регистрация новой заявки на Buy с ценой 30295 и объемом 1.

ps: если можно взглянуть на фрагмент MarketQuotingStrategy, который выполняет действия в приложенном логе, попытаюсь сам найти ответ


Tags:


Thanks:


1 2 3  >
ak

Avatar
Date: 2/2/2012
Reply


Столкнулся с такой же проблемой дважды причем подряд (QuikTrader, 4.0.17).


var takeProfit = new TakeProfitStrategy(trade, this.TakeProfitUnit) { UseQuoting = true };
var stopLoss = new StopLossStrategy(trade, StopLossUnit) { UseQuoting = true };

ChildStrategies.Add(new TakeProfitStopLossStrategy(takeProfit, stopLoss));

Один раз для TP стратегии, второй раз для SL - симптомы те же, исполняются 2 одинаковые по цене заявки с минимальной разницей во времени. Лог одного из случаев (SL):

SLS | 31.01.2012 13:13:11 || Защита активирована. SLS | 31.01.2012 13:13:11 || Регистрация защитного котирования. MQS | 31.01.2012 13:13:11 || Стратегия запущена. MQS | 31.01.2012 13:13:11 || Котирование на Sell объема 1. MQS | 31.01.2012 13:13:11 || Цена текущей NULL и лучшей 9080. MQS | 31.01.2012 13:13:11 || Лучший бид 9078 и лучший аск 9080. MQS | 31.01.2012 13:13:11 || Регистрация новой заявки на Sell с ценой 9080 и объемом 1. MQS | 31.01.2012 13:13:11 || Заявка 38516284 на Sell отправлена с ценой 9080 объемом 1. SLS | 31.01.2012 13:13:11 || Цена текущей NULL и лучшей 9080. SLS | 31.01.2012 13:13:11 || Лучший бид 9078 и лучший аск 9080. SLS | 31.01.2012 13:13:11 || Регистрация новой заявки на Sell с ценой 9080 и объемом 1. SLS | 31.01.2012 13:13:11 || Заявка 38516285 на Sell отправлена с ценой 9080 объемом 1. MQS | 31.01.2012 13:13:11 || Заявка 38516284 принята биржей. SLS | 31.01.2012 13:13:11 || Заявка 38516285 принята биржей. EmaCore | 31.01.2012 13:13:12 || Новая позиция 0. Main App | 31.01.2012 13:13:12 || Stat Changed. State: Started, PnL: -39 :(, Slippage: 1, Position: 0, Latency: 00:00:00.5404569 Main App | 31.01.2012 13:13:12 || Stat Changed. State: Started, PnL: -39 :(, Slippage: 1, Position: 0, Latency: 00:00:01.0506864 TPSLS | 31.01.2012 13:13:12 || Новая позиция -1. SLS | 31.01.2012 13:13:12 || Новая позиция -1. SLS | 31.01.2012 13:13:12 || Позиция изменилась на -1. Оставшийся объем 0. SLS | 31.01.2012 13:13:12 || Заканчиваем котирование. TPSLS | 31.01.2012 13:13:12 || Стратегия останавливается. Main App | 31.01.2012 13:13:12 || Stat Changed. State: Started, PnL: -39 :(, Slippage: 1, Position: 0, Latency: 00:00:01.0506864 TPS | 31.01.2012 13:13:12 || Заканчиваем котирование с неисполненным объемом равный 1. TPS | 31.01.2012 13:13:12 || Стратегия останавливается. TPS | 31.01.2012 13:13:12 || Стратегия остановлена. SLS | 31.01.2012 13:13:12 || Отмена заявки 38516285. SLS | 31.01.2012 13:13:12 || Стратегия останавливается. MQS | 31.01.2012 13:13:12 || Заканчиваем котирование с неисполненным объемом равный 1. MQS | 31.01.2012 13:13:12 || Стратегия останавливается. MQS | 31.01.2012 13:13:12 || Стратегия остановлена. TPSLS | 31.01.2012 13:13:12 || Стратегия остановлена. EmaCore | 31.01.2012 13:13:12 || Новая позиция -1. Main App | 31.01.2012 13:13:12 || Stat Changed. State: Started, PnL: -39 :(, Slippage: 1, Position: -1, Latency: 00:00:01.0506864 Main App | 31.01.2012 13:13:12 || Stat Changed. State: Started, PnL: -39 :(, Slippage: 1, Position: -1, Latency: 00:00:01.5628213 EmaCore | 31.01.2012 13:13:12 || Новая Sell сделка 497392045 по цене 9080 на 1 заявки 38516284. Main App | 31.01.2012 13:13:12 || Stat Changed. State: Started, PnL: -39 :(, Slippage: 1, Position: -1, Latency: 00:00:01.5628213 Main App | 31.01.2012 13:13:12 || Stat Changed. State: Started, PnL: -37 :(, Slippage: 1, Position: -1, Latency: 00:00:01.5628213 Main App | 31.01.2012 13:13:12 || I've sold 1 futures contracts at 9080 EmaCore | 31.01.2012 13:13:12 || Новая Sell сделка 497392046 по цене 9080 на 1 заявки 38516285. Main App | 31.01.2012 13:13:12 || Stat Changed. State: Started, PnL: -37 :(, Slippage: 1, Position: -1, Latency: 00:00:01.5628213 Main App | 31.01.2012 13:13:12 || Stat Changed. State: Started, PnL: -37 :(, Slippage: 1, Position: -1, Latency: 00:00:01.5628213 Main App | 31.01.2012 13:13:12 || I've sold 1 futures contracts at 9080

Кто может помочь советом, как починить?

Thanks:

Serg

Avatar
Date: 2/2/2012
Reply


А можно посмотреть код MarketQuotingStrategy? если это квик то тут скорее всего проблема с тем что приходит раньше(заявка/сделка).

Thanks:

Mikhail Sukhov

Avatar
Date: 2/2/2012
Reply


MQS | 31.01.2012 13:13:11 || Заявка 38516284 принята биржей. SLS | 31.01.2012 13:13:11 || Заявка 38516285 принята биржей. EmaCore | 31.01.2012 13:13:12 || Новая позиция 0.

Кто может помочь советом, как починить?

А что чинить? Заявка зарегистрирована на бирже. Нужно сделать так, чтобы она не могла зарегистрироваться?

По проблеме автора этого топика отписал в той ссылке, которую он привел изначально. Не понятно, зачем было кросс посты вводить.

Thanks:

ak

Avatar
Date: 2/2/2012
Reply


OK. Михаил, поясните пожалуйста еще раз.

Есть стратегия:


var stopLoss = new StopLossStrategy(trade, StopLossUnit) { UseQuoting = true };

Я предполагаю, что выставив фалг UseQuoting, при касании ценой StopLossUnit, стратегия SLS создаст стратегию MQS, которая, выставляя лимитные ордера, и двигая их по необходимости, добьется исполнения защитного ордера. Затем завершится сама MQS (поражденная SLS стратегией), а затем и родительская SLS.

По факту исполняется 2а ордера с одинаковым объемом, причем:

1ый ордер создается MQS стратегией:

MQS | 31.01.2012 13:13:11 || Регистрация новой заявки на Sell с ценой 9080 и объемом 1. MQS | 31.01.2012 13:13:11 || Заявка 38516284 на Sell отправлена с ценой 9080 объемом 1.

2ой ордер создается SLS стратегией:

SLS | 31.01.2012 13:13:11 || Регистрация новой заявки на Sell с ценой 9080 и объемом 1. SLS | 31.01.2012 13:13:11 || Заявка 38516285 на Sell отправлена с ценой 9080 объемом 1.

Естественно, если выставить флаг UseQuoting в false, никакого дублирования не происходит. Так же как и обычные (не защитные) MQS стратегии отрабатывают нормально.

Откуда берется второй ордер?

Thanks:

vfreeman

Avatar
Date: 2/2/2012
Reply


ak: Столкнулся с такой же проблемой дважды причем подряд (QuikTrader, 4.0.17).

var takeProfit = new TakeProfitStrategy(trade, this.TakeProfitUnit) ; var stopLoss = new StopLossStrategy(trade, StopLossUnit) ;

ChildStrategies.Add(new TakeProfitStopLossStrategy(takeProfit, stopLoss));

> 
> Один раз для TP стратегии, второй раз для SL - симптомы те же, исполняются 2 одинаковые по цене заявки с минимальной разницей во времени. Лог одного из случаев (SL):
> 
> 
> Кто может помочь советом, как починить?

мне помогло Security.Exchange.IsSupportAtomicReRegister = false
Thanks:

ak

Avatar
Date: 2/2/2012
Reply


Благодарю за совет, обязательно попробую! Но вероятно у меня все же другая ошибка, потому что обычные MQS, созданные мной, вроде этой:


MarketQuotingStrategy marketQuotingStrategy = new MarketQuotingStrategy(order, new Unit(), new Unit());
base.ChildStrategies.Add(marketQuotingStrategy);

работают нормально, происходит переставление ордера (без ошибок, которые появлялись у вас) и исполнение приказа без дублирования ордеров. А вот внутри защитных стратегий - дублируются.

Важное дополнение: при использовании RealTimeEmulationTrader вместо QuikTrader ошибка не реплицируется. На QuikTrader повторяется в 100% случаев у меня.

Thanks:

ak

Avatar
Date: 2/8/2012
Reply


Проблема сохраняется, флаг Security.Exchange.IsSupportAtomicReRegister = false не помог.

Thanks:

ET

Avatar
Date: 2/8/2012
Reply


_

Thanks:

Moadip

Avatar
Date: 2/24/2012
Reply


MQS конкурирует со своими заявками. Хотя в этом посте написано что нет.

IsSupportAtomicReRegister = false IsAsyncMode = false

Это хорошо видно вечером или на неликвиде, когда стакан не двигается. Допустим мне надо скотировать один лот на продажу. Создается MQS, PriceOffset = Security.MinStepSize Например лучший бид 90, оффер 100, стакан не двигается. Так MQS будет постоянно снимать и переставлять заявку на 99,98,97. Т.е не держит ее на 99. Бывает что стратегия отрабатывает нормально, но в основном завершается с ошибкой

Плюс вопрос в конце данного поста тоже никак не решился.

Думал что что нибудь изменится в последней сборке 4.0.20 но ничего не изменилось.

Thanks:

ET

Avatar
Date: 2/24/2012
Reply


_

Thanks:
1 2 3  >

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

loading
clippy