Логическое обоснование обучения нейросетей на принятие решения.


Прежде чем приступать к разработке любой торговой системы, мы задаемся вопросом – на каких принципах данная система будет функционировать? У нас есть два основополагающих принципа – использования флэтов и продолжение тенденции. Пока не будем рассматривать более узкие производные от них – внутри дневная торговля или нет, на фундаментальных данных, на новостях, на открытии рынков и т.д. Мне пришлось сталкиваться с описанием нейросетевых продуктов, где их авторы в примерах использования предлагали прогнозирование каких либо курсов – акций, валют и т.д. Приведем пример, используя платформу NeuroSolutions. Весь процесс повторять не обязательно, так как данную платформу мы в построении нашей системы использовать не будем, а я в данном случае использую ее как пример. Напишем скрипт для получения ценовых данных в MT4. Хочется обратить внимание на то, что при копировании программного кода из файла в формате PDF не сохраняется его стиль – все строки при переносе сохраняются без отступов. Так же могут быть скопированы номера страниц. Для текстовых редакторов эта проблема отсутствует.


//+-+

//|History.mq4 |

//| Copyright © 2009, Andrey Dibrov. |

//| "https://www.youtube.com/channel/UCScAAn_sRRaKHdNIxl0aI9A?view_as=subscriber"|

//+-+

#property copyright "Copyright © 2009, Andrey Dibrov."

#property link https://www.youtube.com/channel/UCScAAn_sRRaKHdNIxl0aI9A?view_as=subscriber

#property version "1.00"

#property strict

int file=FileOpen("history.csv",FILE_CSV|FILE_READ|FILE_WRITE,";");

//+–+

//| Script program start function |

//+–+

void OnStart()

{

//–

FileWrite(file,"Open;OpenD;HighD;LowD;CloseD;Max;Min;Date");

if(file>0)

{

Alert("Идет запись файла");

for(int i=iBars(NULL,60)-1; i>=0; i–)

{

FileWrite(file,

iOpen(NULL,60,i),

iOpen(NULL,1440,iBarShift(NULL,1440,iTime(NULL,60,i))),

iHigh(NULL,1440,iBarShift(NULL,1440,iTime(NULL,60,i))),

iLow(NULL,1440,iBarShift(NULL,1440,iTime(NULL,60,i))),

iClose(NULL,1440,iBarShift(NULL,1440,iTime(NULL,60,i))),

iCustom(NULL,60,"Max",0,1440,60,0,i),

iCustom(NULL,60,"Min",0,1440,60,0,i));

TimeToStr(iTime(NULL,60,i)));

}

}

Alert("Файл записан");

FileClose(file);

}

//+-+





Запустив данный скрипт – в папке …MQL4/Files каталога данных терминала, получим файл “history”.







Откроем этот файл и добавим в начале десять столбцов In1-10 и один столбец Out.





Заполним эти столбцы Данными из столбца CloseD. Как Вы уже поняли, это данные дневных закрытий.




Далее мы сдвинем эти данные в наших столбцах последовательно на одну ячейку вверх.







Таким образом, мы получим в каждой строке вектор из дневных цен закрытия с глубиной в десять дней – это будут входы нейросети. А в столбце Out, который также сдвинут на один день вперед по отношению к In10, будут обучающие примеры закрытия дня для нейросети.





С помощью надстройки NeuroSolutions, выделив столбцы In1-In10, отформатируем их как входы.





А столбец Out как выход нейросети.





Аналогичным образом разобьем нашу матрицу построчно на обучающее множество.





И множество, которое мы будем использовать для анализа.





Теперь мы сформируем файлы для программы NeuroSolutions.








Откроем NeuroSolutions и нажмем кнопку NeuralBuilder.





Выберем модель нейросети Multilayer Perceptron.





Нажмем кнопку Browse…




И откроем файл с обучающими входами.







Далее откроем файл с обучающим выходом.







Определим 30% данных из тренировочного множества для перекрестной проверки в процессе обучения нейросети. Жмем кнопку Next до тех пор, пока не сформируется нейросеть.























С помощью кнопки Start и запустим процесс обучения.







После завершения процесса обучения нажмем кнопку Testing.








В выпадающем списке выберем Production.




Выберем файл с данными для анализа.








Создадим текстовой файл Prod.




И экспортируем в него данные с результатами, полученными от нейросети.








Откроем файл Prod и скопируем из него отклики нейросети.





Вставим эти отклики рядом с реальными дневными закрытиями, которые мы хотели бы получить в результате работы нейросети.







Поместим эти данные на график.




Результат вроде бы нас должен устроить. Кажется, что полученный результат хорошо накладывается на график цен закрытия. Однако, увеличив масштаб, мы обнаружим, что

график отклика нейросети, хоть и повторяет график цен, но на один шаг от него отстает. Причем это не зависит – прогнозируем ли мы ценовые данные или производные от них. Исходя из этого, мы можем вывести какой-то постулат. Например – “То, что для нас – вчера, для нейросети – сегодня”. Согласитесь, что здесь, в принципе, ни о каком прогнозе речи идти не может. Однако, забегая вперед, отмечу, что данный вариант, при определенной доработке мы так же будем использовать. Но, мы бы, конечно, хотели бы использовать постулат – “То, что для нейросети сегодня, для нас – завтра”. Машина времени, какая то. Но мы с Вами ведь понимаем, что все-таки, самая лучшая нейросеть – это наш мозг. И то, мы можем использовать этот постулат максимум с 50% успехом (если мы говорим о вероятности да или нет), а то и хуже. Но ведь есть еще и третий вариант постулата – “То, что для нейросети – вчера, для нас – сегодня”. Разберем, что для нас означают эти постулаты в трейдинге:

Загрузка...