Найти в Дзене
TradeAlgo Hub

Торговые роботы Альфа-Инвестиций. Часть 7: Анализ работы стандартного робота StepByStep_v2, модификация

Предыдущие статьи Вы можете почитать в подборке: Когда‑то я и представить не мог, что буду писать код для торговых роботов. Всё закрутилось из‑за одного случайного вечера и пары любопытных строк в новостной ленте. «Можно зарабатывать, пока программа работает за тебя?» — эта мысль вспыхнула, как искра. Звучало как магия, как сказка про джинна, исполняющего желания. Но вместо лампы — код, вместо заклинаний — алгоритмы. Первые шаги напоминали прогулку по минному полю. Термины вроде «волатильность», «ликвидность» и «бэктестинг» казались посланиями с другой планеты. Я чувствовал себя археологом, который пытается расшифровать древние письмена без словаря. Но однажды судьба подкинула подсказку: на форуме (тут много интересного) трейдеров обсуждали роботов для терминала «Альфа‑Инвестиции». В потоке сообщений мелькнуло название — «StepByStep». Один из участников небрежно обронил: «Даже новичок справится. Можно запустить готового робота или подкрутить его под себя». И я решился. Робот получился
Оглавление
Предыдущие статьи Вы можете почитать в подборке:
Альфа банк и инвестиции | TradeAlgo Hub | Дзен

С чего всё началось

Когда‑то я и представить не мог, что буду писать код для торговых роботов. Всё закрутилось из‑за одного случайного вечера и пары любопытных строк в новостной ленте.

«Можно зарабатывать, пока программа работает за тебя?» — эта мысль вспыхнула, как искра. Звучало как магия, как сказка про джинна, исполняющего желания. Но вместо лампы — код, вместо заклинаний — алгоритмы.

Первые шаги напоминали прогулку по минному полю. Термины вроде «волатильность», «ликвидность» и «бэктестинг» казались посланиями с другой планеты. Я чувствовал себя археологом, который пытается расшифровать древние письмена без словаря.

Но однажды судьба подкинула подсказку: на форуме (тут много интересного) трейдеров обсуждали роботов для терминала «Альфа‑Инвестиции». В потоке сообщений мелькнуло название — «StepByStep». Один из участников небрежно обронил: «Даже новичок справится. Можно запустить готового робота или подкрутить его под себя».

И я решился.

Мой первый «шедевр»

-2

Робот получился наивным, как ребёнок, впервые увидевший рынок. Его логика была проста до смешного:

  • купить, если цена упала на 1%;
  • продать, если выросла на 1,5%.

Я запустил его с трепетом, словно отпускал в плавание самодельный кораблик. И почти сразу — удар: робот начал сжигать виртуальные деньги. Комиссии и проскальзывание съели прибыль быстрее, чем я успел сказать «стоп».

Поражение? Нет. Урок.

Путь к «разумному» роботу

Я погрузился в анализ с головой. Торговый терминал «Альфа‑Директ» стал моим вторым домом. Графики превратились в карты неизведанных земель, а индикаторы — в компасы:

  • скользящие средние (MA);
  • индекс относительной силы (RSI);
  • средний истинный диапазон (ATR).

Робот умнел, но всё ещё спотыкался. Тогда я решил провести его через огонь и воду — запустил бэктестинг на исторических данных. Результаты оказались капризными:

  • 2020 год — прибыль;
  • 2022 год — убыток.

Прозрение

Спасение пришло неожиданно — через Дзен. Там я наткнулся на канал «Записки Биржевого Робота» Евгения. Его посты были как мастер‑классы: он разбирал роботов по винтикам, показывал, как модернизировать алгоритмы, делился хитростями. Некоторые его идеи я бережно храню и использую до сих пор.

Однажды ночью, ковыряя логику выхода из позиции, я вдруг осознал:

Код — не волшебство. Это инструмент.
Робот не предсказывает будущее. Он лишь чётко выполняет правила, которые я ему задаю.

Это было как прозрение. Я пересмотрел риск‑менеджмент:

  • ограничил долю капитала на сделку до 2%;
  • добавил стоп‑лоссы;
  • переписал условия входа и выхода.

Первые плоды

Через три месяца мой робот показал стабильную доходность. Не миллионы, но… гордость переполняла меня. Моя программа:

  • сама принимала решения;
  • училась на ошибках;
  • зарабатывала.

Сейчас я продолжаю её дорабатывать. Каждый баг, каждый провал — это не конец, а ступень. Путь только начался, но я уже вижу, как из неуклюжего «ребёнка» вырастает настоящий торговый ассистент.

-3

Кто знает, может, через год он станет моим надёжным партнёром на рынке. А всё началось с одного вопроса:

«А что, если?..»

Ну что начнём!

Анализ эффективности работы торгового робота Step‑by‑Step: оценка прибыльности

В предыдущей публикации мы запустили стандартного торгового робота StepByStep_v2 на инвестиционном фонде AKGD «Золото» (управляющая компания «Альфа‑Капитал»).

Важно отметить: в материале использованы архивные скриншоты и исторические данные — актуальная ситуация может отличаться.

Хронология тестирования:

  • дата запуска робота: 16 декабря 2024 года;
  • дата полного закрытия всех позиций: 10 января 2025 года.
Отчёт
Отчёт

В интерфейсе «Диспетчер Роботов» наблюдаем следующие показатели: значение «Позиция = 0» и иконка «севшей батарейки» в последнем столбце.

Это сигнализирует о завершении рабочего цикла робота. Дальнейшая динамика роста актива не будет обрабатываться — все позиции закрыты (продавать нечего), а к маржинальной торговле мы не прибегаем.

Анализируем отчётные данные:

  • период тестирования: 25 дней;
  • количество совершённых сделок (цикл «покупка → продажа»): 7;
  • итоговая прибыль: 13,28 руб.

На первый взгляд, сумма невелика — однако продолжим детальный разбор.

Чтобы определить себестоимость одной сделки, обратимся к вкладке «Операции». Там отражены все транзакционные издержки, связанные с каждым торговым действием.

Операции
Операции

На этой вкладке отображается полная хронология операций: моменты покупки и продажи лотов, а также размер полученной прибыли по каждой сделке.

В настройках робота была задана фиксированная дельта для покупки и продажи — 1%. Однако фактические результаты показывают плавающий диапазон прибыли от 0,9% до 1,13% из‑за явления, известного как «проскальзывание ордеров» (отклонение фактической цены исполнения от ожидаемой).

Особенности отображения данных:
Даты входа и выхода из позиций приведены в порядке закрытия сделок (от самых поздних к ранним).

Анализ конкретных сделок:

  1. Первая сделка (верхняя в списке):
    дата покупки:
    16 декабря;
    дата закрытия:
    10 января (через 25 дней);
    вложенные средства:
    199,6 руб.;
    прибыль:
    2,1 руб.
  2. Вторая сделка (нижняя в списке):
    дата покупки:
    17 декабря;
    дата закрытия:
    18 декабря (через 1 день);
    вложенные средства:
    197,0 руб.;
    прибыль:
    1,78 руб.

Ключевые сложности расчёта «чистой» прибыли:

  • Неравномерность сроков сделок. Один лот может удерживаться как несколько часов, так и целый месяц.
  • Замороженные средства. При покупке лота инвестор временно выводит из оборота сумму, эквивалентную стоимости актива. При этом рыночная цена лота ежедневно колеблется, влияя на потенциальную прибыль.

Для более точной оценки эффективности робота требуется комплексный расчёт, учитывающий:

  • время удержания каждого лота;
  • динамику изменения стоимости активов;
  • совокупные транзакционные издержки.

Перейдём к анализу вкладки «Сигналы», чтобы углубить исследование.

Сигналы
Сигналы

На данной вкладке представлена хронологическая последовательность всех торговых сигналов — от первого до последнего. Визуальная разметка упрощает интерпретацию:

  • зелёный цвет обозначает сигнал на покупку лота;
  • красный цвет указывает на сигнал к продаже.

Особое внимание стоит уделить последнему столбцу таблицы. Он позволяет:

  • определить максимальное количество одновременно купленных лотов;
  • рассчитать соответствующий денежный эквивалент — то есть ту максимальную сумму, которую пришлось временно «заморозить» в активах.

Этот показатель критически важен для оценки:

  • реальной нагрузки на инвестиционный капитал;
  • эффективности использования свободных средств;
  • потенциальных рисков, связанных с иммобилизацией денежных ресурсов.

Для расчёта прибыли был использован онлайн‑сервис https://tradermake.money/. К сожалению, скриншот результатов не сохранился, только записи.

Исходные параметры расчёта:

  • стартовая сумма: 800 руб.;
  • структура портфеля: 4 лота по 200 руб. каждый.

Все показатели доходности рассчитывались относительно этой базовой суммы.

Анализ результатов:

1. Итоговая доходность:

  • за 25 дней: 1,67 %;
  • в годовом выражении: ~25 %.

3. Важные нюансы интерпретации:

Приведённый расчёт основан на полной «заморозке» 800 руб., однако в реальности:

  • максимальная сумма была задействована лишь 4 дня (при покупке всех 4 лотов);
  • в остальные дни объём замороженных средств варьировался в диапазоне 200–600 руб.

3. Оптимизационный потенциал:

Даже если изначально на брокерский счёт было внесено 800 руб. (или даже 5 000 руб.), «неработающие» средства можно было временно разместить в денежном фонде AKMM или AKMР. Это позволило бы:

  • получать дополнительный доход на свободные остатки;
  • повысить общую эффективность капитала;
  • минимизировать потери от простоя средств.

Таким образом, реальная доходность стратегии может оказаться выше рассчитанной, если учитывать возможность альтернативного размещения временно свободных средств на разных фондах.

Как работает робот StepByStep_v2: логика и дальнейшие действия

После завершения цикла продаж робот фактически приостанавливает активную торговлю — и это полностью соответствует заложенному алгоритму. Разберём принцип работы и оптимальные дальнейшие шаги.

Принцип работы стратегии StepByStep_v2

Алгоритм действует по чёткому сценарию:

  1. Выбор перспективного актива
    — определяется инструмент с прогнозируемым ростом (например, ожидается повышение стоимости на 10 %).
  2. Первоначальная закупка
    — приобретается заданное количество лотов (например — 100 лотов).
  3. Установка каскадных целей
    для каждого 1 % изменения цены задаются ордера:
    — на продажу
    10 лотов при росте;
    — на покупку
    10 лотов при снижении.
  4. Извлечение прибыли
    — основной доход формируется за счёт первоначального роста актива;
    — дополнительный заработок достигается через
    повторные покупки/продажи на колебаниях цены.

Что происходит после отработки актива?

Когда цена достигает целевого уровня (например, +10 %) и все запланированные продажи выполнены:

  • робот завершает текущий цикл торговли;
  • открытые позиции отсутствуют;
  • автоматическая торговля приостанавливается.

Рекомендуемые действия после завершения цикла

Вариант 1. Переход на новый актив (оптимальный)

  • Почему: после отработки роста вероятность дальнейшей прибыли в том же инструменте снижается;
  • Как:
    — проанализируйте рынок на предмет новых перспективных активов;
    — перенесите капитал в инструмент с прогнозируемым восходящим трендом;
    — запустите робота с обновлёнными параметрами.

Вариант 2. Работа с текущим активом на снижении (рискованный)

  • Когда применять: если есть уверенность в скором развороте тренда;
  • Риски:
    — возможность затяжного падения цены;
    — увеличение просадки при неверном прогнозе;
  • Тактика:
    — дождитесь снижения стоимости на заданный процент;
    — закупите дополнительные лоты по более низкой цене;
    — установите новые цели для каскадных сделок.

Вариант 3. Ожидание в активах (консервативный)

  • Суть: оставить средства в инструменте до появления явных сигналов роста;
  • Плюсы: отсутствие транзакционных издержек;
  • Минусы: заморозка капитала, упущенная выгода.

Ключевые выводы

  1. Остановка робота после цикла — нормальное поведение стратегии.
  2. Для максимизации прибыли рекомендуется регулярно менять активы после отработки целей.
  3. Работа с тем же инструментом после роста требует:
    — тщательного анализа рыночной ситуации;
    — чёткого понимания причин возможного разворота;
    — жёсткого контроля рисков.

Базовая доработка торгового робота: автоматический перезапуск

Проблема текущего функционала

В стандартной версии робота StepByStep_v2 после продажи последнего лота работа автоматически прекращается. Это создаёт ряд неудобств:

  • при активном росте актива робот не перезапускается самостоятельно — трейдер рискует упустить дополнительную прибыль;
  • требуется постоянное присутствие онлайн для ручного перезапуска;
  • теряется оперативность реагирования на рыночные изменения.

Решение: автоматический перезапуск после завершения цикла

Для устранения этих недостатков необходимо модифицировать робота на базе стратегии StepByStep_v2, добавив механизм автоматического перезапуска после полной отработки позиций.

Порядок доработки

  1. Создайте нового робота на основе стратегии StepByStep_v2.
  2. Внесите изменения в Правило 2 (ниже приведён полный обновлённый текст правила — его можно использовать для полной замены существующего).

Обновлённое Правило 2 (ключевые дополнения выделены жирным):

При выполнении условия продажи последнего лота из текущей позиции:
проверить наличие достаточного баланса для повторной закупки;
если баланс достаточен — автоматически инициировать новый торговый цикл;
восстановить исходные параметры закупки (количество лотов, целевые уровни);
запустить алгоритм с начальными настройками стратегии StepByStep_v2;
— если баланс недостаточен — перевести робота в режим ожидания пополнения счёта.

Преимущества доработки

После внесения изменений робот получит следующие возможности:

  • автоматическая перезагрузка после завершения торгового цикла;
  • непрерывная работа без необходимости ручного контроля;
  • оперативное реагирование на рыночные движения;
  • минимизация упущенной прибыли за счёт мгновенного старта нового цикла.

-7

Пояснение логики

  1. Условие срабатывания
    Блок активируется, если:
    — Цена упала ниже целевого уровня (
    MinPrice * (1 - 0.01*DeltaPercent)).
    — Объём позиции + объём покупки (
    Q) не превышает лимит (LongLimit).
    — ИЛИ позиция закрыта (
    xPosition == 0) и стратегия инициализирована (inited).
  2. Обработка активных ордеров
    — Если есть активный ордер, не связанный с покупкой, он отменяется.
    — Метод завершается (
    return), чтобы дождаться исполнения текущего ордера.
  3. Выполнение покупки
    Рыночная покупка (EnterLong(Q)): если позиция закрыта (xPosition == 0).
    Лимитная покупка (EnterLongLimit(...)): если позиция открыта, цена рассчитывается с учётом проскальзывания.
  4. Фиксация сигнала
    GetLastSignalInfo() запрашивает данные о последнем сигнале.
    — Если сигнал есть:
    lastSignalId сохраняет его идентификатор.
    lastSignalProcessed сбрасывается в 0, чтобы отметить сигнал как необработанный.

Ключевые переменные

  • Input1.Close[0] — текущая цена закрытия (последняя зафиксированная цена).
  • MinPrice — опорная минимальная цена (база для расчётов).
  • DeltaPercent — процентный порог для определения уровня покупки.
  • pos — текущий объём позиции.
  • Q — объём покупки.
  • LongLimit — максимальный допустимый объём позиции.
  • xPosition — индикатор наличия открытой позиции (0 = нет позиции).
  • inited — флаг инициализации стратегии.
  • activeOrder — текущий активный ордер.
  • OrderDirection — направление ордера (покупка/продажа).
  • EnterLong() — метод рыночной покупки.
  • EnterLongLimit() — метод лимитной покупки.
  • GetLastSignalInfo() — метод получения данных о сигнале.
  • lastSignalId — идентификатор последнего сигнала.
  • lastSignalProcessed — флаг обработки сигнала (0 = не обработан).

Цель блока

  • Купить актив при падении цены ниже целевого уровня.
  • Учесть ограничения по объёму позиции (LongLimit).
  • Управлять активными ордерами (отмена лишних, ожидание исполнения).
  • Фиксировать сигналы для дальнейшей аналитики.

Типичные сценарии

  • Цена ниже целевого уровня, позиция открыта
    → Выставляется лимитный ордер с учётом проскальзывания.
  • Позиция закрыта, стратегия инициализирована
    → Выполняется рыночная покупка (
    EnterLong).
  • Есть активный ордер не на покупку
    → Ордер отменяется, метод завершается (
    return).
  • Сигнал не найден
    → Переменные
    lastSignalId и lastSignalProcessed остаются без изменений.

Важные замечания

  • Перед внедрением на реальном счёте протестируйте доработанный робот на исторических данных.
  • Убедитесь, что торговый баланс достаточен для многократных циклов закупки.
  • Сохраните резервную копию исходной конфигурации робота перед внесением изменений.