Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 2064

 
Evgeniy Chumakov:


Вроде нет.

Я понял алгоритм так: допустим сейчас время 10:00, считаешь Di именно для баров m1 этого времени. a потом для 10:00 минутки (close[i] - open[i])/di и так для каждой минуты.

Код для первого бара. Вглубь надо сдвигать, это сверху еще один цикл. 
 
Evgeniy Chumakov:


Вроде нет.

Я понял алгоритм так: допустим сейчас время 10:00, считаешь Di именно для баров m1 этого времени. a потом для 10:00 минутки (close[i] - open[i])/di и так для каждой минуты.

Да, так правильно. Заводим два архива - вещественный и целый размером 1440=24*60. В первом суммируем квадраты приращений, а во втором - число баров для данной минуты, а потом делим первый на второй (для номеров с кол-м баров больше 1). Потом извлекаем корень и лишь затем перенормируем приращения и собираем из них куммулятивную сумму - новый ряд, который уже и исследуем на отличие от СБ.

 
Aleksey Nikolayev:

Да, так правильно. Заводим два архива - вещественный и целый размером 1440=24*60. В первом суммируем квадраты приращений, а во втором - число баров для данной минуты, а потом делим первый на второй (для номеров с кол-м баров больше 1). Потом извлекаем корень и лишь затем перенормируем приращения и собираем из них куммулятивную сумму - новый ряд, который уже и исследуем на отличие от СБ.

т.е. среднее квадратичное из минуток для 24 часов, и так для 2х месяцев минуток. Номер бара минутки? Сумму квадратов делим на 1440?

 
Valeriy Yastremskiy:

 Сумму квадратов делим на 1440?


Сумму квадратов делишь на количество баров для конкретной минутки, а потом извлекаешь корень.

 
Aleksey Nikolayev:

Да, так правильно. Заводим два архива - вещественный и целый размером 1440=24*60.


т.е. нужно построить кум. сумму за сутки = 1440 минут?

 
Evgeniy Chumakov:


Сумму квадратов делишь на количество баров для конкретной минутки, а потом извлекаешь корень.

Тогда не понял. Для глубины бара 3 количество  будет три, и это значение вычисляем для 3го бара или для первого.  Я так понимаю что бы было ровно среднее должно вычисляться для одинакового количества баров, а не нарастающим итогом. Лучше сразу формулу было дать. Слова мы все понимаем по разному.)

for(int i = 1,i<= 1440, i++);
{
Di+=pow((iClose(NULL,1,i) - iOpen(NULL,1,i)),2)/i ;
di=sqrt(Di);
DVal[i]=(iClose(NULL,1,i) - iOpen(NULL,1,i)/di; 
}

По мне так не верно.

 
Valeriy Yastremskiy:


По мне так не верно.


код не правильный

 

Если предположить, что нет пробелов в истории и во всех сутках 1440 минуток (в пятницу меньше) то код должен быть такой:

double di = 0;

int n = 40; // глубина 40 суток (два месяца)

int pos = 0; // текущий бар

int step = 0; // шаг


for(int i = 0; i < n; i++){

di += MathPow( close[pos + step] - open[pos + step],2);

step += 1440;
}

di = MathSqrt(di/n);

double x = (close[pos] - open[pos])/di;
 
Evgeniy Chumakov:

Если предположить, что нет пробелов в истории и во всех сутках 1440 минуток (в пятницу меньше) то код должен быть такой:

Пробелы бывают даже на eurusd. Работайте со временем бара
 
elibrarius:
Пробелы бывают даже на eurusd. Работайте со временем бара


Это понятно, если бы делал, то так и поступил бы. Это я просто чтобы проще объяснить.

Причина обращения: