SOMFX1
- Индикаторы
- Stanislav Korotky
- Версия: 1.1
- Обновлено: 20 ноября 2021
- Активации: 5
Если вы торгуете с использованием свечных фигур и хотите усовершенствовать свои методы современными технологиями, этот индикатор для вас. Фактически он является частью набора инструментов, который основывается на нейросетевом движке самоорганизующихся карт (Self-Organizing Map, SOM) для распознавания и предсказания свечных фигур, а также для исследования входных данных и результатов работы сети. Набор содержит:
- SOMFX1Builder - скрипт для обучения нейронных сетей; он создает файл с обобщенными данными о наиболее характерных ценовых фигурах, который может использоваться для предсказания баров в фигурах либо в отдельном окне (с помощью индикатора SOMFX1), либо непосредственно на основном графике (SOMFX1Predictor);
- SOMFX1 - данный индикатор для предсказания и визуального анализа ценовых фигур, входных и выходных данных обученной нейронной сети (в отдельном окне);
- SOMFX1Predictor - другой индикатор для предсказания ценовых фигур непосредственно в основном окне;
Если кратко, то весь процесс анализа цен, обучения сети, распознавания фигур и их предсказания заключается в следующих шагах:
- Создание нейронной сети с помощью SOMFX1Builder;
- Анализ качества полученной сети с помощью SOMFX1; если неудовлетворительно, возврат на шаг 1 с новыми настройками; вы можете пропустить шаг 2 по желанию;
- Использование окончательной версии сети для предсказания фигур при помощи SOMFX1Predictor.
Все это рассматривается подробнее ниже.
Введение
Что такое свечные фигуры? Это отличительные последовательности баров, которые были "вычислены" много лет назад сообществом трейдеров и получили забавные названия. Нет научных доказательств того, что фигуры работают так, как это ожидается, если не во всех случаях, то хотя бы в статистически обоснованном большинстве случаев. Также не гарантируется, что все поименованные фигуры - это действительно все закономерности современного рынка, особенно принимая во внимание, что большинство из них было создано в эру старых добрых размеренных рынков. Например, если сдвинуть график на время, равное половине длительности бара (например H4 сдвинуть на 2 часа), существующие фигуры исчезнут и появятся совершенно другие фигуры. Не означает ли это, что привычные фигуры должны иметь различные представления? Но тогда "молот" перестанет походить на молот, а "звезда" - на звезду? Кажется, это сломает все искусственную красоту свечной теории, но это честно.
Фигуры (или более научно - образы) - это просто легкое для восприятия описание изменений цены, обычно разницы между ценами закрытия баров. Это, вообще говоря, не свечные, а ценовые фигуры.
И сегодня требуется, и что важно - имеется возможность для того, - новый научный подход к распознаванию ценовых образов.
Данный индикатор предоставляет технологию нейронных сетей, конкретно - самоорганизующихся карт (Self-Orgranizing Map, SOM). Как и любая другая нейросеть, SOM состоит из нейронов - элементарных вычислительных единиц. В SOM каждый нейрон может содержать информацию об одной ценовой фигуре. Причина, по которой сеть называется SOM, в том, что сеть автоматически сравнивает различные фигуры и размещает их на двумерной карте таким образом, что похожие образы находятся рядом, а отличные - далеко. При этом любой ход изменения цены может быть отображен на карту и попадет в некоторую ячейку (нейрон), которая больше всего походит на цену (ячейка называется best matching unit, BMU, см. далее). Имея начальную часть какой-либо фигуры, можно найти ей окончание по содержанию BMU.
Принципы работы
Интерфейс индикатора состоит из двух частей. В главном окне выводится сама карта и элементы управления. В дополнительном окне внизу показываются образы входных данных (нормализованный ряд цен) и предсказания. Образы и предсказания нормализованы к диапазону [-1, +1] и строятся как изменения цены между соседними барами. Образы отображаются зеленой линий. Предсказание - светло-голубой толстой линией (она имеет длину PredictionBars баров и может продолжаться в будущем). Справа от линии образов (iчуть дальше в будущем) можно увидеть пучок линий длиной PatternSize баров. Они представляют собой структуру текущего выигравшего нейрона, т.е. BMU. Более подробно об этом - чуть ниже.
Нейросеть нужно обучить на некотором периоде из истории (используя SOMFX1Builder). Это длительный процесс, но чисто номинально его можно запустить лишь однажды (почему номинально? - см. далее). После завершения обучения вы получаете готовую нейронную сеть, которая способна анализировать и предсказывать новые движения цены на лету. Подробности об обучении нейросети можно найти в документации SOMFX1Builder.
В результате обучения вы получаете файл с расширением candlemap (SOMFX1Builder создает такие файлы в папке Files рабочего каталога MQL4). Вам необходимо указать имя этого файла в настройках индикатора, и индикатор выведет 2 квадратных карты на графике.
Левый квадрат показывает текущую активность нейронов: нейроны с более высоким возбуждением выводятся красным, а с меньшим - синим. Другими словами, чем краснее ячейка на карте, тем лучше нейрон соответствует текущей ценовой фигуре. Текущая ценовая фигура - это фрагмент приращений цен, взятый с PatternSize баров слева от вертикальной пунктирной линии желтого цвета с названием "FromPastToFuture". Вы можете двигать линию на произвольную позицию, и индикатор будет считывать образец возле этого места, подавать его на вход SOM, и отображать изменения в активности карты и предсказание следующего движения цены.
Заметьте, что предсказание начинается с текущего бара, то есть текущий бар тоже предсказывается. Это сделано, потому что текущий бар обычно не закончен и требует предсказания сам по себе. Более того, если принять еще назаконченный бар во внимание, предсказание станет противоречивым (нестабильным во время формирования бара). Из-за того, что текущий бар тоже предсказывается, светло-голубая толстая линия (график) начинается на 1 бар левее вертикальной линии "FromPastToFuture" - она показывает, как цена должна меняться на текущем баре.
Второй - правый - квадрат отображает карту "плотности заселения" ячеек, то есть цвет сигнализирует о количестве образцов в исходных данных, которые попали в соответствующую ячейку и сформировали её ценовую фигуру. Красный цвет означает высокую плотность, а синий - низкую. Серые ячейки не имеют соответствующих им образцов во входных данных.
В ответ на перемещение линии "FromPastToFuture" от бара к бару, на карте выбирается ячейка, наиболее подходящая образу цен слева от линии, и помечается круглой точкой. Эта ячейка и называется "ячейкой лучшего соответствия" - best matching unit (BMU). Её веса выводятся в виде красной линии в правой части дополнительного окна. Это и есть ценовая фигура, автоматически выявленная и обобщенная нейросетью. Если ячейка имеет отображающиеся на неё образы цены (входные вектора), среднее по ним выводится оранжевой линией, а дисперсия - двумя серыми линиями над и под.
Эта информация и позволяет делать предсказания: когда новые изменения цены совпадают с началом одной из фигур в сети (скажем, с 4-мя барами из 5-баровой фигуры), окончание фигуры дает наиболее вероятное движение цены (5-й бар в данном примере).
Когда линия "FromPastToFuture" перемещена, индикатор не только показывает предсказание и BMU. Кроме того он подсвечивает ценовые образы, привязанные к этой BMU, синим цветом. Это выглядит так, что синие фрагменты перекрывают частично зеленую кривую с приращениями цен. Образы могут перекрываться. Например, если фигура имеет длину 4 бара, и один образец начинается на баре номер 10, а другой - на баре номер 12, они будут иметь 2 общих бара. В таком случае будет подсвечено 6 последовательных баров, такие образы визуально неразделимы (в этом окне, сеть же конечно их "знает" по отдельности).
Можно сдвинуть ячейку правой карты в сторону. В ответ на это индикатор отобразит ценовую фигуру и средние движения цен для этой ячейки. (Сама ячейка в следующий момент времени будет автоматически возвращена на свое место в карте.) Данная возможность позволяет анализировать фигуры в карте.
Параметры
- LearnStart - номер бара в истории, где начинаются обучающие данные, или точные дата и время этого бара (в формате "YYYY.MM.DD HH:MM"); данный параметр - строка, что позволяет вводить и числа, и даты; данный параметр используется здесь не для обучения, а для воссоздания обучающего набора данных (соответствующих нейросети), что важно если параметр UseAverage равен true (см. далее), а также для визуализации "плотности заселения"; по-умолчанию - 5001; если ввести автоматически сгенерированное имя в параметр NetFileName (см. далее), индикатор разделяет имя на составляющие и использует их вместо других параметров, включая и LearnStart; другими словами, данный параметр не влияет на работу, если в параметр NetFileName введено автоматически сгенерированное имя файла нейросети;
- LearnStop - номер бара в истории, где заканчиваются обучающие данные, или точные дата и время этого бара (в формате "YYYY.MM.DD HH:MM"); данный параметр - строка; по-умолчанию - 1; данный параметр используется здесь не для обучения, а для воссоздания обучающего набора данных (соответствующих нейросети), что важно если параметр UseAverage равен true (см. далее), а также для визуализации "плотности заселения"; данный параметр не влияет на работу, если в параметр NetFileName введено автоматически сгенерированное имя файла нейросети;
- PatternSize - количество баров в одной фигуре; по-умолчанию - 5; данный параметр не влияет на работу, если в параметр NetFileName введено автоматически сгенерированное имя файла нейросети;
- GridSize - размер карты; это количество ячеек/нейронов по вертикали и горизонтали; допустимые значения: 3 - 50; по-умолчанию - 7; данный параметр не влияет на работу, если в параметр NetFileName введено автоматически сгенерированное имя файла нейросети;
- PredictionBars - количество баров предсказания; по-умолчанию - 10; обратите внимание, что каждый следующий бар предсказывается с меньшей точностью, чем предыдущий, поскольку ошибки предсказания накапливаются;
- UseAverage - это переключатель специального режима; когда он отключен (false, по-умолчанию) предсказания делаются на основе весов выигравшего нейрона, то есть они определяются исключительно картой; когда режим включен (true), предсказания делаются на основе средней цены всех образцов, отобразившихся на выигравший нейрон; это означает, что в предсказании участвует не только карта, но и данные обучающей выборки, именно поэтому важно указание точных дат и времени для отрезка обучения; с этим параметром можно "поиграть" для получения лучших результатов: использование весов нейронов - это классических подход, но использование средних цен привносит дополнительную привязку к исходным данным - в частности, в этом случае можно принимать во внимание дисперсию и тем самым оценивать точность предсказания;
- PriceType - тип цены; по-умолчанию - close; данный параметр не влияет на работу, если в параметр NetFileName введено автоматически сгенерированное имя файла нейросети;
- AddInvertedPrice - включение/отключение режима, когда в набор образцов добавляются инвертированные ценовые движения; по-умолчанию - true; это означает, что количество образцов увеличится вдвое;
- NetFileName - имя файла обученной нейронной сети, сгенерированного скриптом SOMFX1Builder; если имя формировалось автоматически, оно включает несколько необходимых компонентов, чтобы восстановить вышеперечисленные параметры; таким образом, пользователь может заполнить только один этот параметр; структура имени файла следующая: SOM-V-D-SYMBOL-TF-YYYYMMDDHHMM-YYYYMMDDHHMM-P.candlemap, где V - PatternSize, D - GridSize, SYMBOL - текущий символ, TF - текущий таймфрейм, YYYYMMDDHHMM - LearnStart и LearnStop соответственно; P - PriceType;
- CellSize - размер ячейки при визуализации карты на графике; по-умолчанию - 20, что подходит для карт размером до 10; для больших карт нужно выбрать размер ячеек поменьше, иначе два представления карты будут перекрываться;
- PrintData - включение/отключение вывода отладочных сообщений в журнал; по-умолчанию - false;
Если какие-то параметры неверны, индикатор выводит сообщение об ошибке в лог. Например, карту можно загружать только на тот же самый символ и тот же самый таймфрейм, на которых она обучалась.