В этой статье блога мы рассмотрим различные методы реализации торговой стратегии, основанной на сравнении простых скользящих средних (SMA). В частности, мы сосредоточимся на условии, когда SMA с 20-дневным окном (SMA_20) больше, чем SMA с 50-дневным окном (SMA_50). Мы предоставим примеры кода для каждого метода, чтобы помочь вам понять и реализовать эти стратегии в ваших собственных торговых системах.
Метод 1: использование операторов if-else
if sma_20 > sma_50:
if context.aapl not in open_orders:
order_target_percent(context.aapl, 1.0)
Этот метод использует вложенные операторы if для проверки выполнения условия. Если условие истинно и нет открытых ордеров на акции AAPL, будет размещен рыночный ордер на распределение 100 % стоимости портфеля на AAPL.
Метод 2: использование вызовов функций
def check_and_execute_trade():
if sma_20 > sma_50:
if context.aapl not in open_orders:
order_target_percent(context.aapl, 1.0)
# Call the function
check_and_execute_trade()
Этот метод инкапсулирует торговую логику внутри функции. Вызывая функцию через нужные промежутки времени, например, в конце каждого торгового дня, вы можете совершить сделку, если условие выполнено.
Метод 3: реализация пользовательского торгового класса
class MovingAverageStrategy:
def __init__(self, sma_20, sma_50, context):
self.sma_20 = sma_20
self.sma_50 = sma_50
self.context = context
def execute_trade(self):
if self.sma_20 > self.sma_50:
if self.context.aapl not in open_orders:
order_target_percent(self.context.aapl, 1.0)
# Create an instance of the strategy
strategy = MovingAverageStrategy(sma_20, sma_50, context)
# Execute the trade
strategy.execute_trade()
Этот метод предполагает создание специального класса, инкапсулирующего торговую стратегию. Конструктор класса принимает необходимые входные данные, а метод execute_trade()проверяет условие и выполняет сделку, если оно удовлетворено.
Метод 4. Использование архитектуры, управляемой событиями (например, с использованием Zipline или Backtrader).
Если вы работаете с событийно-ориентированным тестированием или торговыми платформами в реальном времени, такими как Zipline или Backtrader, вы можете определить стратегию и обрабатывать торговые сигналы, используя их соответствующие рамки. Вот пример использования Zipline:
from zipline.api import order_target_percent
def initialize(context):
pass
def handle_data(context, data):
if sma_20 > sma_50:
if 'AAPL' not in get_open_orders():
order_target_percent('AAPL', 1.0)
Этот метод больше подходит для тестирования на исторических данных или в реальной торговой среде и требует более глубокого понимания API конкретной платформы.