Подскажите как правильно подписаться на получение сделок инструмента


Подскажите как правильно подписаться на получение сделок инструмента
Atom Ответить
04.03.2016


Как я понимаю подписка оформляется так

trader.RegisterTrades(security)

после чего trader начинает вызывать события NewTrades

вопрос - как правильно подписаться если я планирую использовать несколько приемников данных по одному инструменту
например три робота хотят получать сделки по инструменту A и два по B
как правильно сделать
1-есть ли встроенная реализация для отдачи нужных сделок нужным подписчикам
или же необходимо самому хранить кто что просил и отдавать в NewTrades кому что надо
2- в той пачке Trades что приходит - все Security одного типа или в одной пачке может быть 1 trades A и 1Trades B и тд
3- после RegisterTrades начинают приходить все сделки с начала дня - как это отключить - или как задать время с которого нужны данные
Спасибо

Теги:


Спасибо:




6 Ответов
Сергей Гаврилов

Фотография
Курсы
Дата: 05.03.2016
Ответить


nemoy Перейти
Как я понимаю подписка оформляется так

trader.RegisterTrades(security)

после чего trader начинает вызывать события NewTrades

вопрос - как правильно подписаться если я планирую использовать несколько приемников данных по одному инструменту
например три робота хотят получать сделки по инструменту A и два по B
как правильно сделать
1-есть ли встроенная реализация для отдачи нужных сделок нужным подписчикам
или же необходимо самому хранить кто что просил и отдавать в NewTrades кому что надо - в событиях коннектора нет.. Для этой цели можно использовать MarketRule. А лучше стратегии, а в них MarketRule..
2- в той пачке Trades что приходит - все Security одного типа или в одной пачке может быть 1 trades A и 1Trades - какая вам разница, что пришло в пачке, просто разбирайте пришедшее по инструментам
3- после RegisterTrades начинают приходить все сделки с начала дня - как это отключить - или как задать время с которого нужны данные - для квика никак... В качестве альтернативы можете использовать SecuritiesChanged..
Спасибо
Спасибо:

orphan

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


Сергей Гаврилов Перейти
nemoy Перейти

3- после RegisterTrades начинают приходить все сделки с начала дня - как это отключить - или как задать время с которого нужны данные - для квика никак... В качестве альтернативы можете использовать SecuritiesChanged..


Как вариант так:
Код

        private DateTime _currentTradeTime = DateTime.Now;

        private void OnNewTrades(IEnumerable<Trade> trades)
        {
            trades.ForEach(trade =>
            {
                // Пропускаем пул сделок за весь день до текущего момента
                if (trade.Time < _currentTradeTime) return;

                // Пропускаем пул сделок с момента, если была задержка более 20 сек (например пропадание инета), до текущего момента
                if (DateTime.Now - TimeSpan.FromSeconds(20) > trade.Time)
                {
                    _currentTradeTime = DateTime.Now;
                    return;
                }

                МойОбработчик();
            });
        }


Спасибо:

nemoy

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


orphan Перейти
Сергей Гаврилов Перейти
nemoy Перейти

3- после RegisterTrades начинают приходить все сделки с начала дня - как это отключить - или как задать время с которого нужны данные - для квика никак... В качестве альтернативы можете использовать SecuritiesChanged..


Как вариант так:
Код

        private DateTime _currentTradeTime = DateTime.Now;

        private void OnNewTrades(IEnumerable<Trade> trades)
        {
            trades.ForEach(trade =>
            {
                // Пропускаем пул сделок за весь день до текущего момента
                if (trade.Time < _currentTradeTime) return;

                // Пропускаем пул сделок с момента, если была задержка более 20 сек (например пропадание инета), до текущего момента
                if (DateTime.Now - TimeSpan.FromSeconds(20) > trade.Time)
                {
                    _currentTradeTime = DateTime.Now;
                    return;
                }

                МойОбработчик();
            });
        }





Спасибо
смысл понятен

p/s обратите внимание - _currentTradeTime присваивается 1 раз и если прием новых трейдов затянется больше чем на 20 сек то есть шанс влит в систему историю под видом реалтайма - поаккуратнее
Автор топика
Спасибо:

orphan

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


nemoy Перейти
orphan Перейти
Сергей Гаврилов Перейти
nemoy Перейти

3- после RegisterTrades начинают приходить все сделки с начала дня - как это отключить - или как задать время с которого нужны данные - для квика никак... В качестве альтернативы можете использовать SecuritiesChanged..


Как вариант так:
Код

        private DateTime _currentTradeTime = DateTime.Now;

        private void OnNewTrades(IEnumerable<Trade> trades)
        {
            trades.ForEach(trade =>
            {
                // Пропускаем пул сделок за весь день до текущего момента
                if (trade.Time < _currentTradeTime) return;

                // Пропускаем пул сделок с момента, если была задержка более 20 сек (например пропадание инета), до текущего момента
                if (DateTime.Now - TimeSpan.FromSeconds(20) > trade.Time)
                {
                    _currentTradeTime = DateTime.Now;
                    return;
                }

                МойОбработчик();
            });
        }





Спасибо
смысл понятен

p/s обратите внимание - _currentTradeTime присваивается 1 раз и если прием новых трейдов затянется больше чем на 20 сек то есть шанс влит в систему историю под видом реалтайма - поаккуратнее

Почему 1?
В первом условии пропускаются исторические сделки до момента запуска стратегии. Во втором условии идет проверка на сделку, которая по времени старше текущего момента, более, чем на 20 секунд, затем опять идет установка точки отсчета, присваиванием текущего времени в _currentTradeTime, далее следуют пропуски по первому условию. И так по кругу, пока сделки не догонят текущее время минус 20 секунд. Кстати можно и меньше, я ставил 10 сек. Хотя думаю работать может будет и с меньшим интервалом.
Спасибо:

nemoy

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


хм - точно - сорри
Автор топика
Спасибо:

nemoy

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


Все привет
еще вопрос на данную тему

Подписался на данные ( в 19 МСК) - стали приходить сделки - с 10 утра сего дня
но доходят данные до 13:38 и данные перестают приходить
такое впечатление что стоит ограничитель где то
подскажите что и как тут - ожидаю прихода всех данных и в последствии поступления реалтайм данных.


такое же поведение в примере quikpublic - код скачен с гитхаба 5/марта/2016
выбираю level1 - скачивает сделки до 13:38 и дальше все изменения только в строке security таблици инструменты - а сами сделки не приходят
в таблицу сделки


в квике запросил все сделки с текущего момента - теперь нет данных с начала дня ( и это хорошо - теперь понятно откуда берет данные коннектор)
но все равно - данные приходят и больше не обновляются в реалтайме - тоесть событие new_trade Больше не вызывается.
Подскажите как настроить коннектор чтобы он получил иcторию и дальше вызывались события new_trade(s)


шит - оказывается необходимо держать открытой таблицу сделок в квике.
Ребята - а где про все это написано - изучаю все методом проб и ошибок - может где мануал есть?
Автор топика
Спасибо:


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

loading
clippy