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

Но я начал копать глубже. Что происходит, когда задача усложняется? Где проходит граница между “это можно собрать в конструкторе” и “пора писать код”?

Оказалось, эта граница очень чёткая. И её можно описать через конкретные сценарии.

1. Когда вам нужен кастомный индикатор

Проблема: Визуальные конструкторы дают 50-100 готовых индикаторов. Это покрывает 90% классических стратегий. Но что делать с оставшимися 10%?

Реальный кейс:

Вы хотите использовать авторский индикатор — например, модифицированную версию RSI с коррекцией на волатильность. Или индикатор из научной статьи, которого нет в стандартной библиотеке.

В TSLab есть ~60 индикаторов. В NinjaTrader — больше сотни. Но если вашего индикатора нет в списке — вы в тупике.

Частичные решения:

  • NinjaTrader позволяет написать кастомный индикатор на C# и подключить его к Strategy Builder
  • TSLab поддерживает написание индикаторов на C# через Script Lab
  • fxDreema вообще не даёт такой возможности — только готовые блоки

Когда точно нужен код:

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

2. Машинное обучение и предиктивные модели

Проблема: Визуальные конструкторы оперируют binary-логикой. “Если RSI > 70, то продать”. Машинное обучение работает иначе — модель выдаёт вероятности, а не чёткие “да/нет”.

Реальный кейс:

Вы обучили LSTM-модель прогнозировать цену на следующие 5 минут с точностью 65%. Модель выдаёт не “покупай” или “продавай”, а распределение вероятностей: +2% с вероятностью 40%, -1% с вероятностью 30%, +0.5% с вероятностью 30%.

Как интегрировать это в блок-схему?

Почему конструкторы не справляются:

  1. Нужно загрузить обученную модель (обычно pickle-файл или ONNX)
  2. Передать в неё текущее состояние рынка (десятки фич)
  3. Получить предсказание
  4. Принять решение на основе вероятностей, а не жёстких условий

Ни TSLab, ни Designer, ни NinjaTrader не поддерживают импорт ML-моделей через визуальный интерфейс.

Что делают в индустрии:

Пишут код. Python + библиотеки (scikit-learn, TensorFlow, PyTorch) для обучения. Затем интегрируют модель в торговую систему через API.

Некоторые платформы (Visual Blocks for ML) пытаются сделать drag-and-drop для ML, но это всё ещё исследовательские проекты, далёкие от production-ready алготрейдинга.

3. Статистический арбитраж и парный трейдинг

Проблема: Парный трейдинг требует одновременной работы с несколькими инструментами, коинтеграции, расчёта z-score спреда. Блок-схемы для этого не приспособлены.

Реальный кейс:

Вы хотите торговать пару Газпром/Лукойл. Стратегия:

  1. Рассчитать коинтеграцию между инструментами
  2. Построить спред
  3. Вычислить z-score отклонения от среднего
  4. Открывать позиции при z > 2 или z < -2
  5. Закрывать при возврате к среднему

Что нужно сделать в коде:

# Расчёт коинтеграции
from statsmodels.tsa.stattools import coint
_, pvalue, _ = coint(gazprom_prices, lukoil_prices)

# Расчёт хедж-коэффициента
hedge_ratio = np.polyfit(gazprom_prices, lukoil_prices, 1)[0]

# Спред и z-score
spread = lukoil_prices - hedge_ratio * gazprom_prices
zscore = (spread - spread.mean()) / spread.std()

Что есть в конструкторах:

TSLab поддерживает multi-asset стратегии, но коинтеграция? z-score из коробки? Нет. Нужно писать C# скрипт.

Designer технически позволяет работать с несколькими инструментами, но статистический арбитраж требует кастомной логики, которую не собрать из блоков.

Вывод:

Парный трейдинг — это про статистику и математику, а не про “если SMA пересекла”. Для этого конструкторы не подходят.

4. Сложный риск-менеджмент

Проблема: Визуальные конструкторы хорошо справляются с простыми стоп-лоссами и тейк-профитами. Но что, если риск-менеджмент сложнее?

Реальный кейс:

Вы хотите реализовать Kelly Criterion — размер позиции зависит от вероятности успеха и соотношения риск/прибыль:

Position Size = (Win% * (Avg Win / Avg Loss) - (1 - Win%)) / (Avg Win / Avg Loss)

Это нужно:

  1. Считать статистику последних N сделок
  2. Рассчитывать win rate в реальном времени
  3. Динамически изменять размер позиции

Что есть в конструкторах:

TSLab: Фиксированный размер позиции или % от депозита. Динамический Kelly? Нужен C# скрипт.

Designer: То же самое. Блоки дают базовые операции, но не статистику сделок в реальном времени.

NinjaTrader: Можно написать кастомную Position Sizing логику на C#, но через Strategy Builder это сделать невозможно.

Когда нужен код:

Любая адаптивная логика — портфельное распределение на основе корреляций, динамическое хеджирование, риск-менеджмент на основе VaR/CVaR — требует кода.

5. Высокочастотная торговля

Проблема: Визуальные конструкторы добавляют слой абстракции. Этот слой стоит миллисекунд.

Реальные цифры:

Профессиональный HFT работает в микросекундах. Single digit tick-to-trade — меньше 5 микросекунд.

Визуальные конструкторы работают в миллисекундах. TSLab, Designer, NinjaTrader — все они интерпретируют блок-схемы во время выполнения.

Что нужно для HFT:

  • Прямой доступ к FIX API
  • Код скомпилирован в native binary
  • Hardware acceleration (FPGA, если серьёзно)
  • Co-location серверов рядом с биржей

Вывод:

Если вы планируете HFT — визуальные конструкторы даже не рассматриваются. Это про C++, низкоуровневые оптимизации и железо.

Для розничного трейдера, торгующего на минутных/часовых таймфреймах, задержка в 50-100 мс некритична. Для HFT — это пропасть.

6. Комплексные портфельные стратегии

Проблема: Конструкторы заточены под одну стратегию на одном инструменте. А если вы хотите управлять портфелем из 20 акций с ребалансировкой?

Реальный кейс:

Вы хотите реализовать Mean-Variance Optimization (Markowitz Portfolio):

  1. Взять 20 акций
  2. Рассчитать ковариационную матрицу доходностей
  3. Найти оптимальные веса для максимизации Sharpe Ratio
  4. Ребалансировать портфель раз в неделю

Что нужно в коде:

from scipy.optimize import minimize

# Функция для минимизации (negative Sharpe Ratio)
def neg_sharpe(weights, returns, cov_matrix):
    portfolio_return = np.dot(weights, returns.mean())
    portfolio_vol = np.sqrt(np.dot(weights, np.dot(cov_matrix, weights)))
    return -(portfolio_return / portfolio_vol)

# Оптимизация
result = minimize(neg_sharpe, initial_weights, args=(returns, cov_matrix))
optimal_weights = result.x

Что есть в конструкторах:

TSLab и Designer технически поддерживают multi-asset, но ребалансировка портфеля с оптимизацией весов — это уже про NumPy, SciPy и код.

Вывод:

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

7. Интеграция с внешними данными

Проблема: Конструкторы дают доступ к биржевым данным (цены, объёмы, ордербук). А если вам нужны данные извне?

Примеры:

  • Sentiment-анализ новостей через API (Bloomberg, Reuters)
  • Альтернативные данные (погода для агрокультур, спутниковые снимки парковок для retail)
  • Макроэкономические индикаторы (ставка ФРС, инфляция, PMI)

Реальный кейс:

Вы хотите открывать позицию в золоте, если:

  1. Индекс доллара DXY падает
  2. Реальные ставки (nominal - inflation) отрицательные
  3. В последних новостях Fed упоминается слово “dovish”

Что нужно:

  1. Подключиться к API макроданных (например, FRED)
  2. Сделать sentiment-анализ новостей (NLP)
  3. Объединить сигналы

Что есть в конструкторах:

TSLab: только биржевые данные.

Designer: можно написать кастомный индикатор на C#, который будет дёргать внешний API, но через GUI это не сделать.

NinjaTrader: то же самое — код нужен.

Вывод:

Как только данные выходят за рамки “цена/объём/индикаторы” — конструкторы бессильны.

Так когда же конструкторы работают?

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

Конструкторы отлично подходят для:

  1. Классических индикаторных стратегий
    • Пересечение скользящих средних
    • RSI/MACD/Bollinger Bands
    • Паттерны свечей
    • Price action на одном инструменте
  2. Быстрого прототипирования
    • Проверить идею за 15 минут
    • Прогнать бэктест на истории
    • Понять, стоит ли копать дальше
  3. Обучения основам алготрейдинга
    • Понять, как работает стратегия
    • Увидеть связь между сигналами и сделками
    • Не отвлекаться на синтаксис языка

Конструкторы НЕ подходят для:

  1. Машинное обучение
  2. Статистический арбитраж
  3. Кастомная математика (Kelly, Markowitz, коинтеграция)
  4. Высокочастотная торговля
  5. Портфельная оптимизация
  6. Интеграция внешних данных
  7. Сложный адаптивный риск-менеджмент

Что делать, если вы упёрлись в границу?

Вариант 1: Гибридный подход

Многие платформы позволяют писать кастомные блоки на коде:

  • TSLab: C# скрипты через Script Lab
  • Designer: C# индикаторы и стратегии
  • NinjaTrader: C# кастомные индикаторы

Вы собираете основную логику визуально, а сложные куски пишете кодом.

Вариант 2: Переход на код

Если 50% вашей стратегии — это кастомная логика, проще написать всё на языке программирования:

  • Python + Backtrader/LEAN/PyAlgoTrade
  • C# + StockSharp/LEAN
  • MQL5 для MetaTrader

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

Вариант 3: Использовать ИИ как костыль

Новый тренд 2025 года: генерировать код стратегий через ChatGPT/Claude.

Вы описываете логику текстом, ИИ генерирует код. Вы проверяете, правите, запускаете.

Это не замена программированию, но снижает порог входа.

Итоги

Визуальные конструкторы — это компромисс между простотой и возможностями.

Они закрывают 80% задач розничного алготрейдинга. Но последние 20% — ML, арбитраж, портфельная оптимизация, интеграция данных — требуют кода.

Если вы только начинаете:

Конструкторы — отличный старт. StockSharp Designer бесплатен, TSLab даёт демо, fxDreema работает в браузере.

Если вы планируете серьёзно заниматься алготрейдингом:

Учите программирование. Не обязательно становиться senior developer. Базовый Python + библиотеки для алготрейдинга — этого достаточно для 99% задач.

Если вы институциональный игрок:

Вы уже знаете, что визуальные конструкторы — для новичков. Ваш стек — C++/Java, FIX API, co-location, FPGA. Или Python + кванты с PhD.

Граница no-code существует. И она проходит ровно там, где заканчивается стандартная логика и начинается математика.


Полезные ссылки:

Исследования и источники: