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.
Calcule a média móvel EHMA ponderada exponencial com base no parâmetro Periodo.
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.
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.
Em comparação com as estratégias comuns de média móvel, esta estratégia tem as seguintes vantagens:
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.
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.
A largura do canal pode ser ajustada de forma flexível para se adaptar às diferentes condições do mercado.
Há também alguns riscos com esta estratégia:
Os preços podem ultrapassar o canal, os parâmetros precisam ser ajustados adequadamente para controlar os riscos.
Se o canal for muito largo, algumas oportunidades de negociação podem ser perdidas.
Os canais demasiado estreitos podem aumentar as trocas ineficazes.
Esta estratégia pode ser otimizada nos seguintes aspectos:
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.
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.
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.
Combinar com outros indicadores de filtragem de entradas, por exemplo, adicionar volume para reduzir entradas falsas.
Diversificar aplicações de estratégia e otimizar parâmetros.
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)