Стратегия пересечения скользящей средней является количественной торговой стратегией, основанной на простых скользящих средних (SMA).
В частности, эта стратегия рассчитывает 9-периодическую и 45-периодическую SMA. Когда цена пересекает обе линии SMA, генерируется сигнал покупки. Когда цена пересекает обе линии, запускается сигнал продажи.
Основная логика этой стратегии основана на принципах движущихся средних "золотой крест" и "мертвый крест". Движущиеся средние могут эффективно отфильтровывать шум рынка и указывать на основные изменения тренда. Когда краткосрочный MA пересекает длительный MA, это сигнализирует об обратном тренде.
В частности, эта стратегия использует 9-периодические и 45-периодические простые скользящие средние. 9-периодическая линия представляет собой краткосрочные тенденции, в то время как 45-периодическая линия фиксирует долгосрочные движения. Когда цена пересекает обе линии SMA, это указывает на то, что цена находится в восходящих каналах как краткосрочных, так и долгосрочных, что вызывает длинный вход.
С точки зрения кода, стратегия сначала вычисляет 9-периодные и 45-периодные значения SMA. Затем она использует функции ta.crossover и ta.crossunder для обнаружения золотых крестов и мертвых крестов между двумя линиями MA. Когда запускаются сигналы покупки и продажи, функции графика рисуют треугольники и перевернутые треугольники на графике цен.
Кроме того, для управления выходом из торговли реализуется логика стоп-лосса. В частности, высокие и низкие цены предыдущей панели извлекаются как цена стоп-лосса после открытия новых сделок. Это позволяет стратегии зафиксировать прибыль и предотвратить огромные потери.
Устройство двойной скользящей средней отслеживает средне- и долгосрочные тенденционные сдвиги, отфильтровывая краткосрочные шумы, улучшая качество сигнала.
Механизм стоп-лосса эффективно контролирует риски и блокирует прибыль.
Простая и простая в применении логика, подходящая для начинающих.
Высокое использование капитала для совокупной прибыли.
Стратегии двойного MA, как правило, генерируют сбои и недействительные сигналы во время нестабильных рынков.
Консервативное размещение стоп-лосса, неспособное эффективно отслеживать тренды.
Неоптимальный выбор параметров может привести к переоценке или недостаточной частоте торгов.
Не в состоянии адаптироваться к огромным изменениям тренда.
Решения:
Оптимизировать параметры MA для уменьшения ложных сигналов
Внедрять динамические остановки в соответствии с тенденцией
Добавить фильтры с использованием других показателей
Ручное переключение при крупных переворотах
Дальнейшие улучшения стратегии:
Используйте адаптивные или экспоненциальные МА для лучшего определения тенденций.
Добавьте фильтр волатильности, чтобы избежать ложных сигналов во время колебаний рынков.
Оптимизация параметров для лучших комбинаций параметров.
Включить механизмы, следующие за трендом, в логику стоп-лосса.
Добавьте анализ поддержки и сопротивления, чтобы избежать сигналов вокруг ключевых уровней.
Используйте машинное обучение для дальнейшего фильтрации качества сигнала.
Система пересечения скользящих средних является простым, но эффективным подходом к тренду. Фильтровая шум и отслеживая среднесрочные тенденции, она генерирует качественные сигналы. При правильных остановках потерь, она позволяет управлять рисками. Простая логика также делает ее идеальной для начинающих. Дальнейшая оптимизация может интегрировать эту стратегию как эффективный компонент общих квантовых систем.
/*backtest start: 2022-12-15 00:00:00 end: 2023-12-21 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("SMA Crossover Strategy", overlay=true) // Input parameters fast_length = input(9, title="Fast SMA Length") slow_length = input(45, title="Slow SMA Length") // Calculate moving averages fast_sma = ta.sma(close, fast_length) slow_sma = ta.sma(close, slow_length) // Buy condition buy_condition = ta.crossover(close, fast_sma) and ta.crossover(close, slow_sma) // Sell condition sell_condition = ta.crossunder(close, fast_sma) and ta.crossunder(close, slow_sma) // Calculate stop loss levels prev_low = request.security(syminfo.tickerid, "1D", low[1], lookahead=barmerge.lookahead_on) prev_high = request.security(syminfo.tickerid, "1D", high[1], lookahead=barmerge.lookahead_on) // Plot signals on the chart plotshape(buy_condition, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small) plotshape(sell_condition, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small) // Strategy exit conditions long_stop_loss = sell_condition ? prev_low : na short_stop_loss = buy_condition ? prev_high : na strategy.exit("Long Exit", from_entry="Long", when=sell_condition, stop=long_stop_loss) strategy.exit("Short Exit", from_entry="Short", when=buy_condition, stop=short_stop_loss) strategy.entry("Long", strategy.long, when=buy_condition) strategy.entry("Short", strategy.short, when=sell_condition)