A Estratégia de Divergência de Direção de Momento é uma das técnicas descritas por William Blau em seu livro
A estratégia traça o ERGOTIC CSI e a sua linha suavizada para filtrar o ruído.
O código começa por definir uma função fADX (Adaptive Direction Index, ADX), que leva o parâmetro Len como o período de suavização. A função calcula o RMA da True Range (TR) como denominador, e o RMA do momento de alta e o momento de baixa como numerador, e depois os divide para obter proporções que indicam a força relativa de alta e baixa.
Em seguida, os parâmetros da estratégia são definidos. r é o parâmetro de suavização para ATR, comprimento é o comprimento do ADX, BigPointValue é o grande valor do ponto, SmthLen é o comprimento de suavização para CSI, SellZone e BuyZone são zonas de venda e compra que atendem aos critérios. inversa indica se inverter os sinais de negociação.
A lógica chave está no cálculo do CSI. Primeiro, o ATR e o ADX são calculados. Em seguida, o coeficiente de penalização K é calculado, incorporando considerações de grande valor de ponto, ATR e ADX. O nRes residual padronizado combina informações do ATR, ADX e preço de fechamento. Finalmente, o valor do CSI é obtido e sua SMA é calculada.
A direção de negociação é determinada de acordo com o valor SMA do CSI. Vá longo se acima da BuyZone, vá curto se abaixo da SellZone. Plot curva CSI e sua SMA, código de cores diferentes zonas de negociação.
A estratégia combina as vantagens do indicador de impulso ATR e do indicador de tendência ADX, considerando tanto a volatilidade do mercado quanto a força da tendência, evitando limitações de usar apenas ATR ou ADX.
O nRes residual padronizado incorpora informações de preços, prestando atenção não só à tendência de ímpeto, mas também ao nível absoluto de preços, que é diferente dos osciladores típicos, melhorando o desempenho da estratégia.
O processo de suavização e a determinação da zona fornecem sinais comerciais claros para a negociação prática.
A estratégia é bastante sensível a configurações de parâmetros, como períodos de ATR e ADX, grande valor de ponto, etc., o que pode afetar o desempenho.
Como um oscilador recentemente proposto, a eficácia do CSI precisa de validação em mercados mais diversos.
A estratégia em si não tem um mecanismo de stop loss, apenas diretamente longo ou curto por sinais CSI.
Teste combinações de parâmetros em diferentes mercados para encontrar configurações relativamente universais.
Introduzir um mecanismo dinâmico de período ADX que ajuste os parâmetros ADX com base no estado do mercado.
Incorporar outros indicadores de oscilador para determinar entradas e saídas para tornar a estratégia mais robusta.
Adicionar mecanismos de stop loss para completar a estratégia.
A Estratégia de Divergência de Direção de Momento integra vantagens de múltiplos indicadores, utilizando preços, impulso, dimensões de tendência para projetar indicadores de CSI para negociação.
/*backtest start: 2022-12-20 00:00:00 end: 2023-12-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 //////////////////////////////////////////////////////////// // Copyright by HPotter v1.0 20/06/2018 // This is one of the techniques described by William Blau in his book // "Momentum, Direction and Divergence" (1995). If you like to learn more, // we advise you to read this book. His book focuses on three key aspects // of trading: momentum, direction and divergence. Blau, who was an electrical // engineer before becoming a trader, thoroughly examines the relationship between // price and momentum in step-by-step examples. From this grounding, he then looks // at the deficiencies in other oscillators and introduces some innovative techniques, // including a fresh twist on Stochastics. On directional issues, he analyzes the // intricacies of ADX and offers a unique approach to help define trending and // non-trending periods. // This indicator plots Ergotic CSI and smoothed Ergotic CSI to filter out noise. // // You can change long to short in the Input Settings // WARNING: // - For purpose educate only // - This script to change bars colors. //////////////////////////////////////////////////////////// fADX(Len) => up = change(high) down = -change(low) trur = rma(tr, Len) plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, Len) / trur) minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, Len) / trur) sum = plus + minus 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), Len) strategy(title="Ergodic CSI Backtest") r = input(32, minval=1) Length = input(1, minval=1) BigPointValue = input(1.0, minval=0.00001) SmthLen = input(5, minval=1) SellZone = input(0.004, minval=0.00001) BuyZone = input(0.024, minval=0.001) reverse = input(false, title="Trade reverse") hline(BuyZone, color=green, linestyle=line) hline(SellZone, color=red, linestyle=line) source = close K = 100 * (BigPointValue / sqrt(r) / (150 + 5)) xTrueRange = atr(1) xADX = fADX(Length) xADXR = (xADX + xADX[1]) * 0.5 nRes = iff(Length + xTrueRange > 0, K * xADXR * xTrueRange / Length,0) xCSI = iff(close > 0, nRes / close, 0) xSMA_CSI = sma(xCSI, SmthLen) pos = iff(xSMA_CSI > BuyZone, 1, iff(xSMA_CSI <= SellZone, -1, nz(pos[1], 0))) possig = iff(reverse and pos == 1, -1, iff(reverse and pos == -1, 1, pos)) if (possig == 1) strategy.entry("Long", strategy.long) if (possig == -1) strategy.entry("Short", strategy.short) barcolor(possig == -1 ? red: possig == 1 ? green : blue ) plot(xCSI, color=green, title="Ergodic CSI") plot(xSMA_CSI, color=red, title="SigLin")