Estrategia de stop-profit y stop-loss con promedios móviles de tres índices


Fecha de creación: 2024-02-04 10:38:42 Última modificación: 2024-02-04 10:38:42
Copiar: 0 Número de Visitas: 680
1
Seguir
1617
Seguidores

Estrategia de stop-profit y stop-loss con promedios móviles de tres índices

Descripción general

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.

Principio de estrategia

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.

Análisis de las ventajas

  1. Los indicadores de decisión son intuitivos, claros y fáciles de entender.
  2. Es un sistema fuerte y fácil de cuantificar.
  3. La combinación de seguimiento de tendencias y control de riesgos.

Análisis de riesgos

  1. Hay un cierto retraso en la captura de los cambios en el tiempo.
  2. La tendencia de las convulsiones es de fácil deterioro.
  3. La configuración de los parámetros necesita ser optimizada, de lo contrario no se logrará un buen resultado.

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.

Dirección de optimización

  1. Combinación de varios indicadores de medianías para encontrar el mejor parámetro.
  2. Añadir otros indicadores técnicos como MACD, RSI, etc.
  3. Los parámetros se optimizan automáticamente con algoritmos de aprendizaje automático.
  4. El punto de parada y pérdida se ajusta en función de la dinámica real de la amplitud de onda.
  5. La combinación de los indicadores emocionales evita el exceso de tráfico.

Resumir

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.

Código Fuente de la Estrategia
/*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()