Алгоритмическая торговля без кода: собираем и тестируем стратегию с нуля
Я технический директор Трейд2Гуд Григорий Соколов. Сегодня покажу, как мы тестируем торговые стратегии на исторических данных: от формализации самой идеи до бэктеста и решения, можно ли вообще выпускать алгоритм в продакшн.
Этап 1. Выбираем инструмент и что можно автоматизировать
Начну с важного момента: код все равно понадобится. Но сегодня его уже необязательно писать самостоятельно — большую часть этой работы можно отдать ИИ. Для этого подходят ChatGPT, Claude, Gemini, Copilot. Для таких задач я сейчас чаще использую Claude. Главное здесь даже не код, а то, насколько точно мы можем описать саму торговую логику.
Если правило можно сформулировать через конкретное условие, его можно автоматизировать. Например: пересечение индикаторов, пробой уровня, вход в определенное время, фиксированный стоп и тейк-профит, ограничение количества сделок в день.
Сложнее с тем, что трейдер обычно определяет глазами: «значимый swing», «сильный уровень», «объем подтверждает движение». Компьютер не понимает такие формулировки сам по себе. Такие вещи сначала нужно превратить в формальное правило, и это половина работы.
Этап 2. Собираем стратегию: условия входа, выхода и риска
Для примера возьму достаточно простую идею — покупку на откате по направлению основного тренда. Здесь мне нужно формализовать три вещи: вход, выход и риск. Все задаю конкретными условиями, без единого «на усмотрение».
Для примера возьму соотношение риска к прибыли 1:3 — потому, что оно задает, какую долю сделок можно проигрывать. При 1:3 безубыточность наступает на 25% выигрышей. Если ваша стратегия дает 20% — она убыточна при любом ощущении «в целом работает».
Отдельно задаю фильтр тренда. Он нужен, чтобы одна и та же логика не начинала покупать каждый откат на падающем рынке. В таком рынке то, что выглядит как откат, может оказаться просто паузой перед следующей волной вниз.

Что еще нужно настроить для автоматической работы стратегии?
Одних правил входа и выхода недостаточно. Есть еще несколько вещей, которые я обязательно задаю до тестирования.
Время работы. Определяю, когда стратегия может открывать позиции и когда должна быть вне рынка. У фьючерсов, например, есть менее ликвидные периоды, когда исполнение может быть хуже, а спред — шире. Плюс, если торгуете через проп-фирму, у нее свое окно: например, требование быть без позиций к определенному часу.
Принудительный выход. Это отдельное правило, не связанное со стопом или целью. Если позиция открылась в 14:50, а после 15:00 по нашим правилам мы уже не должны находиться в рынке, алгоритм должен закрыть ее независимо от результата сделки.
Ограничение активности. Заранее ставлю максимальное количество сделок в день и условия остановки после серии убытков. Без этого алгоритм в плохой день будет заходить снова и снова.
Издержки. Комиссию и проскальзывание надо вписать в настройки теста до первого запуска, а не после. Стратегия с 20-тиковым стопом и комиссией в 2 тика теряет 10% преимущества на каждой сделке.
Ролловер. Фьючерсный контракт живет три месяца. Тест надо «гонять» на непрерывной склейке, иначе тест просто упрется в смену одного контракта на другой.
Поведение при сбое. Я заранее определяю, что произойдет с открытой позицией, если пропадет связь или перестанет работать терминал. Здесь важно понимать, где физически находится стоп — ответ «ничего, стоп стоит на бирже» верен только если стоп действительно серверный, а не локальный.
Этап 3. Запускаем бэктест и тестируем стратегию на истории
Я стараюсь брать достаточно длинный и, главное, разный рыночный период. Для первичной проверки — хотя бы два года, чтобы в выборку попали разные состояния рынка: тренд, боковик, высокая и низкая волатильность.
Если протестировать стратегию только на одном хорошем трендовом году, легко получить красивый результат, который на самом деле говорит больше о выбранном периоде, чем о самой стратегии.
Дальше я разделяю данные на две части. На первой части — in-sample, например 70% истории — можно подбирать и настраивать параметры.
Вторую часть, out-of-sample, во время настройки я не трогаю. Когда параметры зафиксированы, прогоняю стратегию на оставшихся данных один раз. Если результат разваливается, скорее всего, мы хорошо подогнали параметры под прошлое, а не нашли устойчивую закономерность. Бэктест — самая важная процедура во всем процессе, и ее чаще всего пропускают.
Смотрим результаты теста:




Этап 4. Разбираем результат: как понять, что стратегию имеет смысл тестировать дальше
Здесь нет одной цифры, после которой можно сказать: все, стратегия хорошая. Я смотрю на показатели вместе и обязательно смотрю на саму кривую капитала. Ровный рост с понятными откатами это одно. Плоская линия, один вертикальный скачок и снова плоская — совсем другое, даже если итоговая цифра та же.
Финальная доходность у двух таких стратегий может оказаться одинаковой, но качество результата для меня будет совершенно разным.

Какие ошибки могут сделать плохую стратегию хорошей на бэктесте
Заглядывание в будущее. Алгоритм использует информацию, которой в момент принятия решения еще не существовало. Пример — использовать цену закрытия бара так, будто мы знали ее в начале этого бара.
Подгонка под историю. Мы перебираем параметры на определенном периоде, выбираем лучшие и на этом же периоде показываем результат. Получается красивый график, но фактически мы просто очень хорошо описали прошлое.
Неучтенные издержки. Комиссия, спред, проскальзывание. На стратегии со стопом в 20 тиков они меняют картину полностью.
Нереалистичное исполнение. Тестер считает, что ваш лимитный ордер исполнялся всегда, когда цена коснулась уровня. В реальности она исполняется, если до вас в очереди хватило объема.
Стоп и цель внутри одного бара. На минутных данных цена может за одну свечу коснуться и стопа, и тейк-профита. Но по самой свече мы не всегда понимаем, что произошло первым. Если тестер постоянно выбирает более выгодный вариант, на длинной дистанции появляется прибыль, которой в реальной торговле могло не быть.
Проблемы на смене контракта. Если неправильно работать с фьючерсной историей, на стыках контрактов появляются движения и сигналы, которых в реальной торговле не было.
Слишком короткая история. На растущем рынке большинство стратегий, построенных вокруг покупки, будут выглядеть лучше. Это еще не значит, что они переживут другой режим рынка.
Слишком много попыток. Если я протестировал десятки вариантов и просто выбрал самый прибыльный, к его результату отношусь особенно осторожно. Чем больше перебор, тем выше вероятность случайно найти параметры, которые идеально подошли именно к прошлой истории.
Этап 5. Решаем, запускать ли стратегию: что я проверяю после хорошего бэктеста
Хороший бэктест для меня еще не означает, что стратегию можно сразу запускать на реальные деньги. Вот что я проверяю:
Форвард-тест на симуляторе. Минимум месяц реального времени, на живых котировках. Это единственная проверка, в которой невозможно заглянуть в будущее. Сравните исполнение с бэктестом: если средняя цена входа расходится, ваш тест был оптимистичнее рынка.
Правила площадки. Если торгуете через проп-фирму — уточните письменно, разрешена ли у них автоматизация и API. Далеко не у всех это прописано явно, а узнавать постфактум дорого.
Риск от реального счета, а не из головы. Размер позиции должен считаться от реального остатка до просадки, а не от абстрактной суммы. Если правила площадки допускают меньший риск, чем заложено в стратегии — снижаете риск, а не надеетесь.
Сценарий отказа. Что произойдет с открытой позицией, если упадет интернет, компьютер или сервис. Ответ должен быть проверен на практике, а не предположен.
Мониторинг и аварийная остановка. Заранее договоритесь с собой о цифрах: при какой просадке и при какой серии убытков алгоритм выключается. Решение, принятое до запуска, исполняется. Принятое в момент убытка — нет.
В Трейд2Гуд мы в итоге сводим все это к достаточно простому процессу. У нас есть скоринг алгоритмов и стратегий. Если стратегия проходит бэктест, проверки на устойчивость и соответствует заданным требованиям по скорингу, только после этого мы допускаем ее к следующему этапу и в дальнейшем — к продакшну.