Ставь лайки и следи за новостями
Поставь на него ссылку - пусть другие тоже оценят
Оцени его работу в терминале MetaTrader 5
- Просмотров:
- 40
- Рейтинг:
- Опубликован:
-
Нужен робот или индикатор на основе этого кода? Закажите его на бирже фрилансеров Перейти на биржу
Обзор
Практически каждый инструмент, который мы создаем для чтения графиков, остается в мире цифр. Этот же выходит за его пределы. Метод Symbolic Aggregate approXimation (SAX), представленный Джессикой Лин, Имоном Киохом и их коллегами в 2003 году, берёт отрезок ценового движения и преобразует его в короткую строку букв, например, bddcbbba. Как только фрагмент рынка превращается в слово, с ним можно делать все, что компьютерные науки уже умеют делать с текстом: сопоставлять, подсчитывать, хешировать, искать.
В данной публикации этот подход применяется к решению одного практического вопроса: рынок сейчас ведет себя именно так; когда он вел себя аналогичным образом ранее и что последовало за этим? Индикатор кодирует текущее окно, сканирует историю в поисках прошлых окон аналогичной формы, анализирует известное будущее каждого совпадения и отображает полученное распределение исходов в виде конуса прогнозов на графике с панелью выводов, отражающей лежащую в его основе статистику.
Само преобразование состоит из трёх этапов, каждый из которых имеет своё обоснование:
- Z-нормализация окна, чтобы осталась только чистая форма. Рост курса EURUSD и рост цены на золото отображаются на одной и той же нормализованной кривой, если они растут одинаково.
- Кусочно-агрегированная аппроксимация: разбить нормализованное окно на w равных сегментов и заменить каждый из них его средним значением. Окно из 48 баров с w = 8 превращается в восемь чисел, что представляет собой уменьшение размерности, сглаживающее шум по ходу процесса.
- Дискретизация: сопоставить среднее значение каждого сегмента с буквой, используя точки разрыва, которые разделяют стандартную нормальную распределение на полосы с равной вероятностью, так что каждая буква априори имеет одинаковую вероятность.

Алгоритм SAX: нормализуем окно по z, усредняем его по ячейкам, а затем сопоставляем каждую ячейку с буквой, используя гауссовы точки разрыва.
То, что делает поиск SAX не просто быстрым, а точным, — это MINDIST, расстояние между двумя словами, которое, как доказано, является нижней границей истинного евклидова расстояния между z-нормированными рядами. Поскольку оно всегда может только занижать реальное расстояние, его можно использовать для отбраковки кандидатов без риска отбраковки истинного совпадения. Именно это позволяет применять здесь двухэтапный поиск: сначала отсеивать с помощью недорогого расстояния между словами, а затем ранжировать оставшиеся варианты по истинному евклидовому расстоянию. Опубликованный набор тестов подтверждает, что этот алгоритм возвращает точно такие же совпадения, как и метод перебора, при этом пропуская значительную часть работы.
Что отображает индикатор
Два объекта, оба из которых перестраиваются при закрытии нового бара.
Конус веера проецирует распределение аналогов в будущее, исходя из последнего закрытого бара. Сплошная линия отражает медианное будущее движение на каждом шаге, а пунктирные линии выше и ниже — 25-й и 75-й процентили, поэтому конус расширяется по мере того, как согласованность между предыдущими значениями ослабевает. Распределение на каждом шаге выражается в единицах ATR и умножается на текущий ATR для вывода на ось реальных цен, что позволяет прецедентам из спокойных и волатильных периодов входить в один и тот же конус. Конус рисуется только в случае бычьего или медвежьего вердикта, поэтому отсутствие конуса само по себе является информацией, а не сбоем в отображении.
Панель прогноза отображает цифры, скрытые конусом:
| Строка | Что это означает |
|---|---|
| Слово | SAX-кодировка текущего окна, запрос, по которому фактически выполнялся поиск. |
| аналоги | Количество найденных прецедентов и их среднее расстояние совпадения. Большое количество при плохом среднем расстоянии — это более слабый случай, чем небольшое количество близких совпадений. |
| fwd H | Медиана движения вперед по горизонту, в кратных ATR и в процентах. |
| band | Диапазон от 25-го до 75-го процентиля этих движений вперёд: ширина конуса, выраженная числом. |
| up rate | Доля прецедентов, которые вообще выросли в цене, и диапазон. Медиана, склоняющаяся вверх при 51% доле роста, — это просто удача одного прецедента, а не тенденция. |
| ВЕРДИКТ | Бычий, медвежий, отсутствие преимущества, слишком мало аналогов или отсутствие данных. |
Вердикт даётся намеренно с трудом. Сначала определяется «слишком мало аналогов», затем рассматривается случай «подбрасывания монеты», и только выборка, проходящая оба диапазона уверенности, получает направление: медианное движение должно превышать порог преимущества в терминах ATR, а доля роста должна выходить за пределы диапазона около 0,5. Невыполнение любого из этих условий означает отсутствие преимущества, независимо от того, что показывает медиана.

Прогноз по паре EURUSD, M30: конус, проецирующий медиану аналогов и межквартильный диапазон, с панелью вердикта, отображающей образец позади него.
Ключевые особенности
Честность по самой сути
- Отсутствие заглядывания в будущее. Окно результатов сопоставления должно строго заканчиваться до начала окна запроса, чтобы ничто из собственного будущего запроса не могло просочиться в его набор прецедентов. Это единственный защитный механизм, отделяющий поиск аналогов от подгонки кривой.
- Результаты, нормализованные по ATR. Перемещения вперед выражаются в кратных величинах ATR, действовавшего на момент события, поэтому прецедент из спокойного периода и прецедент из периода резких колебаний находятся на сопоставимой основе. Это компенсация за то, что было утрачено при z-нормализации.
- Вердикт, который может быть отрицательным. Инструмент воздерживается от прогноза и подавляет конус всякий раз, когда выборка слишком мала или склонность не является решающей по обоим показателям.
Настоящая библиотека SAX, а не её приближение
- Z-нормализация, PAA, включая случай, когда длина окна не делится на длинну слова без остатка, гауссовы точки разрыва по пробиту Аклама, кодирование и функция MINDIST, которая доказательно задаёт нижнюю границу истинного расстояния. Ничего из этого ранее на платформе не существовало.
- Поддерживаются алфавиты размером от 2 до 10 символов; точки разрыва вычисляются однократно при настройке и кэшируются.
- Плоское окно отображается как плоское, а не кодируется незаметно: при стандартном отклонении, близком к нулю, нормализовать нечего, а выдумывание формы привело бы к появлению бессмысленного слова.
- Евклидова метрика, рассчитанная методом перебора, поставляется вместе с производственным конвейером в качестве параметра, поэтому результаты прореживания можно проверить по ответу, который они должны воспроизводить, а не просто доверять им.
Практическое применение на реальном графике
- Поиск запускается один раз на каждый закрытый бар, а не на каждый тик, и считывает историю, начиная с 1-го бара, так что формирующийся бар никогда не попадает ни в запрос, ни в набор прецедентов.
- Размер панели определяется по фактически отображаемому тексту, поэтому ни при каком размере шрифта или содержании ничего не обрезается; также предусмотрены светлая и тёмная темы, чтобы текст был читаем на любом фоне графика.
- Каждый объект графика имеет общий префикс и удаляется при вызове deinit, не оставляя «сирот».
Рекомендуемая настройка
| Параметр | Рекомендуемое значение | Примечания |
|---|---|---|
| Символ | Любой ликвидный инструмент | Сопоставление форм по своей сути не зависит от масштаба. При разработке и на скриншоте использовалась пара EURUSD. |
| Таймфрейм | От M30 до H4 | Требуется достаточный объем исторических данных, чтобы набор прецедентов был значимым. Окно, горизонт и сканирование истории измеряются в барах, поэтому они переносятся между таймфреймами без изменений. |
| История | 6000 баров | Глубина сканирования по умолчанию. Чем больше данных, тем больше прецедентов и тем более устойчивое распределение, при этом время поиска увеличивается линейно. |
| Тема панели | Подбор под график | По умолчанию — тёмная. Переключитесь на светлую тему на белом графике, иначе текст не будет читаться. |
Структура файлов
Один индикатор и два заголовка. Заголовки включаются в виде <SAX\...>, поэтому они должны находиться в отдельной подпапке SAX.
| Файл | Роль | Описание |
|---|---|---|
| Include\SAX\SAXTransform.mqh | Преобразование | Z-нормализация, PAA, гауссовы точки разрыва, кодирование по словам и MINDIST с нижней границей. Можно использовать с любыми рядами данных, без привязки к графикам или торговле. |
| Include\SAX\SAXAnalogs.mqh | Поиск | Двухэтапное сопоставление «сначала отсеивание, затем ранжирование», защита от прогнозирования вперед, результаты, нормализованные по ATR, распределение по шагам, лежащее в основе конуса, и классификация вердиктов. |
| Indicators\SAX\SAXAnalog.mq5 | Индикатор | Запускает поиск по каждому новому бару и рисует конус прогноза и панель вердиктов. Ничего не записывает в буферы; всё представляет собой объекты графика. |
Входные параметры
| Вход | По умолчанию | Что контролирует |
|---|---|---|
| InpWinLen | 48 баров | Длина окна запроса: какая часть недавней формы должна совпадать, чтобы такт считался прецедентом. |
| InpHorizon | 12 баров | Горизонт прогнозирования: насколько далеко в известное будущее каждого прецедента измеряется результат и насколько далеко простирается конус. |
| InpWordLen, InpAlphabet | 8, 4 | Разрешение SAX. Более длинные слова и более обширные алфавиты обеспечивают более точную дискриминацию и, следовательно, реже находят совпадения; более короткие и грубые собирают больше прецедентов с менее чётким сходством. |
| InpMaxAnalogs, InpMinAnalogs | 50, 10 | Количество наиболее близких прецедентов, которые следует сохранить, и минимальное количество образцов, ниже которого вердикт принудительно устанавливается как «слишком мало», независимо от того, что говорят эти немногие. |
| InpEdgeATR | 0,25 | Порог уверенности: медиана движения вперед должна превышать четверть ATR, чтобы вообще считаться тенденцией. |
| InpMetric | MINDIST | Двухэтапный конвейер «отсев-ранжирование», который используется в производственной среде. Переключитесь на Euclid для перебора всех кандидатов методом «грубой силы»: тот же рейтинг, без отсева, полезно в качестве базового показателя правильности и скорости. |
| InpATRPeriod | 14 | ATR, используемый для нормализации результатов и масштабирования конуса по оси цены. |
| InpMaxHistory | 6000 баров | На какой период назад проводить поиск прецедентов. |
| Цвета, угол, тема | Синий / красный / серый, вверху слева, темная | Цвета выделения конуса и панели в зависимости от вердикта, цвета линии полосы, угла привязки панели, а также светлой или тёмной темы. |
Основа исследования
Реализация следует оригинальной работе по SAX, выполненной Джессикой Лин, Имоном Киохом и их коллегами, на странице которых собраны соответствующие статьи.
SAX — это не «хрустальный шар», предсказывающий цены, и данный инструмент чаще всего будет сообщать об отсутствии явного преимущества, чем о чем-либо другом. Его ценность заключается в редких, хорошо обоснованных случаях, когда множество подлинных прецедентов указывает в одном и том же направлении, а также в строгости инструмента, который отказывается притворяться иначе. Эта же библиотека открывает возможности для дальнейших исследований: использование слов SAX в качестве категориальных признаков для модели машинного обучения, обнаружение мотивов и несоответствий для выявления аномалий или построение марковской модели переходов на основе словарного запаса.
В сопутствующей статье выводится преобразование и нижняя граница, подробно описывается процесс поиска и его условия, а также демонстрируется успешное прохождение тестового набора: «Символическая агрегатная аппроксимация (SAX) в MQL5: поиск исторических аналогов и прогнозирование».
Перевод с английского произведен MetaQuotes Ltd.
Оригинальная публикация: https://www.mql5.com/en/code/75543
Trade Journal and Performance Analytics Dashboard
Легкая панель инструментов, встроенная в график, которая анализирует историю ваших закрытых сделок и отображает процент выигрышей, коэффициент прибыльности, серии и кривую капитала — никаких настроек стратегии, только ваши собственные данные, обновляемые автоматически.
Broker Profiler
Prints the symbol properties that make the same EA behave differently on another broker: trading hours, contract size, tick value, spread statistics, swap cost and real session coverage. Read-only, does not trade.
YURAZ_RSAXEL Скрипт рисует уровни Рудолфа Акселя
Скрипт рисует уровни Рудолфа Акселя
YURAZ_MCCH
Индикатор рассчитывает % роста или падения относительно CLOSE, написан с применением ООП, и легко интегрируется в любой советник или иной индикатор.