
Стратегия представляет собой динамическую торговую систему, отслеживающую тренд в сочетании с несколькими техническими показателями. Она определяет направление большого тренда, используя 200-дневную скользящую среднюю ((MA200), 50-дневную скользящую среднюю ((EMA50) для выявления возможностей для отклонения, и использует кросс-сигналы относительно слабых показателей ((RSI) и рассеянности тренда скользящих средних ((MACD) для определения времени входа. Стратегия также содержит механизм контроля риска, защищающий прибыль от убытков, устанавливая коэффициент прибыли от риска и отслеживая его.
Центральная логика стратегии заключается в повышении точности торгов с помощью многоуровневого механизма фильтрации. Во-первых, с помощью MA200 определяется основная тенденция рынка, которая определяется как многоуровневая тенденция, когда цена находится выше MA200, и наоборот, как воздушная тенденция. После определения направления тенденции стратегия ищет возможности для обратной связи около EMA50, требуя, чтобы цена достигла EMA50 за последние 5 циклов.
Стратегия использует несколько технических показателей для создания целостной системы отслеживания трендов. Преимущество стратегии заключается в том, что подтверждение нескольких сигналов повышает надежность торгов, а механизм управления рисками обеспечивает хорошую защиту стратегии. Несмотря на некоторые присущие риски, ее эффективность может быть улучшена с помощью рекомендаций по оптимизации.
/*backtest
start: 2024-02-21 00:00:00
end: 2024-08-10 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy("Trend-Following Momentum Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=2)
// PARAMETERS
lengthMA200 = input(200, title="200-day MA Length")
lengthEMA50 = input(50, title="50-day EMA Length")
rsiLength = input(14, title="RSI Length")
macdFastLength = input(12, title="MACD Fast Length")
macdSlowLength = input(26, title="MACD Slow Length")
macdSignalLength = input(9, title="MACD Signal Length")
riskRewardRatio = input(1.5, title="Risk-Reward Ratio")
useTrailingStop = input(true, title="Use Trailing Stop?")
trailingPercent = input(1.0, title="Trailing Stop (%)") / 100
// INDICATORS
ma200 = ta.sma(close, lengthMA200) // 200-day MA
ema50 = ta.ema(close, lengthEMA50) // 50-day EMA
rsi = ta.rsi(close, rsiLength) // RSI
[macdLine, signalLine, _] = ta.macd(close, macdFastLength, macdSlowLength, macdSignalLength)
// TREND CONDITIONS
bullishTrend = close > ma200
bearishTrend = close < ma200
// PULLBACK CONDITION
recentPullbackLong = ta.barssince(close < ema50) < 5 // Price touched EMA50 in last 5 bars
recentPullbackShort = ta.barssince(close > ema50) < 5 // Price touched EMA50 in last 5 bars
// ENTRY CONDITIONS
longEntry = bullishTrend and ta.crossover(macdLine, signalLine) and rsi > 50 and recentPullbackLong
shortEntry = bearishTrend and ta.crossunder(macdLine, signalLine) and rsi < 50 and recentPullbackShort
// EXECUTE TRADES
if longEntry
strategy.entry("Long", strategy.long)
strategy.exit("Long Exit", from_entry="Long", limit=close * (1 + riskRewardRatio), stop=close * (1 - (1 / (1 + riskRewardRatio))), trail_price=useTrailingStop ? close * (1 - trailingPercent) : na)
if shortEntry
strategy.entry("Short", strategy.short)
strategy.exit("Short Exit", from_entry="Short", limit=close * (1 - riskRewardRatio), stop=close * (1 + (1 / (1 + riskRewardRatio))), trail_price=useTrailingStop ? close * (1 + trailingPercent) : na)
// PLOT INDICATORS
plot(ma200, title="200-day MA", color=color.blue, linewidth=2)
plot(ema50, title="50-day EMA", color=color.orange, linewidth=2)