Библиотека · Особые темы: трейдинг и крипта (не финансовый совет)

Алгоритмический трейдинг с Claude Code — подключение Alpaca через MCP и управление рисками

Строитель90 минОбновлено: октябрь 2026
100 из 105 в библиотеке

Модуль: Трендинговые кейсы 2026 | Время: ~30 мин теории + 60 мин практики (paper trading)


Суть урока

Claude Code может управлять торговым счётом, анализировать рынок, строить стратегии — через официальный Alpaca MCP и API. Это не "AI предсказывает курс" (это невозможно надёжно). Это "AI автоматизирует выполнение стратегии, ведение портфеля и управление рисками". Начинать нужно с paper trading — виртуальными деньгами, пока не убедишься в своей стратегии. Урок учит работать с инструментами, а не обещает доход.

🎨 Образ: Claude Code как трейдинг — как наёмный исполнительный директор для торговли. Ты устанавливаешь правила: "покупай когда X, продавай когда Y, никогда не рискуй больше 5%". Он выполняет. Не спит, не паникует, не продаёт от страха, не держит от жадности.


⚠️ Обязательный дисклеймер

Это образовательный урок, не финансовый совет и не инвестиционная рекомендация. Алгоритмический трейдинг несёт реальные риски потери капитала, а результат на виртуальном счёте не гарантирует результат на реальном. Значительная часть розничных трейдеров теряет деньги: брокеры по требованию регуляторов публикуют долю убыточных счётов, найди эту цифру у своего брокера. Всегда начинай с paper trading. Реальные деньги — только после долгой проверки на виртуальном счёте, понимания каждой строки кода и консультации с лицензированным специалистом.


Ключевые концепции

  • Alpaca — брокер с API (эй-пи-ай — интерфейс программирования) для алготрейдинга (акции США, крипто)
  • Alpaca MCP — официальный MCP сервер от Alpaca для Claude Code
  • Paper trading — торговля виртуальными деньгами (бесплатно, нужна только регистрация на сайте брокера)
  • Position limit — максимальный размер позиции (в уроке 5% как учебный пример)
  • Stop-loss — автоматическое закрытие при убытке (в уроке -8% как учебный пример)
  • Backtesting — тестирование стратегии на исторических данных

Теория

Alpaca: брокер с API-first подходом

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

🎨 Образ: Alpaca — как банк для программистов. Обычный банк: красивое приложение, но API закрытый или платный. Alpaca: API бесплатный и задокументированный, приложение — второстепенно.

Возможности (условия брокера меняются, проверяй на сайте):

Функция Alpaca
Акции США ✅ (NYSE, NASDAQ)
Дробные акции ✅ (минимальная сумма: на сайте Alpaca)
Крипто ✅ (BTC, ETH и другие)
Paper trading ✅ Бесплатно, нужна регистрация
Реальный счёт ✅ Условия и комиссии: на сайте Alpaca
Минимальный депозит Для paper не нужен; для реального счёта: на сайте Alpaca
Стоимость API Базовый доступ бесплатный; расширенные данные могут быть платными
WebSocket потоки ✅ Real-time данные
Страны, где открывают счёт ⚠️ Список меняется: проверь, принимает ли Alpaca резидентов твоей страны

Регистрация paper trading:

  1. alpaca.markets → Sign Up
  2. Создать аккаунт → получаешь paper trading счёт и ключи
  3. Paper trading: виртуальный баланс в долларах (стартовая сумма указана на сайте Alpaca)
  4. Ключи в личном кабинете → API Keys

Alpaca MCP: подключение к Claude Code

У Alpaca есть официальный MCP сервер (репозиторий alpacahq/alpaca-mcp-server). Он запускается через uvx (менеджер Python-пакетов):

bash
# Подключение одной командой
claude mcp add alpaca --scope user --transport stdio uvx alpaca-mcp-server

Или через файл .mcp.json в папке проекта:

json
{
  "mcpServers": {
    "alpaca": {
      "command": "uvx",
      "args": ["alpaca-mcp-server"],
      "env": {
        "ALPACA_API_KEY": "твой_key_id",
        "ALPACA_SECRET_KEY": "твой_secret_key",
        "ALPACA_PAPER_TRADE": "true"
      }
    }
  }
}

Проверить, что сервер подключился, можно командой /mcp.

ALPACA_PAPER_TRADE=true — виртуальные деньги (по умолчанию именно так) ALPACA_PAPER_TRADE=false с боевыми ключами — настоящие деньги. Не переключай, пока не прошёл все проверки из этого урока.

Ключи не вставляй прямо в файл, который попадёт в git: храни их в переменных окружения или менеджере паролей (подробнее — в уроке Безопасность в Claude Code).

🎨 Образ: разница между paper и боевым режимом — как симулятор самолёта и настоящий самолёт. Выглядят одинаково, ведут себя одинаково. Но в симуляторе можно врезаться в гору и попробовать ещё раз.


Что умеет Claude Code через Alpaca MCP

После подключения, спрашиваешь в Claude Code:

Напиши в чат
"Покажи текущий баланс и открытые позиции"
"Купи 10 акций AAPL по рыночной цене"
"Продай 5 акций MSFT с лимитом $420"
"Покажи историю сделок за последнюю неделю"
"Закрой все открытые позиции"
"Какой мой P&L за сегодня?"

Claude Code переводит запросы в API вызовы к Alpaca и возвращает результаты.


Python + Alpaca API: полный контроль

Для более сложных стратегий — прямой Python код.

Важно: пример ниже написан на библиотеке alpaca-trade-api. Её репозиторий переведён в архив (июнь 2026), а для нового кода Alpaca рекомендует официальный SDK alpaca-py. Логика проверок (размер позиции, стоп-лосс, дневной лимит) от библиотеки не зависит: при переносе на alpaca-py меняются только вызовы API.

bash
pip install alpaca-trade-api pandas numpy
python
import alpaca_trade_api as tradeapi
import pandas as pd
import os

# Подключение к paper trading
api = tradeapi.REST(
    os.environ['ALPACA_API_KEY'],
    os.environ['ALPACA_SECRET_KEY'],
    'https://paper-api.alpaca.markets',
    api_version='v2'
)

def check_account():
    """Проверка состояния счёта"""
    account = api.get_account()
    print(f"Баланс: ${float(account.equity):.2f}")
    print(f"Покупательная способность: ${float(account.buying_power):.2f}")
    print(f"Статус: {account.status}")

def get_positions():
    """Текущие позиции"""
    positions = api.list_positions()
    for pos in positions:
        pnl = float(pos.unrealized_pl)
        pnl_pct = float(pos.unrealized_plpc) * 100
        print(f"{pos.symbol}: {pos.qty} акций | P&L: ${pnl:.2f} ({pnl_pct:.1f}%)")

def safe_market_order(symbol: str, qty: float, side: str, 
                       max_position_pct: float = 0.05):
    """
    Безопасный рыночный ордер с проверкой размера позиции.
    max_position_pct = максимум 5% капитала на одну позицию.
    """
    account = api.get_account()
    equity = float(account.equity)
    
    # Получаем цену
    last_trade = api.get_latest_trade(symbol)
    price = float(last_trade.price)
    
    # Проверяем размер позиции
    position_value = qty * price
    position_pct = position_value / equity
    
    if position_pct > max_position_pct:
        max_qty = int((equity * max_position_pct) / price)
        print(f"⚠️ Снижаю размер: {qty} → {max_qty} (лимит 5% портфеля)")
        qty = max_qty
    
    if qty <= 0:
        print("❌ Размер позиции слишком маленький")
        return None
    
    # Размещаем ордер
    order = api.submit_order(
        symbol=symbol,
        qty=qty,
        side=side,         # 'buy' или 'sell'
        type='market',
        time_in_force='gtc'
    )
    
    print(f"✅ Ордер размещён: {side.upper()} {qty}x {symbol} (~${position_value:.2f})")
    return order

def set_stop_loss(symbol: str, stop_loss_pct: float = 0.08):
    """
    Устанавливает stop-loss для существующей позиции.
    stop_loss_pct = 0.08 → закрыть если убыток 8%
    """
    try:
        position = api.get_position(symbol)
        current_price = float(position.current_price)
        stop_price = current_price * (1 - stop_loss_pct)
        qty = abs(int(float(position.qty)))
        
        # Stop-loss ордер
        order = api.submit_order(
            symbol=symbol,
            qty=qty,
            side='sell',
            type='stop',
            stop_price=round(stop_price, 2),
            time_in_force='gtc'
        )
        
        print(f"🛡️ Stop-loss установлен: {symbol} @ ${stop_price:.2f} ({stop_loss_pct*100}%)")
        return order
    except Exception as e:
        print(f"❌ Нет позиции по {symbol}: {e}")

# Пример использования
if __name__ == "__main__":
    check_account()
    print("\nТекущие позиции:")
    get_positions()
    
    # Покупаем AAPL (не более 5% портфеля)
    safe_market_order("AAPL", 5, "buy")
    
    # Устанавливаем stop-loss -8%
    set_stop_loss("AAPL", 0.08)

Простая стратегия: скользящие средние

🎨 Образ: скользящее среднее — как средняя температура за последние 30 дней. Не скачет от одного дня к другому. Показывает тренд. Когда короткое среднее (7 дней) пересекает длинное (21 день) снизу вверх — возможно начало роста. Сверху вниз — возможно начало падения.

python
def simple_ma_strategy(symbol: str, short_window: int = 7, long_window: int = 21):
    """
    Стратегия пересечения скользящих средних.
    ТОЛЬКО для обучения — не финансовый совет!
    """
    import datetime
    
    # Получаем исторические данные
    end = datetime.datetime.now()
    start = end - datetime.timedelta(days=60)
    
    bars = api.get_bars(
        symbol,
        tradeapi.TimeFrame.Day,
        start.strftime('%Y-%m-%d'),
        end.strftime('%Y-%m-%d')
    ).df
    
    # Считаем скользящие средние
    bars['SMA_short'] = bars['close'].rolling(window=short_window).mean()
    bars['SMA_long'] = bars['close'].rolling(window=long_window).mean()
    
    # Сигналы
    bars['signal'] = 0
    bars.loc[bars['SMA_short'] > bars['SMA_long'], 'signal'] = 1   # Long
    bars.loc[bars['SMA_short'] < bars['SMA_long'], 'signal'] = -1  # Short/Flat
    
    # Последний сигнал
    last_signal = bars['signal'].iloc[-1]
    last_price = bars['close'].iloc[-1]
    
    print(f"\n{symbol} @ ${last_price:.2f}")
    print(f"SMA{short_window}: ${bars['SMA_short'].iloc[-1]:.2f}")
    print(f"SMA{long_window}: ${bars['SMA_long'].iloc[-1]:.2f}")
    
    if last_signal == 1:
        print("📈 Сигнал: ПОКУПКА (SMA_short > SMA_long)")
    elif last_signal == -1:
        print("📉 Сигнал: ПРОДАЖА (SMA_short < SMA_long)")
    else:
        print("⏸️ Сигнал: НЕЙТРАЛЬНЫЙ")
    
    return last_signal, last_price

# Анализируем несколько символов
watchlist = ["AAPL", "MSFT", "NVDA", "AMZN"]
for ticker in watchlist:
    signal, price = simple_ma_strategy(ticker)

Управление рисками: обязательные правила

🎨 Образ: правила риск-менеджмента — как правила техники безопасности на стройке. Можно работать без каски — пока на голову не упадёт кирпич. После первого кирпича каски носят все. В трейдинге кирпич — это margin call. После него уже не носишь.

5 базовых правил (учебный пример, числа подбирай под себя):

python
RISK_RULES = {
    # Правило 1: Не более 5% капитала на одну позицию
    "max_position_pct": 0.05,
    
    # Правило 2: Stop-loss на каждой позиции
    "stop_loss_pct": 0.08,
    
    # Правило 3: Не более 20% в одном секторе
    "max_sector_pct": 0.20,
    
    # Правило 4: Дневной лимит убытков
    "max_daily_loss_pct": 0.03,  # Стоп торговли при -3% за день
    
    # Правило 5: Проверка перед каждой сделкой
    "pre_trade_checks": True,
}

def check_daily_loss_limit():
    """Прекращаем торговлю если дневной убыток > 3%"""
    account = api.get_account()
    
    # Сравниваем с открытием дня
    daily_pnl_pct = float(account.equity) / float(account.last_equity) - 1
    
    if daily_pnl_pct < -RISK_RULES["max_daily_loss_pct"]:
        print(f"🚨 ДНЕВНОЙ ЛИМИТ: убыток {daily_pnl_pct*100:.1f}%. Останавливаю торговлю.")
        return False
    return True

Binance Futures через MCP (продвинутый)

Для крипто-трейдинга существуют MCP-серверы для фьючерсов Binance в каталогах MCP. Их пишут сторонние авторы, поэтому перед подключением проверь автора, код и историю репозитория. Подключаются они так же, как любой MCP-сервер (claude mcp add или файл .mcp.json).

json
{
  "mcpServers": {
    "binance-futures": {
      "command": "uvx",
      "args": ["binance-futures-mcp"],
      "env": {
        "BINANCE_API_KEY": "твой_key",
        "BINANCE_SECRET_KEY": "твой_secret",
        "TESTNET": "true"  // ВСЕГДА начинать с testnet!
      }
    }
  }
}

Важно: Binance Futures — это деривативы с плечом. Риски несравнимо выше чем у покупки акций без плеча. Начинать только с Testnet и только если полностью понимаешь механику фьючерсов. Доступность биржи зависит от страны: проверь, работает ли она с резидентами твоей страны.


Чему paper trading учит, а чему нет

Разработчики регулярно публикуют эксперименты с виртуальным счётом через Claude Code и Alpaca API. Цифры из таких постов не проверить и нельзя считать ориентиром: они зависят от периода, выбранных акций и от того, что автор рассказал, а что умолчал. Учебная ценность эксперимента в другом: ты проверяешь, что код ставит ордера, соблюдает лимиты и ведёт журнал.

Что важно понять: paper trading не учитывает slippage (разница между ценой в момент сигнала и фактическим исполнением), маркет-импакт больших ордеров, психологию реальных денег. Реальные результаты обычно хуже виртуальных, а прошлые результаты ничего не гарантируют на будущее.


Практика

  1. Зарегистрируйся на alpaca.markets → получи paper trading API ключи
  2. Настрой Alpaca MCP в Claude Code (paper trading URL!)
  3. Попроси Claude: "покажи баланс и открытые позиции"
  4. Запусти Python скрипт → купи 1 акцию AAPL (paper trading)
  5. Установи stop-loss на купленную позицию
  6. Посмотри P&L через 24 часа и запиши, что в коде нужно исправить

Инструменты и ресурсы

  • Alpaca Markets — регистрация + документация
  • Alpaca MCP — официальный MCP сервер
  • alpaca-py — актуальный официальный Python SDK (старая библиотека alpaca-trade-api в архиве)
  • Backtrader — Python фреймворк для backtesting
  • MCPMarket — каталог MCP-серверов (серверы для бирж пишут сторонние авторы, проверяй их код)

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

Alpaca MCP — официальный способ управления торговым счётом через Claude Code. Всегда начинать с paper trading. Реальные деньги — только после долгой проверки на виртуальном счёте; даже она не гарантирует результат.

Учебные правила риска: 5% максимум на позицию, 8% stop-loss на каждую, дневной лимит убытков -3%. Без правил риска — не трейдинг, а азартная игра. Конкретные числа подбирай сам и с лицензированным специалистом.

Claude Code не "предсказывает" рынок — этого не умеет никто. Автоматизирует выполнение стратегии, мониторинг рисков, ведение логов. Стратегия — твоя ответственность. Это не инвестиционная рекомендация.


Следующий урок

→ Автоматизация соцсетей — Instagram, Telegram, контент на автопилоте

Отметка хранится только в этом браузере и никуда не отправляется. Мой прогресс