Estrategia de control de riesgos basada en la supertendencia y el MACD


Fecha de creación: 2024-03-11 11:24:20 Última modificación: 2024-03-11 11:24:20
Copiar: 0 Número de Visitas: 372
1
Seguir
1166
Seguidores

Estrategia de control de riesgos basada en la supertendencia y el MACD

Descripción general

La estrategia combina indicadores de supertrend y MACD para obtener ganancias capturando pequeñas tendencias. La estrategia usa indicadores de supertrend para juzgar la tendencia actual del mercado, mientras usa el indicador MACD como condición auxiliar para entrar y salir. La lógica de la estrategia es clara, fácil de entender y implementar.

Principio de estrategia

  1. Utiliza la función ta.supertrend para calcular el indicador de supertrend, con los parámetros ATR y el factor multiplicador.
  2. La tendencia a la baja se considera cuando la dirección cambia de mayor a 0 a menor que 0, y viceversa.
  3. Utiliza la función request.security para obtener los indicadores MACD de un período de 30 minutos, incluidas las líneas MACD, las líneas de señal y el gráfico de columnas.
  4. En una tendencia alcista, si el MACD es mayor que 0, se abre una posición adicional y se liquida la posición vacía anterior.
  5. En una tendencia bajista, si el MACD es menor que 0, se abre una posición vacía y se liquida la posición superior anterior.

Análisis de las ventajas

  1. La combinación de seguimiento de tendencias y indicadores de dinámica permite una mejor adaptación a las diferentes condiciones del mercado.
  2. El uso de indicadores MACD de períodos más largos como condición auxiliar puede filtrar eficazmente algunas señales falsas.
  3. La lógica de la estrategia es simple, fácil de entender y de implementar, adecuada para que los principiantes aprendan.
  4. Los parámetros de la estrategia son ajustables y se pueden optimizar para diferentes mercados y variedades.

Análisis de riesgos

  1. Las estrategias pueden generar más señales de negociación en mercados convulsionados, lo que lleva a operaciones frecuentes y altos costos de puntos de deslizamiento.
  2. Los indicadores de tendencia súper son más sensibles a los parámetros, y diferentes configuraciones de parámetros pueden obtener resultados diferentes.
  3. Los indicadores MACD pueden desviarse del precio, dando lugar a una señal de negociación incorrecta.
  4. La estrategia carece de medidas de detención de pérdidas, lo que puede suponer un mayor riesgo en caso de una situación de debilidad persistente o un evento repentino.

Dirección de optimización

  1. Se puede considerar la inclusión de más condiciones de filtración, como la ruptura de precios de soporte o resistencia importantes, cambios en el volumen de transacción, etc., para mejorar la fiabilidad de la señal.
  2. Para los mercados convulsivos, se puede considerar el uso de indicadores MACD de períodos más cortos u otros indicadores adecuados para los mercados convulsivos para juzgar la tendencia.
  3. Se pueden agregar medidas de stop loss, como stop loss fijo, stop loss móvil, etc., para controlar el máximo riesgo de una sola transacción.
  4. Se pueden optimizar los parámetros para diferentes mercados y variedades para encontrar la combinación de parámetros más adecuada.

Resumir

La estrategia es una estrategia más completa y equilibrada, ya que combina el indicador de tendencia súper y el indicador MACD para capturar tendencias pequeñas y, al mismo tiempo, considerar la continuidad de la tendencia. La estrategia tiene la ventaja de ser lógica, clara, fácil de entender e implementar, y puede filtrar eficazmente algunas señales falsas mediante el uso de indicadores MACD de períodos más largos como condiciones auxiliares.

Código Fuente de la Estrategia
/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-29 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Samsuga supertrend", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)


atrPeriod = input.int(7,    "ATR Length", minval = 1)
factor =    input.float(1.0, "Factor",     minval = 0.01, step = 0.01)

[supertrend, direction] = ta.supertrend(factor, atrPeriod)

supertrend := barstate.isfirst ? na : supertrend
upTrend =    plot(direction <= 0 ? supertrend : na, "Up Trend",   color = color.green, style = plot.style_linebr)
downTrend =  plot(direction <= 0 ? na : supertrend, "Down Trend", color = color.red,   style = plot.style_linebr)
bodyMiddle = plot(barstate.isfirst ? na : (open + close) / 2, "Body Middle",display = display.none)
longcondition = direction[1] > direction 
shortCondition = direction[1] < direction 

macdp1 = 3
macdp2=10
macdp3=6

[macdLine, signalLine, histLine] =request.security(symbol = syminfo.tickerid, timeframe = "30",expression = ta.macd(close,macdp1,macdp2,macdp3),lookahead=barmerge.lookahead_on)
// plot(macdLine,   title = "MACD",   color = #2962FF)
// plot(signalLine, title = "Signal", color = #FF6D00)
// 8, 21, 5
// 8,13,9
// 12,26,9
//  1--> 3, 17, 5
// 3, 10, 16
// log.info(str.tostring(syminfo.tickerid)+str.tostring(histLine[0]))
//  /////////----------------METHOD 1-----------------////////////////
// if(longcondition)
//     if(strategy.opentrades>0)
//         strategy.close("Long","Prev Exit", immediately = true)
//     if( histLine[0] > 0.1)
//         strategy.entry(id= "Long", direction=strategy.long,  comment = "update long")

    
// else if(shortCondition and strategy.openprofit<=0.1) 
//     strategy.close("Long",comment = "Close",immediately = true)
//  /////////----------------METHOD 2-----------------////////////////
// if(longcondition)
//     if(histLine[0] > 0)
//         strategy.entry(id= "Long", direction=strategy.long,  comment = "update long" )
//         strategy.exit("Long", loss = close*0.2)


    
// else if(shortCondition ) 
//     strategy.close("Long",comment = "Close",immediately = true)
//  /////////----------------METHOD 3-----------------////////////////
// log.info(str.tostring(syminfo.tickerid)+str.tostring(histLine[0]))
if(longcondition)
    if(histLine[0] > 0)    
        strategy.close("Short",comment = "E-S", alert_message = "E-S",disable_alert = true)
        strategy.entry(id= "Long", direction=strategy.long,  comment = "L",alert_message = "L")
else if(shortCondition) 
    if(histLine[0] < 0)    
        strategy.close("Long",comment = "E-L",alert_message = "E-L",disable_alert = true)
        strategy.entry(id= "Short", direction=strategy.short,  comment = "S",alert_message = "S")