SOMFX1Builder
- Утилиты
- Stanislav Korotky
- Версия: 1.1
- Обновлено: 20 ноября 2021
Если вы торгуете с использованием свечных фигур и хотите усовершенствовать свои методы современными технологиями, этот скрипт для вас. Фактически он является частью набора инструментов, который основывается на нейросетевом движке самоорганизующихся карт (Self-Organizing Map, SOM) для распознавания и предсказания свечных фигур, а также для исследования входных данных и результатов работы сети. Набор содержит:
- SOMFX1Builder - данный скрипт для обучения нейронных сетей; он создает файл с обобщенными данными о наиболее характерных ценовых фигурах, который может использоваться для предсказания баров в фигурах либо в отдельном окне (с помощью индикатора SOMFX1), либо непосредственно на основном графике (SOMFX1Predictor);
- SOMFX1 - индикатор для предсказания и визуального анализа ценовых фигур, входных и выходных данных обученной нейронной сети (в отдельном окне);
- SOMFX1Predictor - другой индикатор для предсказания ценовых фигур непосредственно в основном окне;
Если кратко, то весь процесс анализа цен, обучения сети, распознавания фигур и их предсказания заключается в следующих шагах:
- Создание нейронной сети с помощью SOMFX1Builder;
- Анализ качества полученной сети с помощью SOMFX1; если неудовлетворительно, возврат на шаг 1 с новыми настройками; вы можете пропустить шаг 2 по желанию;
- Использование окончательной версии сети для предсказания фигур при помощи SOMFX1Predictor.
Шаг 1 подробно рассматривается далее. Больше информации о визуальном анализе и предсказании - на страницах соответствующих индикаторов.
Чтобы начать обучение, следует выбрать диапазон баров в истории (параметры LearnStart и LearnStop), количество баров в отдельно взятой фигуре (PatternSize), размер карты (GridSize), количество циклов обучения (EpochNumber). Другие параметры также влияют на процесс, но подробности о них будут представлены ниже, в разделе "Параметры".
Обучение может занять значительное время, в зависимости от параметров. Чем больше баров в области обучения, тем дольше идет процесс. Размер фигуры, размер карты и количество циклов влияют аналогично. Например, обучение на 5000 баров карты размером 10*10 может занять несколько минут на среднем ПК. Все это время нагрузка на ядро CPU максимальная, и терминал может притормозиться, если процессор не имеет свободного ядра. Для обучения следует выбрать такое время, когда вы не собираетесь активно торговать, например, на выходных. Это особенно важно, поскольку процесс обучения может потребоваться повторить для оптимизации результатов. Почему это так, рассказано чуть ниже, в разделе "Выбор оптимальных параметров".
Прежде чем приступить к чтению следующих разделов, имеет смысл ознакомиться с секцией "Принципы работы" на странице SOMFX1, где представлен обзор используемой нейронной сети.
Параметры
- LearnStart - номер бара в истории, где начинаются обучающие данные, или точные дата и время этого бара (в формате "YYYY.MM.DD HH:MM"); данный параметр - строка, что позволяет вводить и числа, и даты; важно, что номера баров постоянно меняются по мере появления новых, так что значение 1000, введенное вчера, сегодня будет, скорее всего, соответствовать другому бару (за исключением случая недельных баров); во время процесса обучения это неважно, так как все обучающие данные собираются перед запуском обучения и не меняются впоследствии; по-умолчанию - 5001;
- LearnStop - номер бара в истории, где заканчиваются обучающие данные, или точные дата и время этого бара (в формате "YYYY.MM.DD HH:MM"); данный параметр - строка; значение LearnStart должно быть старше LearnStop; разница между LearnStart и LearnStop - число входных векторов (образцов), подаваемых на вход нейросети (точнее, это LearnStart-LearnStop-PatternSize); по-умолчанию - 1 (последний, обычно незаконченный бар исключается);
- PatternSize - количество баров в одной фигуре; это длина входного вектора (образца ценовых движений); после обучения первые PatternSize-1 баров будет использоваться для предсказания последнего бара образца; например, если PatternSize - 5, 5-баровые образцы выделяются из ценового потока и используются во время обучения, а затем 4-баровые начальные отрезки позволяют оценить в каждый момент времени 5-й бар; допустимые значения: 3 - 10; по-умолчанию - 5;
- GridSize - размер карты; это количество ячеек/нейронов по вертикали и горизонтали; полное число нейронов равно GridSize*GridSize (2D-карта); допустимые значения: 3 - 50, но будьте внимательны: значения больше 20 означают довольно продолжительное обучение с большой нагрузкой на CPU; по-умолчанию - 7 (применимо для первых тестов, чтобы познакомиться с инструментами, но, скорее всего, потребует увеличения для реальных задач);
- EpochNumber - количество циклов обучения; по-умолчанию - 1000; обучение может завершиться и раньше, если достигнут порог ошибки Precision; в каждом цикле все входные образцы подаются на нейросеть;
- LearningRate - начальная скорость обучения; по-умолчанию - 0.25; методом проб и ошибок следует подобрать значение в диапазоне 0.1 - 0.5;
- UseConvex - включение/отключение метода convex combination для инициализации входных векторов во время первых циклов; включение метода предполагает лучшее разделение образцов; по-умолчанию - true;
- Precision - число с плавающей точкой, задает порог остановки обучения, когда общая ошибка нейросети изменяется меньше, чем на указанную величину; по-умолчанию - 0.001;
- PriceType - тип цены для образцов; по-умолчанию - close;
- AddInvertedPrice - включение/отключение режима, когда в набор образцов добавляются инвертированные ценовые движения; это может помочь исключить смещение нейросетевых оценок из-за тренда; по-умолчанию - true; это означает, что количество образцов увеличится вдвое: (LearnStart-LearnStop-PatternSize)*2;
- NetFileName - имя файла для сохранения готовой нейронной сети; по-умолчанию - пусто - в этом случае будет автоматически сконструировано специальное имя со следующей структурой: SOM-V-D-SYMBOL-TF-YYYYMMDDHHMM-YYYYMMDDHHMM-P.candlemap, где V - PatternSize, D - GridSize, SYMBOL - текущий символ, TF - текущий таймфрейм, YYYYMMDDHHMM - LearnStart и LearnStop соответственно; даже если LearnStart и LearnStop заданы как числа, они автоматически переводятся в дату и время; P - PriceType; рекомендуется оставлять данный параметр пустым, потому что автоматически сгенерированное имя распознается индикаторами SOMFX1 и SOMFX1Predictor и из него извлекаются все настройки, так что вам не придется вводить все настройки вручную по одной; в противном случае, если пользователем задано свое имя файла, все настройки, использованные для обучения, должны быть в точности продублированы в диалогах SOMFX1 и SOMFX1Predictor, причем важно скорректировать или преобразовать LearnStart и LearnStop в дату/время, потому что номера баров непостоянны;
- PrintData - включение/отключение вывода отладочных сообщений в журнал; по-умолчанию - false;
- Throttling - количество миллисекунд для паузы обучения в каждом цикле; это позволяет уменьшить нагрузку на CPU за счет увеличения времени обучения; это может пригодиться, если ПК недостаточно мощный и обучение не должно мешать другим интерактивным задачам; по-умолчанию - 0.
Выбор оптимальных параметров
Наиболее важные вопросы, на которые нужно ответить прежде, чем начинать обучение нейросети, это:
- Сколько баров подавать на вход сети?
- Какой выбрать размер образца/фигуры?
- Какой выбрать размер сети?
Они все взаимосвязаны, и решение по одному из них влияет на остальные.
Увеличивая глубину истории, на которой производится выборка данных для обучения, можно ожидать улучшения обобщающей способности сети. Это означает, что каждая выявленная фигура будет подтверждена большим количеством образцов, за счет чего сеть отыскивает закономерности в ценах, а не случайные особенности. С другой стороны, подача на сеть слишком большого числа образцов при том же размере сети может привести к эффекту, когда обобщающая способность сети деградирует в усреднение, и различные фигуры начнут смешиваться в одном и том же нейроне. Это происходит, потому что нейросеть имеет ограниченную "память", зависящую, прежде всего, от её размера. Чем больше размер, тем большее количество образцов может быть обработано. К сожалению, нет точной формулы расчета для этого. Приблизительно правило такое:
где N - количество образцов, а D - размер сети (GridSize).
Таким образом, следует возможно выбрать сперва количество баров для обучения, руководствуясь предпочитаемой торговой стратегий. Затем, имея это число, можно рассчитать требуемый размер сети. Например, для таймфрейма H1, 5760 баров - это год, что, вероятно, хороший горизонт при торговле на H1, значит можно попробовать значение по-умолчанию 5000. Из этой величины легко получить по формуле размер ~20. Важно отметить, что установка параметра AddInvertedPrice в true увеличит количество образцов в 2 раза, и тогда размер сети нужно соответствующим образом увеличить. Если после обучения нейросеть дает слишком много ошибок (что может быть проверено с помощью SOMFX1 или SOMFX1Predictor), следует либо увеличить размер сети, либо уменьшить число данных для обучения. Параметр PriceType тоже может быть важен (см. далее). В любом случае, если вы по собственному опыту знаете, что определенная фигура встречается в среднем не менее 10 раз не некотором периоде времени, вы можете считать этот период достаточным для обучения, поскольку 10-ти образцов должно хватить для их обобщения и выделения в фигуру. Используйте SOMFX1 для изучения, сколько образцов попало в каждый нейрон и насколько равномерно образцы распределены по нейронам.
Можно рассмотреть данный вопрос и с другой стороны. Число нейронов в сети - это максимальное число ценовых фигур. Если предположить, что известных фигур всего 50, то размер сети может быть около 7. Проблема здесь в том, что невозможно "сказать" сети, что мы хотим, чтобы она выучила эти конкретные фигуры и обошла вниманием остальные: нейросеть будет обучаться на всех образцах и находить все фигуры из рядов цен. Таким образом, 50 известных фигур составят лишь часть всех фигур, которые сеть попытается выучить. Какова эта часть - опять-таки, открытый вопрос. Именно поэтому обычно необходимо запускать обучение несколько раз с различными настройками и искать лучшую конфигурацию.
В случае классических свечных фигур, большинство построено из 3-4-5 баров. Для нейронной сети 3 или 4 бара могут оказаться недостаточным размером для правильного разделения фигур. Рекомендуется задавать PatternSize равным 5 и более. Увеличение размера образа увеличивает вычислительную нагрузку.
PriceType в обычных свечных фигурах эквивалентен close. Нейронная сеть позволяет распознавать фигуры, формируемые на любом типе цены, таком как typical, high или low. Это особенно важно, потому что ряд цен close обычно очень неровный, что "стоит" дополнительных затрат "памяти" сети. Другими словами - обучение close намного более трудно, чем обучение typical, и требует большего размера сети при равном наборе входных баров. Таким образом, применение typical вместо close может помочь уменьшить размер сети или повысить точность.
Порядок действий
После задания параметров и нажатия кнопки OK начинается процесс обучения. Во время процесса скрипт выводит текущий номер цикла, ошибку, скорость обучения и процент готовности в комментарий (в верхнем левом углу окна). Та же информация выводится в лог. По завершению процесса выдается сообщение (alert), содержащее имя файла сгенерированной сети. Файл сохраняется в папке Files рабочего каталога MQL4. Если это автоматически сформированное имя (NetFileName было пусто), можно скопировать его прямо из окна сообщений в SOMFX1 или SOMFX1Predict (там следует вставлять имя в аналогичный параметр NetFileName) и запустить нейросеть. Если использовалось собственное имя файла, следует скопировать все параметры в индикаторы - помимо имени файла это область обучения, размер сети, размер фигуры и т.д.
Важно отметить, что файл нейронной сети не содержит входных данных - в нем находится только обученная сеть. Когда сеть в следующий раз загружается в индикатор, тот считывает параметры и производит на их основе выборку образцов из котировок заново.
Перед каждым стартом процесса обучения, веса нейронов сети случайным образом инициализируются. Поэтому каждый запуск скрипта с одними и теми же настройками создает новую карту, отличную от предыдущей.
Рекомендуемые таймфреймы: H1 и старше.
Пользователь не оставил комментарий к оценке