Набор инструментов для обучения и тестирования нейросети. Получаем реальный результат.

2 октября 2020, 09:25
Evgeny Dyuka
9
1 527

 UPDATE: Все перехало сюда 


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

Кратко это выглядит так:

  1. Expert для MetaTrader5 соберет и подготовит данные для обучения нейросети. Нужно только указать торговую пару и периоды в истории.
  2. Обучение нейросети будет проходить на уже готовом и протестированном "ноутбуке" в бесплатной платформе GoogleColaboratory.
  3. В этом же ноутбуке есть тестирование и визуализация результатов обучения.
  4. В дополнение, для лучшей визуализации, можно перенести результаты обратно в MetaTrader5 и там провести анализ результатов.

Прежде чем начать использование обратите внимание на следующее:

  1. Цель проекта - показать, что при правильной подготовке данных для обучения нейросеть может предсказывать тренд.
  2. Предоставленные инструменты не предназначены для реальной торговли, такая задача и не ставилась.
Важно! Первый раз делайте все как в инструкции и с настройками по умолчанию, это позволит получить результат и увидеть как все работает. После этого уже можно экспериментировать.


1. Подготовка данных

Как было сказано выше, данные готовятся Экспертом для MetaTrader5. Скачайте файл Make_data.ex5 и установите его в MT5.  Эксперт работает только в Тестере.

1.1 Откройте тестер и выберите нужный Эксперт. Собирать данные будем на паре EURUSD. Шаг сбора данных - свеча M6. Диапазон дат - от начала 2015 года до сегодняшнего дня.



1.2. Перейдите в настройки Тестера и укажите дату с которой эксперт начнет готовить данные для тестирования. Данные для обучения и данные для тестирования это два разных файла. Оба будут созданы автоматически нужно только указать дату для перехода на тестовый файл. Структура данных в этих файлах абсолютно идентична. В дальнейшем, на этапе экспериментов можно данные для обучения и тестирования разносить в разные места или менять местами. Главное соблюдать названия файлов. Файл для обучения начинается с "train...", а для тестирования с "test...".

Итак, указываем начало тестирования. Поле dim - это размерность вектора (количество предикторов в векторе), это характеризует плотность собираемой информации. Оставляем по умолчанию.

Важно! Количество данных для обучения должно быть не меньше 2000 * dim, т.е. по 2000 и более на предиктор, в нашем случае 2000*90=180'000. Общее количество данных для тестирования не меньше 10'000. Иначе объективной картины не будет. Считайте количество свечей в выбранном диапазоне.

1.3. Запускайте тестер. Файлы будут созданы в папке Files "агента тестирования". Т.е. путь примерно такой

MetaQuotes\Tester\5C47185D3ECAA1E6C79289B6473FA086\Agent-127.0.0.1-3000\MQL5\Files

Что бы найти, из корневой папки надо подняться до MetaQuotes и там зайти в Tester.

4. После окончания работы Эксперта, оба файла объедените в zip архив Files.zip. Важно соблюдение названий файлов и архива.

Структура данных в файлах следующая:

0.32,0.26,0.00,0.43 ... 0.66,0.25,0.24,0.05,0,1,1600144440,1.189240
Предикторы через запятую, поля 3 и 4 с конца - это правильный ответ куда пошел тренд (01 - вниз, 10 - вверх). Поле 2 с конца - id свечи (iTime()). Последнее поле - цена на открытии свечи. Для обучения последние два поля не используются.


2. Обучение нейросети

Обучение проходит на бесплатной платформе GoogleColaboratory. GoogleColab предоставляет свои мощности для работы с нейросетями, рекомендую погуглить об этом проекте что бы понимать что там и как.
Перейдите по этой ссылке.

Копируйте ноутбук себе


2.1. Запустите установку Библиотек.


Процесс сам закончится, ничего делать не требуется.


2.2 Загрузка и подготовка данных для обучения

Запустите второй блок и выберите для загрузки файл Files.zip. Загрузка идет медленно...
На этом этапе готовятся отдельные массивы данных для обучения и тестирования.


2.3. Обучение и тестирование модели

При первом запуске оставьте настройки нейросети по умолчанию. Обучение будет проходить в пять заходов пока не будет получен приемлемый результат.
В случае успешного обучения появится такая таблица:

+------------+---------+----------+-------------+------------------------+
| Ответ сети | Выиграл | Проиграл | Выиграл (%) | Свечей с сигналами (%) |
+------------+---------+----------+-------------+------------------------+
|     0      |   6970  |   7377   |      48     |         100.0          |
|     2      |   6609  |   6640   |      49     |          92.3          |
|     4      |   5878  |   5951   |      49     |          82.4          |
|     6      |   5263  |   5247   |      50     |          73.3          |
|     8      |   4628  |   4599   |      50     |          64.3          |
|     10     |   4030  |   3893   |      50     |          55.2          |
|     12     |   3386  |   3191   |      51     |          45.8          |
|     14     |   2820  |   2601   |      52     |          37.8          |
|     16     |   2291  |   2142   |      51     |          30.9          |
|     18     |   1820  |   1770   |      50     |          25.0          |
|     20     |   1402  |   1369   |      50     |          19.3          |
|     22     |   1078  |   1010   |      51     |          14.6          |
|     24     |   808   |   727    |      52     |          10.7          |
|     26     |   624   |   491    |      55     |          7.8           |
|     28     |   475   |   341    |      58     |          5.7           |
|     30     |   332   |   227    |      59     |          3.9           |
|     32     |   198   |   107    |      64     |          2.1           |
|     34     |    98   |    53    |      64     |          1.1           |
+------------+---------+----------+-------------+------------------------+

Поля таблицы:
1) Поле "Ответ сети" - это разница между полями ответа "вверх" и "вниз" умноженная на 100. Ответ нейросети - это бинарная классификация где 0,1 это " вниз ", а 1,0 - это "вверх". Но нейросеть никогда не отвечает целым значением, ее ответ это, в зависимости от степени "уверенности", ответы типа 0.4,0.6. В таком ответе нейросеть считает, что цена пойдет вниз, но не очень уверенна, а в ответе 0.1,0.9 тоже самое, но уверенности намного больше, вот как выглядит массив реальных ответов:

[[0.5084921  0.49150783]
 [0.3930727  0.6069273 ]
 [0.4930727  0.50692725]
 ...
 [0.5189831  0.48101687]
 [0.27955987 0.7204401 ]
 [0.476914   0.5230861 ]]

Очевидно, что разница этих значений характеризует "уверенность" сети в своем ответе.
В итоге, в поле  "Ответ сети" таблицы мы имеем значения в диапазоне от 0 до 100.
Теперь мы можем брать не все ответы сети, а только те, в которых она имеет значимую "уверенность". Что бы понять на сколько ответ сети влияет на результат прогноза, тестовый участок проверяется на правильность прогноза при разных уровнях "уверенности сети". Каждая строка таблицы - это проверка при новом большем значении "Ответа сети". Чем выше фильтр "Ответа сети" , тем меньше ответов, но тем они качественнее. Это видно по полям "Выиграл" и "Проиграл". Процесс останавливается когда процент ответов становится меньше 1% от всех тестовых данных. Поэтому тестовых данных должно быть не меньше 10000! В этом случае мы имеем не меньше 100 ответов.

В дальнейшем, на реальном рынке, мы будем знать какой "Ответ сети" для конкретной модели является значимым. В случае поступления от модели такого значимого ответа, ответ превращается в сигнал, а прочие ответы игнорируются.

Важно! Обучение нейросети это, отчасти, игра в рулетку т.к. начальные веса выдаются случайным образом. Следовательно пути по которым идет выработка целевой функции могут быть разные при одинаковых параметрах нейросети. Поэтому обучение запускается несколько раз до получения приемлемого ответа. Такой подход не является подгоном под тестовые данные, невозможно сделать подгон под 10'000 или 100'000 тестовых данных. Другим подтверждением этого тезиса является возможность протестировать готовую модель на реальном рынке.

Если вы используете рекомендованную пару и рекомендованные настройки и при одном проходе сеть не обучилась просто перезапустите этот блок (данные заново подгружать не надо).


3. Визуализация

3.1 Результаты на торговом графике

Запустите этот блок. Тут все очевидно - на графике торговой пары из тестового набора отрисовываются сигналы нейросети, зеленый вверх, красный вниз.


3.2 Тестирование на реальном рынке

При этой проверке подгружаются данные для нейросети которые создаются по ходу добавления новых свечей в реальном времени. Т.е. последний вектор полученных данных создан на открытии свечи, в нашем случае нулевой свечи М6. Эти данные, естественно, не содержат правильного ответа, сети предлагается сделать реальный прогноз. Убедится в том, что вектора не подменяются по ходу их движения в историю можно раскомментировав строку print(data) и сравнив значения конкретной строки при входе и спустя некоторое время.

def get_from_ennro(symbol, tfm, dim, lim):
    ...
    # print(data)
    ...

Работает только для торговых пар EURUSD и BTCUSD.


2.5 Создание файла для MetaTrader5

После запуска этого блока будет предложено скачать файл с ответами сети. Этот файл нужно положить в папку MQL5/Files и запустить эксперт Show_res.ex5. При обновлении файла необходимо перезапускать эксперт.

P.S.

Есть Expert который уже заряжен обученной нейросетью и дает прогнозы по паре BTCUSD, о нем здесь.


UPDATE
Демонстрация работы нейросети переехала в браузер. Сайт TradingNN.com



Файлы:
Make_data.ex5  207 kb