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.
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.
As vantagens desta estratégia:
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.
A utilização de sinais estocásticos de sobrecompra/supervenda para selecionar transações de reversão cruzada de MA dupla mais eficazes.
Regras comerciais claras e fáceis de aplicar.
Parâmetros de tempo e de mês de negociação ajustáveis, adequados a diferentes produtos e períodos de tempo.
Parar perdas para controlar os riscos.
Os riscos desta estratégia:
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.
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.
Difícil de identificar o momento exato de reversão de MA, pode ter problemas de paradas sendo muito apertadas ou muito largas.
Otimizar os parâmetros para diferentes produtos e prazos por meio de backtesting.
Apto apenas para negociação a curto prazo, não para detenção a longo prazo.
A estratégia pode ser otimizada em vários aspectos:
Teste mais combinações de indicadores como KDJ, MACD etc. para melhorar a validade do sinal.
Adicionar análise de volume de negociação para evitar falhas.
Otimizar os parâmetros de dupla MA para identificar pontos de reversão mais precisos.
Otimizar a estratégia de stop loss para reduzir a possibilidade de ser parado.
Adicionar módulos de controlo do risco de eventos económicos para evitar os impactos de eventos importantes.
Usar técnicas de aprendizagem de máquina para otimizar automaticamente parâmetros para melhor adaptabilidade.
Repetir testes em mais produtos e prazos para encontrar as melhores aplicações.
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)