Здравствуйте!
Попробую ответить по порядку.
Так всё-таки на всю глубину истории, или 50 последних значений?
Для каждой точки глубины истории вычисляется значение тренда. Глубину истории хорошо видно на графике, где и отрисовывается тренд в виде сглаживающей линии. Т.е., если глубина истории равна 10 мин., а частота обновления - 5 сек., то нужно вычислить 10*60/5 = 120 значений тренда.
Каждое значение вычисляется на базе предыдущих 50 значений коэффициента или объема денег (в зависимости от типа тренда). Это значение выбрано константой, пока не планируем делать из него переменную. Если прошло меньше 50 точек (в предыдущем примере, если с начала обновления прошло меньше ~4 минут при заданной глубине рынка и частоте обновления), то тренд не такой точный, как в более поздний промежуток времени, т.к. он вычисляется на базе меньшей, чем 50 значений.
И не понятно, как после сглаживания рассчитывается само число значения тренда (которое от-0.999 до +0.999).
Для каждого момента времени вычисляется временной ряд размером в 50 точек
по уже указанной формуле. При этом в качестве первой точки берется среднее арифметическое двух первых значений исходного ряда. После этого каждая следующая точка в этом ряду вычисляется как
tr[j] = alfa*vals[j] + (1-alfa)*tr[j-1];Где tr - это ряд точек тренда, alfa - соответственно, константа Alfa, vals - исходный ряд значений.
Из этих значений, собственно, и отрисовывается линия тренда на графике.
Как вычисляется значение переменных
vol_trend и
lt_trend:
Собственно, берется синус угла наклона линии тренда в каждой заданной точке, а он, как известно, принимает значения от -1.0 до 1.0, но на практике до единицы в программе никогда не дойдет, так как линия не может быть строго вертикальной (а вот строго горизонтальной - может).
Получается, если значения идут без изменений (линия "лежит"), то тренд будет равен нулю, так как ничего не меняется. Если линия начнет падать, тренд будет отрицательный, если расти -- положительный.