# Ник Маккалам: «Постройте свою систему алготрейдинга с нуля на Python»

Источник: https://www.youtube.com/watch?v=zH2Mg782XhA
Канал: freeCodeCamp.org
Опубликовано: 29.09.2026

---

Разработка автоматизированных торговых систем традиционно считалась прерогативой крупных хедж-фондов, однако современные инструменты делают это направление доступным для индивидуальных разработчиков. В данном руководстве ведущий канала **freeCodeCamp.org** Ник Маккалам демонстрирует процесс создания полноценной платформы для алготрейдинга на Python и Django, объединяющей рыночные данные от **Massive**, управление портфелем через **SnapTrade** и исполнение сделок в симуляторе **Alpaca**.

## 🚀 Обзор архитектуры и возможностей системы
[[JUMP:0:00:00]]

Создаваемая система представляет собой веб-дашборд для реализации стратегии «количественного моментума» (Quantitative Momentum) [0:08:13]. Вдохновением для проекта послушжила книга Джека Фогла и Уэса Грея *«Quantitative Momentum»*, в которой доказывается эффективность покупки активов с наибольшим ростом цены за последние 12 месяцев [0:08:54].

Ключевые компоненты системы:

*   **Backend:** Django (Python), обеспечивающий работу с базой данных SQLite и логику обработки сигналов.
*   **Данные:** API компании **Massive**, предоставляющее исторические и текущие котировки акций.
*   **Брокерское исполнение:** Платформа **Alpaca** (через систему Paper Trading для безрисковой торговли).
*   **Связующее звено:** **SnapTrade**, позволяющий безопасно подключать торговые счета к приложению через API.

Система автоматически рассчитывает показатели моментума для вселенной из 50 акций, ранжирует их и генерирует сигналы на покупку для топ-10 лидеров [0:09:47].

## 🛠️ Настройка инфраструктуры: SnapTrade, Massive и Alpaca
[[JUMP:0:00:44]]

Первым этапом является подготовка внешних сервисов. Кейти из команды **SnapTrade** демонстрирует процесс регистрации аккаунта [0:00:44]. Важным аспектом безопасности является настройка двухфакторной аутентификации (2FA) через Google Authenticator перед генерацией API-ключей (Consumer ID и Consumer Key) [0:01:33]. Ник Маккалам подчеркивает, что Consumer ID необходимо сохранить сразу, так как он не отображается повторно [0:02:00].

Для получения данных необходимо создать аккаунт на **massive.com** [0:02:16]. Сервис предоставляет API-ключ, который позволяет запрашивать агрегированные данные по котировкам. На бесплатном тарифе Massive действует ограничение: не более 5 запросов в минуту [0:48:42].

В качестве брокера используется **Alpaca** [0:03:33]. Автор рекомендует использовать именно `alpaca.markets`, предупреждая, что домен `.com` занят сайтом о животных [0:04:08]. При регистрации важно выбрать Trading API. Основное преимущество сервиса для обучения — наличие режима **Paper Trading**, где пользователю сразу начисляется виртуальный баланс в размере $100 000 [0:06:01].

## 🏗️ Разработка бэкенда на Django: Модели и база данных
[[JUMP:0:17:33]]

Работа над кодом начинается с настройки виртуального окружения Python и установки Django [0:18:23]. Проект структурирован на два основных приложения: `trading` (логика сигналов) и `portfolio` (управление счетами) [0:23:01].

Моделирование данных включает создание нескольких связанных таблиц [0:25:26]:

*   `Stock`: информация о тикере, названии и секторе.
*   `PriceData`: исторические цены (открытие, закрытие, объем).
*   `MomentumScore`: результаты расчетов для каждой акции.
*   `Portfolio` и `Position`: данные о текущих активах пользователя, полученные через SnapTrade.
*   `Trade`: история исполненных ордеров (статусы: Pending, Submitted, Filled и др.) [0:38:02].

Особое внимание Ник уделяет полю `external_order_id`. В нем сохраняется ID ордера от брокера (Alpaca), в то время как `snaptrade_order_id` хранит идентификатор внутри системы SnapTrade. Это позволяет в будущем подключать других брокеров, таких как Interactive Brokers, не меняя структуру БД [0:38:42].

## 📊 Интеграция с Massive API и обход ограничений
[[JUMP:0:47:35]]

При написании клиента для Massive разработчик сталкивается с проблемой лимитов (Rate Limits). Чтобы приложение не «падало» при превышении 5 запросов в минуту, Маккалам реализует два механизма:

1.  **Кеширование:** если данные по тикеру за определенную дату уже запрашивались, они берутся из локальной памяти [0:51:42].
2.  **Queue/Sleep:** логика, которая заставляет поток «спать», если лимит исчерпан [1:00:03].

Для оптимизации используется эндпоинт `grouped_daily_bars` [1:03:55]. Вместо того чтобы запрашивать каждую акцию отдельно, система одним запросом получает данные по всей фондовой секции США за конкретную дату. Это критически важно для расчета стратегии «12 минус 1 месяц» (доходность за год за вычетом последнего месяца), так как требует сопоставления цен на две разные даты для всего списка акций [1:02:47].

## 🔄 Реализация SnapTrade и торговых сигналов
[[JUMP:1:08:59]]

Клиент SnapTrade в приложении (`TradingExecutor`) отвечает за синхронизацию позиций и отправку ордеров [1:09:10]. Ник использует официальный SDK (`snaptrade-python-sdk`). 

Процесс покупки реализован через метод `place_force_order` [1:20:34]. Особенность системы в том, что она использует **нотиональные (денежные) ордера**. Вместо указания количества акций («купи 5 штук»), пользователь указывает сумму («купи на $100»), а точное дробное количество акций рассчитывается на стороне Alpaca [1:21:02].

Стратегический движок (`StrategyEngine`) проверяет, нужно ли проводить ребалансировку портфеля (еженедельно или ежемесячно) [1:28:37]. Если время пришло, он ранжирует акции по моментуму, генерирует сигналы и через SnapTrade отправляет команды брокеру.

## 💻 Пользовательский интерфейс и тестирование
[[JUMP:1:29:52]]

Интерфейс построен на стандартных шаблонах Django (Jinja2) [1:30:35]. Хотя современные приложения часто используют React, автор выбрал классический подход для упрощения архитектуры курса. Дашборд отображает:

*   Топ-10 лидеров роста (зеленым цветом).
*   Топ-10 аутсайдеров рынка (красным цветом) [0:10:14].
*   Кнопку «Recalculate Momentum» для обновления данных.

В финале видео Ник демонстрирует успешное исполнение сделки: после нажатия кнопки «Buy» в интерфейсе Django, ордер на покупку акций Intel мгновенно появляется в терминале Alpaca с виртуальным балансом [1:42:57]. Автор отмечает, что в 2026 году (согласно данным видео) лидерами моментума являются технологические компании, связанные с ИИ, такие как NVIDIA и AMD [0:10:26].