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


День добрый.

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

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

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


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

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


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

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() отключили автоматическое изменение ширины колонок под их содержимое. Приходится теперь руками растаскивать. :)

Теги:


Спасибо:


< 1 2 3  >
Mikhail Sukhov

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


Marco Перейти

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


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

Marco

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


Mikhail Sukhov Перейти

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


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

Код

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


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

esper

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


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

Marco

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


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

esper

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


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

Marco

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


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



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

Marco

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


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

esper

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


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

esper

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


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

Marco

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


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

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

loading
clippy