Estratégia de negociação de pares multi-MA

Autora:ChaoZhang, Data: 23 de setembro de 2023 15:16:50
Tags:

Resumo

Esta estratégia combina a dupla seleção de médias móveis e o reconhecimento de padrões de preços para formar um mecanismo de entrada mais abrangente para melhorar a qualidade do sinal.

Estratégia lógica

A estratégia inclui os seguintes indicadores e regras:

  1. 3 SMAs julgar a tendência geral.

  2. 2 As EMA fazem um julgamento direccional detalhado.

  3. SAR ajuda com tendência e impulso.

  4. Os padrões de preços identificam formações como sinais de entrada.

  5. O lucro máximo é o limite de controlo do lucro.

  6. O limite do período de detenção evita a expansão das perdas.

A combinação de múltiplos indicadores forma robustos sinais de entrada e mecanismos de saída, equilibrando a rentabilidade e o controlo do risco para uma negociação estável.

Vantagens

Em comparação com as estratégias de indicadores únicos, as vantagens são as seguintes:

  1. Indicadores múltiplos melhoram a precisão.

  2. O reconhecimento de padrões de preços melhora o tempo de entrada.

  3. O lucro toma o controlo, realiza lucro.

  4. O período de detenção evita a expansão das perdas.

  5. As SMAs seguem a tendência.

  6. As EMAs melhoram a sensibilidade.

  7. SAR verifica a fiabilidade da fuga.

  8. Em geral, bom equilíbrio risco-recompensa, robustez.

  9. Os parâmetros de sintonização podem alcançar um alfa constante.

Riscos

Apesar dos méritos, devem ser observados os seguintes riscos:

  1. Indicadores múltiplos aumentam a complexidade.

  2. O ajuste de parâmetros alargados corre o risco de uma otimização excessiva.

  3. Eficácia do reconhecimento de padrões de preços incerta.

  4. Riscos de lucro perdendo a continuação da tendência.

  5. O período de detenção limita o potencial de lucro.

  6. A estabilidade e a rentabilidade têm um compromisso.

  7. A robustez em vários mercados requer validação.

  8. A monitorização contínua da robustez do modelo é crítica.

Reforço

Com base na análise, as melhorias podem incluir:

  1. Ajustar parâmetros para estabilidade de retorno.

  2. Incorporar aprendizagem de máquina para o tempo de entrada.

  3. Otimizar o stop loss dinâmico e tirar lucro.

  4. Avaliar o impacto do período de detenção na curva do capital próprio.

  5. Teste a robustez em diferentes mercados.

  6. Adicionar verificações de robustez dos parâmetros para evitar a sobreajuste.

  7. Desenvolver uma gestão quantitativa dos riscos.

  8. Validar continuamente a eficácia da estratégia.

Conclusão

Em resumo, a abordagem multi-indicador forma um sistema de negociação relativamente robusto. Mas a otimização e validação contínua são fundamentais para qualquer estratégia, com foco na robustez dos parâmetros para a adaptabilidade do mercado.


//@version=3
strategy("Free Strategy #08 (Combo of #01 and #02) (ES / SPY)", overlay=true)

// Inputs
Quantity = input(1, minval=1, title="Quantity")
SmaPeriod01 = input(3, minval=1, title="SMA Period 01")
SmaPeriod02 = input(8, minval=1, title="SMA Period 02")
SmaPeriod03 = input(10, minval=1, title="SMA Period 03")
EmaPeriod01 = input(5, minval=1, title="EMA Period 01")
EmaPeriod02 = input(3, minval=1, title="EMA Period 02")
MaxProfitCloses = input(5, minval=1, title="Max Profit Close")
MaxBars = input(10, minval=1, title="Max Total Bars")

// Misc Variables
src = close
BarsSinceEntry = 0
MaxProfitCount = 0
Sma01 = sma(close, SmaPeriod01)
Sma02 = sma(close, SmaPeriod02)
Sma03 = sma(close, SmaPeriod03)
Ema01 = ema(close, EmaPeriod01)
Ema02 = ema(close, EmaPeriod02)
OHLC = (open + high + low + close) / 4.0

// Conditions
Cond00 = strategy.position_size == 0
Cond01 = close < Sma03
Cond02 = close <= Sma01
Cond03 = close[1] > Sma01[1]
Cond04 = open > Ema01
Cond05 = Sma02 < Sma02[1]
Entry01 = Cond00 and Cond01 and Cond02 and Cond03 and Cond04 and Cond05

Cond06 = close < Ema02
Cond07 = open > OHLC
Cond08 = volume <= volume[1]
Cond09 = (close < min(open[1], close[1]) or close > max(open[1], close[1]))
Entry02 = Cond00 and Cond06 and Cond07 and Cond08 and Cond09

// Update Exit Variables
BarsSinceEntry := Cond00 ? 0 : nz(BarsSinceEntry[1]) + 1
MaxProfitCount := Cond00 ? 0 : (close > strategy.position_avg_price and BarsSinceEntry > 1) ? nz(MaxProfitCount[1]) + 1 : nz(MaxProfitCount[1])

// Entries
strategy.entry(id="L1", long=true, qty=Quantity, when=(Entry01 or Entry02))
 
// Exits
strategy.close("L1", (BarsSinceEntry - 1 >= MaxBars or MaxProfitCount >= MaxProfitCloses))

Mais.