
La estrategia de parada de pérdidas de la línea media tri-indicativa es una estrategia de seguimiento de tendencias para la entrada y salida a la bolsa basada en las medias móviles de los índices de tres períodos diferentes. Al mismo tiempo, utiliza el indicador de la amplitud de onda real promedio para establecer la parada de pérdidas y gestionar el riesgo.
La estrategia utiliza tres promedios móviles indexados: la línea rápida, la línea media y la línea lenta. Hacer más cuando la línea media atraviesa la línea lenta; y cerrar la posición cuando la línea rápida atraviesa la línea media. Esta es una estrategia típica de seguimiento de tendencias que determina la dirección de la tendencia a través de la conversión de tres líneas uniformes.
Al mismo tiempo, la estrategia utiliza el indicador de la amplitud real media para calcular el stop loss. En concreto, el precio de entrada más la amplitud real media de las paradas múltiples*Coeficiente de parada; puesto de parada vacío como precio de entrada - amplitud real promedio*El coeficiente de frenado. El principio de frenado es similar al de frenado. Esto puede limitar eficazmente el riesgo unilateral.
Las medidas de respuesta al riesgo incluyen: la reducción adecuada del ciclo promedio, la optimización del coeficiente de parada y deterioro, la adición de otros indicadores de decisión para ayudar a juzgar.
La estrategia es en general una estrategia de seguimiento de tendencias de efecto estable, con una configuración de parámetros sencilla y fácil de implementar. Se puede limitar el riesgo unilateral mediante el stop loss dinámico de la amplitud de onda real promedio. Sin embargo, se debe tener en cuenta la optimización de parámetros y la combinación de indicadores para evitar la optimización excesiva y el retraso en la toma de decisiones. En general, el balance de riesgos-beneficios es bueno y vale la pena considerarlo.
/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
//© Densz
strategy("3EMA with TP & SL (ATR)", overlay=true )
// INPUTS
startTime = input(title="Start Time", type = input.time, defval = timestamp("01 Jan 2017 00:00 +0000"))
endTime = input(title="End Time", type = input.time, defval = timestamp("01 Jan 2022 00:00 +0000"))
slowEMALength = input(title="Slow EMA Length", type = input.integer, defval = 55)
middleEMALength = input(title="Middle EMA Length", type = input.integer, defval = 21)
fastEMALength = input(title="Fast EMA Length", type = input.integer, defval = 9)
trendMALength = input(title="Trend indicator MA Length", type = input.integer, defval = 200)
atrLength = input(title="ATR Length", type = input.integer, defval = 14)
tpATRMult = input(title="Take profit ATR multiplier", type = input.integer, defval = 3)
slATRMult = input(title="Stop loss ATR multiplier", type = input.integer, defval = 2)
rsiLength = input(title="RSI Length", type = input.integer, defval = 14)
// Indicators
slowEMA = ema(close, slowEMALength)
middEMA = ema(close, middleEMALength)
fastEMA = ema(close, fastEMALength)
atr = atr(atrLength)
rsiValue = rsi(close, rsiLength)
isRsiOB = rsiValue >= 80
isRsiOS = rsiValue <= 20
sma200 = sma(close, trendMALength)
inDateRange = true
// Plotting
plot(slowEMA, title="Slow EMA", color=color.red, linewidth=2, transp=50)
plot(middEMA, title="Middle EMA", color=color.orange, linewidth=2, transp=50)
plot(fastEMA, title="Fast EMA", color=color.green, linewidth=2, transp=50)
plot(sma200, title="SMA Trend indicator", color=color.purple, linewidth=3, transp=10)
plotshape(isRsiOB, title="Overbought", location=location.abovebar, color=color.red, transp=0, style=shape.triangledown, text="OB")
plotshape(isRsiOS, title="Oversold", location=location.belowbar, color=color.green, transp=0, style=shape.triangledown, text="OS")
float takeprofit = na
float stoploss = na
var line tpline = na
var line slline = na
if strategy.position_size != 0
takeprofit := takeprofit[1]
stoploss := stoploss[1]
line.set_x2(tpline, bar_index)
line.set_x2(slline, bar_index)
line.set_extend(tpline, extend.none)
line.set_extend(slline, extend.none)
// STRATEGY
goLong = crossover(middEMA, slowEMA) and inDateRange
closeLong = crossunder(fastEMA, middEMA) and inDateRange
if goLong
takeprofit := close + atr * tpATRMult
stoploss := close - atr * slATRMult
// tpline := line.new(bar_index, takeprofit, bar_index, takeprofit, color=color.green, width=2, extend=extend.right, style=line.style_dotted)
// slline := line.new(bar_index, stoploss, bar_index, stoploss, color=color.red, width=2, extend=extend.right, style=line.style_dotted)
// label.new(bar_index, takeprofit, "TP", style=label.style_labeldown)
// label.new(bar_index, stoploss, "SL", style=label.style_labelup)
strategy.entry("Long", strategy.long, when = goLong)
strategy.exit("TP/SL", "Long", stop=stoploss, limit=takeprofit)
if closeLong
takeprofit := na
stoploss := na
strategy.close(id = "Long", when = closeLong)
if (not inDateRange)
strategy.close_all()