Estratégia dinâmica de apoio e resistência baseada em dados históricos

Autora:ChaoZhang, Data: 2023-11-28 17:00:13
Tags:

img

Resumo

Esta estratégia calcula dinamicamente os níveis de suporte e resistência com base em preços históricos altos, baixos e próximos, e gera sinais de negociação em conformidade.

Estratégia lógica

  1. Calcular a média dos preços altos, baixos e de fechamento dos períodos anteriores como ponto pivô (PP).

  2. Calcular 3 linhas de apoio: S1 = 2PP - preço mais elevado; S2 = PP - (R1-S1); S3 = preço mais baixo - 2(preço mais elevado - PP).

  3. Calcule 3 linhas de resistência: R1 = 2PP - preço mais baixo; R2 = PP + (R1-S1); R3 = preço mais alto + 2(PP - preço mais baixo).

  4. Tomar posição longa quando o preço atravessa as linhas de resistência, tomar posição curta quando o preço atravessa as linhas de suporte.

Análise das vantagens

  1. Os níveis dinâmicos de suporte e resistência baseados em dados históricos permitem captar as alterações da estrutura do mercado em tempo útil.

  2. As configurações de suporte e resistência de várias camadas permitem uma melhor otimização da gestão de riscos.

  3. Sinais de negociação simples e intuitivos e mecanismo de stop loss.

Análise de riscos

  1. Os níveis de preços de referência fornecidos por dados históricos podem tornar-se inválidos em cenários de elevada volatilidade.

  2. A mudança entre posições longas e curtas deve ter em conta o custo de negociação.

  3. A qualidade dos dados deve ser assegurada para evitar erros de cálculo.

Orientações de otimização

  1. Considere incorporar mais referências de dados históricos, como média móvel de 100 dias, etc.

  2. Otimizar o dimensionamento das posições, por exemplo, ajustando o tamanho das posições com base na volatilidade.

  3. Adicione estratégias de stop loss como trailing stop loss ou stop loss baseado em risco.

Resumo

Esta estratégia fornece níveis de preços de referência de suporte e resistência de várias camadas com base no histórico. Tem uma lógica simples e direta adequada para posições de médio a longo prazo. Enquanto isso, os riscos sob alta volatilidade do mercado e custos de negociação devem ser monitorados. Outras otimizações podem tornar a estratégia robusta em ambientes complexos.


/*backtest
start: 2023-10-28 00:00:00
end: 2023-11-27 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 09/06/2020
// Pivot points simply took the high, low, and closing price from the previous period and 
// divided by 3 to find the pivot. From this pivot, traders would then base their 
// calculations for three support, and three resistance levels. The calculation for the most 
// basic flavor of pivot points, known as ‘floor-trader pivots’, along with their support and 
// resistance levels.
//
// WARNING:
//  - For purpose educate only
//  - This script to change bars colors.
////////////////////////////////////////////////////////////
strategy(title="Pivot Point V2", shorttitle="Pivot Point V2", overlay = true)
res = input(title="Resolution", type=input.resolution, defval="D")
SellFrom = input(title="Sell from ", defval="R1", options=["R1", "R2", "R3"])
BuyFrom = input(title="Buy from ", defval="S1", options=["S1", "S2", "S3"])
width = input(1, minval=1)
reverse = input(false, title="Trade reverse")
xHigh  = security(syminfo.tickerid,res, high)
xLow   = security(syminfo.tickerid,res, low)
xClose = security(syminfo.tickerid,res, close)
vPP = (xHigh+xLow+xClose) / 3
vS1 = 2*vPP - xHigh 
vR1 = 2*vPP-xLow
vS2 = vPP - (vR1 - vS1)
vR2 = vPP + (vR1 - vS1)
vS3 = xLow - 2 * (xHigh - vPP)
vR3 = xHigh + 2 * (vPP - xLow) 
pos = 0
S = iff(BuyFrom == "S1", vS1, 
      iff(BuyFrom == "S2", vS2,
         iff(BuyFrom == "S3", vS3,0)))
B = iff(SellFrom == "R1", vR1, 
      iff(SellFrom == "R2", vR2,
         iff(SellFrom == "R3", vR3,0)))
pos := iff(close > B, 1,
       iff(close < S, -1, nz(pos[1], 0))) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1 , 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )

Mais.