Блог им. 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 свечей? Каковы были средние цели, просадки, вероятности движения?

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

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

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

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

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

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



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

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

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

 

 

 

 

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

А ты через топовые ИИ прогонял уже эти концепции? Чего говорят?
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

я кстати попробовал паттерны образуемые мувингами, а так же паттернами образуемые ценовыми уровнями + объёмами

 

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

avatar

Читайте на SMART-LAB:
Фото
Газета «Коммерсант» выпустила тематическое приложение о страховом рынке
Много интересных материалов для тех, кто работает в отрасли и тех, кто так или иначе с ней связан. Полагаем, публикации могут быть интересны и...
Фото
🥳 В десяточку! Два выпуска на сумму более 10 млрд рублей
ГК «А101» завершила сбор книги заявок на два выпуска облигаций общим объемом 10,5 млрд рублей. Начало торгов состоится 26 декабря....
Выгодны ли кредит под залог криптовалюты
Зампредправления Сбера Анатолий Попов заявил, что со временем банк может предложить кредиты под залог криптовалют. Подробности о том, для какой...
Фото
Какая доходность среди облигаций с наивысшим рейтингом надежности и сроком погашения от 3 лет?

теги блога Kuzma Shevelev

....все тэги



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