Двойная стратегия торговли скользящей средней генерирует торговые сигналы, рассчитывая быстрые и медленные скользящие средние и наблюдая за перекрестками. Когда быстрая скользящая средняя пересекает более медленной скользящей средней, принимается длинная позиция. Когда быстрая скользящая средняя пересекает ниже медленной скользящей средней, принимается короткая позиция. Стратегия может использоваться как для торговли трендом, так и для торговли контртендом.
Стратегия сначала устанавливает длины быстро движущейся средней maFastLength и медленно движущейся средней maSlowLength. Затем она вычисляет быстро движущуюся среднюю fastMA и медленно движущуюся среднюю slowMA. Быстро движущаяся средняя реагирует быстрее на изменения цен и используется для оценки текущего тренда, в то время как медленно движущаяся средняя реагирует медленнее и используется для определения направления тренда.
Когда быстрая скользящая средняя пересекает медленную скользящую среднюю, генерируется длинный входный сигнал goLong().
Стратегия может быть настроена только на длинный, только на короткий, или разрешать как длинные, так и короткие сделки.
В длинном режиме длинные позиции вводятся на сигнал goLong() и выводятся на сигнал killLong().
В режиме только коротких позиций короткие позиции вводятся на сигнал killLong() и выводятся на сигнал goLong().
В режиме свопа длинные позиции вводятся на goLong ((), закрываются и переводятся на короткие на killLong (().
Стратегия также включает в себя стоп-лосс, стоп-остановку, сообщения и другие дополнительные функции.
Просто и легко внедряется.
Гибкость для покупки длинного, короткого или обоих.
Опциональные функции остановки потери и остановки задержки.
Настраиваемые сообщения для оповещения о сделках.
Чувствительны к тенденциям на рынке.
Настраиваемые параметры адаптируются к различным рынкам.
Может привести к чрезмерным сделкам на нестабильных рынках.
Медленно реагирует на внезапные новости.
Выбор параметров влияет на эффективность стратегии.
Следуйте строго сигналам, избегайте дискреционной торговли.
Торговые издержки могут снизить прибыль, если их не учитывать.
Добавьте такие фильтры, как RSI, чтобы избежать ложных сигналов.
Используйте оптимизацию параметров для поиска лучших настроек.
Используйте динамические остановки, чтобы зафиксировать прибыль и скорректировать.
Включить машинное обучение для прогнозирования трендов.
Оптимизировать сообщения для индивидуальных торговых привычек.
Стратегия двойной скользящей средней относительно проста и полезна для улавливания сильных трендов. Однако следует позаботиться о том, чтобы избежать сбоев в условиях низкого тренда. Прямые параметры настройки и добавление вспомогательных индикаторов или улучшений могут еще больше улучшить надежность и адаптивность.
/*backtest start: 2022-10-20 00:00:00 end: 2023-10-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("SMA Strategy", shorttitle="SMA Strategy", overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=100) // === Inputs === // short ma maFastSource = input(defval=close, title="Fast MA Source") maFastLength = input(defval=3, title="Fast MA Period", minval=1) // long ma maSlowSource = input(defval=close, title="Slow MA Source") maSlowLength = input(defval=9, title="Slow MA Period", minval=1) // Trade direction shorting = input(defval=false, title="Short only?") longonly = input(defval=true, title="Long only?") swapping = input(defval=false, title="Swap orders?") // risk management useStop = input(defval=false, title="Use Initial Stop Loss?") slPoints = input(defval=25, title="Initial Stop Loss Points", minval=1) useTS = input(defval=false, title="Use Trailing Stop?") tslPoints = input(defval=120, title="Trail Points", minval=1) useTSO = input(defval=false, title="Use Offset For Trailing Stop?") tslOffset = input(defval=20, title="Trail Offset Points", minval=1) // Messages for buy and sell message_long_entry = input("Long entry message", title="Long entry message") message_long_exit = input("Long exit message", title="Long exit message") message_short_entry = input("Short entry message", title="Short entry message") message_short_exit = input("Short exit message", title="Short exit message") // Calculate start/end date and time condition startDate = input(timestamp("2021-01-01T00:00:00"), type = input.time) finishDate = input(timestamp("2021-12-31T00:00:00"), type = input.time) time_cond = true // === Vars and Series === fastMA = sma(maFastSource, maFastLength) slowMA = sma(maSlowSource, maSlowLength) plot(fastMA, color=color.blue) plot(slowMA, color=color.purple) goLong() => crossover(fastMA, slowMA) killLong() => crossunder(fastMA, slowMA) // Long only if longonly strategy.entry("Buy", strategy.long, when=goLong() and time_cond, alert_message = message_long_entry) strategy.close("Buy", when=killLong() and time_cond, alert_message = message_long_exit) // Short only if shorting strategy.entry("Sell", strategy.short, when=killLong() and time_cond, alert_message = message_short_entry) strategy.close("Sell", when=goLong() and time_cond, alert_message = message_short_exit) // Order Swapping if swapping strategy.entry("Buy", strategy.long, when=goLong() and time_cond, alert_message = message_long_entry) strategy.entry("Sell", strategy.short, when=killLong() and time_cond, alert_message = message_short_entry) if useStop strategy.exit("XLS", from_entry="Buy", stop=strategy.position_avg_price / 1.08, alert_message = message_long_exit) strategy.exit("XSS", from_entry="Sell", stop=strategy.position_avg_price * 1.08, alert_message = message_short_exit)