1. Блог
  2. Ваш первый торговый робо...
Ваш первый торговый робот на Python: Автоматизируем стратегию "Пересечение скользящих средних" с помощью AI и Trade API

Ваш первый торговый робот на Python: Автоматизируем стратегию "Пересечение скользящих средних" с помощью AI и Trade API

Наша цель — не создать "машину для печатания денег", а научиться автоматизировать торговую логику и взаимодействовать с биржей через Finam Trade API.

Что нам понадобится:

  • Установленный Python 3.
  • API-ключ от вашего брокера. В нашем примере мы будем использовать Finam TradeAPI.
  • Доступ к любому AI-помощнику.

Шаг 1: Логика стратегии. Что такое "Золотой крест"?

Стратегия "Пересечение скользящих средних" (Moving Average Crossover) очень проста и наглядна. Мы берем цену акции и рассчитываем две линии:

   1. Быстрая скользящая средняя (SMA50): Средняя цена закрытия за последние 50 дней. Она быстро реагирует на недавние изменения цены.

   2. Медленная скользящая средняя (SMA200): Средняя цена за последние 200 дней. Она показывает долгосрочный тренд.
Торговые сигналы:

  • Сигнал на покупку ("Золотой крест"): Когда быстрая SMA50 пересекает медленную SMA200 снизу вверх. Это говорит о возможном начале восходящего тренда.
  • Сигнал на продажу ("Крест смерти"): Когда быстрая SMA50 пересекает медленную SMA200 сверху вниз. Это говорит о возможном начале нисходящего тренда.

  Теперь давайте автоматизируем это.

Шаг 2: Получаем исторические данные через API

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

🤖 Промпт для вашего AI-помощника:

  Напиши функцию на Python get_historical_data(symbol, api_token). Она должна делать GET-запрос к API для получения дневных свечей.
  Детали:
  Эндпоинт: https://api.finam.ru/v1/candles/{symbol}
  Метод: GET
  Заголовки: {'X-Api-Key': api_token}
  Параметры: {'timeframe': 'D1', 'count': 250}
  Функция должна обрабатывать возможные ошибки и возвращать данные в виде pandas DataFrame с колонками: ['open', 'high', 'low', 'close', 'volume', 'ts'].


Шаг 3: Рассчитываем скользящие средние

Теперь, когда у нас есть данные, нужно рассчитать наши индикаторы — SMA50 и SMA200.

🤖 Промпт для вашего AI-помощника:

Напиши функцию на Python add_moving_averages(df). Она должна принимать на вход pandas DataFrame со свечами (включая колонку close). Функция должна рассчитать 50-дневную и 200-дневную простые скользящие средние (SMA) по колонке close и добавить их в DataFrame как новые колонки SMA50 и SMA200.

Шаг 4: Генерируем торговые сигналы

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

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

🤖 Промпт для вашего AI-помощника:

Напиши функцию на Python generate_signal(df). Она принимает DataFrame с колонками SMA50 и SMA200.
  Логика:
  1.  Возьми две последние строки данных (предпоследний и последний день).
  2.  Сигнал 'BUY' ("Золотой крест"): Если на предпоследний день SMA50 была ниже SMA200, а на последний день стала выше.
  3.  Сигнал 'SELL' ("Крест смерти"): Если на предпоследний день SMA50 была выше SMA200, а на последний день стала ниже.
  4.  В остальных случаях возвращай 'HOLD'.
  Функция должна вернуть одну из строк: 'BUY', 'SELL' или 'HOLD'.

Шаг 5: Исполнение сделки через API

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

🤖 Промпт для вашего AI-помощника:

Напиши функцию на Python execute_trade(symbol, side, quantity, api_token, account_id).
  Детали:
  Она должна отправлять POST запрос на эндпоинт https://api.finam.ru/v1/orders.
  Заголовки: {'X-Api-Key': api_token}.
  Тело запроса (JSON): { "accountId": account_id, "securityBoard": "TQBR", "securityCode": symbol, "buySell": side, "quantity": quantity, "useCredit": false, "property": "Uncovered" }, где
  side может быть 'Buy' или 'Sell'.
  
  Функция должна выводить в консоль ответ от сервера.

Собираем все вместе

Теперь у нас есть все строительные блоки. Осталось собрать их в один скрипт.

# Здесь будут функции, сгенерированные AI:
 # get_historical_data(...)
# add_moving_averages(...)
# generate_signal(...)
# execute_trade(...) 
def main():
# --- Настройки ---
	API_TOKEN = "your_finam_api_token"
	ACCOUNT_ID = "your_account_id"
	SYMBOL = "SBER"
	TRADE_QUANTITY = 10 # Количество лотов для торговли

	print(f"1. Получаем данные для {SYMBOL}...")
	candles_df = get_historical_data(SYMBOL, API_TOKEN)
   
	if candles_df is not None and not candles_df.empty:
            print("2. Рассчитываем скользящие средние...")
            candles_df = add_moving_averages(candles_df)
    
           print("3. Генерируем торговый сигнал...")
            signal = generate_signal(candles_df)
           print(f"Сгенерированный сигнал: {signal}")
           
		   if signal == 'BUY':
                print("4. Отправляем заявку на покупку...")
                execute_trade(SYMBOL, 'Buy', TRADE_QUANTITY, API_TOKEN, ACCOUNT_ID)
           elif signal == 'SELL':
                print("4. Отправляем заявку на продажу...")
                execute_trade(SYMBOL, 'Sell', TRADE_QUANTITY, API_TOKEN, ACCOUNT_ID)
           else:
                print("4. Нет сигнала для входа в сделку. Ничего не делаем.")
 if __name__ == "__main__":
    main()

Заключение и следующие шаги

Поздравляем! Вы только что спроектировали и написали код для своего первого торгового робота.

Важное замечание: Эта стратегия является образовательным примером. Перед использованием любого робота на реальных деньгах необходимо провести тщательное бэктестирование (проверку на исторических данных) и внедрить надежные механизмы управления рисками.

Теперь, когда у вас есть база, вы можете ее улучшать:

  • Добавить управление рисками: Используйте OCO-заявки в Finam TradeAPI, чтобы автоматически выставлять Stop Loss и Take Profit для каждой сделки.
  • Протестировать другие индикаторы: Замените SMA на RSI, MACD или полосы Боллинджера.
  • Запустить робота по расписанию: Настройте его запуск раз в день на сервере для полной автоматизации.

Мир алгоритмической торговли огромен и увлекателен. Надеемся, эта статья стала для вас отличной отправной точкой. Удачи!