Блог им. KuzmaShevelev

От зрения к мышлению: как создать алгоритм, который "понимает" рынок (Часть 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 свечей? Каковы были средние цели, просадки, вероятности движения?

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

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

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

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

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

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



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

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

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

 

 

 

 

692 | ★3
17 комментариев
Красава! )) Сейчас вникать времени и энергии нет — но кину в заклады и непременно попробую вникнуть — редко встретишь НАСТОЛЬКО системный подход к вопросу — то что ты начал с алфавита — это бесконечно правильно!! 

А ты через топовые ИИ прогонял уже эти концепции? Чего говорят?
avatar

Роман Духанин, 

 

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

 

Вариант кормить непосредственно нейронки паттернами я не рассматривал, процесс обучение нейронки представляет из себя подбор весовых коэффициентов под историю, тогда как я изначально закладывал обратный процесс, вычисление на основе исторических данных, да и производительность у алгоритмов быстрее

avatar
Кузьма Шевелев, от «подгонки» под историю не уйти...
Чтобы она была не подгонкой, а «подгонкой», нужно максимально избегать абсолютных значений — оперировать пропорциями.
Пропорции, близкие к Фибо сохраняются на всех рынках,
без разницы — жесткий флет это или сильный тренд.

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

Вообще по законам статистики это и так требуется делать,
без моих хитроумных мюслей )
avatar
 // на самом деле я вот прямо сегодня думал уже по смежной теме — вертел в голове разные архитектуры того, каким именно образом дать на вход общего ИИ (того же GPT-5 etc.) данные для фундаментального анализа рынка.  
avatar
 // навскидку: а что если рыночные состояния тупо через дихотомии описать? типа: бычий-медвежий, и пр. по-моему это будет более машинопонятно, чем делать «иероглифический» алфавит из произвольных состояний. это просто мысли вслух по ходу
avatar

Роман Духанин, 

Я думал об этом, но если делать в лоб, просто бычьи и медвежьи бары то тогда теряется какая либо оценка размеров, например после супер пупер роста уже поздно вставать в лонг, движение уже отыграло, но оно бы воспринималось так же как чисто формальный рост в пару пипсов

 

Рассматривал так же альтернативный вариант — набор последовательных движений типа вырос на 0.5%/ упал на 0.5%, тогда паттерн представлял бы из себя набор растущий движений и падающих, но тогда паттерн содержащий из себя например 20 последовательных движений располагался бы в неограниченном по времени пространстве, это вызывает проблемы с анализом таких паттернов, и на оборот паттерны имеющие фиксированный размер по времени могут отражать неограниченные по размеру ценовые движения, их проще анализировать, и не требуют установки какой то базовой длинны движения

avatar
Кузьма Шевелев, я имел в виду комбинацию дихотомий. Например: бычий-медвежий — это 2 варианта, добавим объем торгов: большой-маленький — это уже 4 варианта (2 в степени 2) и т.д. — до 2 в степени 10 ))) если 10 дихотомий — 1024 слова в алфавите. Другое дело — правильно подобрать эти дихотомии. Опять-таки — это просто мысли потоком навскидку. Возможно твой вариант — наилучший. 
avatar

Роман Духанин,

Дело в том, что есть взаимоисключающие случаи, например, бар может на 50% выступать сверху, и при этом он не может выступать на 50% снизу, это позволяет нам произвести объединение в один набор значений, с уменьшением общего числа значений

В том виде как сейчас определяются размер и положение получается максимально компактно

например классификация из 80 паттернов, с точностью до 20% определяет позицию и размер бара, это в непрямом виде отражает бычесть или меджвежесть и силу этого движения с неплохой точностью

а это меньше чем 2 в 8 степени, не уверен что можно подобрать 8 дихотомий так что бы выдать большую точность

avatar
Кузьма Шевелев, скажи, а ты это все делаешь в рамках какого-то проекта? Или это пет-проект — ну, «для души»?
avatar

Роман Духанин, 

Ну если бы это был коммерческий проект, то мне бы оборвали уши за публикацию разработок))


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

 

Но разработка это процесс трудоемкий, что бы продвинутся еще на шажок ближе к результату, часто приходится сильно переделать предыдущие наработки

 

 

avatar
Кузьма Шевелев, понимаю конечно и то и это ))

окок, буду следить за развитием )) 
avatar
То же самое, но на паттернах, образуемых мувингами -
это уточнит и места поиска сигналов, и сами сигналы,
и их силу, т.е. улучшит прогнозирование ближайшего будущего.

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

При любом раскладе главной задачей является поиск МЕСТА.
avatar
VladMih, 

я рассматривал этот вариант, изначально у меня были опасения что мувинги будут полностью игнорировать хаи и лои + сбоить при сильной волатильности туда сюда внутри дня


хотя идея с мувингами конечно сильная, я постараюсь позже рассмотреть её, вполне возможно, что она окажется лучше чем сырые паттерны, 
avatar
Кузьма Шевелев, сами ведь писали, что хаи/лои понятие условное, открытия/закрытия — тем более.
МА даёт истинное направление выбранного масштаба (периода).
Да, с опозданием, но истинное и масштабируемое.
Сорь что повторился, это специально.

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

svgr, 

 

Думаю вам нужно занятся разработкой торгового робота

avatar
следующей части не будет, я нашел свой стиль торговли и он оказался не поддающимся алгоритмизации до уровня торгового робота
avatar

Читайте на SMART-LAB:
Фото
DXY у ключевой поддержки: шорт-сквиз или новый этап распродажи?
Индекс доллара DXY плавно дрейфует в область месячного минимума в районе 98,50. Однако ослабление доллара на FX неравномерно: EURUSD стоит около...
Фото
Коммерческий директор «Озон Фармацевтика» о доверии к отечественным производителям
🔍 В интервью для Российской ассоциации аптечных сетей коммерческий директор «Озон Фармацевтика» Ольга Ларина поделилась мыслями о...
Фото
Объем коммерческих медицинских услуг может достигнуть 4,27 трлн руб. к 2030 году
Оборот рынка коммерческой медицины в 2025 году составит 2,32 трлн руб., прибавив 15,2% год к году, подсчитали в аудиторско-консалтинговой компании...

теги блога Kuzma Shevelev

....все тэги



UPDONW
Новый дизайн