Abordamos o tema de automatização de estratégias em NTSL, MQL5 e NinjaScript!
Prezados membros,
por oportunidade da série de vídeos "Passeando pela Lojinha", na qual realizamos a análise de desempenho das estratégias mais assinadas na Loja de Estratégias do Profit Chart, compartilho abaixo a implementação do setup TRAP DE RAPOSA da Comunidade NeoTraderBot. Este setup é bastante difundido por Alexander Wolwacz, conhecido por Stormer, fundador da L&S Quant.
const cEncerraPosicao = 1730; cOffsetEmTicks = 10; input pRiscoGanho(1.61); pMediaRapida(9); pMediaLenta(81); var bGraficoTemporalDiarioOuAcima: boolean; bTrapRaposa, bSinalCompra, bSinalVenda: boolean; fMediaRapida, fMediaLenta, fDifMedia: float; fVolMedia: float; fStop: float; begin if CurrentBar = 0 then bGraficoTemporalDiarioOuAcima := (GraphicInterval = itDaily) or (GraphicInterval = itWeekly) or (GraphicInterval = itMonthly); bTrapRaposa := false; bSinalCompra := false; bSinalVenda := false; fMediaRapida := MediaExp(pMediaRapida,Close); fMediaLenta := MediaExp(pMediaLenta,Close); fVolMedia := AvgTrueRange(100,0); plot(fMediaRapida); plot2(fMediaLenta); setPlotColor(1,clWhite); setPlotStyle(1,psDash); setPlotColor(2,clRed); setPlotWidth(2,2); bTrapRaposa := ( (Close > fMediaRapida) and (Low <= fMediaRapida) or (Close < fMediaRapida) and (High >= fMediaRapida) ); if not hasPosition and ( (not bGraficoTemporalDiarioOuAcima) or ((bGraficoTemporalDiarioOuAcima) and not bTrapRaposa[1]) ) then begin //Sinal bTrapRaposa de Compra + 2 Passos do Paraíso if bTrapRaposa and (fMediaRapida > fMediaLenta) and (fMediaRapida > fMediaRapida[1]) and (fMediaLenta > fMediaLenta[1]) and ((Highest(fMediaRapida,pMediaRapida) - Lowest(fMediaRapida,pMediaRapida)) >= fVolMedia) then begin bSinalCompra := true; PaintBar(clGreen); PlotText("C", clGreen, 3, 10, Low - 5*MinPriceIncrement); end; //Sinal InsideBar de Venda + 2 Passos do Paraíso if bTrapRaposa and (fMediaRapida < fMediaLenta) and (fMediaRapida < fMediaRapida[1]) and (fMediaLenta < fMediaLenta[1]) and ((Highest(fMediaRapida,pMediaRapida) - Lowest(fMediaRapida,pMediaRapida)) >= fVolMedia) then begin bSinalVenda := true; PaintBar(clRed); PlotText("V", clRed, 3, 10, High + 5*MinPriceIncrement); end; end; // Apregoa ordens stop if bGraficoTemporalDiarioOuAcima then begin if bSinalCompra[1] then begin BuyStop(High[1] + 1*MinPriceIncrement, High[1] + cOffsetEmTicks*MinPriceIncrement); fStop := High[1] - Low[1]; end; if bSinalVenda[1] then begin SellShortStop(Low[1] - 1*MinPriceIncrement, Low[1] - cOffsetEmTicks*MinPriceIncrement); fStop := High[1] - Low[1]; end; end else begin if bSinalCompra then begin BuyStop(High + 1*MinPriceIncrement, High + cOffsetEmTicks*MinPriceIncrement); fStop := High - Low; end; if bSinalVenda then begin SellShortStop(Low - 1*MinPriceIncrement, Low - cOffsetEmTicks*MinPriceIncrement); fStop := High - Low; end; end; // Gerencia posição if IsBought then begin SellToCoverStop(buyPrice - fStop, buyPrice - fStop - cOffsetEmTicks*MinPriceIncrement); SellToCoverLimit(BuyPrice + pRiscoGanho*fStop); // Proteção para pulo de stop devido à gaps if (Close < buyPrice - fStop - cOffsetEmTicks*MinPriceIncrement) or (Close > BuyPrice + pRiscoGanho*fStop) then ClosePosition; // Encerra posição ao final do dia se grafico não for diário ou maior if (Time >= cEncerraPosicao) and ((GraphicInterval = itMinute) and (GraphicOffset <= 15)) then ClosePosition; end; if IsSold then begin BuyToCoverStop(sellPrice + fStop, sellPrice + fStop + cOffsetEmTicks*MinPriceIncrement); BuyToCoverLimit(sellPrice - pRiscoGanho*fStop); // Proteção para pulo de stop devido à gaps if (Close > sellPrice + fStop + cOffsetEmTicks*MinPriceIncrement) or (Close < sellPrice - pRiscoGanho*fStop) then ClosePosition; // Encerra posição ao final do dia se grafico for menor que 15 MIN if (Time >= cEncerraPosicao) and ((GraphicInterval = itMinute) and (GraphicOffset <= 15)) then ClosePosition; end; end;
o risco ganho pode ser alterado ? como funciona essa variável inicial? pRiscoGanho(1.61)
input pRiscoGanho(1.61); pMediaRapida(9); pMediaLenta(81);