Вопрос по обработке сделок


Ситуация такая, стратегия отправляет заявки на биржу метод RegisterOrder(Order) и по таймауту или исполнению некого условия снимает через метод Trader.CancelOrder(Order). Учет закрытых позиций и цены происходит при событии появлении новой сделки order.NewTrades() (нужно для работы робота),
По событию снятия заявки .Order.Canceled() или её полного исполнения заявка считается закрытой.

В каждом событии стоит проверка - если статус заявки Done и количество учтенных роботом позиций равно ОбъемЗаявки - БалансЗаявки. То исключаем её из списка робота, и считаем что закрыта, т.е. робот считает что вся информация по заявке получена.
Учитывается ситуация если сделки пришли позже, чем заявка была снята/исполнена, так же есть обработка события неудачной отмены заявки. Код основательно перерыт и перепроверен.

Но иногда примерно с одной-двумя из 500 заявок возникает ситуация когда условие проверки выполняется заявка исключается, но Робот учитывает не все сделки прошедшие по заявке. Как вариант может быть такое, что в какой-то момент статус заявки Done, а баланс по ней ещё может изменится?
В чем может быть причина, может сталкивался кто-то? Уже просто не знаю что с этим делать.
Сейчас все работает на тестовом сервере РТС, Forts Plaza - II.

Теги:


Спасибо:


< 1 2 3  >
Александр (ПАА)

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


По моим наблюдениям только для снятой.
Спасибо:

Alexander

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


Александр (ПАА)
По моим наблюдениям только для снятой.


В ветке 4.1 точно сделано следующее:
- если мы посылаем CancelOrder - то в ответ на эту транзакцию биржа присылает сколько осталось по балансу в заявке - мы это проставляем и заявка больше не может быть изменена
- если посылаем CancelOrders - групповое снятие - то тут да, может возникнуть что после State = OrderState.Done изменится баланс - я это поправил, будет фикс выложен на codeplex
- для перерегистрации - см. групповое снятие - тоже поправлено

Вообще после того как стал OrderState.Done баланс меняться не должен. Если у вас не так на 4.1 - пишите ещё раз, будем разбираться.

Сейчас просьба перейти на 4.1 и пока (до выкладывания последнего фикса на codeplex) - пользоваться CancelOrder, а не групповым снятием заявки.
Спасибо:

westtrd

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


Александр (ПАА)
Давайте попробуем. Суть в том что у меня есть много модулей, каждый из который торгует по некоему алгоритму, часто бывает так, что нужно отправить на биржу одновременно несколько заявок от разных модулей, чтобы сократить количество отправляемых заявок а так же исключить встречные заявки от модулей, я составляю одну - которая и отправляется на биржу через стратегию, но после исполнения или снятия этой объединенной заявки информацию по ней необходимо разобрать и вернуть каждому модулю сколько и как исполнилось по нему.

Вообще то это клиринговая логика, с распределением проторгованного объема по компонентам
Такое на западных рынках есть, и проблем тут достаточно.

Есть несколько основных сценариев:
1. пропорционально
2. FIFO
3. нечто производное

Вообще, если размеры счетов позволяют, лучше тупо разводить по разным субсчетам
Спасибо:

gazrvs_nur

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


Чтобы не плодить одинаковые темы, просьба помочь с простым вопросом по сделкам:
в тестовом примере SmaStrategy создал правило на появление новых сделок: this .WhenNewMyTrades() .Do(writecsv) .Apply(this);
в обработчике writecsv хочу получить данные по последней сделке: var trade = this.MyTrades. ???? ;
но не могу получить не одно из свойств MyTrades, хотя отладчике они все есть в ((StockSharp.BusinessEntities.MyTrade[])(this.MyTrades))

Есть другой способ?

Спасибо:

Alexander

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


gazrvs_nur
Чтобы не плодить одинаковые темы, просьба помочь с простым вопросом по сделкам:
в тестовом примере SmaStrategy создал правило на появление новых сделок: this .WhenNewMyTrades() .Do(writecsv) .Apply(this);
в обработчике writecsv хочу получить данные по последней сделке: var trade = this.MyTrades. ???? ;
но не могу получить не одно из свойств MyTrades, хотя отладчике они все есть в ((StockSharp.BusinessEntities.MyTrade[])(this.MyTrades))

Есть другой способ?




Код
this.WhenNewMyTrades().Do<IEnumerable<MyTrade>>(writecsv).Apply(this);

private void writecsv(IEnumerable<MyTrade> newMyTrades)
{
...
}


Таким образом в обработчик сразу передадутся новые сделки.
Спасибо:

gazrvs_nur

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


Компилятор ругается на строку
private void writecsv( IEnumerable<MyTrade> newMyTrades)

Ошибка 1 Вместе с аргументами-типами нельзя использовать не универсальный тип "System.Collections.IEnumerable" E:\WIN\Samples\Testing\SampleHistoryTestingParallel\SmaStrategy.cs 92 41 SampleHistoryTestingParallel
Спасибо:

Alexander

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


gazrvs_nur
Компилятор ругается на строку
private void writecsv( IEnumerable<MyTrade> newMyTrades)

Ошибка 1 Вместе с аргументами-типами нельзя использовать не универсальный тип "System.Collections.IEnumerable" E:\WIN\Samples\Testing\SampleHistoryTestingParallel\SmaStrategy.cs 92 41 SampleHistoryTestingParallel



Сейчас в 4.1 всё даже проще стало


Код

...
this.WhenNewMyTrades().Do(writecsv);
...

private void writecsv(IEnumerable<MyTrade> newMyTrades)
{
...
}
Спасибо:

gazrvs_nur

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


Александр,
я аналогично уже пробывал ..

На конструкцию: ".Do(writecsv);" компилятор выдает ошибку:
Ошибка 1 Наиболее подходящий перегруженный метод для "StockSharp.Algo.Strategies.StrategyRule<System.Collections.Generic.IEnumerable<StockSharp.BusinessEntities.MyTrade>>.Do(System.Action)" имеет несколько недопустимых аргументов
Ошибка 2 Аргумент "1": преобразование типа из "группа методов" в "System.Action" невозможно

А на "private void writecsv(IEnumerable<MyTrade> newMyTrades)" по прежднему:
Ошибка 3 Вместе с аргументами-типами нельзя использовать не универсальный тип "System.Collections.IEnumerable"

как бы вообще уйти от этого IEnumerable<MyTrade> в нормальный IEnumerable хотя бы.


Спасибо:

Alexander

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


gazrvs_nur
Александр,
я аналогично уже пробывал ..

На конструкцию: ".Do(writecsv);" компилятор выдает ошибку:
Ошибка 1 Наиболее подходящий перегруженный метод для "StockSharp.Algo.Strategies.StrategyRule<System.Collections.Generic.IEnumerable<StockSharp.BusinessEntities.MyTrade>>.Do(System.Action)" имеет несколько недопустимых аргументов
Ошибка 2 Аргумент "1": преобразование типа из "группа методов" в "System.Action" невозможно

А на "private void writecsv(IEnumerable<MyTrade> newMyTrades)" по прежднему:
Ошибка 3 Вместе с аргументами-типами нельзя использовать не универсальный тип "System.Collections.IEnumerable"

как бы вообще уйти от этого IEnumerable<MyTrade> в нормальный IEnumerable хотя бы.





У вас точно последняя версия 4.1?
Спасибо:

gazrvs_nur

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


у меня сборка stocksharp-16844 от 10.05.2012г.
сейчас скачаю последнюю и проверю
Спасибо:
< 1 2 3  >

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

loading
clippy