Tendência de seguir uma estratégia baseada no indicador de dupla média móvel cruzada e no indicador de DMI de vários prazos

Autora:ChaoZhang, Data: 2024-03-22 14:23:30
Tags:

img

Estratégia geral

Este artigo introduz uma estratégia quantitativa de negociação chamada Kyrie Crossover @zaytrade. A estratégia combina crossover de média móvel dupla e indicador DMI multi-tempo para capturar tendências de mercado para decisões de negociação. O núcleo da estratégia é utilizar os sinais de crossover de uma média móvel de curto prazo (10 EMA de período) e uma média móvel de longo prazo (323 EMA de período), ao mesmo tempo em que confirma a direção e a força da tendência usando indicadores DMI em vários prazos, como 5 minutos, 15 minutos, 30 minutos e 1 hora.

Princípios de estratégia

Os princípios desta estratégia podem ser divididos nas seguintes partes:

  1. Crossover de média móvel dupla:A estratégia usa uma EMA de curto prazo (10 períodos) e uma EMA de longo prazo (323 períodos) para capturar as tendências do mercado. Quando a EMA de curto prazo cruza acima da EMA de longo prazo, indica uma oportunidade potencialmente longa; quando a EMA de curto prazo cruza abaixo da EMA de longo prazo, indica uma oportunidade potencialmente curta. Este método de cruzamento da média móvel pode identificar efetivamente pontos de virada do mercado e direções de tendência.

  2. Indicador de DMI multi-tempo:Para confirmar ainda mais a direção e a força da tendência, a estratégia emprega indicadores DMI em vários prazos. O indicador DMI consiste em ADX (Índice Direcional Médio), +DI (Índice Direcional Positivo) e -DI (Índice Direcional Negativo).

  3. Confirmação da tendência:A estratégia confirma a tendência considerando de forma abrangente os sinais de cruzamento da média móvel e os indicadores de DMI de vários prazos. Quando o sinal de cruzamento da média móvel se alinha com a direção da tendência indicada pelos indicadores de DMI, a estratégia gera sinais de negociação correspondentes. Por exemplo, quando a EMA de curto prazo cruza acima da EMA de longo prazo e vários prazos de indicadores de DMI mostram uma tendência de alta, a estratégia gera um sinal longo.

  4. Gestão de riscos:A estratégia utiliza um método de dimensionamento de posições baseado em percentagem de risco.riskPercentageEMAAlém disso, a estratégia utiliza ordens stop-loss para limitar perdas potenciais.

Vantagens da estratégia

  1. Captura de tendências:Ao combinar indicadores duplos de crossover de média móvel e indicadores DMI de vários prazos, a estratégia pode capturar efetivamente as principais tendências do mercado.

  2. Confirmação de vários prazos:A estratégia calcula indicadores de DMI em vários prazos, incluindo 5 minutos, 15 minutos, 30 minutos e 1 hora.

  3. Configurações de parâmetros flexíveis:A estratégia oferece vários parâmetros ajustáveis, como período EMA de curto prazo, período EMA de longo prazo, período de suavização ADX e comprimento DI. Os usuários podem otimizar esses parâmetros com base em seu estilo de negociação e características do mercado para alcançar um melhor desempenho comercial.

  4. Gestão de riscos:A estratégia incorpora um método de dimensionamento de posições baseado em percentagem de risco, que permite aos utilizadores controlar a exposição ao risco de cada operação, definindo o nível de risco de cada operação.riskPercentageEMAAlém disso, a estratégia utiliza ordens stop-loss para limitar perdas potenciais, aumentando a eficácia da gestão de riscos.

Riscos estratégicos

  1. Optimização de parâmetros:O desempenho da estratégia depende em grande parte da escolha dos parâmetros. Configurações de parâmetros inadequadas podem levar a desempenho de estratégia subóptimo ou até mesmo reduções significativas.

  2. Atraso de tendência:Uma vez que a estratégia depende de cruzamento de médias móveis e indicadores DMI para confirmar tendências, pode haver um certo atraso na geração de sinais durante condições de mercado em rápida mudança.

  3. Choppy Markets:Em mercados instáveis, as flutuações de preços podem levar a cruzamento frequente da média móvel e alterações nos indicadores DMI. Isso pode resultar na estratégia gerando mais sinais de negociação, aumentando os custos de negociação e os riscos de retirada.

  4. Eventos do Cisne Negro:A estratégia é baseada em dados históricos e modelos estatísticos. Para eventos extremos do mercado, como eventos de cisne negro, a estratégia pode não ser capaz de reagir corretamente e em tempo hábil. Isso pode levar a perdas significativas para a estratégia nessas circunstâncias especiais.

Orientações de otimização

  1. Ajuste de parâmetros dinâmicos:Considerar a introdução de um mecanismo dinâmico de ajustamento de parâmetros que ajuste de forma adaptativa os parâmetros da estratégia com base na volatilidade do mercado e na força da tendência.

  2. Confirmação multifatorial:Além dos crossovers médios móveis e indicadores DMI, outros indicadores técnicos ou fatores fundamentais podem ser introduzidos para confirmar ainda mais as tendências.

  3. Optimização de Stop-Loss e Take-Profit:Otimizar a colocação de níveis de stop-loss e take-profit, como o uso de trailing stops ou métodos de stop-loss dinâmicos.

  4. Dimensão da posição:Introduzir métodos mais avançados de dimensionamento de posições, como o Critério Kelly ou o investimento fracionário fixo.

  5. Optimização de Aprendizagem de Máquina:Tentar combinar algoritmos de aprendizado de máquina com a estratégia. Através da aprendizagem e reconhecimento de padrões de dados históricos, otimizar a seleção de parâmetros e geração de sinais da estratégia. Isso pode ajudar a estratégia a se adaptar automaticamente às mudanças do mercado, aumentando sua adaptabilidade e robustez.

Conclusão

Este artigo introduziu uma estratégia de negociação quantitativa baseada em crossover de média móvel dupla e indicador DMI multi-tempo. A estratégia toma decisões de negociação capturando tendências de mercado enquanto emprega medidas de gerenciamento de risco para controlar perdas potenciais. As vantagens da estratégia estão em sua capacidade de identificar efetivamente as principais tendências do mercado e melhorar a confiabilidade do sinal por meio de confirmação de multi-tempo. No entanto, a estratégia também possui certos riscos, como otimização de parâmetros, tendência de atraso, mercados agitados e eventos de cisne negro. Para otimizar ainda mais a estratégia, métodos como ajuste dinâmico de parâmetros, confirmação multifatorial, otimização de stop-loss e take-profit, dimensionamento de posição e aprendizado de máquina podem ser considerados.


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

//@version=5
strategy("Kyrie Crossover @zaytrade ", overlay=true, calc_on_every_tick=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 = ta.crossover(emaShort, emaLong)
shortConditionEMA = ta.crossunder(emaShort, emaLong)

// Input parameters for DMI
adxlen = input(14, title="ADX Smoothing")
dilen = input(14, 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 ? up : 0), len) / truerange)
    minus = fixnan(100 * ta.rma((down > up ? 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]

// Function to get trend and strength for a given timeframe
getTrendAndStrength(_source, _dilen, _adxlen) =>
    [adxValue, up, down] = adx(_dilen, _adxlen)
    var string trendIndication = ""
    var string trendStrength = ""
    if (up > down) or ((up > down) and (up > down) and (up > adxValue)) // Bullish condition
        trendIndication := "Bullish"
        trendStrength := "Strengthening" 
    else if (down > up) or ((down > up) and (down > up) and (down > adxValue)) // Bearish condition
        trendIndication := "Bearish"
        trendStrength := "Weakening" 
    else
        trendIndication := "No Clear Trend"
        trendStrength := "Sideways"
    [trendIndication, trendStrength]

// Get trend and strength for selected timeframes
[tf1_trend, tf1_strength] = request.security(syminfo.tickerid, "5", getTrendAndStrength(close, dilen, adxlen))
[tf2_trend, tf2_strength] = request.security(syminfo.tickerid, "15", getTrendAndStrength(close, dilen, adxlen))
[tf3_trend, tf3_strength] = request.security(syminfo.tickerid, "30", getTrendAndStrength(close, dilen, adxlen))
[tf4_trend, tf4_strength] = request.security(syminfo.tickerid, "60", getTrendAndStrength(close, dilen, adxlen))
[current_trend, _] = getTrendAndStrength(close, dilen, adxlen)

// Define colors based on trend indication
tf1_color = tf1_trend == "Bullish" ? color.green : (tf1_trend == "Bearish" ? color.red : color.white)
tf2_color = tf2_trend == "Bullish" ? color.green : (tf2_trend == "Bearish" ? color.red : color.white)
tf3_color = tf3_trend == "Bullish" ? color.green : (tf3_trend == "Bearish" ? color.red : color.white)
tf4_color = tf4_trend == "Bullish" ? color.green : (tf4_trend == "Bearish" ? color.red : color.white)
current_color = current_trend == "Bullish" ? color.green : (current_trend == "Bearish" ? color.red : color.white)

// Create and fill the enhanced table for DMI
var table dmiTable = na
if (barstate.islast)
    dmiTable := table.new(position.top_right, 6, 1)
    table.cell(dmiTable, 0, 0, "DMI Metrics", bgcolor=color.new(color.black, 90), width=15, height=4, text_color=color.white)
    table.cell(dmiTable, 1, 0, "5m Trend: " + tf1_trend, bgcolor=tf1_color, width=15, height=4, text_color=color.white)
    table.cell(dmiTable, 2, 0, "15m Trend: " + tf2_trend, bgcolor=tf2_color, width=15, height=4, text_color=color.white)
    table.cell(dmiTable, 3, 0, "30m Trend: " + tf3_trend, bgcolor=tf3_color, width=15, height=4, text_color=color.white)
    table.cell(dmiTable, 4, 0, "1h Trend: " + tf4_trend, bgcolor=tf4_color, width=15, height=4, text_color=color.white)
    table.cell(dmiTable, 5, 0, "Current Trend: " + current_trend, bgcolor=current_color, width=15, height=4, text_color=color.white)

// Strategy logic
if (longConditionEMA)
    strategy.entry("Long", strategy.long)
if (shortConditionEMA)
    strategy.entry("Short", strategy.short)


Mais.