EmulationTrader и 2 заявки


EmulationTrader и 2 заявки
Atom
2/25/2012


Здравствуйте. При работе EmulationTrader столкнулся с такой проблемой. Долго бился, в итоге упростив до минимума получил следующий результат. При старте стратегии после первой сделки создаю две заявки.
Quote:
if (Security.LastTrade != null && order1 == null)
{
order1 = new Order
{
Type = OrderTypes.Limit,
Price = 210m,
Portfolio = this.Portfolio,
Security = this.Security,
Volume = 8,
Direction = OrderDirections.Buy
};
RegisterOrder(order1);
order2 = new Order
{
Type = OrderTypes.Limit,
Price = 212m,
Portfolio = this.Portfolio,
Security = this.Security,
Volume = 7,
Direction = OrderDirections.Buy
};
RegisterOrder(order2);
}

При этом цена, допустим, в ближайшие тридцать минут не опускается ниже 211, но повышается пробивает отметку в 212, т.е. по логике должна вторая заявка реализоваться. Но этого не происходит. Т.е. первая заявка блокирует вторую и это действительно так. Если их поменять местами - то все нормально - первая срабатывает, а вторая не срабатывает. Если им установить одинаковые цены - то обе успешно срабатывают. Ну и соответственно если второй заявки сделать лимит покупки более низкий, чем для первой (зная что обе сработают), то все равно EmulationTrader сначала дождется выполнения первой заявки, а только потом начнет работу со второй. При этом если вторую заявку сделать рыночной, то блокировки не происходит, она сразу выполняется до лимитированной. При этом заявки успешно активируются. Возможно это продолжение бага Не регистрируется вторая и далее заявка EmulationTrader
Тестировал только для EmulationTrader. В понедельник, если время будет, попробую для real time testing, если и там проявится, то это для меня будет критической ошибкой. Зараннее спасибо.



Thanks:


exarh

Avatar
Date: 2/25/2012
Reply


Извиняюсь за рефлектор) Посмотрел, возможную ошибку нашел:
В классе MarketEmulator объявлено поле
IEnumerable<Trade> - список новых сделок на бирже, который обновляется в методе UpdateTrades
Ну а далее есть метод Emulate(), в котором идет пробежка по все зарегистрированным сделкам - вызывается дочерний метод.
В нем для лимитированных заявок
if (xxx.Type == OrderTypes.Limit)
этот список копируется в локальный IEnumerable<Trade> и тупо очищается (= null), и таким образом для следующей лимитированной заявки сделок и не остается.
Thanks:

Mikhail Sukhov

Avatar
Date: 2/26/2012
Reply


Постучитесь в скайп mika_soukhov. Я дам сырцы нового MarketEnumalor, из 4.1.
Thanks:

exarh

Avatar
Date: 2/26/2012
Reply


Mikhail Sukhov Go to
Постучитесь в скайп mika_soukhov. Я дам сырцы нового MarketEnumalor, из 4.1.

Спасибо за быстрый ответ. Но раз дело только в MarketEnumalor, я дождусь следующего релиза. Я не такой хакер, чтобы подменять (переопределять) одни классы другими в .NET - библиотеках. Я в основном на java пишу.
Thanks:

Mikhail Sukhov

Avatar
Date: 2/26/2012
Reply


exarh Go to
Mikhail Sukhov Go to
Постучитесь в скайп mika_soukhov. Я дам сырцы нового MarketEnumalor, из 4.1.

Спасибо за быстрый ответ. Но раз дело только в MarketEnumalor, я дождусь следующего релиза. Я не такой хакер, чтобы подменять (переопределять) одни классы другими в .NET - библиотеках. Я в основном на java пишу.


Я мало что понял из написанного.
Thanks:


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

loading
clippy