Торговые сигналы

Финансовый трейдинг на Python

Chelsea Yang

Data Science Instructor

Что такое торговые сигналы?

  • Триггеры для открытия длинных или коротких позиций по заданным критериям
  • Могут строиться на основе:

    • Одного технического индикатора
    • Нескольких технических индикаторов
    • Комбинации рыночных данных и индикаторов
  • Широко применяются в алгоритмической торговле

Финансовый трейдинг на Python

Пример сигнала

  • Сигнал: Price > SMA (длинная позиция, когда цена поднимается выше SMA)

График сигнала, указывающего точки входа в сделку.

Финансовый трейдинг на Python

Реализация сигналов в bt

  1. Получите данные и рассчитайте индикаторы
  2. Задайте стратегию на основе сигналов
    • bt.algos.SelectWhere()
    • bt.algos.WeighTarget()
  3. Создайте и запустите бэктест
  4. Проанализируйте результаты бэктеста
Финансовый трейдинг на Python

Построение сигнала

# Get price data by the stock ticker
price_data = bt.get('aapl', start='2019-11-1', end='2020-12-1')
# Calculate SMA
sma = price_data.rolling(20).mean()

Как вариант, используйте talib для расчёта индикатора:

# Calculate SMA
import talib
sma =  talib.SMA(price_data['Close'], timeperiod=20)
Финансовый трейдинг на Python

Определение стратегии на основе сигналов

# Define the signal-based strategy
bt_strategy = bt.Strategy('AboveEMA',
                          [bt.algos.SelectWhere(price_data > sma),
                           bt.algos.WeighEqually(),
                           bt.algos.Rebalance()])
  • Для упрощения предполагается:
    • Торговля одним активом за раз
    • Без проскальзывания и комиссий
      • Проскальзывание: разница между ожидаемой ценой сделки и фактической ценой исполнения
      • Комиссия: сборы брокера за исполнение сделки
Финансовый трейдинг на Python

Бэктест стратегии на основе сигналов

# Create the backtest and run it
bt_backtest = bt.Backtest(bt_strategy, price_data)
bt_result = bt.run(bt_backtest)
Финансовый трейдинг на Python

Визуализация результатов бэктеста

# Plot the backtest result
bt_result.plot(title='Backtest result')

График результатов бэктеста

Финансовый трейдинг на Python

Давайте потренируемся!

Финансовый трейдинг на Python

Preparing Video For Download...