Kuzma Shevelev
Kuzma Shevelev личный блог
13 сентября 2025, 18:39

От зрения к мышлению: как создать алгоритм, который "понимает" рынок (Часть 2 — от кирпичиков к стенам)

Введение: От алфавита к словам

В первой части мы создали для нашего алгоритма «алфавит» — систему из 153 уникальных состояний, которая ёмко и точно описывает каждый отдельный ценовой бар. Мы научили его «видеть» и понимать рыночную ситуацию на фундаментальном уровне.

Но один кирпичик — еще не стена. Одна буква — еще не слово. Сегодня мы движемся дальше: наша задача — научить алгоритм анализировать составные паттерны, последовательности этих «кирпичиков», и находить в них статистически значимые аномалии, которые могут указывать на высоковероятные сценарии развития событий.


Часть 1: Главный вызов — проклятие большой размерности

Самая большая сложность, с которой мы сталкиваемся на этом пути, — это экспоненциальный рост количества возможных комбинаций. Это классическая проблема анализа данных, известная как «проклятие размерности».

Если одиночный бар может находиться в одном из 153 состояний, то для паттерна, состоящего всего из 5 баров, теоретическое число возможных комбинаций составит 153⁵ — это астрономическая величина, превышающая 8 миллиардов. Собрать репрезентативную статистику по каждому из таких паттернов на исторических данных попросту невозможно. Подавляющее большинство этих комбинаций никогда не встречались в истории и являются «мёртвыми» вариантами.

Реальное ограничение и практический подход

Наша цель — не описать все теоретически возможные паттерны, а выделить те, которые реально существуют и несут статистическую ценность. Ориентируясь на данные MetaTrader 5 (история EURUSD с 1971 года, что составляет примерно 25 миллионов баров M1), мы можем позволить себе оперировать примерно 1-2 миллионами уникальных комплексных паттернов. Это наш «бюджет» сложности.

Задача, следовательно, формулируется так: нам нужно разработать метрики для описания составных паттернов таким образом, чтобы общее количество их возможных вариаций не превышало этот практический предел. Мы должны быть умными в нашем группировании и классификации, объединяя похожие конфигурации в осмысленные группы. Для этого мы сознательно пойдём на разумное сокращение менее релевантной информации.


Часть 2: Три принципа сжатия информации

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

Принцип 1: Отказ от случайного шума в пользу сути

Мы сознательно отказываемся от учёта точных цен открытия и закрытия для исторических баров. Если задуматься, эти значения во многом случайны: закройся бар на минуту раньше или позже — и мы получим другую картину. Гораздо важнее для нас положение текущей цены относительно структуры уже сформированных баров.

  • Для исторических баров мы сохраняем только информацию об их размере, типе (бычий/медвежий) и взаимном расположении (например, поглощение, внутренний бар). Это их устойчивая, неслучайная характеристика.

  • Для текущего, формирующегося бара его текущее положение (например, у вершины или у основания) — это крайне важный сигнал. Это уже не шум, а отражение реального баланса сил здесь и сейчас.

Так мы отделяем случайное от закономерного, фокусируясь на том, что действительно имеет значение.

 

От зрения к мышлению: как создать алгоритм, который "понимает" рынок (Часть 2 — от кирпичиков к стенам)

Принцип 2: Иерархическая точность — чем ближе, тем важнее

Наш алгоритм должен быть подобен трейдеру: он чутко реагирует на последние события, в то время как более давние служат лишь общим фоном. Поэтому мы применяем гибкую точность описания для паттернов из 5 последовательных баров.

Мы разбиваем анализ на четыре отношения между соседними барами:

  • Бар 5 и Бар 4 (фон): Классификация из 4 паттернов. Грубая оценка: был ли рост, падение или консолидация.

  • Бар 4 и Бар 3 (контекст): Классификация из 30 паттернов. Добавляется больше деталей о силе и типах движения.

  • Бар 3 и Бар 2 (предыстория): Классификация из 52 паттернов. Детализация увеличивается, мы почти в настоящем.

  • Бар 2 и Бар 1 (текущая динамика): Классификация из 80 паттернов. Максимально детальное описание самого актуального взаимодействия.

Такой подход позволяет быть максимально чувствительным к недавним событиям, не перегружая систему избыточной информацией о далёком прошлом.

 

От зрения к мышлению: как создать алгоритм, который "понимает" рынок (Часть 2 — от кирпичиков к стенам)
От зрения к мышлению: как создать алгоритм, который "понимает" рынок (Часть 2 — от кирпичиков к стенам)


 

Принцип 3: Масштабируемый взгляд — учёт волатильности

Паттерн из пяти минутных баров и паттерн из пяти часовых — это совершенно разная история. Чтобы наш анализ был универсальным, мы должны учитывать не только взаимное положение баров, но и их временной масштаб относительно друг друга.

Мы можем анализировать бары не только одинакового таймфрейма, но и комбинировать их: например, последний 15-минутный бар на фоне четырёх предыдущих часовых. Это позволяет анализировать структуру рынка одновременно на нескольких уровнях: последний импульс на младшем таймфрейме может быть ключевым сигналом на фоне консолидации на старшем

 


От зрения к мышлению: как создать алгоритм, который "понимает" рынок (Часть 2 — от кирпичиков к стенам)

Заключение: Строим мост от данных к смыслу

Применяя три ключевых принципа — отсечение шума, иерархическую точность и масштабируемость — мы радикально сократили пространство поиска с астрономических миллиардов до управляемых полутора миллионов статистически значимых паттернов.

Важно подчеркнуть: мы сделали это не вслепую, а руководствуясь логикой трейдинга. Мы не потеряли информацию — мы сконцентрировали её, создав для алгоритма не просто базу данных, а структурированное смысловое пространство. Теперь он может искать не случайные совпадения, а устойчивые причинно-следственные связи.

Что дальше? Практическая проверка гипотезы

Следующий шаг — превратить эти паттерны в рабочий инструмент. Мы запустим специального советника-сборщика в тестере MetaTrader 5. Его задача — пройти по истории и для каждого обнаруженного паттерна собрать исчерпывающую статистику: где оказывалась цена через N свечей? Каковы были средние цели, просадки, вероятности движения?

Этот сбор данных будет проводиться сразу на нескольких таймфреймах, а результаты записываться в файл для последующего анализа.

От распознавания к прогнозу

На основе собранной статистики мы создадим второго советника — уже прогнозирующего. Его задача — в реальном времени, по мере формирования рынка, идентифицировать паттерны и на основе их исторической эффективности строить прогнозы о вероятном движении цены. Для наглядности мы добавим графические объекты, которые позволят визуально оценить качество и точность его «предсказаний».

Есть ли уже «чуйка»?

Главная задача на текущем этапе — не получить идеальную торговую систему, а увидеть первые признаки жизни. Появилась ли у нашего алгоритма хоть какая-то «чуйка»? Пусть она будет хаотичной, шумной и непостоянной — как и настроение живого трейдера. Но если алгоритм начал показывать хотя бы слабые, но статистически весомые признаки неслучайного поведения — это уже огромный успех и зелёный свет для дальнейшей работы.

Давайте вместе оценим, что отпечаталось в электронных мозгах нашего алгоритма.



Итоги и взгляд вперёд

Лично я вижу, что в данных уже появился первый сигнал. Он, конечно, не всегда точен — в этом он такой же, как и любой трейдер. В нём ещё много шума и хаоса, но важно то, что он есть.

Мы попробовали предсказать будущее — что гораздо сложнее простой генерации торгового сигнала. Мы заставили алгоритм давать прогноз, и он начал это делать. Теперь нам предстоит следующий, не менее интересный вызов: как на основе этого прогноза выработать конкретное торговое решение? Как отделить зёрна от плевел и отфильтровать сильные сигналы от слабых? Возможно мы узнаем это в следующей части.

 

 

 

 

18 Комментариев
  • Роман Духанин
    13 сентября 2025, 19:33
    Красава! )) Сейчас вникать времени и энергии нет — но кину в заклады и непременно попробую вникнуть — редко встретишь НАСТОЛЬКО системный подход к вопросу — то что ты начал с алфавита — это бесконечно правильно!! 

    А ты через топовые ИИ прогонял уже эти концепции? Чего говорят?
      • VladMih
        13 сентября 2025, 21:27
        Кузьма Шевелев, от «подгонки» под историю не уйти...
        Чтобы она была не подгонкой, а «подгонкой», нужно максимально избегать абсолютных значений — оперировать пропорциями.
        Пропорции, близкие к Фибо сохраняются на всех рынках,
        без разницы — жесткий флет это или сильный тренд.

        Кстати, хороший ход — изначально отфильтровать участки жесткого флета, это и объём обработки резко уменьшит, и негативное влияние на статистику нормальных участков устранит.
        В идеале сделать то же самое с участками взлетов/обвалов.

        Вообще по законам статистики это и так требуется делать,
        без моих хитроумных мюслей )
  • Роман Духанин
    13 сентября 2025, 19:36
     // на самом деле я вот прямо сегодня думал уже по смежной теме — вертел в голове разные архитектуры того, каким именно образом дать на вход общего ИИ (того же GPT-5 etc.) данные для фундаментального анализа рынка.  
  • Роман Духанин
    13 сентября 2025, 19:39
     // навскидку: а что если рыночные состояния тупо через дихотомии описать? типа: бычий-медвежий, и пр. по-моему это будет более машинопонятно, чем делать «иероглифический» алфавит из произвольных состояний. это просто мысли вслух по ходу
      • Роман Духанин
        13 сентября 2025, 20:35
        Кузьма Шевелев, я имел в виду комбинацию дихотомий. Например: бычий-медвежий — это 2 варианта, добавим объем торгов: большой-маленький — это уже 4 варианта (2 в степени 2) и т.д. — до 2 в степени 10 ))) если 10 дихотомий — 1024 слова в алфавите. Другое дело — правильно подобрать эти дихотомии. Опять-таки — это просто мысли потоком навскидку. Возможно твой вариант — наилучший. 
      • Роман Духанин
        13 сентября 2025, 20:37
        Кузьма Шевелев, скажи, а ты это все делаешь в рамках какого-то проекта? Или это пет-проект — ну, «для души»?
          • Роман Духанин
            13 сентября 2025, 21:44
            Кузьма Шевелев, понимаю конечно и то и это ))

            окок, буду следить за развитием )) 
  • VladMih
    13 сентября 2025, 19:49
    То же самое, но на паттернах, образуемых мувингами -
    это уточнит и места поиска сигналов, и сами сигналы,
    и их силу, т.е. улучшит прогнозирование ближайшего будущего.

    Как вариант, взять за основу готовые проработки графическиъ паттернов, видел такие индикаторы.

    При любом раскладе главной задачей является поиск МЕСТА.
      • VladMih
        13 сентября 2025, 21:54
        Кузьма Шевелев, сами ведь писали, что хаи/лои понятие условное, открытия/закрытия — тем более.
        МА даёт истинное направление выбранного масштаба (периода).
        Да, с опозданием, но истинное и масштабируемое.
        Сорь что повторился, это специально.

        Ваши паттерны в привязке к «истинным» двигам будут надежней.
        Я ведь предложил не замену, а фильтр.
  • svgr
    14 сентября 2025, 14:46
    Как справлялся с 'проклятием большой размерности' я.
    Схема:
    Берёте статистику результатов следующего дня, например, закрытие минус открытие.
    Отсекаете края, рост более некого значения и падение более некого значения, достаточной мощности. Всю середину не рассматриваете.
    Смотрите какие паттерны текущего дня их вызывали чаще всего. У меня штук 30 всего получалось. А не миллионы.
    Далее ждёте появления какого-то из 30 (лучше 2-3 указывающих на экстремальность будущего дня), 'входите'.
    Результаты следующих дней оправдывались. Не по размеру, а по направлению. Грубо говоря, если ожидался большой рост, то в 60% случаев был рост, пусть и не большой.

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн