🤖 ИИ внутри торгового терминала: что у него можно попросить.
Про нейросети в трейдинге спорят об одном: предскажет цену или нет. Ответ давно известен — нет. Но за этим спором потерялось применение куда более скучное и куда более рабочее. ИИ не как аналитик, а как руки внутри терминала.
Недавно собирал такую связку на #osengine — открытой платформе для торговых роботов. Подключил своего ИИ агента через mcp. Ниже то, что у неё реально можно попросить, обычными словами.
🔧 «Перенеси эту стратегию в робота»
Самое ценное. Робот в OsEngine — обычный файл кода, который платформа собирает на лету: отдельная среда разработки не нужна, положил файл и перезапустил.
Шесть моих стратегий на $SiU6 $CRU6 $MMU6 $SBER жили скриптами на графике и исполнялись руками. Пяти нужен робот — шестая, вечный портфель, ребалансируется четыре раза в год. Перенос занял один день: четыре файла покрыли эти пять, две канальные системы отличались одним числом и стали одним классом. Все собрались с первого раза.
Оговорка, без которой пост будет враньём: стратегии не придуманы моделью. Они мои, отобранные заранее. ИИ сделал перевод с языка на язык — работу аккуратную, объёмную и совершенно механическую. Ровно на такой он и силён.
🎛 «Поставь всем режим „только закрытие“, я уезжаю»
Дальше то, ради чего иначе открываешь десяток окон. Мост к терминалу — около полутора сотен команд.
Сменить инструмент и таймфрейм. Переключить робота между боем и эмуляцией. Поменять порог входа. Снять конфиг и сказать, чем он отличается от вчерашнего. Открыть или закрыть позицию по рынку. Навесить сопровождение: трейлинг, перевод в безубыток, сетку заявок.
Всё словами, без кликов и без шанса промахнуться мимо галочки.
🧪 «Прогони канал от 40 до 80, половину истории оставь на проверку»
Тестер и оптимизатор доступны теми же командами: период, депозит, комиссия, проскальзывание, число потоков, разделение истории на подбор и проверку, фильтры по результату, выгрузка отчёта.
Честно: этот кусок у меня пока не обкатан — история в свежей копии платформы пустая, её ещё качать. Но качается она тоже командой: создать набор, добавить бумаги, включить загрузку.
📊 «Сверь, что позиции набраны в нужной доле капитала»
Журнал робота отдаёт эквити, просадку, статистику, открытые и закрытые сделки. Рядом — счета брокера: капитал, позиции, средняя цена. Отсюда арифметика, которую лень делать руками.
Пример ловушки ценой в десять раз. Стратегия на графике считает объём так, будто пункт цены стоит рубль, а у мини-индекса он стоит десять. Тестер честно рисует 178 контрактов, на счёте их должно быть около двенадцати. Лечится тем, что стоимость пункта вычисляют из открытой позиции, а не вспоминают: нереализованный результат делят на сдвиг цены, умноженный на число контрактов.
🔍 «Почему вчера не было входа?»
Сегодня три робота из пяти не сделали ни одной сделки. Раньше на такой вопрос уходил вечер — разбор занял минуты и дал три разных подробных ответа.
⚠️ Чем за это платишь
Модель ошибается уверенно, поэтому проверять приходится всё. Новичкам нужно быть особенно осторожно. Фраза "сделай мне прибыльного торгового робота" может привести к тому, что робота со создаст, только вот логика его будет неисполнимой. ИИ может заниматься откровенной подгонкой параметров (если его не научить обратному). Да что говорить, даже иногда очевидные вещи может выдать из своих догадок и ошибиться. Недавно ИИ признал фьючерс $NGU6 неликвидным, хотя даже не видел его стакан.
И кликать в интерфейсе osengine модель не умеет: подключение брокера каждый день делается руками.
💡 В сухом остатке
ИИ здесь не торгует и не решает. Он пишет обвязку, переключает режимы, считает доли и находит строку в коде, из-за которой робот промолчал. Экономит не мышление, а часы механики вокруг него.
Похоже волна роста в паре доллар/рубль от 9 июля завершилась и назрела коррекция с потенциалом снижения до 83 рублей.
#долларрубль #рубль $SiU6 #базарразбор
📅 Как я объявил одну систему втрое рискованнее другой. Обе были одинаковые.
Сравнивал две свои канальные системы: одну на долларе, другую на юане. Код один и тот же, отличается только инструмент и длина канала.
Получил: у юаня максимальная просадка 18,7%, у доллара 6,2%. Показатель жирнохвостости — 0,145 против 0,315.
Вывод напрашивался сам: юань втрое рискованнее по просадке, зато у доллара тяжелее хвост. Записал.
Оба утверждения оказались мусором.
🕳 Где дыра
Долларовая система торгует с 2013 года, юаневая — с 2022-го. Тринадцать лет против четырёх. Я сравнивал их на разных окнах и приписал инструментам то, что было свойством нарезки.
Механизм простой и обидный. Движок восстанавливает кривую капитала из списка сделок, начиная с исходного депозита. К 2022 году долларовая система уже выросла в десятки раз. Один и тот же убыток в рублях весит на выросшем счёте копейки в процентах, а на молодом — заметные проценты.
То есть я мерил не риск систем. Я мерил, кто раньше начал.
✂️ Что вышло после обрезки
Обрезал долларовую по границам юаневого окна — с 29 апреля 2022 по 21 июля 2026, 1016 позиций. Пересчитал всё заново:
Просадка: 19,31% против 18,70% у юаня
Доля прибыльных: 44% против 44%
Жирнохвостость: 0,172 против 0,145
Концентрация топ-20 сделок: 21% против 21%
Обе системы получили одинаковый вердикт. «Втрое рискованнее» превратилось в разницу в полпроцента. «Хвост жирнее» поменял направление на противоположное.
Практический итог оказался важным: перевод юаня на эту систему не заводит меня в незнакомую зону риска. Это та же система с тем же профилем, что четыре года работает на долларе. Но узнал я это только после того, как выровнял окна.
⚠️ Вторая версия той же ошибки
Есть более коварная форма. Когда считаешь связь между системами, хочется взять «последние N доходностей каждой» — так проще, длины совпадают.
Так делать нельзя. Если истории разной длины, последние N дней одной системы соответствуют другим календарным датам, чем последние N дней другой. Ряды разъезжаются по времени, и связь между ними занижается — иногда до нуля.
На этом я тоже обжёгся, отдельно от первого случая. Теперь во всех расчётах ряды выравниваются строго по датам: берётся пересечение календарей, недостающие дни заполняются нулём. Никаких «последних N».
🧮 Как это выглядит в правиле
Я записал себе так: любое сравнение — только на одинаково нарезанных окнах. Общее окно определяется самой короткой историей, и точка.
Побочный эффект неприятный, но с ним приходится жить. Когда я собирал портфель из четырёх своих фьючерсных систем, общее окно схлопнулось до 2022 года — по самой молодой ноге. Одиннадцать лет истории по индексной системе в расчёт не вошли: сравнивать её с юаневой можно только там, где они обе существуют.
Это цена честности. Альтернатива — красивые числа ни о чём.
💡 Зачем об этом вообще помнить
Ошибка такого рода не падает с ошибкой. Она выдаёт правдоподобную таблицу, где всё сходится и всё выглядит осмысленно. Именно поэтому её легко принять за находку — я и принял, и записал в выводы.
Правило простое: прежде чем сравнивать два числа, спросите, на каких данных получено каждое. Если окна разные — вы сравниваете не системы, а даты их запуска.
⚖️ Спор о метриках, который можно не начинать.
Две версии одной стратегии. У первой профит-фактор выше, у второй просадка меньше. Какая лучше?
Обычно тут начинается выбор оружия. Кто-то верит в Шарпа, кто-то в фактор восстановления, кто-то в CVaR. И спор идёт не о стратегиях, а о том, чьей линейкой мерить. Причём линейку почти всегда выбирают после того, как увидели результаты.
Есть способ ответить раньше, чем метрика выбрана.
📐 Предположение, которое всё меняет
Формулировка Горчакова из заметки 2004 года звучит так. Возьмём выборочные функции распределения доходностей двух систем. Если у первой она поточечно не выше, чем у второй, то у первой «доходность» больше, а риск меньше - при ЛЮБЫХ разумных функциях доходности и риска.
Это называется стохастическим доминированием первого порядка.
На человеческом: выстройте доходности обеих систем по возрастанию и сравните по порядковым местам. Худший день первой не хуже худшего дня второй. Второй по плохости - не хуже второго. И так далее до самого лучшего.
Если это выполняется, спорить не о чем. Не «по моей метрике лучше», а лучше по всем сразу - и по тем, которые вы ещё не придумали. Любая функция, которая считает больше лучше меньшего, поставит первую систему выше.
Заметьте, насколько это сильнее обычного сравнения. «PF выше» - утверждение об одном числе. Доминирование - утверждение обо всём распределении.
🔬 Что вышло на моих данных
Я вставил эту проверку в свой риск-движок и первым делом прогнал через неё одиннадцать вариантов канальной системы на долларе. Все на одной истории - 2366 общих торговых дней, тринадцать лет. Профит-факторы от 1,569 до 1,709.
Результат: ни один вариант не доминирует ни один другой. Ни одной пары.
Я посмотрел, насколько они вообще близки к доминированию. Для каждой пары считаю долю точек, где порядок нарушается: ноль означает чистое доминирование, половина - полную неразличимость. Медиана по всем парам вышла 48,9%.
Сорок девять процентов. Распределения пересекаются ровно посередине.
🤔 Что это значит на самом деле
Разница в профит-факторе между вариантами есть - от 1,57 до 1,71, почти девять процентов. А разницы в распределении нет.
Значит, выбирая один вариант из этого набора, я выбираю не лучший. Я выбираю тот, который выиграл по конкретной метрике, - а метрика в такой ситуации не обнаруживает факт, а совершает выбор за меня.
Это неприятный вывод, потому что именно так все и настраивают системы: сканируют параметр, берут максимум профит-фактора. Формально всё честно. Но данные не подтверждают, что найденная точка чем-то лучше соседних.
Тот же результат я получил и на четырёх вариантах канала на юане, включая свою боевую. Ни одного доминирования, нарушения 45-58%.
🧹 Побочная польза
Строгое доминирование на реальных данных почти никогда не срабатывает. Это не недостаток метода - это его сообщение: кандидаты действительно несравнимы.
Зато у фильтра нашлось неожиданное применение. Две пары файлов дали ноль нарушений в обе стороны - то есть распределения совпали точно. Это оказались дубликаты выгрузок: одинаковое число сделок, одинаковый профит-фактор. Я бы их не заметил, а фильтр показал сразу.
💡 Как я это использую
Не как селектор - он почти всегда молчит. Как дешёвый предохранитель перед сравнением метриками.
Если доминирование есть - вопрос закрыт, метрику можно не выбирать. Если его нет - я знаю, что дальше начинается вкусовщина, и отношусь к результату соответственно: не «система А лучше», а «система А выигрывает по такой-то мере, и это выбор, а не факт».
Стоит проверка одну функцию и три секунды счёта. А главное - она не даёт спорить о линейках там, где мерить нечего.