A estratégia de avanço da média móvel dupla calcula duas médias móveis de períodos diferentes para formar um canal e julgar a tendência oscilante dos preços.
As principais etapas desta estratégia são:
Calcular duas médias móveis, uma com um período mais curto e outra com um período mais longo.
Adicionar um ATR acima e abaixo da MA mais curta para formar um canal.
Um sinal de compra é gerado quando o preço atravessa o canal para cima. Um sinal de venda é gerado quando o preço atravessa o canal para baixo.
Os sinais de negociação válidos só são gerados quando o avanço de curto prazo se alinha com a direção da tendência principal.
Ao seguir estas etapas, esta estratégia capta pontos de ruptura nas tendências oscilatórias e evita sinais falsos referindo-se à tendência dominante.
As vantagens desta estratégia:
O canal de MA duplo reflete a faixa de oscilação de preços atual.
O parâmetro ATR permite que a gama de canais acompanhe a volatilidade do mercado em tempo real.
A filtragem de tendências convencionais evita sinais falsos em mercados oscilantes.
As regras são simples e fáceis de entender, adequadas para aprendizagem e pesquisa.
Os riscos:
Os avanços fracassados podem levar à perda de boas oportunidades.
O julgamento da tendência dominante tem um atraso de tempo e não pode eliminar todos os sinais falsos.
O stop loss pode ser penetrado em mercados voláteis, pode ajustar o ATR dinamicamente.
Maneiras de otimizar esta estratégia:
Otimizar os parâmetros de MA para diferentes produtos.
Otimizar o parâmetro ATR para melhor rastrear a volatilidade.
Adicionar filtros adicionais como indicadores de volume e volatilidade para evitar ainda mais sinais falsos.
Usar aprendizagem de máquina para otimizar automaticamente parâmetros.
Esta estratégia de avanço de oscilação de MA dupla capta tendências oscilantes através do canal de MA dupla e filtragem mainstream. Com suas regras simples e claras, é um excelente exemplo para aprender estratégias de negociação inovadoras.
/*backtest start: 2022-11-20 00:00:00 end: 2023-11-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Anuj4912 //@version=4 strategy("Anuj4912", overlay=true) res = input(title="Time Frame", defval="120") Factor=input(1, minval=1,maxval = 100) Pd=input(1, minval=1,maxval = 100) tp = input(500,title="Take Profit") sl = input(400,title="Stop Loss") Up=hl2-(Factor*atr(Pd)) Dn=hl2+(Factor*atr(Pd)) MUp=request.security(syminfo.tickerid,res,hl2-(Factor*atr(Pd))) MDn=request.security(syminfo.tickerid,res,hl2+(Factor*atr(Pd))) Mclose=request.security(syminfo.tickerid,res,close) TrendUp=close[1]>TrendUp[1]? max(Up,TrendUp[1]) : Up TrendDown=close[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn MTrendUp=Mclose[1]>MTrendUp[1]? max(MUp,MTrendUp[1]) : MUp MTrendDown=Mclose[1]<MTrendDown[1]? min(MDn,MTrendDown[1]) : MDn Trend = close > TrendDown[1] ? 1: close< TrendUp[1]? -1: nz(Trend[1],1) Tsl = Trend==1? TrendUp: TrendDown MTrend = Mclose > MTrendDown[1] ? 1: Mclose< MTrendUp[1]? -1: nz(MTrend[1],1) MTsl = MTrend==1? MTrendUp: MTrendDown linecolor = Trend == 1 ? green : red plot(Tsl, color = linecolor , style = line , linewidth = 2,title = "SuperTrend") Mlinecolor = MTrend == 1 ? blue : orange plot(MTsl, color = Mlinecolor , style = line , linewidth = 2,title = "Main SuperTrend") plotshape(cross(close,Tsl) and close>Tsl , "Up Arrow", shape.triangleup,location.belowbar,green,0,0) plotshape(cross(Tsl,close) and close<Tsl , "Down Arrow", shape.triangledown , location.abovebar, red,0,0) up = Trend == 1 and Trend[1] == -1 and MTrend == 1 down = Trend == -1 and Trend[1] == 1 and MTrend == -1 plotarrow(up ? Trend : na, title="Up Entry Arrow", colorup=lime, maxheight=60, minheight=50, transp=0) plotarrow(down ? Trend : na, title="Down Entry Arrow", colordown=red, maxheight=60, minheight=50, transp=0) golong = Trend == 1 and Trend[1] == -1 and MTrend == 1 goshort = Trend == -1 and Trend[1] == 1 and MTrend == -1 strategy.entry("Buy", strategy.long,when=golong) strategy.exit("Close Buy","Buy",profit=tp,loss=sl) strategy.entry("Sell", strategy.short,when=goshort) strategy.exit("Close Sell","Sell",profit=tp,loss=sl)