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

 
Evgeniy Chumakov:


С гепами понятно, а как это поможет с выпадениями котировок?  Не лучше уже считать для H1?

Когда один бар = одно приращение, то не страшно если несколько баров потеряются. Если же приращение считается по двум барам, то будет много выбросов.

Evgeniy Chumakov:


" в качестве приращения лучше брать close[i]-open[i] " - может лучше в процентном изменении?

Да, так лучше. Можно ещё брать приращение логарифмов.

 
elibrarius:

close[i-1]  и open[i] отличаются на 1 тик. Смысл бороться с 1м тиком?

Практически гарантированное избавление от гэпов и пропусков в истории. 

 
Aleksey Nikolayev:

Практически гарантированное избавление от гэпов и пропусков в истории. 

Гэп может произойти в любой другой тик в течении минуты. Пропущенные бары надо заполнять с последней известной цены последнего известного бара.
 
elibrarius:
Гэп может произойти в любой другой тик в течении минуты. Пропущенные бары надо заполнять с последней известной цены последнего известного бара.

Гэпы равномерно распределённые среди баров не особо страшны. Неприятны те, что скучены в определённом времени, а это обычно разрывы между барами.

"Пропущенные" бары - неоднозначное понятие, это могут быть праздники, короткие сессии и тд или просто выпавшие бары по совершенно непонятным причинам. Для себя решил, что проще считать приращение по одному бару, чем изображать Шерлок Холмса, разбираясь с несколькими минутными барами десятилетней давности.

 
elibrarius:

Делаю так:

1) создаю массив индексов строк с длиной равной числу строк, заполняю его значениями от 0 до N строк

2) перемешиваю этот массив

где RandomInteger() - любой вариант из тех ГСЧ

3) потом беру в цикле все подряд значения, этих индексов и по нему из основного массива нужную строку, она получается псевдо-случайной после перемешивания индексов

Попробовал этот алгоритм с функцией рандома, что ранее дали. Получается, что есть смещение к первой половине числового ряда, если  взять первых n значений из получившегося массива и потом по порядку фильтровать массив. И наблюдаются группы подряд, что так же не очень, но лучше, чем ничего.

 
Aleksey Vyazmikin:

Попробовал этот алгоритм с функцией рандома, что ранее дали. Получается, что есть смещение к первой половине числового ряда, если  взять первых n значений из получившегося массива и потом по порядку фильтровать массив. И наблюдаются группы подряд, что так же не очень, но лучше, чем ничего.

Странно. Интересно, как это можно объяснить?
У меня закоментирована еще одна версия, но она мне не понравилась по логическим соображениям:

        for (int r = 0; r<rows; r++) {//перебор train участка
                //j = r + RandomInteger(rows - r);//номер строки с которой поменять  
                j = RandomInteger(rows);//номер строки с которой поменять - так равномернее. Формулой выше меняются последние с последними. А тут с любыми.
                c = idx[r]; idx[r] = idx[j]; idx[j] = c;
        }

Какой RandomInteger() используете?  Я XOR.

 
elibrarius:

close[i-1]  и open[i] отличаются на 1 тик. Смысл бороться с 1м тиком?

Вы не правы) они отличаются не на 1 тик, эти значения будут равны. Только в случае гэпа будет разница. Да close[i-1] впринципе работать не будет))) для нового бара
 
Александр Алексеевич:
Вы не правы) они отличаются не на 1 тик, эти значения будут равны.

https://www.mql5.com/ru/docs/runtime/testing

Новый минутный бар открывается не в тот момент, когда начинается новая минута (количество секунд становится равным 0), а когда приходит тик -  изменение цены хотя бы на один пункт.

Документация по MQL5: Программы MQL5 / Тестирование торговых стратегий
Документация по MQL5: Программы MQL5 / Тестирование торговых стратегий
  • www.mql5.com
Идея автоматической торговли привлекательна тем, что торговый робот может без устали работать 24 часа в сутки и семь дней в неделю. Робот не знает усталости, сомнений и страха, ему не ведомы психологические проблемы. Достаточно четко формализовать торговые правила и реализовать их в виде алгоритмов, и робот готов неустанно трудиться. Но прежде...
 
Aleksey Nikolayev:

Ищем Di - средний квадрат приращений за i-ю минуту дня. Затем делим все приращения на соответствующее им di=sqrt(Di). Суммируем отнормированные приращения и уже у нового ряда ищем отклонения от СБ. Цена искажается, зато время не меняется.

В чем смысл 2х месяцев на каждую минутку? Изменения на каждой минуте будем малым, а расчеты большие. И минутки назад или месяц назад и месяц вперед. Код для первого бара.

for(int i = 1,i<= 43200*2, i++);
{
Di+=pow((iClose(NULL,1,i) - iOpen(NULL,1,i)),2)/i ;
}
di=sqrt(Di);

Новый ряд

for(int i = 1,i<= 43200*2, i++);
{
NewClose[i]=iClose(NULL,1,i)/di;
NewOpen[i]=iOpen(NULL,1,i)/di ;
}

Все правильно?

 
Valeriy Yastremskiy:

Все правильно?


Вроде нет.

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

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