Год назад я собирал стратегии в TSLab. Блок-схемы, drag-and-drop, никакого кода. Работало. Пока я не упёрся в границы.

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

Конструктор не справлялся.

Я решил выучить программирование. Три месяца назад я написал первую строчку на Python. Сегодня мой робот торгует, и весь код — мой.

Это не история “я гений программирования”. Это история “любой может, если знает, с чего начать”.

Почему я решил учить код

Триггер №1: Упёрся в ограничения конструктора

Я хотел добавить адаптивный стоп-лосс на основе ATR (Average True Range). В TSLab есть блок ATR. Есть блок стоп-лосс.

Но нет блока “динамически изменять стоп-лосс каждую свечу на основе ATR”.

Можно было написать C# скрипт внутри TSLab. Но если учить C# — почему бы не сразу писать на Python без привязки к платформе?

Триггер №2: Vendor Lock-In

Всё, что я собрал в TSLab, живёт только в TSLab. Если платформа закроется, обновится, сломается — мои стратегии мертвы.

Код на Python — это файл. Он мой навсегда. Я могу запустить его где угодно.

Триггер №3: Любопытство

Я понимал логику стратегий. Я видел связи между блоками. Но что происходит внутри?

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

Код даёт контроль. Полный.

С чего я начал: выбор языка

Вариантов было три:

Python

Плюсы:

Минусы:

  • Медленнее C#/C++
  • Не подходит для HFT

C#

Плюсы:

  • Быстрее Python
  • Используется в StockSharp, LEAN, NinjaTrader
  • Хорошая интеграция с .NET экосистемой

Минусы:

  • Более сложный синтаксис для новичка
  • Меньше обучающих материалов для алготрейдинга

MQL5 (MetaTrader)

Плюсы:

Минусы:

Мой выбор: Python

Я выбрал Python. Потому что:

  1. Легче стартовать
  2. Больше материалов для новичков
  3. Можно быстро проверять идеи
  4. Не нужен HFT (торгую на часовиках)

Если нужна скорость — C# лучше. Но для розничного трейдера на дневных/часовых таймфреймах Python достаточно.

Дорожная карта: 3 месяца от нуля до рабочего робота

Вот что я сделал. По неделям.

Недели 1-4: Основы Python

Что учил:

  • Переменные, типы данных (int, float, string, list, dict)
  • Условия (if, else, elif)
  • Циклы (for, while)
  • Функции
  • Работа с файлами

Где учил:

Сколько времени: 1-2 часа в день, 5 дней в неделю. Регулярность важнее длительности.

Первый результат: К концу месяца написал скрипт, который:

  1. Считывает CSV-файл с котировками
  2. Вычисляет скользящую среднюю
  3. Печатает, когда SMA(20) пересекает SMA(50)

Простейшая логика. Но мой код.

Недели 5-8: Библиотеки для анализа данных

Что учил:

  • Pandas: работа с таблицами (DataFrame)
  • NumPy: математические операции
  • Matplotlib: построение графиков

Зачем это нужно: Почти весь алготрейдинг — это обработка таблиц с котировками (Date, Open, High, Low, Close, Volume).

Pandas делает это легко.

Примеры задач:

  • Загрузить CSV с котировками в DataFrame
  • Рассчитать SMA, EMA, RSI
  • Построить график цены + индикаторы

Где учил:

Результат: Написал функции для расчёта любого индикатора:

import pandas as pd

def sma(data, period):
    return data['Close'].rolling(window=period).mean()

def rsi(data, period=14):
    delta = data['Close'].diff()
    gain = delta.where(delta > 0, 0).rolling(window=period).mean()
    loss = -delta.where(delta < 0, 0).rolling(window=period).mean()
    rs = gain / loss
    return 100 - (100 / (1 + rs))

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

Недели 9-12: Backtrader — первая торговая система

Что делал: Изучал библиотеку Backtrader — фреймворк для бэктестинга стратегий.

Почему Backtrader:

  • Простая структура (Strategy, Data, Broker)
  • Встроенный бэктестер
  • Визуализация результатов

Моя первая стратегия:

import backtrader as bt

class SmaCross(bt.Strategy):
    params = (('fast', 20), ('slow', 50),)

    def __init__(self):
        self.sma_fast = bt.indicators.SMA(period=self.params.fast)
        self.sma_slow = bt.indicators.SMA(period=self.params.slow)
        self.crossover = bt.indicators.CrossOver(self.sma_fast, self.sma_slow)

    def next(self):
        if self.crossover > 0:  # fast пересекла slow снизу вверх
            if not self.position:
                self.buy()
        elif self.crossover < 0:  # fast пересекла slow сверху вниз
            if self.position:
                self.sell()

Та же логика, что была в TSLab. Но я контролирую каждую строчку.

Результат: Запустил бэктест на 3 годах истории. Получил:

  • Общую доходность
  • Sharpe Ratio
  • Максимальную просадку
  • График эквити

Всё то, что давал TSLab. Но бесплатно и с полным контролем.

Ошибки, которые я сделал

Ошибка #1: Пытался выучить всё сразу

Первые две недели я скачал 10 курсов, 5 книг, подписался на 20 YouTube-каналов.

Результат: информационный перегруз. Ничего не усваивалось.

Что помогло: Один источник за раз. Прошёл курс до конца, затем следующий.

Ошибка #2: Читал, но не писал код

Я смотрел видео, читал туториалы. Думал “понял, всё просто”.

Когда сел писать — не мог вспомнить синтаксис.

Что помогло: Правило: на каждый час теории — час практики. Смотрел урок → писал код руками.

Ошибка #3: Не делал проекты

Я учил синтаксис. Решал задачки. Но не применял.

Что помогло: Поставил цель: к концу 3 месяцев — рабочая стратегия на Backtrader. Это дало фокус.

Ошибка #4: Боялся задавать вопросы

Застрял на проблеме — гуглил часами, стыдился спросить.

Что помогло: Stack Overflow, Reddit (r/algotrading), Telegram-чаты по алготрейдингу. Люди помогают, если вопрос грамотно сформулирован.

Когда я понял, что готов

Момент озарения пришёл на 10-й неделе.

Я открыл старую стратегию из TSLab. Блок-схема выглядела как спагетти. Я попытался вспомнить, что она делает.

Потом открыл код той же логики на Python. Прочитал и сразу понял.

Код был читаемее, чем блок-схема.

В этот момент я осознал: я умею программировать.

Инструменты, которые я использую сейчас

1. Редактор кода: VS Code

Бесплатный, удобный, куча расширений. Есть отладчик (debugging), подсветка синтаксиса, автодополнение.

2. Backtrader (бэктестинг)

Основной фреймворк для тестирования стратегий.

3. ccxt (подключение к биржам)

Библиотека для работы с API криптобирж (Binance, Bybit и т.д.). Унифицированный интерфейс для десятков бирж.

4. Jupyter Notebook (анализ данных)

Интерактивная среда для экспериментов. Пишешь код по кусочкам, видишь результат сразу.

Отлично подходит для:

  • Загрузки данных
  • Тестирования индикаторов
  • Построения графиков

5. Git (контроль версий)

Храню весь код на GitHub. Каждое изменение — коммит. Если что-то сломалось — откачу назад.

План для тех, кто хочет повторить мой путь

Если вы сейчас в конструкторах и думаете “учить программирование — это долго и сложно”, вот реалистичный план.

Шаг 1: Основы Python (4-6 недель)

Задачи:

Критерий готовности: Вы можете написать функцию, которая принимает список цен и возвращает скользящую среднюю.

Шаг 2: Pandas + NumPy (2-4 недели)

Задачи:

  • Изучить DataFrame, чтение CSV, операции с данными
  • Рассчитать SMA, EMA, RSI вручную

Критерий готовности: Вы можете загрузить CSV с котировками, добавить колонку с индикатором, построить график.

Шаг 3: Первая стратегия на Backtrader (4-6 недель)

Задачи:

  • Изучить документацию Backtrader
  • Портировать вашу стратегию из конструктора в код
  • Запустить бэктест, сравнить результаты

Критерий готовности: Стратегия работает, результаты близки к бэктесту в конструкторе (с учётом комиссий и проскальзываний).

Шаг 4: Интеграция с реальным рынком (4-6 недель)

Задачи:

  • Подключить API брокера (QUIK, Alor, Binance)
  • Запустить стратегию на демо-счёте
  • Вести логи, отслеживать расхождения

Критерий готовности: Стратегия торгует на демо минимум месяц без критичных ошибок.

Итого: 14-22 недели (3-5 месяцев)

При темпе 1-2 часа в день, 5 дней в неделю.

Это не “стать senior developer”. Это “написать работающего торгового робота”.

Когда имеет смысл учить программирование, а когда — нет

Учите программирование, если:

  1. Вы упёрлись в ограничения конструктора
  2. Вам нужна кастомная логика (ML, арбитраж, портфели)
  3. Вы планируете серьёзно заниматься алготрейдингом годами
  4. Вам интересен процесс (не только результат)

Не учите программирование, если:

  1. Ваша стратегия укладывается в блоки конструктора и работает
  2. У вас нет времени (1-2 часа в день минимум 3 месяца)
  3. Вы торгуете вручную и хотите просто автоматизировать одну идею
  4. Программирование вызывает отторжение (если через месяц всё ещё неприятно — не ваше)

Не обязательно быть программистом, чтобы торговать алгоритмами.

Но если хочется контроля, гибкости и независимости — программирование даёт всё это.

Что изменилось после перехода на код

Плюсы:

1. Полный контроль Любая логика, любой индикатор, любая интеграция. Нет ограничений.

2. Независимость от платформ Мой код — мой навсегда. Не привязан к TSLab, Designer, NinjaTrader.

3. Бесплатно Python, Backtrader, VS Code — всё бесплатно. Больше не плачу 60 тысяч в год за TSLab.

4. Понимание Я знаю, что происходит на каждом шаге. Если ошибка — я вижу, где именно.

5. Сообщество Stack Overflow, Reddit, GitHub. Миллионы людей пишут на Python. Решение любой проблемы — в гугле.

Минусы:

1. Нет визуализации В TSLab блок-схема наглядна. В коде — текст. Нужно держать логику в голове.

2. Больше времени на старте Простая стратегия в TSLab — 15 минут. На Python первый раз — 2-3 часа (пока учишься).

3. Отладка сложнее В конструкторе ошибка подсвечивается. В коде — нужно читать traceback, ставить breakpoints.

4. Нужно учиться 3 месяца обучения — это инвестиция времени. Не все готовы.

Итоги: стоило ли?

Год назад я думал: “Программирование — это для айтишников. Я просто трейдер”.

Сегодня я понимаю: программирование — это инструмент. Как Excel. Как TradingView.

Я не стал разработчиком. Я не пишу enterprise-приложения. Я написал 500 строк кода, которые делают то, что мне нужно.

И это достаточно.

Если вы сейчас в конструкторах:

Начните с них. Соберите первую стратегию. Запустите бэктест. Поймите логику.

Когда упрётесь в границы — вернитесь к этой статье. Возьмите план. Начните учить Python.

Три месяца — и вы напишете свою первую стратегию в коде.

Если вы уже пробовали учить программирование и бросили:

Попробуйте ещё раз. Но с конкретной целью: портировать стратегию из конструктора в код.

Цель даёт фокус. Абстрактное “выучить Python” не работает. Конкретное “написать SMA-кросс на Backtrader” — работает.

Главное:

Программирование для алготрейдинга — это не “стать программистом”. Это “автоматизировать свою идею без ограничений”.

И это проще, чем кажется.


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

Обучение и курсы:

Выбор языка программирования:

Roadmaps и гайды:

No-code платформы: