Basado en la estrategia del índice de movimiento bidireccional


Fecha de creación: 2024-02-18 10:00:22 Última modificación: 2024-02-18 10:00:22
Copiar: 0 Número de Visitas: 620
1
Seguir
1617
Seguidores

Basado en la estrategia del índice de movimiento bidireccional

Descripción general

La estrategia genera una señal de compra cuando el DI+ se encuentra por encima del DI+ y el ADX es superior a 20; una señal de venta cuando el DI+ se encuentra por debajo del DI+ y el ADX es superior a 25; una señal de pérdida de la operación se produce cuando el DI+ se encuentra por encima del DI y el ADX es superior a 30.

Principio de estrategia

  1. Calcular el DI+ y el DI-ADX

    • La función ta.dmi () calcula las funciones DI+, DI- y ADX
    • DI+/DI- refleja la dirección de los precios
    • El ADX refleja el promedio de variación de los precios
  2. Cálculo de las medias móviles del índice EMA

    • Calcula el EMA llamando la función my_ema ()
    • La EMA puede suavizar los datos de precios
  3. Generación de señales de comercio

    • Señales de compra: DI+ sobre el DI- y ADX>20 y el precio de cierre>EMA
      • Explica la tendencia al alza y el gran movimiento de los precios
    • Se vende la señal: DI- debajo de DI+ y ADX> 25 y el precio de cierre < EMA
      • Explica la tendencia a la baja de los precios y las grandes variaciones
  4. Cancelación de pérdidas

    • Comprar para detener: el DI+ en el DI- y el ADX> 30
      • Explicación del cambio de tendencia de los precios
    • Se vende el stop loss: DI+ por debajo de DI- y ADX> 30
      • Explicación del cambio de tendencia de los precios

En resumen, la estrategia combina el indicador de movimiento y el indicador de tendencia para generar señales de negociación cuando los precios son más tendenciales. Al mismo tiempo, establece condiciones de parada para limitar las pérdidas.

Análisis de las ventajas

  1. Uso de doble DI para evitar señales falsas
    • Un solo DI es propenso a generar señales erróneas, la combinación de DI+ y DI- asegura la tendencia
  2. Condiciones ADX para asegurar una mayor variación de precios
    • El comercio sólo cuando las fluctuaciones de los precios se intensifican, para evitar mercados convulsivos
  3. Condiciones de la EMA para cooperar con el DI
    • La EMA puede identificar con eficacia las tendencias de la línea media de los precios
  4. Estricto límite de pérdidas
    • El cierre oportuno para evitar grandes pérdidas

Análisis de riesgos

  1. Frecuentes pérdidas
    • Si la situación es muy violenta, el paro será demasiado frecuente.
  2. Dependencias de parámetros
    • Los parámetros DI y ADX necesitan ser optimizados para encontrar la mejor combinación
  3. Baja frecuencia de las transacciones
    • Las condiciones más estrictas reducen la frecuencia de las transacciones

Se puede optimizar mediante la ampliación de los límites de pérdida, la adaptación de la combinación de parámetros, o la adición de condiciones de filtración adicionales para aumentar la frecuencia de las operaciones.

Dirección de optimización

  1. Optimización de parámetros
    • Optimización de los parámetros DI y ADX para encontrar la combinación óptima de parámetros
  2. Añadir un filtro
    • Las condiciones de filtración de la señal, como la adición de volumen de transacción, desviación, etc.
  3. Ampliar el límite de pérdidas
    • Relajación adecuada de las condiciones de pérdidas para reducir la frecuencia de las pérdidas

Resumir

La estrategia integra el indicador de movimiento y el indicador de análisis de tendencias para generar señales de negociación cuando los precios son tendenciales. Se puede mejorar aún más la eficacia de la estrategia mediante la optimización de los parámetros, el aumento de los filtros de señal y la ampliación adecuada de la amplitud de la parada.

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