Не приходит событие OnNewMyTrades.


Не приходит событие OnNewMyTrades.
Atom
9/27/2012


День добрый.

Вчера обновил StockSharp до версии 4.1.4 и обнаружил, что перестало приходить событие OnNewMyTrades. До обновления все работало. Делаю так:

1. В методе OnStarted() стратегии подписываюсь на события:
Code

                this
                    .WhenNewMyTrades()
                    .Do(ProcessNewTrades)
                    .Apply(this);


2. Метод ProcessNewTrades() определен так:
Code

protected void ProcessNewTrades(IEnumerable<MyTrade> trades)
{
}


3. Позицию открываю через котирование:
Code

protected void PositionOpen(OrderDirections direction)
{
            var strategy = new BestByPriceQuotingStrategy(direction, Volume);
            strategy.LogLevel = LogLevels.Info;
            ChildStrategies.Add(strategy);
}


До обновления у меня был переопределен метод OnNewMyTrades() - после обновления он также перестал вызываться.

Это я что-то неправильно делаю, или в библиотеке баг?

Еще из мелкого:
- пропал extension method LastValue() для индикаторов.
- в окошке StockSharp.Xaml.Monitor() отключили автоматическое изменение ширины колонок под их содержимое. Приходится теперь руками растаскивать. :)

Tags:


Thanks:


< 1 2 3  >
Mikhail Sukhov

Avatar
Date: 10/1/2012
Reply


Marco Go to

Я размещаю заявки через котирование, возможно, проблема в этом?


По подробнее схему работы. На обработчики ошибок подписывались?
Thanks:

Marco

Avatar
Date: 10/1/2012
Reply


Mikhail Sukhov Go to

По подробнее схему работы. На обработчики ошибок подписывались?


Схема работы в принципе описана в первом сообщении. Работаю через SmartCOM. Нужны ли еще какие-либо подробности? Сейчас я перекрыл метод OnNewMyTrades - он тоже не вызывается (в версии 4.1.3 - вызывался):

Code

        protected override void OnNewMyTrades(IEnumerable<MyTrade> trades)
        {
            base.OnNewMyTrades(trades);
// my code here
         }


Повесил обработчики на Strategy.Error, Strategy.OrderCancelFailed, Strategy.OrderRegisterFailed в родительской стратегии - они не вызываются, ошибок в логе нет, исключений в процессе работы тоже не возникает.
Thanks:

esper

Avatar
Date: 10/1/2012
Reply


Если для котирования выставить WaitAllTrades и смотреть NewMyTrades именно для стратегии котирования, сделки придут?
Еще может помочь разобраться лог стартегий (корневой и котирования), где в обработчиках будет выводиться информация о сделках и заявках.
Thanks:

Marco

Avatar
Date: 10/1/2012
Reply


Ok, попробую. Заметил, что _иногда_ метод вызывается. [confused]
Thanks:

esper

Avatar
Date: 10/1/2012
Reply


Если в кратце, то стратегия останавливается при наборе нужной позиции, позиция по умолчанию учитывается по балансу заявок. Когда стратегия останавливается, она удаляется из дочерних и отписывается от получения данных. Т.к. сделки могут придти уже после, то они никуда не попадут. Эта ситуация уже описывалась на форуме.
Thanks:

Marco

Avatar
Date: 10/2/2012
Reply


Судя по логам, проблема возникает при одновременном запуске нескольких дочерних стратегий на котирование. У меня основная стратегия переворачивает позицию, размещая две отдельные заявки через котирование. Обе стратегии отрабатывают без ошибок, я вижу изменение позиции. Однако, OnNewMyTrades вызывается только для последней дочерней стратегии. WaitAllTrades для всех стратегий установлен в true. Кусок лога:



Что касается учета позиции по балансу заявок - а что делать в том случае, если позиция переносится через ночь? Статью в документации на эту тему я читал. Как я понял, предлагается загружать имеющиеся заявки из терминала, и определять, какие из них принадлежать текущей стратегии. Но при переносе позиции на следующий день мне например вчерашние заявки уже недоступны. Сейчас я при изменении состояния стратегии тупо сбрасываю его в файл вместе с размером позиции и параметрами, необходимыми для восстановления работы при перезапуске робота. При загрузке размер позиции считывается из этого файла. Допустим ли такой подход?
Thanks:

Marco

Avatar
Date: 10/2/2012
Reply


P.S.: Посмотрел еще сегодня утром - событие не приходит, если позиция закрывается. По сделкам, открывающим позицию, событие приходит.
Thanks:

esper

Avatar
Date: 10/2/2012
Reply


По логу не понятно, где была первая стратегия, где вторая. Имена у них одинаковые.
Thanks:

esper

Avatar
Date: 10/2/2012
Reply


Можете сделать проект с минимальным кодом, который воспроизводит эту проблему?
Thanks:

Marco

Avatar
Date: 10/2/2012
Reply


Отправил проект в личку.
Thanks:
< 1 2 3  >

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

loading
clippy