Непонятки с 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).

Code

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):

Quote:

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


ak

Quote:

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. Михаил, поясните пожалуйста еще раз.

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

Code

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


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

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

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

Quote:

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


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

Quote:

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).

Code

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):


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


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

ak

Avatar
Date: 2/2/2012
Reply


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

Code

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


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

Важное дополнение: при использовании RealTimeEmulationTrader<QuikTrader> вместо 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