Estrategia de señales de tendencia de superposición

El autor:¿ Qué pasa?, Fecha: 2024-02-18 10:00:22
Las etiquetas:

img

Resumen general

Esta estrategia genera señales comerciales calculando los índices de movimiento direccional (DMI) DI+ y DI- junto con el índice direccional promedio (ADX) y el promedio móvil exponencial (EMA).

Estrategia lógica

  1. Calcular el DI+, DI-, ADX

    • Utilice ta.dmi() para calcular DI+, DI-, ADX
    • DI+/DI- mide el movimiento direccional de los precios
    • ADX mide la fuerza del movimiento de precios
  2. Calcular la media móvil exponencial

    • Utilice la función my_ema() personalizada para calcular la EMA
    • La EMA suaviza los datos de precios
  3. Generar señales comerciales

    • Signales largos: DI+ se cruza por encima de DI- y ADX > 20 y cerca > EMA
      • Indica tendencia al alza y mayor volatilidad
    • Signales cortos: DI- se cruza por debajo de DI+ y ADX > 25 y cerca < EMA
      • Indica tendencia a la baja y alta volatilidad
  4. Establecer la pérdida de parada

    • Pérdida de parada larga: DI- se cruza por encima de DI+ y ADX > 30
      • Indica la reversión de la tendencia
    • Pérdida de parada corta: DI+ se cruza por debajo de DI- y ADX > 30
      • Indica la reversión de la tendencia

En resumen, esta estrategia combina indicadores de análisis de impulso y tendencia para operar cuando surgen fuertes tendencias de precios, con stop losses para limitar las pérdidas.

Análisis de ventajas

  1. El doble DI evita las señales falsas
    • El DI único puede dar señales falsas, el DI doble asegura la tendencia
  2. El umbral de ADX requiere una mayor volatilidad
    • Sólo se negocian movimientos de alta volatilidad, evita el intervalo
  3. La EMA complementa el DI
    • La EMA identifica las tendencias a medio y largo plazo
  4. Pérdida de detención estricta
    • Reduzca las pérdidas rápidamente

Análisis de riesgos

  1. Pérdida de parada frecuente
    • Las oscilaciones volátiles pueden provocar paradas frecuentes
  2. Dependencia del parámetro
    • Hay que encontrar los parámetros óptimos de DI y ADX
  3. Baja frecuencia de operaciones
    • Las reglas estrictas reducen los oficios

Se puede optimizar mediante la expansión de la pérdida de parada, ajuste de parámetros, añadiendo filtros para aumentar la frecuencia.

Oportunidades de optimización

  1. Optimización de parámetros
    • Optimización de los parámetros DI y ADX
  2. Añadir filtros
    • El volumen, la divergencia, etc.
  3. Ampliar el stop loss
    • Paradas relajadas para reducir la frecuencia

Conclusión

Esta estrategia combina indicadores de análisis de impulso y tendencia para operar con tendencias fuertes, con paradas estrictas para controlar el riesgo.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Tamil_FNO_Trader

//@version=5
strategy("Overlay Signals by TFOT", overlay=true)

// Calculate DMI
len = input.int(14, minval=1, title="DI Length")
lensig = input.int(14, title="ADX Smoothing", minval=1, maxval=50)
[diplus, diminus, adx] = ta.dmi(len, lensig)

// Get EMA
emalen = input.int(26, minval=1, title = "EMA Length")
emasrc = input.source(close, title = "EMA Source")

my_ema(src, length) =>
    alpha = 2 / (length + 1)
    sum = 0.0
    sum := na(sum[1]) ? src : alpha * src + (1 - alpha) * nz(sum[1])
EMA2 = my_ema(emasrc, emalen)

// Variables
var bool buycondition1 = false
var bool sellcondition1 = false

var int firstbuybar = na
var int firstsellbar = na

var int buyexitbar = na
var int sellexitbar = na

var bool buyexit1 = false
var bool sellexit1 = false

// Buy & Sell Conditions
buycondition1 := (ta.crossover(diplus, diminus)) and (adx > 20) and (close > EMA2) and na(firstbuybar)
sellcondition1 := (ta.crossover(diminus, diplus)) and (adx > 25) and (close < EMA2) and na(firstsellbar)

buyexit1 := ta.crossover(diminus, diplus) and (adx > 30) and na(buyexitbar)
sellexit1 := ta.crossover(diplus, diminus) and (adx > 30) and na(sellexitbar)

if buycondition1
    if(na(firstbuybar))
        firstbuybar := bar_index
        buyexitbar := na
        firstsellbar := na
        strategy.entry("Buy", strategy.long)

if sellcondition1
    if(na(firstsellbar))
        firstsellbar := bar_index
        sellexitbar := na
        firstbuybar := na
        strategy.entry("Sell", strategy.short)

if buyexit1 and not na(firstbuybar)
    if(na(buyexitbar))
        buyexitbar := bar_index
        firstbuybar := na
        firstsellbar := na
        strategy.close("Buy")

if sellexit1 and not na(firstsellbar)
    if(na(sellexitbar))
        sellexitbar := bar_index
        firstsellbar := na
        firstbuybar := na
        strategy.close("Sell")

// Plot signals on chart
hl = input.bool(defval = true, title = "Signal Labels")

plotshape(hl and buycondition1 and bar_index == firstbuybar ? true : na, "Buy", style = shape.labelup, location = location.belowbar, color = color.green, text = "Buy", textcolor = color.white, size = size.tiny)
plotshape(hl and sellcondition1 and bar_index == firstsellbar ? true : na, "Sell", style = shape.labeldown, location = location.abovebar, color = color.red, text = "Sell", textcolor = color.white, size = size.tiny)

plotshape(hl and buyexit1 and bar_index == buyexitbar ? true : na, "Buy Exit", style = shape.labelup, location = location.belowbar, color = color.red, text = "Buy X", textcolor = color.white, size = size.tiny)
plotshape(hl and sellexit1 and bar_index == sellexitbar ? true : na, "Sell Exit", style = shape.labeldown, location = location.abovebar, color = color.red, text = "Sell X", textcolor = color.white, size = size.tiny)



Más.