Estratégia de negociação de índices de impulso de reversão dupla

Autora:ChaoZhang, Data: 2023-12-25 12:02:57
Tags:

img

Resumo

Esta estratégia é baseada no indicador de Índice de Momentum de Reversão Dupla para negociação. Ele calcula um índice de momentum de reversão durante um determinado período de tempo usando o preço mais alto, o preço mais baixo e o preço de fechamento, e gera sinais de negociação quando o índice se inverte para baixo da zona de sobrecompra ou se inverte para cima da zona de sobrevenda.

Estratégia lógica

O indicador central desta estratégia é o índice de momento estocástico (SMI).

$$SMI = \frac{Close-(HH+LL)/2}{AVGDIFF/2}*100$$

Quando HH é o preço mais alto nos últimos N dias, LL é o preço mais baixo nos últimos N dias, N é determinado pelo parâmetro a; AVGDIFF é a média móvel de M dias de HH-LL, M é determinado pelo parâmetro b.

O SMI mostra a característica de reversão dos preços. Quando o preço da ação se aproxima do ponto mais alto nos últimos N dias, o SMI está perto de 100, indicando sobrecompra da ação; quando se aproxima do ponto mais baixo nos últimos N dias, o SMI está perto de -100, indicando sobrevenda. Os sinais de compra/venda são gerados quando o SMI se reverte para baixo do nível de 100 ou se reverte para cima do nível de -100.

A estratégia usa a SMA móvel de M-day do SMI como linha de sinal de negociação. Quando o SMI reverte para baixo da zona de sobrecompra e quebra abaixo do SMA, um sinal de compra é gerado. Quando o SMI reverte para cima da zona de sobrevenda e quebra acima do SMA, um sinal de venda é gerado.

Além disso, a estratégia julga o rompimento do corpo do candelabro para o stop loss.

Análise das vantagens

As vantagens desta estratégia são as seguintes:

  1. Utilizando o princípio da inversão de preços, pode gerar sinais de negociação em pontos de reversão e capturar oportunidades de reversão.

  2. O SMI combina o preço mais alto, o preço mais baixo e o preço de fechamento para julgar as condições de sobrecompra e sobrevenda, tornando os sinais mais confiáveis.

  3. Com o corpo do candelabro, pode sair de posições a tempo e controlar os riscos de forma eficaz.

  4. A estratégia tem poucos parâmetros e é fácil de implementar e otimizar.

Análise de riscos

Há também alguns riscos para esta estratégia:

  1. A negociação de reversão é difícil de determinar o momento exato de reversões bem sucedidas e pode incorrer em perdas múltiplas antes de capturar a reversão da tendência.

  2. O julgamento incorreto dos pontos de reversão pode levar a perdas amplificadas.

  3. O corpo pode ser demasiado sensível e ter uma grande probabilidade de ficar preso.

As soluções são:

  1. Otimizar os parâmetros do SMI para ajustar a frequência de negociação de reversão.

  2. Combinar outros indicadores para determinar o momento da reversão.

  3. Ajuste o tamanho do corpo para parar a perda para evitar ser muito sensível.

Optimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Otimizar os parâmetros a e b do SMI para ajustar a sensibilidade das inversões de captura.

  2. Adicionar outros indicadores para julgamento, para evitar perder as principais direcções de tendência, por exemplo, médias móveis, indicadores de volatilidade, etc.

  3. Adicionar mais métodos de stop loss para evitar ser demasiado sensível ou insensível, tais como trailing stop loss, curva stop loss etc.

  4. Incorporar modelos de aprendizagem de máquina para julgar a probabilidade de sucesso da reversão, evitando negócios de reversão fracassados.

Conclusão

Em conclusão, esta é uma estratégia de negociação de duas direções baseada no índice de impulso de reversão SMI. A vantagem reside em capturar mais oportunidades de negociação de curto prazo, utilizando a reversão de preços e gerando sinais em pontos de reversão. Mas também há riscos típicos da negociação de reversão. O ajuste de parâmetros e a otimização de stop loss são necessários para evitar perdas amplificadas.


/*backtest
start: 2023-11-01 00:00:00
end: 2023-11-30 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Stochastic Strategy v1.0", shorttitle = "Stochastic str 1.0", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings 
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
a = input(5, "Percent K Length")
b = input(3, "Percent D Length")
limit = input(50, defval = 50, minval = 1, maxval = 100, title = "SMI Limit")
fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Stochastic Momentum Index
ll = lowest (low, a)
hh = highest (high, a)
diff = hh - ll
rdiff = close - (hh+ll)/2
avgrel = ema(ema(rdiff,b),b)
avgdiff = ema(ema(diff,b),b)
SMI = avgdiff != 0 ? (avgrel/(avgdiff/2)*100) : 0
SMIsignal = ema(SMI,b)

//Lines
plot(SMI, color = blue, linewidth = 3, title = "Stochastic Momentum Index")
plot(SMIsignal, color = red, linewidth = 3, title = "SMI Signal Line")
plot(limit, color = black, title = "Over Bought")
plot(-1 * limit, color = black, title = "Over Sold")
plot(0, color = blue, title = "Zero Line")

//Body
body = abs(close - open)
abody = sma(body, 10)

//Signals
up = SMIsignal < -1 * limit and close < open
dn = SMIsignal > limit and close > open
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 2

//Trading
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]

if up
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Bottom", strategy.long, needlong == false ? 0 : lot)

if dn
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Top", strategy.short, needshort == false ? 0 : lot)
    
if  exit
    strategy.close_all()

Mais.