← Назад

CandleManager

вот в мануале вычитал что "Менеджер создания свечек. По торговому шлюзу ITrader подключается к событию NewTrades, и на основе полученных данных формирует свечки по заданным критериям. "

то есть свечки строятся по сделкам, я правильно понимаю?

А есть возможнолсть строить свечки по Bid/Ask из таблицы Инструменты?

Комментарии (7)

Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий

Tauler
Tauler Автор

вот в мануале вычитал что "Менеджер создания свечек. По торговому шлюзу ITrader подключается к событию NewTrades, и на основе полученных данных формирует свечки по заданным критериям. "

то есть свечки строятся по сделкам, я правильно понимаю?

А есть возможнолсть строить свечки по Bid/Ask из таблицы Инструменты?

Mikhail Sukhov
Mikhail Sukhov

Стандартно нет. Но можете сами это сделать. Во-первых, лучше делать по MarketDepth, так как стакан обновляется чаще, чем инструменты. Второе, при ликвидном инструменте будете терять значения - слишком уж быстро будет скакать спред.

Tauler
Tauler Автор

при ликвидном инструменте будете терять значения - слишком уж быстро будет скакать спред.

поподробнее можно? на стакане буду терять или на инструментах?

Mikhail Sukhov
Mikhail Sukhov

На стакане меньше, на инструменте больше. Дело в том, что тот же РТС обновляется раз 10-15 в секунду (это то, что мне удалось увидеть самому при прямом подключении к бирже, может быть и больше). Квик, при самом быстром раскладе, пришлет 3-4 изменения для стакана. По инструменту, вроде бы обновление не чаще 1 раза в секунду.

Pulsar
Pulsar

Если можно еще один вопрос по менеджеру свечей. собственно вопрос в том что не получается его создать и правильно использовать. Приведенный ниже код на VB не создает ошибок, но работает неправильно:

'объявления ... Public WithEvents CandleMan As New CandleManager(Trader) '-- Создаем Менеджер свечей Dim token As CandleToken '--Cтранный идентификатор типа свечей Dim Svechi() As Candle ... '---Загрузочная процедура--- ... token = CandleMan.RegisterTimeFrameCandles(Instrument, TimeSpan.FromMinutes(5)) Svechi = CandleMan.GetTimeFrameCandles(Instrument, TimeSpan.FromMinutes(5), 100) ... Instrument содержит правильно сформированный инекс RIM0 (проверено в отладчике). После этого в массиве Svechi оказывается 9 или 10 записей, хаотично разбросанных по времени и со странными значениями открытия- закрытия свечей (обычно равными между собой)

Процедура вызываемая по событию появления новой свечи Sub PodpisCandle() Handles CandleMan.NewCandles ... вызывается только один раз при загрузке программы. На смену или изменение свечей в графике квика не реагирует.

Что-то я не так понимаю?

Mikhail Sukhov
Mikhail Sukhov

Делается не так то, что RegisterTimeFrameCandles запускает в другом потоке процесс формирования свечек. Соответственно, когда на следующей строчке Вы делаете получения свечек - практически ничего еще не свормированно. Как получать свечки. Нужно подписатся на событие NewCandles. Оно вызывается, когда появилась новая свечка (именно появилась, когда произошел первый тик, а не до конца сформировалась). Скажем, если пришло событие для свечки со временем 12:25, то значит все свечки раньше этого периода сформировались, и можно получать их через GetTimeFrameCandles.

Pulsar
Pulsar

Да, вы правы, это сработало. Правда несколько странно, - при первом запуске программы коллекция заполняеся постепенно с шагом 8-16-32-52-73... при этом на каждом шаге вызывается событие новой свечи... но все же заполняется и то слава богу. Однако до 100 (как в примере и хелпа) не доходит. По той простой причине что в период с 10-30 до 18-45 накапливается всего 99 5-минутных свечей. Вот на 99 коллекция и останавливается в 18-45 (раньше - меньше). Отсюда вопрос - как получить вчерашние свечки? Ведь на них нужно строить входные для сегодняшнего дня значения индикаторов.