
La estrategia es una estrategia de combinación de múltiples indicadores basados en el indicador de William ((%R), el indicador de tendencia de la media móvil ((MACD) y el indicador de movimiento de la media ((EMA)). Al juzgar el estado de sobreventa y sobreventa en el mercado, se combina la tendencia cambiante del indicador de movimiento y el soporte de la línea media para construir un sistema de comercio de seguimiento de tendencias completo. La estrategia no solo incluye la generación de señales de entrada, sino también un mecanismo de gestión de riesgos perfectamente diseñado.
La estrategia se basa en la coordinación de los siguientes tres indicadores centrales:
La estrategia solo abre una posición si cumple con los tres requisitos anteriores. Además, la estrategia incorpora un mecanismo de stop-loss basado en el riesgo-beneficio, que controla el riesgo de cada operación al establecer un porcentaje fijo de stop-loss y un riesgo-beneficio.
La estrategia se basa en la colaboración de múltiples indicadores técnicos para construir un sistema de seguimiento de tendencias más completo. Las principales características de la estrategia son la alta fiabilidad de la señal, el control de riesgo es claro, pero también existe un cierto problema de retraso y sensibilidad a los parámetros.
/*backtest
start: 2025-02-19 00:00:00
end: 2025-02-23 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/
//@version=5
strategy("Williams %R & MACD Swing Strategy", overlay=true)
// INPUTS
length_wpr = input(14, title="Williams %R Length")
overbought = input(-20, title="Overbought Level")
oversold = input(-80, title="Oversold Level")
// MACD Inputs
fastLength = input(12, title="MACD Fast Length")
slowLength = input(26, title="MACD Slow Length")
signalSmoothing = input(9, title="MACD Signal Smoothing")
// EMA for Trend Confirmation
ema_length = input(55, title="EMA Length")
ema55 = ta.ema(close, ema_length)
// INDICATORS
wpr = ta.wpr(length_wpr)
[macdLine, signalLine, _] = ta.macd(close, fastLength, slowLength, signalSmoothing)
// LONG ENTRY CONDITIONS
longCondition = ta.crossover(wpr, oversold) and ta.crossover(macdLine, signalLine) and close > ema55
if longCondition
strategy.entry("Long", strategy.long)
// SHORT ENTRY CONDITIONS
shortCondition = ta.crossunder(wpr, overbought) and ta.crossunder(macdLine, signalLine) and close < ema55
if shortCondition
strategy.entry("Short", strategy.short)
// RISK MANAGEMENT
riskRewardRatio = input(1.5, title="Risk-Reward Ratio")
stopLossPerc = input(2, title="Stop Loss %") / 100
takeProfitPerc = stopLossPerc * riskRewardRatio
longSL = strategy.position_avg_price * (1 - stopLossPerc)
longTP = strategy.position_avg_price * (1 + takeProfitPerc)
shortSL = strategy.position_avg_price * (1 + stopLossPerc)
shortTP = strategy.position_avg_price * (1 - takeProfitPerc)
strategy.exit("Take Profit / Stop Loss", from_entry="Long", loss=longSL, profit=longTP)
strategy.exit("Take Profit / Stop Loss", from_entry="Short", loss=shortSL, profit=shortTP)