Estratégia de acompanhamento da média móvel dinâmica

Autora:ChaoZhang, Data: 2023-12-04 15:38:09
Tags:

img

Resumo

Esta estratégia usa a abordagem explicada por Larry Williams em seu livro Secrets Long-Term to Short-Term Trading, que utiliza duas médias móveis de 3 períodos, uma representando os altos e a outra os baixos.

Estratégia lógica

A lógica central desta estratégia é calcular médias móveis de 3 períodos dos preços altos e baixos. Especificamente, usa a função ta.ema para calcular médias móveis exponenciais dos preços altos e baixos nas 3 barras mais recentes para gerar níveis de suporte e resistência dinâmicos. Quando o preço quebra abaixo dos mínimos EMA, ele indica uma tendência de queda, para que possamos ir longos. Quando o preço sobe acima dos máximos EMA, sugere que a tendência de alta terminou e devemos fechar nossa posição. Desta forma, a estratégia pode rastrear dinamicamente as mudanças de preço e alcançar a compra baixa e venda alta.

Análise das vantagens

A maior vantagem desta estratégia é sua simplicidade e dinamismo. Em comparação com a tomada de médias móveis de períodos fixos altos / baixos, esta estratégia usa médias móveis contínuas de curto prazo, que podem capturar mudanças de preço de forma mais sensível e oportuna. Isso permite identificar rapidamente oportunidades de negociação para entrar e sair do mercado. Além disso, a baixa carga de computação é outra vantagem para reduzir a latência de negociação.

Riscos e soluções

O principal risco desta estratégia é que ela reage mais lentamente a eventos repentinos como notícias significativas. Como seu período de média móvel é muito curto, leva algum tempo para ajustar os níveis de média móvel quando há um pico acentuado de preços. Isso pode levar a perdas ou oportunidades perdidas. Além disso, a hipersensibilidade pode causar negociações erradas. Para mitigar esses riscos, podemos aumentar apropriadamente o período de média móvel ou adicionar filtros para evitar falsos sinais.

Orientações de otimização

Ainda há um grande espaço para otimizar essa estratégia. Em primeiro lugar, osciladores podem ser incorporados para filtrar os sinais. Em segundo lugar, a lógica de stop loss pode ser adicionada para controlar riscos. Além disso, podemos ajustar dinamicamente os parâmetros da média móvel com base nos estados do mercado, usando períodos mais longos em tendências e períodos mais curtos em mercados variados. Além disso, a análise de quadros de tempo múltiplos, o reconhecimento de padrões com aprendizado de máquina etc. podem ajudar a melhorar o desempenho da estratégia.

Conclusão

Em resumo, esta é uma estratégia muito simples e prática, identificando tendências usando médias móveis altas / baixas de curto prazo. Suas vantagens são forte dinamismo, baixa computação e alta capacidade de resposta, adequado para negociação ativa. Mas também tem deficiências em responder a eventos extremos e maior risco de falsos sinais.


/*backtest
start: 2023-11-26 00:00:00
end: 2023-12-03 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(
     "Larry Williams 3 Period EMAs strategy",
     overlay=true,
     calc_on_every_tick=true,
     currency=currency.USD
     )

// Time range for backtesting
startDate = input.int(title="Start Date", defval=1, minval=1, maxval=31)
startMonth = input.int(title="Start Month", defval=1, minval=1, maxval=12)
startYear = input.int(title="Start Year", defval=2018, minval=1800, maxval=2100)

endDate = input.int(title="End Date", defval=31, minval=1, maxval=31)
endMonth = input.int(title="End Month", defval=12, minval=1, maxval=12)
endYear = input.int(title="End Year", defval=2041, minval=1800, maxval=2100)

inDateRange = (time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0)) and
     (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0))

// EMA
period = 3

emaH = ta.ema(high, period)
emaL = ta.ema(low, period)

// PLOT:
// Draw the EMA lines on the chart
plot(series=emaH, color=color.green, linewidth=2)
plot(series=emaL, color=color.red, linewidth=2)

// Conditions
if(inDateRange and close < emaL)
    strategy.entry("Long", strategy.long, comment="Long")
if(close > emaH)
    strategy.close("Long", comment="Close Long")

// Uncomment to enable short entries
//if(inDateRange and close > emaH)                                    
//    strategy.entry("Short", strategy.short, comment="Short")    
//if(close < emaL)
//    strategy.close("Short", comment="Close Short")

Mais.