Momentum Breakout Backtesting Apoio Resistência Estratégia

Autora:ChaoZhang, Data: 2024-02-22 16:07:14
Tags:

img

Resumo

Esta estratégia usa principalmente os preços altos, baixos e fechados dos dias de negociação anteriores como os níveis de suporte e resistência para o dia atual.

Princípio da estratégia

O código define primeiro uma função calculateSupportResistance para calcular os níveis de suporte e resistência, que extrai os preços altos, baixos e de fechamento do dia de negociação anterior como os níveis de suporte e resistência do dia em curso.

Então, na lógica principal, esta função é chamada para obter esses três níveis de preço e gráfica-los.

Na lógica do backtesting, se o preço de fechamento for menor que o mínimo do dia anterior, enquanto o preço atual for maior que esse mínimo, formando um breakout, ele vai longo.

Através deste modelo de ruptura, o julgamento da tendência e geração de sinais de negociação são implementados.

Vantagens

  1. Utilize os dados dos dias de negociação anteriores para construir os níveis de suporte e resistência do dia atual, evitando o problema de otimização de parâmetros

  2. Os níveis de suporte e resistência provêm de dados reais de negociação de mercado, com algum valor de referência

  3. Modelo de backtesting simples e direto, fácil de compreender e implementar

  4. A exibição visual dos níveis de suporte e resistência forma a percepção dos preços

  5. Monitorização em tempo real dos breakouts, captura atempada de oportunidades de negociação

Riscos

  1. Os níveis de suporte e resistência mudam ao longo do tempo, sendo difícil determinar a validade

  2. Incapacidade de prever a direcção da tendência, risco de falta de inversões

  3. Facilmente afectados por falsas fugas, risco de entrada prematura

  4. Incapaz de determinar a persistência de rupturas, provavelmente uma parada precoce da perda

  5. É mais provável que o suporte e a resistência individuais falhem sob uma enorme flutuação do mercado

Contramedidas:

  1. Combinar mais fatores para julgar a validade dos breakouts

  2. Ampliar adequadamente o intervalo de stop loss para detectar tendências

  3. Posições abertas em lotes, reduzir o impacto das flutuações individuais

Optimizações

  1. Adicionar mais dados históricos como linhas de 5 dias, 10 dias para determinar os níveis

  2. Incorporar outros indicadores como volume para julgar a validade da ruptura

  3. Previsão de prejuízo

  4. Otimizar a gestão do capital, controlar perdas individuais

Resumo

No geral, esta é uma estratégia de ruptura típica, simples e intuitiva. Construindo o suporte e a resistência do dia atual com os dados do dia anterior e testando as rupturas desses níveis para longo / curto. Os prós são fáceis de entender e visualizar diretamente os níveis; os contras são riscos falsos de ruptura e incerteza de persistência. Os próximos passos são melhorar a validade da ruptura, controlar os riscos, otimizar a gestão de capital etc.


/*backtest
start: 2024-01-22 00:00:00
end: 2024-02-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Support and Resistance with Backtesting", overlay=true)

// Function to calculate support and resistance levels
calculateSupportResistance() =>
    highPrevDay = request.security(syminfo.tickerid, "D", high[1], lookahead=barmerge.lookahead_on)
    lowPrevDay = request.security(syminfo.tickerid, "D", low[1], lookahead=barmerge.lookahead_on)
    closePrevDay = request.security(syminfo.tickerid, "D", close[1], lookahead=barmerge.lookahead_on)
    [highPrevDay, lowPrevDay, closePrevDay]

// Call the function to get support and resistance levels
[supResHigh, supResLow, supResClose] = calculateSupportResistance()

// Plotting support and resistance levels
plot(supResHigh, color=color.red, linewidth=2, title="Previous Day High")
plot(supResLow, color=color.green, linewidth=2, title="Previous Day Low")
plot(supResClose, color=color.blue, linewidth=2, title="Previous Day Close")

// Backtesting logic
backtestCondition = close[1] < supResLow and close > supResLow
strategy.entry("Long", strategy.long, when=backtestCondition)

// Plotting buy/sell arrows for backtesting
plotarrow(backtestCondition ? 1 : na, colorup=color.green, offset=-1, transp=0)


Mais.