#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% успехом (если мы говорим о вероятности да или нет), а то и хуже. Но ведь есть еще и третий вариант постулата – “То, что для нейросети – вчера, для нас – сегодня”. Разберем, что для нас означают эти постулаты в трейдинге: