
Агрегация данных онлайн-сделок по свечам графика
Добрый день, при работе с данными онлайн-тиков (статья https://support.orderflowtrading.ru/knowledge-bases/46/articles/24942-poluchenie-onlajn-tikov-i-agregirovannyih-sdelok) был переопределен метод OnNewTrade в теле которого идет подсчет объема сделок по свечам (аналог стандартного индикатора Volume - с той лишь разницей, что стандартный индикатор берет данные из свечей на графике, а разрабатываемый - данные онлайн-тиков)
int _startBar = CurrentBar - 1; //берем текущий торгуемый бар
bool _search = true; //флаг того, что нужная свеча найдена
while (_search)
{
var curCandle = GetCandle(_startBar); //берем свечу по индексу бара
if (curCandle.Time >= arg.Time) //если текущая свеча началась позже сделки, то смотрим предыдущую свечу
{
_startBar--;
}
//если текущая свеча началась раньше сделки (т.е. сделка вероятно в пределах свечи)
else
{
//если текущая свеча закончилась раньше сделки, то сделка не оказалась ни в одной свече правее рассматриваемой, но она была уже позже текущей свечи - добавлено для проверки того, что сделки не теряются "между" свечами
if (arg.Time > curCandle.LastTime)
{
this.LogWarn("We lost trade between candles"); //вывод сообщения в лог
_search = false; //прекращаем поиск
}
//если текущая свеча закончилась позже сделки
else
{
_cumulativeDeltaAll[_startBar] += arg.Volume;
_search = false;
}
}
}
При проверке работы этого метода на временных графиках (минутный, секундный) любого таймфрейма (1,5,10,15..) - все работает, данные совпадают с данными индикатора Volume
НО при подключении данного индикатора к графику типа Delta - данные начинают расходиться
Прошу пояснить, с чем это может быть связано, а также как в таком случае необходимо агрегировать сделки (для дальнейших вычислений нужны именно одиночные trade а не cumulative) по свечам
Customer support service by UserEcho
Примечание:
В строчке "bool _search = true; //флаг того, что нужная свеча найдена" неверный комментарий - данная логическая переменная - флаг продолжения поиска свечи, как только нужная свеча находится - он становится false и поиск прекращается
Здравствуйте.
Здесь дело в том, что из торгового подключения тики приходят пачками и обрабатываются сначала для построения свечек, далее для передачи в OnNewTrade.
Т.е. может быть такая ситуация:
1)из коннектора приходит 10 тиков с одним timestamp
2)эти тики обрабатываем и строим свечки. Допустим, у нас тиковый ТФ: 5 ticks. В результате обработки тиков, получим 2 свечки с одним начальным timestamp
3)в момент появления новых свечек в индикаторах вызывается OnCalculate
4)после того, как свечки будут построены, 10 раз вызовется OnNewTrade
В этом кейсе по времени свечек нельзя определить какой тик к какой свечке относится.
Это можно решить, сравнивая объем уже сформированных свечек с рассчетным объемом.
Вот пример индикатора, который определяет к какой свечке относится тот или иной тик и передает этот тик с номером бара в свой метод ProcessTrade