O recurso está a ser carregado... Carregamento...

Estratégia de intervalo de média móvel exponencial adaptativa

Autora:ChaoZhang, Data: 2024-02-26 14:58:32
Tags:

img

Resumo

Esta estratégia usa a média móvel de casco exponencial (EHMA) mais rápida e um canal adaptativo para construir uma estratégia de tendência seguinte. Como a EHMA calcula mais rápido, ela pode identificar efetivamente mudanças na tendência de preços e evitar negociações desnecessárias causadas por falhas. Ao mesmo tempo, o canal adaptativo pode filtrar algumas flutuações de preços. As negociações só são desencadeadas quando o preço atravessa o canal, reduzindo a probabilidade de negociações ineficazes e aumentando a lucratividade.

Princípio da estratégia

  1. Calcule a média móvel EHMA ponderada exponencial com base no parâmetro Periodo.

  2. Construir um canal adaptativo acima e abaixo do EHMA com base no parâmetro RangeWidth. Somente quando o preço sobe acima da linha superior do canal ou cai abaixo da linha inferior do canal, a tendência é considerada alterada e os sinais de negociação são acionados.

  3. Determine a relação do preço com o canal. Longo quando o preço atravessa a linha superior, curto quando atravessa a linha inferior. Feche a posição longa quando o preço cruza abaixo da linha superior, feche a posição curta quando o preço cruza acima da linha inferior.

Análise das vantagens

Em comparação com as estratégias comuns de média móvel, esta estratégia tem as seguintes vantagens:

  1. Utilize o algoritmo EHMA para calcular a média móvel. A EHMA responde de forma mais sensível às mudanças de preços e pode identificar as mudanças de tendência de forma eficaz para evitar negociações desnecessárias causadas por falhas.

  2. O canal adaptativo pode filtrar as flutuações de preços de forma eficaz. Os sinais de negociação só são acionados quando a tendência de preços mudou firmemente. Isso poderia filtrar alguns negócios ineficazes e melhorar a lucratividade.

  3. A largura do canal pode ser ajustada de forma flexível para se adaptar às diferentes condições do mercado.

Análise de riscos

Há também alguns riscos com esta estratégia:

  1. Os preços podem ultrapassar o canal, os parâmetros precisam ser ajustados adequadamente para controlar os riscos.

  2. Se o canal for muito largo, algumas oportunidades de negociação podem ser perdidas.

  3. Os canais demasiado estreitos podem aumentar as trocas ineficazes.

Orientações de otimização

Esta estratégia pode ser otimizada nos seguintes aspectos:

  1. Otimizar o parâmetro Período. Ajustar o ciclo de cálculo da média móvel para se adaptar a diferentes produtos e prazos.

  2. Otimizar o parâmetro de largura de alcance Ajustar o escopo do canal com base na volatilidade do mercado e preferência pessoal de risco.

  3. Adicionar estratégia de stop loss: definir pontos de stop loss razoáveis durante a detenção de posições para controlar eficazmente a perda máxima por negociação.

  4. Combinar com outros indicadores de filtragem de entradas, por exemplo, adicionar volume para reduzir entradas falsas.

  5. Diversificar aplicações de estratégia e otimizar parâmetros.

Resumo

Esta estratégia combina o indicador EHMA e o indicador de canal adaptativo para formar uma estratégia de tendência. Pode identificar as tendências do mercado de forma eficaz e filtrar as flutuações de preços para evitar negociações desnecessárias. Após uma série de otimização de parâmetros e controle de risco, lucros estáveis podem ser alcançados em vários produtos e prazos.


/*backtest
start: 2023-02-25 00:00:00
end: 2024-02-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
args: [["v_input_1",1]]
*/

// Credit is due where credit is due:
// Hull Moving Average: developed by Alan Hull
// EHMA: coded by Twitter @borserman
// I've built on their work in an attempt to create a strategy more robust to fake moves
// @0xLetoII

//@version=4
strategy(
  title="EHMA Range Strategy",
  process_orders_on_close=true,
  explicit_plot_zorder=true,
  overlay=true, 
  initial_capital=1500, 
  default_qty_type=strategy.percent_of_equity, 
  commission_type=strategy.commission.percent, 
  commission_value=0.085,
  default_qty_value=100
  )
  

// Position Type
pos_type = input(defval = "Long", title="Position Type", options=["Both", "Long", "Short"])

// Inputs
Period = input(defval=180, title="Length")
RangeWidth = input(defval=0.02, step=0.01, title="Range Width")
sqrtPeriod = sqrt(Period)

// Function for the Borserman EMA
borserman_ema(x, y) =>
    alpha = 2 / (y + 1)
    sum = 0.0
    sum := alpha * x + (1 - alpha) * nz(sum[1])

// Calculate the Exponential Hull Moving Average
EHMA = borserman_ema(2 * borserman_ema(close, Period / 2) - borserman_ema(close, Period), sqrtPeriod)

// Create upper & lower bounds around the EHMA for broader entries & exits
upper = EHMA + (EHMA * RangeWidth)
lower = EHMA - (EHMA * RangeWidth)

// Plots
EHMAcolor = (close > EHMA ? color.green : color.red)
plot(EHMA, color=EHMAcolor, linewidth=2)
plot(lower, color=color.orange, linewidth=2)
plot(upper, color=color.blue, linewidth=2)


// Strategy
long = close > upper
exit_long = close < lower
short = close < lower
exit_short = close > upper


// Calculate start/end date and time condition
startDate  = input(timestamp("2017-01-01T00:00:00"))
finishDate = input(timestamp("2029-01-01T00:00:00"))
 
time_cond  = true


// Entries & Exits
if pos_type == "Both"
    strategy.entry("Long", strategy.long, comment="Long", when=long and time_cond)
    strategy.close("Long", comment="Exit Long", when=exit_long and time_cond)
    strategy.entry("Short", strategy.short, comment="Short", when=short and time_cond)
    strategy.close("Short", comment="Exit Short", when=exit_short and time_cond)
if pos_type == "Long"
    strategy.entry("Long", strategy.long, comment="Long", when=long and time_cond)
    strategy.close("Long", comment="Exit Long", when=exit_long and time_cond)
if pos_type == "Short"
    strategy.entry("Short", strategy.short, comment="Short", when=short and time_cond)
    strategy.close("Short", comment="Exit Short", when=exit_short and time_cond)
    

Mais.