Oscilador estocástico intradiário com estratégia crossover de média móvel dupla

Autora:ChaoZhang, Data: 2023-10-27 17:00:04
Tags:

img

Resumo

Esta estratégia combina o crossover de média móvel dupla e o oscilador estocástico para identificar oportunidades de reversão de tendência para uma negociação eficiente a curto prazo.

Estratégia lógica

A estratégia baseia-se na combinação do crossover de média móvel dupla e do oscilador estocástico.

O crossover de média móvel dupla consiste em uma média móvel rápida, média móvel lenta e média móvel ultra lenta. Quando o MA rápido cruza acima do MA lento, é um sinal de compra. Quando o MA rápido cruza abaixo do MA lento, é um sinal de venda. O crossover de MA dupla pode identificar pontos de inversão de tendência de médio prazo.

O oscilador estocástico contém os valores %K e %D. %K mostra onde o fechamento atual é relativo aos preços mais altos e mais baixos dos últimos N dias. %D é a média móvel simples do dia M de %K. Valores acima de 80 significam níveis de sobrecompra e valores abaixo de 20 significam níveis de sobrevenda. O oscilador estocástico pode identificar zonas de sobrecompra/supervenda de curto prazo.

Esta estratégia combina o crossover de MA duplo e o oscilador estocástico. Procura sinais de reversão de tendência do crossover de MA dupla quando o estocástico mostra níveis de sobrecompra / sobrevenda.

Análise das vantagens

As vantagens desta estratégia:

  1. Combinação do crossover de MA duplo e do oscilador estocástico para identificar inversões de tendência a médio e curto prazo.

  2. A utilização de sinais estocásticos de sobrecompra/supervenda para selecionar transações de reversão cruzada de MA dupla mais eficazes.

  3. Regras comerciais claras e fáceis de aplicar.

  4. Parâmetros de tempo e de mês de negociação ajustáveis, adequados a diferentes produtos e períodos de tempo.

  5. Parar perdas para controlar os riscos.

Análise de riscos

Os riscos desta estratégia:

  1. O MMA duplo pode ter falhas. O estocástico pode ter divergências de touro/urso inválidas, levando a sinais comerciais errados. Ajuste de parâmetros ou adicione outros indicadores para confirmação de combinação.

  2. Baseado apenas em indicadores técnicos sem considerar os fundamentos. Pode falhar em eventos econômicos importantes. Adicionar controle de risco de eventos econômicos.

  3. Difícil de identificar o momento exato de reversão de MA, pode ter problemas de paradas sendo muito apertadas ou muito largas.

  4. Otimizar os parâmetros para diferentes produtos e prazos por meio de backtesting.

  5. Apto apenas para negociação a curto prazo, não para detenção a longo prazo.

Orientações de otimização

A estratégia pode ser otimizada em vários aspectos:

  1. Teste mais combinações de indicadores como KDJ, MACD etc. para melhorar a validade do sinal.

  2. Adicionar análise de volume de negociação para evitar falhas.

  3. Otimizar os parâmetros de dupla MA para identificar pontos de reversão mais precisos.

  4. Otimizar a estratégia de stop loss para reduzir a possibilidade de ser parado.

  5. Adicionar módulos de controlo do risco de eventos económicos para evitar os impactos de eventos importantes.

  6. Usar técnicas de aprendizagem de máquina para otimizar automaticamente parâmetros para melhor adaptabilidade.

  7. Repetir testes em mais produtos e prazos para encontrar as melhores aplicações.

Conclusão

Esta estratégia opera em pontos de reversão de tendência de médio prazo identificados pelo crossover de MA dupla e divergências estocásticas touro / urso. Em comparação com o uso de um único indicador, pode melhorar a lucratividade do comércio com regras claras. Mas também tem riscos que exigem otimização de parâmetros e stop loss, e mais filtros e controles de risco.


/*backtest
start: 2022-10-26 00:00:00
end: 2023-10-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title="Intraday Stochiastic Strategy", shorttitle="Intraday Stochiastic Strategy", overlay=true, initial_capital = 1000)
//WORKS FOR BTCUSD M30
//OBVERVED GOOD PERFORMANCES FOR SELL MODE M15 : US30USD / UK100GBP / JP225USD / SPX500USD / BCOUSD / EURGBP
//Best Forex Hours are 7-21
//0 is Long Position
//1 is Short Position
//2 No position
mode=input(1, maxval=2, title="Mode")
lossLimit=input(10000, maxval=10000, title="Loss Limit")
hourStart=input(2, maxval=24, title="Hour Start")
hourStop=input(13, maxval=24, title="Hour Stop")

//Month selected for back testing. 0 is maximum number of months
monthSelected = input(0, maxval=12, title="Month Selected")

/////////////////////////////////////////////////

fast = 20, slow = 50, ultraSlow = 200
fastMA = sma(close, fast)
slowMA = sma(close, slow)
ultraSlowMA = sma(close, ultraSlow)

colorFast = red
colorSlow = black
colorUltraSlowMA = purple

if(timeframe.period == "1" or timeframe.period == "3" or timeframe.period == "5" or timeframe.period == "15" or timeframe.period == "30" or timeframe.period == "45" or timeframe.period == "60" or timeframe.period == "120" or timeframe.period == "180" or timeframe.period == "240")
    fastMA := ema(close, fast)
    slowMA := ema(close, slow)
    ultraSlowMA := ema(close, ultraSlow)
    colorFast := orange
    colorSlow := gray
    colorUltraSlowMA := blue

p1 = plot(fastMA, color=colorFast)
p2 = plot(slowMA, color=colorSlow, linewidth=2)  
p3 = plot(ultraSlowMA, color=colorUltraSlowMA, linewidth=3)

fill(p1, p2, color = fastMA > slowMA ? green : red)

////////////////////////////////////////////////

ema150 = 200
ema150MA = ema(close, ema150)

smooth = input(3, minval=1), K = input(14, minval=1), D=input(3,minval=1)
hh=highest(high,K)
ll=lowest(low,K)
k = sma((close-ll)/(hh-ll)*100, smooth)
d = sma(k, 3)
//plot(k, color=blue)
//plot(d, color=red)
//h0 = hline(80)
//h1 = hline(20)
//fill(h0, h1, color=purple, transp=95)


//plot(hour*100, color=red, linewidth=2)

stochiasticHigh = 80
stochiasticLow = 20

data = close < ema150MA and k>stochiasticHigh and d>stochiasticHigh and close>open
plotshape(data, style=shape.triangledown, location=location.belowbar, color=red)

data2 = close > ema150MA and k<stochiasticLow and d<stochiasticLow and close<open
plotshape(data2, style=shape.triangleup, location=location.abovebar, color=green)

isData = 0
isData := isData[1]

    
if(isData == 0)
    if(data)
        if(mode==1 and hour>hourStart and hour<hourStop and (monthSelected==0 or month==monthSelected)) //DOW hours : 2-13
            strategy.entry("SCALP SHORT", strategy.short)  
            isData := 1
else
    if(k<stochiasticLow and d<stochiasticLow)
        if(mode==1)
            strategy.close_all(when = true)
        isData := 0
        
isData2 = 0
isData2 := isData2[1]
    
if(isData2 == 0)
    if(data2)
        if(mode==0 and hour>hourStart and hour<hourStop and (monthSelected==0 or month==monthSelected))
            strategy.entry("SCALP LONG", strategy.long)  
            isData2 := 1
else
    if(k>stochiasticHigh and d>stochiasticHigh)
        if(mode==0)
            strategy.close_all(when = true)
        isData2 := 0

strategy.exit("STOP LOSS", "SCALP LONG", loss=lossLimit)
strategy.exit("STOP LOSS", "SCALP SHORT", loss=lossLimit) 

Mais.