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.
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.
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
Os níveis de suporte e resistência provêm de dados reais de negociação de mercado, com algum valor de referência
Modelo de backtesting simples e direto, fácil de compreender e implementar
A exibição visual dos níveis de suporte e resistência forma a percepção dos preços
Monitorização em tempo real dos breakouts, captura atempada de oportunidades de negociação
Os níveis de suporte e resistência mudam ao longo do tempo, sendo difícil determinar a validade
Incapacidade de prever a direcção da tendência, risco de falta de inversões
Facilmente afectados por falsas fugas, risco de entrada prematura
Incapaz de determinar a persistência de rupturas, provavelmente uma parada precoce da perda
É mais provável que o suporte e a resistência individuais falhem sob uma enorme flutuação do mercado
Contramedidas:
Combinar mais fatores para julgar a validade dos breakouts
Ampliar adequadamente o intervalo de stop loss para detectar tendências
Posições abertas em lotes, reduzir o impacto das flutuações individuais
Adicionar mais dados históricos como linhas de 5 dias, 10 dias para determinar os níveis
Incorporar outros indicadores como volume para julgar a validade da ruptura
Previsão de prejuízo
Otimizar a gestão do capital, controlar perdas individuais
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)