Estratégia de Momentum da média móvel de 5 dias

Autora:ChaoZhang, Data: 21 de setembro de 2023 12:16:22
Tags:

Resumo

Esta estratégia utiliza cruzes de MA de 5 dias e 78 dias para gerar sinais de perseguição de impulso, com o objetivo de capturar rupturas de preço a curto prazo.

Estratégia lógica

  1. Calcular as médias móveis ponderadas de 3 dias, 78 dias e 195 dias.

  2. Crossover de 3 dias acima do sinal de compra de 195 dias.

  3. Quando 3 dias fica acima de 78 dias, e 78 dias acima de 195 dias, considerar o canal de tendência de alta formado, também desencadeia a compra.

  4. Configure a linha de ganho dinâmico 6ATR, venda quando o preço cair abaixo da linha.

  5. Venda sinal quando 3 dias cruza de volta abaixo de 195 dias.

Vantagens

  1. Múltiplas cruzes de MA filtram falhas efetivamente.

  2. A captação dinâmica de lucros evita os golpes.

  3. O backtest mostra um tempo médio de retenção de 2 horas por negociação, adequado para negociações de momento de curto prazo.

  4. A redução máxima está controlada em torno de 20%.

Riscos

  1. Os parâmetros fixos da MA não se adaptam às mudanças dos mercados.

  2. Período de amostragem de 1 ano limitado, necessários dados maiores para verificar a estratégia.

  3. Os parâmetros de captação de lucro e stop loss precisam de otimização para o controle de riscos.

  4. Não consegue adaptar-se às diferenças de preços.

  5. Custos elevados de transacção prováveis.

Melhorias

  1. Teste diferentes combinações de MA para otimização.

  2. Otimizar a captação de lucros e a stop loss para equilibrar o risco e o retorno.

  3. Configure os filtros de entrada para reduzir a probabilidade de ser preso.

  4. Optimize o dimensionamento da posição, pirâmide de força.

  5. Teste em diferentes produtos e prazos mais longos.

  6. Simulação de Monte Carlo para avaliar o máximo.

Resumo

Esta estratégia identifica a tendência de alta com cruzes MA e define regras dinâmicas de stop de lucro com bons resultados de backtest. Mas período de amostragem limitado, a estabilidade param permanece verificada e falha em lacunas. Requer mais backtesting sobre conjuntos de dados maiores, mais filtros para reduzir falsos sinais, parâmetros de stop de lucro otimizados, avaliação sobre custos de transação. Se passar em testes de otimização e verificação abrangentes, pode se tornar um robusto sistema de busca de impulso de curto prazo.


/*backtest
start: 2022-09-14 00:00:00
end: 2023-09-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// © FinTasticTrading 2021/2/14
// This is a 5 day moving average crossing long strategy, used in short term momentum trading strategy.
// Momentum trading Strategy: When S&P 500 index is at up trend (or above 60 sma), buy 10+ stocks in top 20% stock RS ranking at equal weight using this MA5X_L strategy. Change stocks when any stock exited by algorithm.  
// Back test start since 2020/7/1, each long entry for condition 1 is $30000, condition 2 is $20000, with max of 2 long positions.
// Setup: 10 minutes chart
// Buy condition 1) 3 wma cross up 180 wma (5day) 2) 3wma > 60wma > 180wma UP Trend Arrangement (UTA)
// Exit condition 1) 3 wma cross under 180 wma 2) position profit > 20% and 3 wma cross under 6 ATRs line (green)
//@version=4

strategy("MA5X_L", overlay=true, pyramiding=2,default_qty_type=strategy.cash, default_qty_value=100000)
s_len = input( 3 )
m_len = input( 78 )  // 2 day moving average
l_len = input( 195)  // equal to 5 Day moving average
xl_len = input(390)  // 10 day moving average
//Draw WMAs
s_ma = wma(close,s_len)
m_ma = wma(close,m_len)
l_ma = wma(close,l_len)
xl_ma = sma(close,xl_len)
plot(s_ma, color=color.yellow, linewidth=2)
plot(m_ma, color=color.fuchsia, linewidth=2)
plot(l_ma, color=color.blue, linewidth=2)
plot(xl_ma, color = color.gray, linewidth=2)

//ATR Stop Profit , length = 40 or 1 day
Periods = input(title="ATR Period", type=input.integer, defval=40)
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=6.0)
sl=hl2-(Multiplier*atr(Periods))
sl1 = nz(sl[1], sl)
sl := s_ma[1] > sl1 ? max(sl, sl1) : sl
plot(strategy.position_size > 0 ? sl:na, title="Stop Loss", style=plot.style_linebr, linewidth=2, color=color.green)

//Backtest since
condition100 = time>=timestamp(2020, 07, 01, 00, 00) 

//Long Entry Condition 1 : s_ma Cross UP l_ma
if crossover(s_ma, l_ma) and condition100
    strategy.entry("X Up", strategy.long, qty = 30000/close, comment="X Up")

//Long Entry Condition 2 : s_ma > m_ma > l_ma
condition31 = s_ma>m_ma and m_ma>l_ma
condition32 = condition31[1]==false and condition31 == true and condition100
strategy.entry("UTA", strategy.long, qty = 20000/close, when = condition32, comment="UTA")

//Long Exit Condition 1 :  3 wma cross under 180 wma
condition50 = crossunder(s_ma, l_ma)
strategy.close_all(when = condition50, comment="X Dn")

//Long Exit Condition 2 : position profit > 20% and 3 wma cross under 6 ATRs line (green)
strategy.close_all(when = crossunder(close,sl) and strategy.openprofit>30000*0.2, comment="Stop")


Mais.