Итак, расскажу, на каком этапе я сейчас.
Что было сделано в декабре:
1. Рефакторинг HTTP-запросов к Интрейду.
2. Полная кастомизация торгового графика TV под себя.
3. Написан торговый агент.
Что впереди / что нужно доработать:
1. Внести мелкие правки в торговый график.
2. Реализовать UI с графиком и терминалом для общения и наблюдения за действиями ИИ.
3. Переработать получение данных с бирж в реальном времени: отделить кошельки от запросов цен.
Теперь ключевая идея агента —
Human-in-the-Loop. Трейдер остаётся в системе, но занимается только тем, что человеку действительно подходит: контекстом и интерпретацией рынка. Вся аналитика и принятие решений перекладываются на LLM.
Допустим, я смотрю на график, нахожу интересную зону консолидации и задаю агенту простой контекст. Например: «EURUSD зажат между уровнями 1.0040 и 1.0080». На этом мое участие заканчивается.
Дальше агент начинает работать сам. Компонент
MarketDataCollector идёт в базу данных и собирает сырые факты: последние свечи на разных таймфреймах (5 минут, 15 минут, час, 4 часа, день ), текущую цену, расстояние до указанных уровней, считает Bollinger Bands и другие базовые метрики. Важно — на этом этапе никаких выводов не делается, собираются только факты. Сюда же добавляются сабагенты, которые будут в дальнейшем отвечать за новостной фон, аналитику, сентимент рынков и т.д. Но это будет реализованно в более продвинутых агентах.
Все собранные данные передаются в
Brain — это слой принятия решений, который работает через LLM. Это может быть Claude, GPT-4, локальная модель через Ollama или любой другой поддерживаемый провайдер. Модель анализирует ситуацию и возвращает структурированное решение: направление сделки (call, put, skip или wait), тип входа (сразу или отложенный), цену для pending-ордера, уровень уверенности и текстовое обоснование.
Но это решение не исполняется напрямую. Сначала оно проходит через второй контур —
DecisionEvaluator. Это аналог System 2: критическая проверка. Он смотрит, нет ли логических ошибок, не завышена ли уверенность, не противоречит ли решение текущему контексту.
Evaluator может снизить уверенность или вообще заменить решение на skip. Тут используется другая LLM заточенная на глубокие рассуждения. То есть будут подключены 2 разные модели.
После этого включается
ConfidenceCalibrator.
LLM-модели склонны к самоуверенности, поэтому уверенность корректируется на основе исторических данных. Если модель регулярно говорит «90%», а по факту выигрывает в 60% случаев, это учитывается. Недавние сделки имеют больший вес, старые постепенно забываются.
Далее решение проходит через
RiskManager.
Он проверяет, можно ли вообще сейчас торговать: не превышено ли максимальное количество открытых позиций(что для Интрейда важно), дневной лимит убытков, торговые часы, общее количество сделок за день и т.д.
Если все проверки пройдены,
Executor отправляет HTTP-запрос на Intrade.bar и открывает сделку. Для отложенных входов создаётся pending-ордер, который срабатывает при достижении нужной цены. Все ордера сохраняются в базе, и если агент перезапустится, он восстановит их и продолжит отслеживание.
После закрытия сделки агент уходит в рефлексию.
Brain.reflect анализирует результат, фиксирует, что сработало, что нет, и формирует урок. Эти уроки сохраняются в долгосрочной памяти, чтобы в будущем агент мог вспомнить похожие ситуации и не повторять одни и те же ошибки.
Данные для всего этого приходят в реальном времени из MetaTrader 5, который работает на отдельном vps c Windows. MT5 через
ZeroMQ отправляет каждый тик — примерно 35 тиков в секунду, на основной vps.
Tick_aggregator собирает эти тики в свечи разных таймфреймов и записывает их в PostgreSQL. Задержка от тика до записи — 1–5 мс, то есть данные практически мгновенные.
Память у агента трёхслойная, по аналогии с человеческой.
Сенсорная память — это текущие рыночные данные, живёт только во время обработки запроса.
Рабочая память — последние сделки, которые загружаются при старте и используются для краткосрочного контекста.
Долгосрочная память — паттерны и уроки, хранящиеся в
PostgreSQL с
pgvector, что позволяет искать похожие ситуации по смыслу, а не по ключевым словам. Похожие воспоминания со временем объединяются, чтобы память не разрасталась бесконечно.
Пока думаю над тем что еще сохранять. Есть желание хранить подход свечей к линиям и их взаимодействии с ними.
Теперь самое интересное — как это выглядит в связке со мной.
Идея простая: совместить мой визуальный анализ и аналитический подход агента в единую систему.
Я смотрю на график и вижу, что цена ушла в консолидацию. Провожу поддержку и сопротивление. Агент фиксирует, что по цене 1.080 проведена линия, и по 1.050 тоже — значит, это границы диапазона. Он автоматически строит среднюю линию и переходит в режим ожидания.
Если цена пересекает среднюю линию снизу вверх, агент понимает, что при подходе к сопротивлению имеет смысл рассматривать позицию в put, и дальше включает весь свой анализ: рынок, контекст, память, статистику, тренд и т.д.
При этом агент не смотрит на график и никак с ним напрямую не взаимодействует. У него нет картинки. У него есть только цена, линии, которые я рисую, и индикаторы. Сам график — это интерфейс для меня, а не для него. Заставлять ИИ смотреть на картинку, которую мы сами собрали из нулей и единиц, а потом снова раскладывать её в нули и единицы — неэффективный бред.
Когда агент совершает сделку, его действия отображаются на графике уже для моего анализа. Это своего рода щель, в которую я могу подглядывать за его логикой и при необходимости корректировать направление мышления. То же самое и для него. Мне не нужно писать в терминал диапазоны и цену линий, он все это увидит сам.
Есть ещё один важный кусок, без которого вся эта история была бы неполной —
MCP.
Я сделал MCP-сервер поверх инуструментов агента. По сути, это универсальный шлюз, через который любой AI-ассистент может торговать через них. Claude Code, Gemini, любая LLM, хоть локальная — неважно. Подключаешь сервер один раз, и больше не нужно писать отдельные интеграции под каждую модель.
Что это дает на практике?
MCP дает набор инструментов, которыми можно пользоваться извне, все стандартизировано:
1. Умеет открыть сделку прямо сейчас — передаёшь символ, направление (call или put), размер ставки и время экспирации. Сервер сам прогоняет запрос через риск-менеджмент и исполняет его.
2. Умеет создавать отложенные ордера — задаёшь цену, рынок до неё доходит, сделка открывается автоматически.
3. Можно в любой момент запросить баланс, посмотреть открытые позиции, увидеть список pending-ордеров или отменить любой из них по ID.
Как это выглядит вживую:
Ты сидишь, например, в Claude Code и пишешь: «открой call на EURUSD на 10 долларов». Claude видит доступный инструмент open_trade, вызывает его с нужными параметрами, MCP-сервер принимает запрос, проверяет лимиты, риски и если всё ок — открывает сделку на Intrade.bar.
Или другой сценарий. У тебя есть своя LLM, обученная под конкретную стратегию. Ты просто подключаешь её к MCP-серверу, и она начинает торговать через те же инструменты. Вся инфраструктура — риск-менеджмент, исполнение, логирование, аудит — уже есть, её не нужно дублировать.
Почему это реально круто? а?
Во-первых, чёткое разделение «мозгов» и «рук». MCP-сервер — это руки. Он ничего не решает, он исполняет. А мозгом может быть что угодно: мой Brain, внешний Claude, твоя модель или даже ты сам через CLI.
Во-вторых, это стандартный протокол. MCP — открытая спецификация от Anthropic, и её уже начинают поддерживать разные инструменты. Один раз написал сервер — и он работает везде.
В-третьих, безопасность никуда не девается. Даже если внешняя LLM сойдёт с ума и скажет «открой 100 сделок подряд», RiskManager внутри сервера просто не даст этого сделать. Все ограничения остаются на месте.
Ну и самое вкусное — гибкость.
Можно комбинировать модели. Например, дешёвая модель принимает первое решение, а проверяет ее выбор более дорогой Opus.
Еще несколько важных моментов. 1. Промтирование моделей. Уже написаны специальные промты, которые направляют модели в русло трейдинга. Если в терминале я захочу поговорить о погоде или еще чем-то, то меня пошлют в яму к Кванту. Далее изучу как тренировать модели и сделаю свою собсвеннную, выкинув все ненужное
2. Получение датасета сделок.Я делаю разбор своих сделок, которые соответсвую задачам Мидаса и отпраляю их ему через терминал, тем самым мы можем пообщаться с ним и он может глубже понять как размышлять и на какие аспекты обращать внимание при анализе потенциальной сделки. В промте так же указанно, что он не должен все воспринимать на веру, у него должно быть свое мнение основанное на сделках и логике и только апелируя фактами я могу его убедить в своей точке зрения, а не просто — « Делай как я сказал»
3. Создание тестера как это реализованно у TV. Это нужно будет сделать, для сбора датасета и набора опыта.
Забавная история:Однажды в чатике я допустил небрежность и назвал ИИ-агента «ботом». На что сразу же последовала лекция от Андрея: «Вы не понимаете, это совсем другое, вы все нубасы». Тогда я подумал — у деда совсем крыша поехала. Какая разница, как называть? Суть ведь не меняется.
Но вот за месяц, когда я окунулся в создание своего агента, назвать его «ботом» уже язык не поворачивается — даже пальцы отказываются печатать такое оскорбление
Ну и на последок. Как вылядит кастомный TV: