Estratégia de combinação de indicador direcional e média móvel de Hull


Data de criação: 2024-01-04 17:23:06 última modificação: 2024-01-04 17:23:06
cópia: 0 Cliques: 688
1
focar em
1621
Seguidores

Estratégia de combinação de indicador direcional e média móvel de Hull

Visão geral

A estratégia usa uma combinação de indicadores móveis (DMI) e Hull Moving Average (HMA) para determinar a direção do mercado, a HMA confirma a força da tendência e realiza negociações sem gerenciamento de risco.

Princípio da estratégia

  1. Calcule a amplitude de onda verdadeira (True Range), o indicador de movimento de cabeça (DIPlus), o indicador de movimento de cabeça vazia (DIMinus) e o índice de direção média (ADX).

  2. Calcule a média de casco rápido (fasthull) e a média de casco lento (slowhull)

  3. Trigger com várias condições: DIMinus em DIPlus e slowhull em fasthull.

  4. Trigger a condição de vazio: DIMinus atravessa DIPlus e fasthull atravessa slowhull .

  5. Quando a condição de fazer mais vazio é satisfeita, os sinais de fazer mais e de fazer vazio são emitidos.

Análise de vantagens

A estratégia, combinada com a dupla confirmação dos indicadores de determinação de tendências DMI e Hull, permite identificar efetivamente a direção da tendência do mercado, evitando a repetição de mercados a mais e a menos. A gestão sem risco reduz a frequência de negociação e, a longo prazo, o nível de lucro geral é bom.

Análise de Riscos

O maior risco da estratégia é a configuração de não-perda e a incapacidade de controlar efetivamente os prejuízos em caso de forte flutuação do mercado. Além disso, o espaço para otimização de parâmetros é limitado e a falta de foco também é uma grande desvantagem.

Pode-se reduzir o risco por meio da adição de stop loss móvel e combinações de parâmetros de otimização.

Direção de otimização

  1. Adicionando o stop ATR, o trailing stop usa a amplitude real.

  2. Optimizar os parâmetros do ciclo de Hull para encontrar a melhor combinação.

  3. Ajuste dinâmico do limiar do parâmetro de vazio.

  4. Adicionar filtros, como indicadores de energia, para garantir que a tendência continue.

Resumir

A combinação de estratégias de DMI e HMA, com um julgamento preciso, simples e eficaz, é adequada para operações de linha média e longa. Com a adição de stop loss e otimização de parâmetros apropriados, pode ser um excelente sistema de rastreamento de tendências.

Código-fonte da estratégia
/*backtest
start: 2022-12-28 00:00:00
end: 2024-01-03 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Tuned_Official
//@version=4
strategy(title="DMI + HMA - No Risk Management", overlay = false, pyramiding=1, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.025)

//Inputs
hullLen1 = input(title="Hull 1 length", type=input.integer, defval=29)
hullLen2 = input(title="Hull 2 length", type=input.integer, defval=2)
len = input(title="Length for DI", type=input.integer, defval=76)

//Calculations
TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0

SmoothedTrueRange = 0.0
SmoothedTrueRange := nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/len) + TrueRange
SmoothedDirectionalMovementPlus = 0.0
SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/len) + DirectionalMovementPlus
SmoothedDirectionalMovementMinus = 0.0
SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/len) + DirectionalMovementMinus

//Indicators
fasthull = hma(close, hullLen1)
slowhull = hma(close, hullLen2)
DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100
ADX = sma(DX, len)

//Plots
plot(DIPlus, color=color.green, title="DI+")
plot(DIMinus, color=color.red, title="DI-")
plot(ADX, color=color.black, title="ADX")

//conditions
go_long = crossover(DIPlus, DIMinus) and fasthull > slowhull //crossover(fasthull, slowhull) and DIPlus > DIMinus
go_short = crossover(DIMinus, DIPlus) and fasthull < slowhull //crossunder(fasthull, slowhull) and DIMinus > DIPlus

//Entry
if strategy.position_size < 0 or strategy.position_size == 0
    strategy.order("long", strategy.long, when=go_long)

if strategy.position_size > 0 or strategy.position_size == 0
    strategy.order("Short", strategy.short, when=go_short)