Estratégia de cruzamento de média móvel dupla de impulso

Autora:ChaoZhang, Data: 2023-10-20 16:44:30
Tags:

img

Resumo

Esta estratégia utiliza cruzamento da média móvel para determinar a direção do ímpeto do preço, complementado por cruzes douradas/morte para julgar a tendência geral, para implementar a tendência seguinte.

Estratégia lógica

A estratégia usa cruzes de EMA e SMA para determinar a direção do ímpeto do preço. A EMA reage mais rapidamente enquanto a SMA reage mais constantemente. Quando a EMA cruza acima da SMA, julga-se que o ímpeto de alta é forte, vá longo. Quando a EMA cruza abaixo da SMA, julga-se que o ímpeto de baixa é forte, vá curto.

Além disso, a estratégia também usa o cruzamento de SMA de período rápido e SMA de período lento para determinar a direção geral da tendência. Quando a SMA rápida cruza acima da SMA lenta, é uma cruz de ouro, indicando que o mercado está em tendência de alta a longo prazo. Quando a SMA rápida cruza abaixo da SMA lenta, é uma cruz de morte, indicando que o mercado está em tendência de queda a longo prazo.

A estratégia identifica uma oportunidade longa quando a EMA cruza acima da SMA. Se for uma cruz de ouro neste momento, isso significa que a corrida longa é apoiada tanto pelo impulso de curto prazo quanto pela tendência de longo prazo, o que é um melhor tempo longo. Se for uma cruz de morte, a corrida longa é apenas apoiada pelo impulso de curto prazo e contra a tendência de longo prazo, que é um tempo longo mais arriscado.

Análise das vantagens

  • Usar cruzamento de MA para julgar a dinâmica e a direção do preço
  • Considere tanto o impulso a curto prazo como a tendência a longo prazo
  • A confirmação de dois indicadores melhora a fiabilidade
  • Adaptável a diferentes períodos ajustando os parâmetros do MA
  • Personalizável para mostrar/esconder sinais comerciais específicos

Análise de riscos

  • Os crossovers MA apresentam atrasos, podem perder os melhores pontos de entrada/saída
  • A SMA de período fixo não pode refletir a variação de preços em tempo real
  • Podem ocorrer cruzações errôneas entre MAs de longo/curto período
  • A detenção de capital a longo prazo pode aumentar o risco de capital

Os riscos podem ser reduzidos combinando outros indicadores de confirmação de sinal, otimizando os períodos de MA ou definindo o stop loss.

Orientações de otimização

  • Adicionar outros filtros como volume, Bandas de Bollinger, etc.
  • Adicionar estratégia de stop loss
  • Otimizar os períodos de MA
  • Otimizar a gestão de capitais
  • Considere o dimensionamento da posição dinâmica

Conclusão

Em geral, esta é uma estratégia de tendência relativamente estável e confiável. Ela considera tanto o impulso de preço de curto prazo quanto a direção da tendência de longo prazo, gerando sinais de negociação através de cruzamento de MA. Em comparação com as estratégias de MA simples, ela tem maior confiabilidade ao combinar indicadores duplos para confirmação. Mas como uma estratégia de tendência, sua otimização de parâmetros e controle de risco são muito importantes. Ela precisa de testes e ajustes repetidos para realmente realizar seu potencial. Com otimizações e melhorias contínuas, essa estratégia pode se tornar um componente valioso de uma carteira de investimento quantitativo de longo prazo.


/*backtest
start: 2023-09-19 00:00:00
end: 2023-10-19 00:00:00
period: 1h
basePeriod: 15m
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/
// © Cryptoluc1d

//@version=4
strategy("Equal-Length EMA/SMA Crossover Strategy", initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=25, commission_type=strategy.commission.percent, commission_value=0.2, overlay=true)

// Create inputs

mom_length = input(title="Momentum Length (EMA=SMA)", defval=50)
bias_length_fast  = input(title="Golden Cross Length (Fast)", defval=50)
bias_length_slow  = input(title="Golden Cross Length (Slow)", defval=100)

// Define MAs

ema = ema(close, mom_length) // EMA/SMA crossover of the same period for detecting trend acceleration/deceleration
sma = sma(close, mom_length)
bias_fast = sma(close, bias_length_fast) // golden/death cross for overall trend bias
bias_slow = sma(close, bias_length_slow)

// Define signal conditions

buy_trend = crossover(ema, sma) and bias_fast >= bias_slow // buy when EMA cross above SMA. if this happens during a bullish golden cross, buying is in confluence with the overall trend (bias).
buy_risky = crossover(ema, sma) and bias_fast < bias_slow // buy when EMA cross above SMA. if this happens during a bearish death cross, buying is early, more risky, and not in confluence with the overall trend (bias).
buy_late = crossover(sma, bias_slow) and ema > sma // the SMA crossing the Slow_SMA gives further confirmation of bullish trend, but signal comes later.
sell = crossunder(ema, sma) // sell when EMA cross under SMA.

// Enable option to hide signals, then plot signals

show_signal = input(title="Show Signals", defval=true)

plotshape(show_signal ? buy_trend : na, title='Trend Buy', style=shape.triangleup, location=location.belowbar, color=color.green, text='TREND BUY')
plotshape(show_signal ? buy_risky : na, title='Risky Buy', style=shape.triangleup, location=location.belowbar, color=color.olive, text='RISKY BUY')
plotshape(show_signal ? buy_late : na, title='Late Buy', style=shape.triangleup, location=location.belowbar, color=color.lime, text='LATE BUY')
plotshape(show_signal ? sell : na, title='Sell', style=shape.triangledown, location=location.abovebar, color=color.red, text='SELL')

// Define entry and exit conditions

longCondition = ema > sma and bias_fast >= bias_slow // LONG when EMA above SMA, and overall trend bias is bullish
if (longCondition)
    strategy.entry("BUY TREND", strategy.long)
exitLong = crossunder(ema, sma) // close LONG when EMA cross under SMA
strategy.close("BUY TREND", when=exitLong)

// // short conditions. turned off because up only.
// shortCondition = ema < sma and bias_fast <= bias_slow // SHORT when EMA under SMA, and overall trend bias is bearish
// if (shortCondition)
//     strategy.entry("SELL TREND", strategy.short)
// exitShort = crossover(ema, sma) // close SHORT when EMA cross over SMA
// strategy.close("SELL TREND", when=exitShort)

// Enable option to show MAs, then plot MAs

show_ma = input(title="Show MAs", defval=false)

plot(show_ma ? ema : na, title="Momentum EMA", color=color.green, linewidth=1)
plot(show_ma ? sma : na, title="Momentum SMA", color=color.yellow, linewidth=1)
plot(show_ma ? bias_fast : na, title="Golden Cross SMA (Fast)", color=color.orange, linewidth=2)
plot(show_ma ? bias_slow : na, title="Golden Cross SMA (Slow)", color=color.red, linewidth=2)

Mais.