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

Теги:


Спасибо:




30 Ответов
1 2  >
Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 27.09.2012
Ответить


Marco Перейти
День добрый.

Вчера обновил StockSharp до версии 4.1.4


Неудачный релиз, там много ошибок. Лучше сразу 4.1.5. Скоро его выложим на бокс.
Спасибо: Marco

Кот Матроскин

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


Mikhail Sukhov Перейти
Лучше сразу 4.1.5. Скоро его выложим на бокс.

Скачал с КодеПлекса из Транка последнюю версию - с индикаторами та же самая беда, проблема с LastValue
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 27.09.2012
Ответить


Кот Матроскин Перейти
Mikhail Sukhov Перейти
Лучше сразу 4.1.5. Скоро его выложим на бокс.

Скачал с КодеПлекса из Транка последнюю версию - с индикаторами та же самая беда, проблема с LastValue


Там теперь по другому. Это не беда, а изменился дизайн.
Спасибо:

Marco

Фотография
Программист
Дата: 27.09.2012
Ответить


Скачал версию 4.1.5 с Codeplex - сообщения OnNewMyTrades по-прежнему не приходят. :(
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 27.09.2012
Ответить


Marco Перейти
Скачал версию 4.1.5 с Codeplex - сообщения OnNewMyTrades по-прежнему не приходят. :(


Видимо какие-то другие ошибки.
Спасибо:

Кот Матроскин

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


Mikhail Sukhov Перейти
Там теперь по другому. Это не беда, а изменился дизайн.

Я правильно понял, что поменялась концепция использования индикаторов?
Спасибо:

Marco

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


Mikhail Sukhov Перейти

Видимо какие-то другие ошибки.


Михаил, Вы имеете в виду ошибки в моем коде или в библиотеке? Я уверен, что это ошибка в StockSharp, т.к.:
- До обновления библиотеки с версии 4.1.3 до 4.1.4-4.1.5 все работало отлично.
- Переопределенный метод OnNewMyTrade() моей стратегии не вызывается вообще.

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

esper

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


Пробовали Strategy.WaitAllTrades в true поставить?
Спасибо:

Marco

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


Спасибо, попробую. В предыдущих версиях библиотеки этого свойства не было.
Автор топика
Спасибо:

Marco

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


esper Перейти
Пробовали Strategy.WaitAllTrades в true поставить?


Попробовал, не помогло. Выставлял одновременно и для основной стратегии, и для стратегии, через которую осуществляется котирование.

P.S.: Причем стратегия сделки видит, размер позиции при исполнении заявки изменяется.
Автор топика
Спасибо:

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

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


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



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

Marco

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


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

esper

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


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

esper

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


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

Marco

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


Отправил проект в личку.
Автор топика
Спасибо:

Marco

Фотография
Программист
Дата: 09.10.2012
Ответить


P.S.: Да, действительно выставление Strategy.WaitAllTrades в true проблему решило. Спасибо за помощь! :)
Автор топика
Спасибо:

Eskra

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


У меня другая проблема
сборка 19868

В методе OnStarted() стратегии подписываюсь на события:
WhenNewMyTrades().Do<IEnumerable<MyTrade>>(Overlap).Apply(this);

Overlap у меня вызывается несколько раз на каждую сделку
Спасибо:

esper

Фотография
Программист
Дата: 10.10.2012
Ответить


Логи?
Спасибо:

Eskra

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


Я под дебагом это выяснил... если до конца сессии успею, попробую сделать логи
Спасибо:

Eskra

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


У меня внутри процедуры стоит свой счетчик, так вот он не совпадает с позицией, те по логам и по эксель отчету количество сделок все правильно, а счетчик не сходится. Причем иногда приходит все правильно, а иногда 2 раза, иногда 7... Торгую через плазу
Спасибо:
1 2  >

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

loading
clippy