
Esta estratégia é uma estratégia de negociação usando um indicador de inversão de volume bidirecional. A estratégia constrói um índice de inversão de volume, calculando o preço máximo, mínimo e de encerramento em um determinado período de tempo, e calcula sua média móvel para formar um sinal de negociação.
O indicador central desta estratégia é o Stochastic Momentum Index (SMI). A fórmula de cálculo do SMI é a seguinte:
\[SMI = \frac{Close-(HH+LL)/2}{AVGDIFF/2}*100\]
Em que, HH é o preço mais alto dos últimos N dias, LL é o preço mais baixo dos ú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 índice SMI reflete a característica de reversão de preços. Quando o preço da ação está perto do máximo dos últimos N dias, o SMI está perto de 100, indicando que a ação está superada; Quando está perto do mínimo dos últimos N dias, o SMI está perto de 100, indicando que a ação está superada.
Esta estratégia usa o SMA MDA do SMI como linha de sinal de negociação. Um sinal de compra é gerado quando o SMI inverte para baixo a partir da zona de sobrecompra e para baixo a SMA; um sinal de venda é gerado quando o SMI inverte para cima a partir da zona de sobrevenda e para cima a SMA.
Ao mesmo tempo, a estratégia julga que a entidade da linha K quebra para definir o stop loss.
A estratégia tem as seguintes vantagens:
O sistema de inversão de preços é usado para gerar sinais de negociação em pontos de inversão de tendências e capturar oportunidades de reversão.
O índice SMI combina o preço máximo, o preço mínimo e o preço de fechamento para avaliar o excesso de compra e venda. O sinal é mais confiável.
Exiting the position, para controlar o risco de forma eficaz.
A estratégia tem menos parâmetros e é mais fácil de implementar e otimizar.
A estratégia também apresenta alguns riscos:
A inversão de tendência é difícil de determinar quando a inversão foi bem-sucedida, podendo ocorrer após várias perdas.
O erro de julgamento no momento da virada pode aumentar os prejuízos.
A interrupção de ruptura de uma entidade pode ser muito sensível e ter uma maior probabilidade de ser presa.
Resolução:
Optimizar os parâmetros do SMI e ajustar a frequência de negociação inversa.
Em combinação com outros indicadores, o momento da reversão.
Ajustar o tamanho do parâmetro de perda de entidade para evitar a hipersensibilidade.
A estratégia pode ser melhorada nas seguintes direções:
Optimizar os parâmetros a e b do SMI para ajustar a sensibilidade da captura inversa.
Adicione outros indicadores de julgamento para evitar perder a direção das principais tendências, como a combinação de linha média, indicadores de taxa de flutuação, etc.
Aumentar o modo de parada de perda, para evitar que a parada seja muito sensível ou lenta. Pode-se considerar a parada de rastreamento, a parada de curva, etc.
Combinando modelos de aprendizagem de máquina para avaliar a probabilidade de sucesso da reversão e evitar transações de reversão fracassadas.
Esta estratégia é, em geral, uma estratégia de negociação bidirecional usando o índice de inversão SMI. O benefício é aproveitar a característica de inversão de preço, gerando um sinal de negociação no ponto de inversão, para capturar mais oportunidades de negociação de curta distância. Mas também existem alguns riscos típicos de negociação de inversão, que precisam de otimização dos parâmetros e da parada para evitar o aumento de perdas.
/*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()