Читать книгу Нейросетевая торговая система - Андрей Дибров - Страница 3
Критические ошибки при разработке нейросетевой системы.
ОглавлениеРассмотрим, на примере как допускаются ошибки при тестировании нейросети. Если у вас нет программы “NeuroSolutions 6”, то пропустите дальнейшее описание работы с ней, а рассмотрите результаты и сделанные выводы. В этой книге я не буду рассматривать создание системы на основе “NeuroSolutions”. Хотя в принципе, автоматическая нейросетевая система реализована и на основе данного продукта.
Отметим, что следует понимать разницу между обучением и тестированием. Обучать нейросеть можно на любых примерах даже, некорректных для тестового множества – ведь обучение мы проводим на событиях, которые уже произошли. Данный пример взят из реальной жизни. Данный способ работы с нейросетями продавался в интернете. Позиционировался как система, которая дает 80-90% прибыльных сделок. Причем продавец, мне кажется, искренне заблуждался в идеальной результативности данного способа подготовки нейросети. Я делаю этот вывод из того, что ошибка возникала на стадии тестирования отклика сети.
Итак, сначала модернизируем и скомпилируем скрипт для получения исторических данных.
//+–+
//| History.mq4 |
//| Copyright © 2009, Andrey Dibrov. |
//+–+
В результате работы скрипта получим файл. Создадим колонку “In” и заполним ее формулой.
Добавим колонку “Out” и заполним ее формулой.
Воспользуемся программой “NeuroSolutions 6”. С помощью ее надстройки колонку “In” обозначим как “Input”.
А колонку “Out” как “Desired”.
Энное количество строк обозначим, как “Training”
Энное количество строк обозначим, как “Cross Validation”.
И последние строки как “Production”.
Далее создадим файлы для NS6.
Запустим в рабочей среде NS – NeuralBilder. Здесь мы можем выбрать нейросеть нужной нам архитектуры. Остановимся на первой сети Multilayer perceptron. Нажимаем кнопку с правыми стрелками.
Откроется окно Training Data. С помощью кнопки Browse откроем файл TrainingInput.
Далее перейдем в окно Desired Response и откроем файл TrainingDesire.
Откроем окно Cross Val. & Test Data. По умолчанию активно окошечко для ввода текста % of training data for CV. Введем 10%. Программа автоматически зарезервирует данное количество строк под CV из TD. Активировав радиокнопку Read from Separate File, мы можем выбрать файлы сохраненные, нами ране.
Далее продвигаемся по окнам ничего в них, не меняя, пока в рабочей среде не сформируется нейросеть.
Для лучшей визуализации расширим окно Average Cost и нажмем кнопку Start. Подождем, пока закончится обучение.
Жмем кнопку Testing, Next и в выпадающем окне выбираем Production. С помощью кнопки Browse находим файл ProductionInput.
Двигаемся далее и в следующем окне активируем радиокнопку Export to a File. И находим заранее созданный нами текстовой файл с, допустим, выбранным нами именем Prod.txt.
Нажимаем кнопки Next и Finish. Таким образом, мы экспортировали отклик нейросети для тестирования в файл Prod.txt. С помощью кнопки Save, сохраним нейросеть.
Данные из файла Prod.txt подставим в файл history.csv рядом с Tag Data “Production”. В соседнюю ячейку вставим формулу условия совершения сделок на покупку.
В соседнюю ячейку вставим формулу условия совершения сделок на продажу.
В соседнюю ячейку вставим формулу суммирования сделок.
В соседнюю ячейку вставим формулу суммирования и заполним этими формулами ячейки до конца истории.
Далее вставим график нашей условной прибыли.
Как мы видим – график прибыльности у нас идеальный. Хотя мы в процессе обучения и тестирования допустили некоторые ошибки и обучали нейросеть всего на одном входе. Далее мы протестируем, обученную нейросеть на данных, которые будут к нам поступать реально. Т.е. в формуле ячеек колонки “In” мы будем использовать локальные максимумы и минимумы, которые мы записали в файл “history.csv” с помощью индикаторов “Max” и “Min”.
Введем формулу, подставив вместо High и Low дня, локальные максимумы и минимумы
Еще раз воспользуемся надстройкой NeuroSolutions для создания Production Input File.
Запустим программу NS6 и в ее среде откроем сохраненную ранее нейросеть. Протестируем теперь измененные данные.
Изменим формулы условий совершения сделок. Сделки будем открывать по открытию следующего часа после достижения локальных максимумов и минимумов. Закрывать будем по закрытию дня. Как мы видим, результат мы получаем совершенно другой.