Com base na estratégia de índice de movimento bidirecional


Data de criação: 2024-02-18 10:00:22 última modificação: 2024-02-18 10:00:22
cópia: 0 Cliques: 620
1
focar em
1617
Seguidores

Com base na estratégia de índice de movimento bidirecional

Visão geral

A estratégia gera um sinal de compra quando o DI+ passa pelo DI+ e o ADX é superior a 20; um sinal de venda quando o DI+ passa pelo DI+ e o ADX é superior a 25; um sinal de parada de negociação é o DI+ passa pelo DI e o ADX é superior a 30.

Princípio da estratégia

  1. Calcular DI+, DI- e ADX

    • Chamando a função ta.dmi (()) calcule DI+, DI- e ADX
    • DI+/DI- refletindo a direção dos preços
    • O ADX reflete a amplitude média da variação dos preços
  2. Calcule a média móvel do índice EMA

    • EMA computação por meio da função my_ema ()
    • A EMA pode ser eficaz na suavização de dados de preços
  3. Geração de sinais de transação

    • Sinais de compra: DI+ sobre o DI- e ADX> 20 e preço de fechamento> EMA
      • Explicação da tendência de alta e maior variação dos preços
    • Sinais de venda: DI- com DI+ e ADX> 25 e preço de fechamento < EMA
      • Explicação da tendência de baixa e maior variação dos preços
  4. Cessação de perdas

    • Comprar Stop Loss: DI+ em cima do DI e ADX>30
      • Explicação da inversão de preços
    • Vender Stop Loss: DI+ por baixo do DI- e ADX> 30
      • Explicação da inversão de preços

Em suma, a estratégia combina o indicador de volume de movimento com o indicador de tendência, gerando sinais de negociação quando o preço é mais tendencial. Ao mesmo tempo, define condições de parada para limitar a perda.

Análise de vantagens

  1. Uso de duplo DI para evitar falsos sinais
    • Um único DI é propenso a erros, mas a combinação de DI+ e DI- garante tendência.
  2. Condições ADX para garantir maior variação de preços
    • Negociar apenas quando a volatilidade aumenta, evitando mercados de turbulência
  3. EMA condicional de cooperação com o DI
    • A EMA é eficaz na identificação de tendências de longo prazo nos preços
  4. Condições de paralisação rígidas
    • “O que é que eu tenho a dizer?”

Análise de Riscos

  1. Perda frequente
    • Se houver um tremor forte, o stop loss será muito frequente.
  2. Dependência de parâmetros
    • Os parâmetros DI e ADX precisam ser otimizados para encontrar a melhor combinação
  3. Baixa frequência de transações
    • Condições mais rigorosas reduzem a frequência das transações

Pode-se otimizar a frequência de negociação aumentando a amplitude de stop loss, ajustando o conjunto de parâmetros ou adicionando condições de filtragem adicionais.

Direção de otimização

  1. Optimização de parâmetros
    • Otimizar os parâmetros DI e ADX para encontrar a melhor combinação de parâmetros
  2. Adicionar filtros
    • Filtração de sinais de condições como adição de volume de transação, desvio, etc.
  3. Ampliação do Stop Loss
    • Limitação adequada das condições de suspensão e redução da frequência de suspensão

Resumir

A estratégia integra o indicador de movimento com o indicador de análise de tendências para produzir sinais de negociação quando a tendência dos preços é forte. O risco de controle de condições de parada rígidas pode ser aumentado ainda mais com a otimização de parâmetros, o aumento do filtro de sinal e o aumento apropriado da amplitude de parada.

Código-fonte da estratégia
/*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)