Mikhail Sukhov Основная сложность в индексной свечке понять, нужно ли ее закончить. Для этого необходимо ждать окончания свечек по всем инструментам.
Могу предложить вариант построения индексных свечек.
Начну издалека.
Если я правильно понимаю как происходит создание свечек, то в общих чертах так:
Есть построители свечек, для каждого типа свой. Есть различные источники для построителя свечек.
Например взять шлюз и тип данных тики.
Далее, создается серия, в конструкторе указывается тип, инструмент и размерность.
При вызове у построителя свечек метода start с переданной серией(или у CandleManager, у которого этот построитель свечек указан в качестве источника),
построитель проверят приходящие данные от источника, берет тики по нужному инструменту и строит в соответствии с заданными параметрами свечки.
Сейчас механизм постороения свечек отточен и работает.
С индексными же свечками получается что построитель за основу берет не тики, а готовые свечки по составляющим инструментам.
А почему бы не сделать, чтобы индексные свечки тоже строились на основе тиков?
Логика такая.
Построителем свечек мониторятся приходящие тики, как только пришел тик по одному из составных инструментов, время, объем, цена этого тика берется за основу "индексного тика".
Цена по остальным составным инструментам берется из последнего тика по каждому инструменту.
Считается цена индексного тика.
Далее построитель свечек с этими индексными тиками работает как с обычными.
Таким образом решится проблема когда заканчивать индексную свечку.
Плюс решится еще одна из возможных проблем - что если захотеть построить тиковые индексные свечки?
Смутно предполагаю как они буду приходит и в каком кол-ве.
Т.к. по одному составному инструменту тики могут идти "плотно" и свечка будет быстро строится, а по другому "в час по чайной ложке".
В итоге тиковая свечка по этому составному инструменту будет строиться неопределенно долго и из за это и индексная свечка тоже.
Заметил еще такое, в индексной свечке объем по одному инструменту вычитается из объема по другому инструменту. Это если строить инстр1-инстр2.
Наверное правильнее чтобы объем складывался, независимо от того как индекс строится, иначе может получится момент, когда объем будет отрицательным.