Несколько методов реализации торговой стратегии на основе скользящих средних

В этой статье блога мы рассмотрим различные методы реализации торговой стратегии, основанной на сравнении простых скользящих средних (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 конкретной платформы.