
La estrategia es un sistema de comercio de volúmenes de seguimiento de tendencias que combina múltiples indicadores técnicos. Se basa principalmente en la dirección de la gran tendencia a través de la media móvil de 200 días (MA200), utiliza la media móvil de 50 días (EMA50) para identificar oportunidades de reajuste, y combina señales cruzadas de un indicador relativamente débil (RSI) y la dispersión de la tendencia de la media móvil (MACD) para determinar la oportunidad de entrada.
La lógica central de la estrategia es mejorar la precisión de la negociación a través de un mecanismo de filtración de múltiples capas. En primer lugar, la estrategia determina la tendencia dominante del mercado a través de MA200, que se determina como una tendencia de múltiples cabezas cuando el precio está por encima de MA200, y no como una tendencia de cabeza. Después de determinar la dirección de la tendencia, la estrategia busca oportunidades de reajuste cerca de EMA50 y requiere que el precio toque EMA50 en los últimos 5 períodos.
La estrategia construye un sistema de seguimiento de tendencias completo mediante el uso integrado de varios indicadores técnicos. La ventaja de la estrategia es que la confirmación de múltiples señales mejora la confiabilidad de las transacciones, mientras que el mecanismo de control de riesgos proporciona una buena protección a la estrategia. A pesar de los riesgos inherentes, la orientación de optimización recomendada puede mejorar aún más el rendimiento de la estrategia.
/*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)