
A estratégia é um sistema de negociação dinâmico de acompanhamento de tendências que combina vários indicadores técnicos. Ela determina a direção da grande tendência principalmente com a média móvel de 200 dias (MA200), identifica oportunidades de retorno com a média móvel de 50 dias (EMA50) e combina sinais cruzados de indicadores relativamente fracos (RSI) e dispersação de tendências de médias móveis (MACD) para determinar o momento de entrada.
A lógica central da estratégia é melhorar a precisão das negociações por meio de um mecanismo de filtragem em várias camadas. Primeiro, a estratégia determina a tendência dominante do mercado através da MA200, que é julgada como uma tendência multi-cabeça quando o preço está acima da MA200, em vez de uma tendência aéreas. Depois de determinar a direção da tendência, a estratégia procura oportunidades de reversão perto da EMA50, exigindo que o preço toque a EMA50 nos últimos 5 períodos.
A estratégia utiliza vários indicadores técnicos para construir um sistema de negociação de acompanhamento de tendências completo. A vantagem da estratégia é que a confirmação de múltiplos sinais aumenta a confiabilidade da negociação, enquanto o mecanismo de controle de risco oferece uma boa proteção para a estratégia. Apesar de alguns riscos inerentes, o desempenho da estratégia pode ser melhorado ainda mais com a orientação de otimização recomendada.
/*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)