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

Мои результаты, о них ниже
Инструмент эксперимента — модель distilbert‑base‑uncased с Hugging Face и это облегчённая, быстрая версия BERT для понимания языка. Мне показалось это практичным выбором для прототипа — позволяет быстро проверять разные способы текстовой разметки без гигантских ресурсов. Цель была чёткая: по текстовому описанию недавней истории торгов предсказать рост цены на следующий день.
Но это исследование моя попытка представления рыночных данных как языка, а не попытка сразу создать алгоритм для автотрейдинга. Ещё важно: это мой личный эксперимент, проведённый одним человеком и выполненный однократно. Результаты дали интересные наблюдения.
Расскажу, как происходила разметка графиков в текст, какие шаблоны сработали лучше и какие метрики использовались. Также отмечу ограничения подхода и идеи для повторных экспериментов.
А ещё весь код уже на GitHub.
Для трейдеров и аналитиков: суть и результатыДля модели котировки это просто цифры без контекста. Она не знает, что вверх — хорошо, а вниз тревожный сигнал. Я переводил ряды котировок в текст. Каждые 10 дней торгов превращались в короткое описание, как если бы трейдер рассказывал что-то своему коллеге.
В основе лежали три признака:
Краткосрочный тренд (3 дня) — рост, падение или боковик;
Среднесрочный контекст (7 дней) — подтверждает ли он текущее движение;
Моментум и объём — поддерживают ли рост деньги: идёт ли рост на растущих объёмах или затухает.
Если цена три дня растёт, объёмы увеличиваются, и цена близка к сопротивлению, строка выглядела так:
price rising strongly, volume increasing, near resistance.
Эти описания читала модель DistilBERT. Модель не видела графиков, только текст — и должна был сказать, приведёт ли ситуация к росту или падению. Так модель «училась понимать» то, что трейдеры выражают словами.

Как измерить, понимает ли она рынок
Простая точность (accuracy) ничего не говорит: можно всё время предсказывать падение и быть правым на 60%.
Поэтому я использовал AUC (Area Under Curve) — показывает, насколько хорошо модель отличает ситуации, после которых цена действительно росла, от тех, после которых она падала:
AUC = 1.0: идеальная модель, которая никогда не ошибается.
AUC = 0.5: бесполезная модель, ее предсказания равносильны подбрасыванию монетки.
AUC > 0.5: модель работает лучше, чем случайное угадывание. Чем ближе к 1.0, тем лучше.
AUC < 0.5: модель работает хуже случайного угадывания.
Эксперимент на всех акциях Московской биржи

Я протестировал более 200 акций с Московской биржи. Средний результат по всем бумагам — AUC ≈ 0.53, что немного лучше случайного угадывания.
Лучшие случаи:
AFLT — 0.72
RTSB — 0.70
PIKK — 0.70
CHGZ — 0.67
AFKS — 0.66
Худшие:
PLZL — 0.33
VJGZP — 0.33
CHMF — 0.36
ETLN — 0.38
LSNG — 0.39
Разброс большой: одни бумаги ведут себя предсказуемо, другие — как шум.
Что это значит для трейдера
С практической стороны — торговать по такой схеме нельзя. Даже при AUC 0.6 предсказательная сила слишком слаба, чтобы покрыть комиссии. Однако сам факт, что модель хоть немного «чувствует» структуру графика без чисел и свечей, уже интересен.
Эксперимент показал: график можно описать словами, и языковая модель способна уловить логику движения — пусть пока не точно.
Нагрузка на GPUПроблемы и их решение
Изначально паттерны кодировались вымышленными словами («Кибас», «Гапот»), чтобы модель не опиралась на предобученные знания. Но это превращало BERT в обычный классификатор на случайных токенах. Решением стал переход на естественные фразы price rising strongly, near resistance. Модель теперь задействует понимание финансовой терминологии.
Моя RTX 5060 Ti (архитектура Blackwell, SM_120) оказалась слишком новой для стабильных PyTorch. Ошибка «no kernel image available» блокировала вычисления. Решением стал Docker‑образ с CUDA 12.8 и nightly‑сборкой PyTorch.

Детали конфигурации и обучения
Конфигурация признаков: short_window=3, medium_window=7, long_window=14. Валидация: train_size=252, test_size=21, step_size=21.
Гиперпараметры: learning_rate=2e-5, batch_size=32, epochs=2, weight_decay=0.01, fp16=True. EarlyStoppingCallback(patience=2) останавливает обучение при стагнации лосса.
Оценка — усреднение метрик по 3 фолдам на тикер. Для каждого фолда: accuracy, precision, recall, F1, AUC‑ROC. Финальный результат — среднее и стандартное отклонение AUC.
Эксперимент подтвердил: идея семантического кодирования рыночных данных — рабочая и перспективная, но в текущей реализации она не дала статистически значимого результата. Модель действительно различала рыночные ситуации, но слабо — AUC в среднем по полной выборке составил около 0.53. Это слишком мало, чтобы использовать прогнозы в торговле, но достаточно, чтобы признать: языковая модель способна уловить элементарные закономерности, если данные поданы в привычной ей форме — в виде текста.
Главная ценность проекта не в точности предсказаний, а в том, что удалось пройти весь путь от сырого CSV с котировками до работающего ML‑конвейера, полностью воспроизводимого в Docker. Каждый этап — от векторизации признаков до скользящей валидации — отлажен и готов к повторным экспериментам. Это не «ещё одна нейросетка для трейдинга», а инженерный прототип, на котором можно проверять новые идеи: другие схемы описания графиков, языковые модели большего масштаба, мультимодальные подходы.
Фактически проект стал мини‑лабораторией по исследованию того, как LLM «видит» рынок. И если заменить DistilBERT на современные архитектуры вроде LLaMA или Mistral с дообучением на финансовых текстах, потенциал подхода может проявиться гораздо сильнее.
Повторите мой путь: код на GitHub
Я специально оформил всё так, чтобы любой мог запустить эксперимент у себя. Достаточно скачать архив котировок, собрать контейнер и запустить run.sh — среда поднимется автоматически с нужными версиями библиотек и CUDA.
Проект открыт:
👉 github.com/empenoso
Если вы хотите повторить эксперимент, улучшить разметку или попробовать другую модель — все инструменты уже готовы. Мой результат — это не финальный ответ, а отправная точка для следующего шага: сделать так, чтобы языковая модель действительно читала графики, а не просто угадывала направление.
Автор:
Михаил Шардин
🔗 Моя онлайн-визитка
📢 Telegram «Умный Дом Инвестора»
14 октября 2025
📅 25 октября я прилетаю в Москву на Smart-Lab Conf 2025 — главный ежегодный сбор частных инвесторов, трейдеров и всех, кто живёт рынком.
Один день, восемь залов и десятки спикеров — от ветеранов Смартлаба до корпоративных представителей и фондов.
🕛 В 12:00 я сам выступаю в зале №7 («Спекуляции») — расскажу про автоматизацию и новые подходы к работе с финансовыми данными.
Если вам близки темы Python, Excel, API и эксперименты с ML / LLM — буду рад личному знакомству после своего выступления.
Кроме того, я готовлю подробный репортаж о конференции — не просто «понравилось / не понравилось», а именно что полезного можно вынести из каждого доклада.
Что то навеялло ...
А значит для биржи, как инструмента рыночного ценообразования на основе спроса и предложения, уже в самом ближайшем будущем места не будет вообще.
Иное дело, если ИИ применять для прогнозирования развития технологий, где он мог бы рекомендовать, куда вкладывать деньги рядовому инвестору. Но это еще более сложная задача, это уже уровень AGI+ с компьютом потребляющим гигаватты электроэнергии. Боюсь тут авторская NVidia 5060 всего лишь детская погремушка.
Тренд, рост, падение или боковик — эти абстракции существуют и живут лишь в голове человека, в реальности их не существуют. Если трейдер уверен в существовании «тренда» роста или падения, то пусть попробует поставить на это свои деньги))
К сожалению ИИ не достаточно умен, не обладает интеллектом чтобы сразу показать ошибки. Но деликатно, в очередной миллионный раз, доказал что словарь трейдера (бред) очень сильно оторван от реальности))
Очень к сожалению ИИ не может объяснить почему так вышло, или не может с самого начала предупредить юзера о заблуждении.
@Лобачевский
Трендов не существует — существуют лишь переходы между диапазонами.
Надеюсь, схема набор-перегон-раздача не подвергается сомнению.
Мне показалось, или оформление паттернов словами в некотором смысле этап вообще излишний. Можно же было сразу с кодами работать.
И еще одно замечание. Лично я думаю, что так называемый «язык трейдеров», это новояз американских инфоцыган начала 20 века.
Но дарю свою идею из ТА
со скрином. Все просто. Тренды, пробитие оных и подтвердение этого индикатором, например, немного медлительным MACD.
ИИ может упростить твою задачу. Если сложно индикатор можно убрать. Только тренды и пересечение их. Спасибо.
А вот тут и нет — это значит вы пытаетесь рассказать слепому ваше представление о мире. И он уже пытается построить модель основанную на ВАШИХ ФИЛЬТРАХ восприятия мира.
«Модель не видела графиков, только текст — и должна был сказать, приведёт ли ситуация к росту или падению.»
К росту или падению на следующей свече/через день/неделю? Как оценить величину/траекторию движения?
конечно же торговать по этой модели нельзя в силу неверных базовых постулатов модели.
Ps/насколько помню у эскимосов существует более 50 слов обозначающих состояние базового актива — снега. Ваш же словарь для значительно более информационно нагруженной базовой сущности явно не подходит)
1 год (252 дня) на обучение,
1 месяц (21 день) на тест.
С шагом 21 день — модель двигается по ряду, никогда не тестируется на будущем.
1-4-16, 2-8-32, 3-12-48 и тд Фракталы растут в 2 раза за 4 шага времени и цены. 3,7,15 не правильно. Лучше 1-4-16(15мин+1)-64(1 час+4мин ) и тд или 1д- 1неделя -1 месяц .
Важно учить понятию -новая перемена, новый шаг цены, шаг в %. Это рендж график. Важно понятие — перекрытие фракталов (свечей).В нем сила тренда. Для чтения графика по каждой свече надо VSA и ВА Эллиота. Проги ВА Эллиота работают уже давно. EWA 3.0, Ewa 6.0 и другие. Они дают вероятности сценариев будущего. Это сотни вариантов. Мораль — смотрим 16ю минуту!? И 4 минуты после часа!!! После 4х часа смотрим 16 мин? Первый час нового дня… для дураков? Тоже только смотрим.
Я пытался создать алгоритм который бы мог работать с неточными описаниями рыночных паттернов, и в ходе работы разработал классификацию этих самых паттернов для того что бы ими можно было оперировать програмно
К сожалению, у меня самого эта идея пока что зависла, но возможно у вас получилось бы более успешно применить классификацию рыночных паттернов, классификация достаточно удобный способ работы с паттернами
От зрения к мышлению: как создать алгоритм, который «понимает» рынок (Часть 1 — фундамент системы)
От зрения к мышлению: как создать алгоритм, который «понимает» рынок (Часть 2 — от кирпичиков к стенам)
во второй части я упростил ее, что бы комплексный паттер можно было описать меньшим числом значений
Попробуй лучше:
— Спарси форум по акциям.
— Подавая список сообщений за день проси прогнозировать свечу следующего дня.
Думаю, тут будет больше эджа.
Михаил Шардин, тоже почитал и посмотрел код — подход конечно немного оригинальный, вот только в итоге LLM сюда было на мой взгляд как-то приплетать лишним — это как в картинной галерее картины не давать смотреть, а описывать словами. В итоге — имеем довольно малый диапазон дискретизации, а учитывая что вы взяли всего 1700 значений (дневки за 5 лет) — то это очень мало для обучения в таком случае. В итоге вы и получили модели которые нихрена закономерности не нащупали. Для моделей надо скармливать намного больше данных, ваши полчаса обучения — это ничто
По данным критериям маловероятно обучить… они каждый раз будут разные
Прикрутите к этому хитрожёлтый риск- и манименеджмент, и этого будет достаточно, чтобы делать деньги регулярно.
Ни к чему грааль искать. При направленной торговле входя в сделку вы не знаете заранее, каким будет её финрез и какое влияние вы окажете, разместив свою заявку в рынок и т.д. Почти вся линейка околослучайная, на мой взгляд.
Op_Man💰, нас интересует не финрез, а диапазон, куда рынок не пойдет.
Чтобы поставить стоп.
А уж с объемом сделки мы разберемся.
github.com/empenoso/llm-stock-market-predictor/pull/1
Обычно это означает что в силу неких причин в бумаге есть незакрытые неэффективности.
В идеале будущая торговля роботов сделает рынок эффективным и уничтожит тренд, 90% времени будет флет после которого рывок/гэп.
а если всё это бред:
«Представьте опытного трейдера: наверняка он не говорит котировками и не рассказывает про индикаторы — он просто говорит «сильный тренд», «пробой уровня» или «ложный отскок»»
В серьезной научной литературе, так или иначе затрагивающей тему биржевой торговли, такие термины, как правило, не встречаются.
Сильный аргумент.
Больше конкретики и уже можно с этим работать.
P. S. Csv мега грамоздкий ненеудобный формат, переходи на .parquet