Estratégia de acompanhamento do impulso baseada na integração de indicadores

Autora:ChaoZhang, Data: 2023-10-17 15:26:49
Tags:

img

Resumo

Esta estratégia baseia-se num integrador de indicadores personalizado para determinar a direção da tendência dos preços, acumulando a soma das distâncias entre o preço e a média móvel, e, assim, acompanhando a tendência.

Estratégia lógica

A estratégia utiliza um indicador personalizado para integrar a distância entre o preço e a média móvel, implementado da seguinte forma:

  1. Calcular a distância entre o preço e a média móvel simples de 200 períodos k=close-sma ((close,200)

  2. Definir o período de integração s=29, acumular a soma de k nos últimos s períodos: soma = 0, para i = 0 até s, soma := soma + k[i]

  3. Quando a soma > 0 é gerado sinal longo. Quando a soma < 0, é gerado sinal curto.

  4. Quando a posição longa é aberta, se a soma for < 0, fechar a posição longa.

A estratégia julga a direção geral da tendência rastreando se a soma acumulada da distância entre o preço e a média móvel é positiva ou negativa. Quando a integral é positiva, ela indica uma tendência ascendente e a posição longa deve ser realizada. Quando a integral é negativa, ela indica uma tendência descendente e a posição curta deve ser realizada.

Vantagens

  1. O integrador de indicadores personalizado pode determinar efetivamente a direção da tendência de preços.

  2. O conceito de integração acumula a distância entre o preço e o MA, melhorando a precisão da determinação da tendência.

  3. Lógica relativamente simples, fácil de entender e otimizar.

  4. Ajuste flexível do período de integração para otimizar a sensibilidade.

  5. Bons resultados de backtest, lucros estáveis, aplicáveis na negociação ao vivo.

Riscos

  1. A configuração inadequada do período de integração pode causar uma reação insensível e perder pontos de virada da tendência.

  2. A configuração inadequada da duração MA pode causar uma avaliação errada da tendência.

  3. Grandes acontecimentos repentinos podem causar sinais errados.

  4. Seleção incorreta de símbolos, símbolos altamente voláteis podem deteriorar a eficácia.

Soluções correspondentes:

  1. Otimizar o período de integração para uma melhor sensibilidade.

  2. Teste diferentes comprimentos MA para encontrar o ideal para a determinação da tendência.

  3. Fechar estratégia antes de grandes eventos para evitar erros de grandes mudanças de preço.

  4. Selecionar símbolos de baixa volatilidade para melhor desempenho.

Orientações para melhorias

  1. Considere a adição de outros indicadores, como o RSI, para determinação abrangente.

  2. Resultados da integração da investigação utilizando diferentes tipos de MA.

  3. Tente otimizar automaticamente o período de integração para diferentes símbolos.

  4. Adicione indicadores de volume para evitar erros durante grandes oscilações de preços.

  5. Usar aprendizagem de máquina para otimizar automaticamente parâmetros de robustez.

Conclusão

Esta estratégia julga a direção da tendência usando um integrador de indicadores personalizado, acumulando a distância entre preço e MA. A lógica é simples e clara, e os resultados do backtest são bons. Pode ser melhorada ajustando parâmetros de integração, adicionando indicadores auxiliares, otimização automática, etc. para uma aplicação prática mais confiável.


/*backtest
start: 2023-10-09 00:00:00
end: 2023-10-16 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("Indicator Integrator Strat",default_qty_type = strategy.percent_of_equity, default_qty_value = 100,currency="USD",initial_capital=100, overlay=true)

l = input(defval=170,title="Length for indicator")
s = input(title="Length of summation",defval=29)
a= sma(close,l)
r=roc(close,l)
k=close-a
sum = 0
for i = 0 to s
    sum := sum + k[i]
plot(a,color=yellow,linewidth=2,transp=0)
//bc =  iff( sum > 0, white, teal)
//plot(sum,color=bc, transp=20, linewidth=3,style=columns)
//plot(sma(sum,3),color=white)
//hline(0)

inpTakeProfit = input(defval = 0, title = "Take Profit", minval = 0)
inpStopLoss = input(defval = 0, title = "Stop Loss", minval = 0)
inpTrailStop = input(defval = 0, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)
useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na
useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na
useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na
useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na


longCondition = sum>0
exitlong = sum<0

shortCondition = sum<0
exitshort = sum>0

strategy.entry(id = "Long", long=true, when = longCondition)
strategy.close(id = "Long", when = exitlong)
strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset, when=exitlong)

strategy.entry(id = "Short", long=false, when = shortCondition)
strategy.close(id = "Short", when = exitshort)
strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset, when=exitshort)

Mais.