EmulationTrader и 2 заявки
Atom
25.02.2012


Здравствуйте. При работе EmulationTrader столкнулся с такой проблемой. Долго бился, в итоге упростив до минимума получил следующий результат. При старте стратегии после первой сделки создаю две заявки.
Цитата:
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, если и там проявится, то это для меня будет критической ошибкой. Зараннее спасибо.



Спасибо:


exarh

Фотография
Дата: 25.02.2012
Ответить


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

Mikhail Sukhov

Фотография
Дата: 26.02.2012
Ответить


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

exarh

Фотография
Дата: 26.02.2012
Ответить


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

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

Mikhail Sukhov

Фотография
Дата: 26.02.2012
Ответить


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

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


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


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy