Estrategia de cruce de impulso con stop loss de seguimiento dinámico

El autor:¿ Qué pasa?, Fecha: 2024-02-29 13:55:16
Las etiquetas:

img

Resumen general

Esta estrategia combina indicadores de media móvil e indicadores de índice de movimiento direccional (DMI) para generar señales de compra y venta basadas en cruces de dos indicadores.

Estrategia lógica

  1. Construye indicadores de promedio móvil usando una EMA corta de 9 días y una EMA larga de 21 días. Una señal de compra se genera cuando la EMA corta cruza por encima de la EMA larga. Una señal de venta se genera cuando la EMA corta cruza por debajo de la EMA larga.
  2. Construir indicadores DMI utilizando ADX, +DI y -DI. Una señal de compra se activa cuando +DI cruza por encima de -DI. Una señal de venta se activa cuando -DI cruza por encima de +DI.
  3. Combinar las señales de EMA y DMI, requiriendo que ambos indicadores cumplan condiciones antes de emitir señales reales de compra o venta.
  4. En el caso de las operaciones de inversión, el valor de las operaciones de inversión será el valor de las operaciones de inversión.

Análisis de ventajas

  1. Los indicadores a corto plazo capturan los cambios de tendencia, mientras que los a largo plazo determinan la dirección general.
  2. Los indicadores de impulso pueden capturar los cambios de tendencia temprano con algunas características principales.
  3. El stop-loss de seguimiento dinámico bloquea las ganancias tanto como sea posible mientras controla los riesgos.

Análisis de riesgos

  1. Con las combinaciones de doble indicador, la frecuencia de la señal se reduce, posiblemente perdiendo algunas oportunidades.
  2. La mala sintonización de los parámetros de los indicadores puede dar lugar a un exceso de negociación o a señales de baja calidad.
  3. Si se establece un stop loss demasiado amplio, aumenta el riesgo de pérdida, mientras que si se establece demasiado ajustado, aumenta el riesgo de desconexión de la tendencia.

Direcciones de optimización

  1. Prueba combinaciones de EMA con diferentes longitudes a corto y largo plazo para encontrar el óptimo.
  2. Optimizar los parámetros ADX para mejorar la calidad de la señal DMI.
  3. Ajuste fino de los parámetros de stop loss para bloquear las ganancias mientras se gestionan los riesgos.
  4. Considere añadir más filtros para mejorar aún más la calidad de la señal.

Conclusión

Esta estrategia combina los puntos fuertes de las medias móviles y los indicadores de impulso para la doble confirmación de las señales, complementándose entre sí para mejorar la rentabilidad. Mientras tanto, el stop loss dinámico de seguimiento controla eficazmente los riesgos.


/*backtest
start: 2023-02-22 00:00:00
end: 2024-02-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Combined EMA and DMI Strategy with Enhanced Table", overlay=true)

// Input parameters for EMA
shortTermEMA = input.int(9, title="Short-Term EMA Period")
longTermEMA = input.int(21, title="Long-Term EMA Period")
riskPercentageEMA = input.float(1, title="Risk Percentage EMA", minval=0.1, maxval=5, step=0.1)

// Calculate EMAs
emaShort = ta.ema(close, shortTermEMA)
emaLong = ta.ema(close, longTermEMA)

// EMA Crossover Strategy
longConditionEMA = emaShort > emaLong and emaShort[1] <= emaLong[1]
shortConditionEMA = emaShort < emaLong and emaShort[1] >= emaLong[1]

// Input parameters for DMI
adxlen = input(17, title="ADX Smoothing")
dilen = input(17, title="DI Length")

// DMI Logic
dirmov(len) =>
    up = ta.change(high)
    down = -ta.change(low)
    truerange = ta.tr
    plus = fixnan(100 * ta.rma(up > down and up > 0 ? up : 0, len) / truerange)
    minus = fixnan(100 * ta.rma(down > up and down > 0 ? down : 0, len) / truerange)
    [plus, minus]

adx(dilen, adxlen) => 
    [plus, minus] = dirmov(dilen)
    sum = plus + minus
    adxValue = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
    [adxValue, plus, minus]

[adxValue, up, down] = adx(dilen, adxlen)

// DMI Conditions
buyConditionDMI = up > down or (up and adxValue > down)
sellConditionDMI = down > up or (down and adxValue > up)

// Combined Conditions for Entry
longEntryCondition = longConditionEMA and buyConditionDMI
shortEntryCondition = shortConditionEMA and sellConditionDMI

// Combined Conditions for Exit
longExitCondition = shortConditionEMA
shortExitCondition = longConditionEMA

// Enter long trade based on combined conditions
if (longEntryCondition)
    strategy.entry("Long", strategy.long)

// Enter short trade based on combined conditions
if (shortEntryCondition)
    strategy.entry("Short", strategy.short)

// Exit trades
if (longExitCondition)
    strategy.close("Long")

if (shortExitCondition)
    strategy.close("Short")

// Plot EMAs
plot(emaShort, color=color.blue, title="Short-Term EMA")
plot(emaLong, color=color.red, title="Long-Term EMA")

// Create and fill the enhanced table
var tbl = table.new(position.top_right, 4, 1)
if (barstate.islast)
    table.cell(tbl, 0, 0, "ADX: " + str.tostring(adxValue), bgcolor=color.new(color.red, 90), width=15, height=4)
    table.cell(tbl, 1, 0, "+DI: " + str.tostring(up), bgcolor=color.new(color.blue, 90), width=15, height=4)
    table.cell(tbl, 2, 0, "-DI: " + str.tostring(down), bgcolor=color.new(color.orange, 90), width=15, height=4)

   

Más.