Estratégia de triagem do indicador de momentum estocástico duplo


Data de criação: 2023-10-07 16:45:25 última modificação: 2023-10-07 16:45:25
cópia: 0 Cliques: 736
1
focar em
1617
Seguidores

Visão geral

A estratégia usa dois indicadores de energia dinâmica aleatória (SMI e RSI) para julgar o espaço, auxiliado por filtros de Martingale e físicos para filtrar os sinais de negociação, com o objetivo de capturar tendências de linha curta e rastrear os movimentos de preços.

Princípio da estratégia

A estratégia usa dois indicadores aleatórios de energia dinâmica, o SMI e o RSI, para julgar o overbought. O SMI é calculado através da diferença de preço real da linha K e da média móvel do preço de fechamento, o que permite identificar efetivamente o ponto de reversão. O RSI determina o overbought através da comparação do volume de overbought. A estratégia faz o overbought quando o SMI está abaixo de 50 e o RSI está abaixo de 20; O overbought quando o SMI está acima de 50 e o RSI acima de 80.

A estratégia também usa 13 da linha média corporal de 10 ciclos como condição de filtragem de ruptura. A ruptura é considerada válida quando a entidade quebra 13 da linha média.

Além disso, a estratégia usa a estratégia de Martingale opcional, ou seja, aumenta proporcionalmente a posição em uma negociação perdedora, na expectativa de recuperar os prejuízos anteriores.

A função Backtest é usada para testar a eficácia da estratégia, inserindo o tempo de início e fim.

Análise de vantagens

A estratégia utiliza um conjunto de indicadores e filtros binários e aleatórios para identificar pontos de reversão, capturar tendências de linha curta e rastrear os movimentos de preços.

  • O SMI tem uma forte capacidade de reconhecimento de pontos de inflexão, e pode ser usado para determinar sobrecompra e sobrevenda.
  • O RSI é usado em superposição, evitando a falta de notas.
  • Filtragem corporal para eliminar falhas e melhorar a precisão do sinal
  • Opção de estratégia de caça à martingale para recuperar parte dos prejuízos

Análise de Riscos

  • SMI e RSI como indicadores de atraso, sinal de atraso no risco de perseguição
  • Martin Gill corre o risco de acelerar os prejuízos
  • Os filtros de câmbio podem filtrar alguns sinais de validade em mercados com grandes movimentos.

Pode-se reduzir a probabilidade de seguimento de alta e baixa através da otimização dos parâmetros do SMI e RSI. Utilize racionalmente a estratégia de Martingale para controlar a taxa e a frequência de levantamento de posições. Selecione se o filtro está ativado ou não, dependendo da situação do mercado, para reduzir a probabilidade de filtragem de sinais válidos.

Direção de otimização

  • Optimizar a combinação de parâmetros SMI e RSI para encontrar o melhor efeito de determinação
  • Ajuste os parâmetros do filtro para reduzir a probabilidade de um sinal de filtro válido
  • Optimizar o número e a proporção de adições de Martingale
  • Combinação de indicadores de tendência para evitar inversão
  • Aumentar as estratégias de stop loss e controlar os perdas individuais

Resumir

A estratégia utiliza um conjunto de indicadores binários aleatórios para capturar os pontos de reversão, auxiliando a filtragem e o rastreamento de sinais de negociação com filtros e martingales, para identificar efetivamente as tendências de linha curta, rastrear os movimentos de preços e é adequada para investidores que buscam alta taxa de ganho. O uso do indicador deve ter em conta o risco de mercados de atraso e de turbulência. O risco pode ser controlado por meio de otimização de parâmetros e parada de perdas.

Código-fonte da estratégia
/*backtest
start: 2022-09-30 00:00:00
end: 2023-10-06 00:00:00
period: 2d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
// strategy(title = "CS Basic Scripts - Stochastic Special (Strategy)", shorttitle = "Stochastic Special", 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")
usemar = input(false, defval = false, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
usesmi = input(true, defval = true, title = "Use SMI Strategy")
usersi = input(true, defval = true, title = "Use RSI Strategy")
usebod = input(true, defval = true, title = "Use Body-Filter")
a = input(5, "SMI Percent K Length")
b = input(3, "SMI Percent D Length")
limit = input(50, defval = 50, minval = 1, maxval = 100, title = "SMI Limit")

//Backtesting Input Range
fromyear = input(2017, defval = 2017, 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")

//Fast RSI
fastup = rma(max(change(close), 0), 7)
fastdown = rma(-min(change(close), 0), 7)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//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 Filter
nbody = abs(close - open)
abody = sma(nbody, 10)
body = nbody > abody / 3 or usebod == false

//Signals
up1 = SMI < -1 * limit and close < open and body and usesmi
dn1 = SMI > limit and close > open and body and usesmi
up2 = fastrsi < 20 and close < open and body and usersi
dn2 = fastrsi > 80 and close > open and body and usersi
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body

//Trading
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]

if up1 or up2
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn1 or dn2
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()