📈 Фьючерс живёт квартал. А история нужна за годы.
Любой фьючерс кончается: контракт умирает, торговля переезжает в следующий, и так по кругу. Проверять стратегию на одном контракте бессмысленно — три месяца это не история, это эпизод.
Значит, контракты надо склеивать в один длинный ряд. И вот тут начинается интересное: склеить можно двумя способами, и на одном и том же алгоритме они дают разные деньги. Недавно мерил эту разницу в своём тестере на CRU6 — вышла четверть результата.
🧩 Откуда вообще берётся шов
Старый контракт на юань стоит, скажем, 12.80, новый на тот же юань — 12.95. Эти 15 копеек не движение рынка. Это плата за срок: в цене дальнего контракта сидит процентная ставка.
Инструмент один, цены разные, и в день переезда ряд обязан как-то через это перешагнуть.
🩹 Способ первый: пересчитать прошлое
Берём разницу на стыке и сдвигаем на неё всю предыдущую историю. Потом ещё раз, на следующем стыке. И ещё. Выходит идеально гладкая кривая без единого разрыва — ровно то, что показывает большинство терминалов, когда открываешь «юань» за десять лет.
Чем хорош. Индикаторы не ломаются: средняя, ATR, канал считаются сквозь стык и не подпрыгивают на ровном месте. Глазами ряд читается как одна непрерывная бумага — для разметки уровней и сверки с чужим графиком это то, что нужно.
Чем плох. Цены прошлого — не те, по которым тогда торговали. Уровень 12.80 из 2022 года после дюжины пересчётов превращается в 11.40 или в 14.20, смотря сколько было переездов и куда смотрел базис. Всё, что привязано к абсолютной цене, начинает врать: стоп в рублях, гарантийное обеспечение, размер позиции, издержки в шагах цены. На длинной истории такой ряд умеет уползти и в минус — цена, которой не бывает.
А главное: размер сдвига известен только в день экспирации. Ряд, на котором мы проверяем 2022 год, собран из чисел, которых в 2022 году не знал никто. Это заглядывание в будущее. Не грубое, не «подсмотрел завтрашний бар», но самое настоящее: тест опирается на то, что случится позже.
📏 Замер, а не рассуждение
Одна стратегия, те же параметры, то же окно, разница только в способе склейки:
— на пересчитанном прошлом +502 тыс ₽
— на настоящих ценах +629 тыс ₽
Пересчёт занизил результат на четверть. Знак мог оказаться и обратным — важно, что расхождение крупное и угадать его заранее нельзя.
🧱 Способ второй: встык, по настоящим ценам
Ничего не двигаем. До экспирации в ряду стоят цены старого контракта, после — нового. На стыке остаётся ступенька.
Чем хорош. Каждая цена та самая, по которой в тот день действительно торговали. От неё честно считаются ГО, стоп, размер позиции и издержки. И заглядывать некуда: будущее в сборке ряда не участвует.
Чем плох. Той самой ступенькой. Если в момент переезда у стратегии открыта позиция, движок видит скачок цены и записывает прибыль или убыток, которых не было: никто не переносил позицию по этой цене, она просто сменила контракт. Я называю это фантомом шва.
🧮 Фантом лечится не склейкой, а учётом
Его не надо прятать — его надо вычесть. Движок знает, где стоят стыки, и вычёркивает ровно тот кусок результата, который родился из скачка, а не из движения рынка.
На четырёх годах одной ноги таких сделок нашлось 11, и уносили они 155 тыс ₽ убытка, которого стратегия на самом деле не несла. Пока их не вычли, она выглядела хуже, чем есть: профит-фактор 1.72 против настоящих 1.94.
У другой ноги знак был бы обратным, и она бы, наоборот, красовалась. Фантом одинаково умеет и портить, и приукрашивать — тем и опасен.
⚠️ Оговорка, без которой пост будет враньём
Числа выше сняты с одного инструмента и одной системы. Это не «всегда четверть»: на другом ряду разрыв будет другим и вполне может смотреть в другую сторону. Утверждение тут одно — разница есть, она крупная, и посчитать её можно только на своих данных.
И пересчитанное прошлое — не «плохая склейка». Это другой прибор. Плохо, когда им меряют деньги.
💡 В сухом остатке
Пересчитанное прошлое — для глаз и для индикаторов: разметка, сверка с чужим графиком, любая задача, где важна форма кривой, а не абсолютный уровень.
Пока индекс Мосбиржи $IMOEX штормило на спекуляциях вокруг переговоров, стратегия на фьючерсе $CRU6 обновила свой максимум.
Результаты за 7 месяцев:
🔹 Оценка портфеля – 60 204 ₽
🔹 Доходность +18,7%
График прикреплен к посту.
Август запомнился не только рекордом доходности, но и антирекордом по количеству сделок. За месяц алгоритм показал всего лишь 13 сигналов на вход. 4 из них заблокировали новые фильтры, о которых я писал в предыдущем посте.
Итого 9 сделок за месяц. Для сравнения, с начала сентября уже 5 сигналов.
Короче говоря, большую часть времени скучал без сделок. Один раз даже не выдержал и совершил сделку вне системы. Поставил на отскок от нижней границы канала внутри дня. И не прогадал, кстати.
Шалости шалостями, но скука – не единственная причина, по которой я применял технический анализ. Дело в том, что в текущей конфигурации «Системный юань» не учитывает цену в момент входа в сделку. Иногда сразу после нажатия кнопки «купить» цена уходит в противоположную сторону. И если немного подождать, получишь более удачную точку входа.
📝 В общем, я экспериментировал с моментом входа в сделку, комбинируя сигналы алгоритма с техническим анализом.
Результат эксперимента неоднозначный. Иногда получалось войти в сделку лучше, чем по стандартным правилам. А иногда, наоборот, упускал момент и терял потенциальный доход.
В итоге от идеи применять технический анализ для выбора точки входа отказался.
➖ Во-первых, формализовать этот способ в алгоритм весьма непросто.
➖ Во-вторых, влияние на общий результат не настолько велико, чтобы заморачиваться.
➖ Во-третьих, на работе редко получается в нужный момент следить за графиком.
Для следования стратегии мне хватает тг-бота.
🤖 ИИ внутри торгового терминала: что у него можно попросить.
Про нейросети в трейдинге спорят об одном: предскажет цену или нет. Ответ давно известен — нет. Но за этим спором потерялось применение куда более скучное и куда более рабочее. ИИ не как аналитик, а как руки внутри терминала.
Недавно собирал такую связку на #osengine — открытой платформе для торговых роботов. Подключил своего ИИ агента через mcp. Ниже то, что у неё реально можно попросить, обычными словами.
🔧 «Перенеси эту стратегию в робота»
Самое ценное. Робот в OsEngine — обычный файл кода, который платформа собирает на лету: отдельная среда разработки не нужна, положил файл и перезапустил.
Шесть моих стратегий на $SiU6 $CRU6 $MMU6 $SBER жили скриптами на графике и исполнялись руками. Пяти нужен робот — шестая, вечный портфель, ребалансируется четыре раза в год. Перенос занял один день: четыре файла покрыли эти пять, две канальные системы отличались одним числом и стали одним классом. Все собрались с первого раза.
Оговорка, без которой пост будет враньём: стратегии не придуманы моделью. Они мои, отобранные заранее. ИИ сделал перевод с языка на язык — работу аккуратную, объёмную и совершенно механическую. Ровно на такой он и силён.
🎛 «Поставь всем режим „только закрытие“, я уезжаю»
Дальше то, ради чего иначе открываешь десяток окон. Мост к терминалу — около полутора сотен команд.
Сменить инструмент и таймфрейм. Переключить робота между боем и эмуляцией. Поменять порог входа. Снять конфиг и сказать, чем он отличается от вчерашнего. Открыть или закрыть позицию по рынку. Навесить сопровождение: трейлинг, перевод в безубыток, сетку заявок.
Всё словами, без кликов и без шанса промахнуться мимо галочки.
🧪 «Прогони канал от 40 до 80, половину истории оставь на проверку»
Тестер и оптимизатор доступны теми же командами: период, депозит, комиссия, проскальзывание, число потоков, разделение истории на подбор и проверку, фильтры по результату, выгрузка отчёта.
Честно: этот кусок у меня пока не обкатан — история в свежей копии платформы пустая, её ещё качать. Но качается она тоже командой: создать набор, добавить бумаги, включить загрузку.
📊 «Сверь, что позиции набраны в нужной доле капитала»
Журнал робота отдаёт эквити, просадку, статистику, открытые и закрытые сделки. Рядом — счета брокера: капитал, позиции, средняя цена. Отсюда арифметика, которую лень делать руками.
Пример ловушки ценой в десять раз. Стратегия на графике считает объём так, будто пункт цены стоит рубль, а у мини-индекса он стоит десять. Тестер честно рисует 178 контрактов, на счёте их должно быть около двенадцати. Лечится тем, что стоимость пункта вычисляют из открытой позиции, а не вспоминают: нереализованный результат делят на сдвиг цены, умноженный на число контрактов.
🔍 «Почему вчера не было входа?»
Сегодня три робота из пяти не сделали ни одной сделки. Раньше на такой вопрос уходил вечер — разбор занял минуты и дал три разных подробных ответа.
⚠️ Чем за это платишь
Модель ошибается уверенно, поэтому проверять приходится всё. Новичкам нужно быть особенно осторожно. Фраза "сделай мне прибыльного торгового робота" может привести к тому, что робота со создаст, только вот логика его будет неисполнимой. ИИ может заниматься откровенной подгонкой параметров (если его не научить обратному). Да что говорить, даже иногда очевидные вещи может выдать из своих догадок и ошибиться. Недавно ИИ признал фьючерс $NGU6 неликвидным, хотя даже не видел его стакан.
И кликать в интерфейсе osengine модель не умеет: подключение брокера каждый день делается руками.
💡 В сухом остатке
ИИ здесь не торгует и не решает. Он пишет обвязку, переключает режимы, считает доли и находит строку в коде, из-за которой робот промолчал. Экономит не мышление, а часы механики вокруг него.
Фьючерс на Юань #CR1! протестировал на прошлой неделе свой прошлый тренд и математику, уйдя в коррекцию.
Теперь лонги возможны только при закреплении "над" отметкой 12,99 руб.
Вероятно продолжение коррекции в валютной паре, так как нефтебочка в рублях значительно подросла и пусть под ограничением санкций, но выручка от продаж нефтегаза начнет поступать на счета компаний, что поддержит рубль. Также закончился сезонный спрос на валюту после окончания отпусков, ситуация с НПЗ постепенно нормализуется со временем. КС Банк России все еще удерживает на высоком уровне , что тоже поддержит рубль. Сантимент на следующей недели за укрепление рубля.
Не является рекомендацией к каким-либо действиям на финансовых рынках!