A NeoTraderBot é a primeira comunidade aberta no Brasil com foco em compartilhar informações sobre automatização de estratégias
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 InsideBar da Comunidade NeoTraderBot.
const cEncerraPosicao = 1730; cOffsetEmTicks = 10; input pRiscoGanho(1.61); pMediaRapida(9); pMediaLenta(81); var bGraficoTemporalDiarioOuAcima: boolean; bInsideBar, bSinalCompra, bSinalVenda: boolean; fMediaRapida, fMediaLenta: float; fStop: float; begin if CurrentBar = 0 then bGraficoTemporalDiarioOuAcima := (GraphicInterval = itDaily) or (GraphicInterval = itWeekly) or (GraphicInterval = itMonthly); bInsideBar := false; bSinalCompra := false; bSinalVenda := false; fMediaRapida := MediaExp(pMediaRapida,Close); fMediaLenta := MediaExp(pMediaLenta,Close); plot(fMediaRapida); plot2(fMediaLenta); setPlotColor(1,clWhite); setPlotStyle(1,psDash); setPlotColor(2,clRed); setPlotWidth(2,2); bInsideBar := (Low > Low[1]) and (High <= High[1]); if bInsideBar then PaintBar(clYellow); if not hasPosition and ( (not bGraficoTemporalDiarioOuAcima) or ((bGraficoTemporalDiarioOuAcima) and not bInsideBar[1]) ) then begin //Sinal InsideBar de Compra + 2 Passos do Paraíso if bInsideBar and (Close > fMediaRapida) and (fMediaRapida > fMediaLenta) and (fMediaRapida > fMediaRapida[1]) and (fMediaLenta > fMediaLenta[1]) 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 bInsideBar and (Close < fMediaRapida) and (fMediaRapida < fMediaLenta) and (fMediaRapida < fMediaRapida[1]) and (fMediaLenta < fMediaLenta[1]) 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 not bGraficoTemporalDiarioOuAcima 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 não for diário ou maior if (Time >= cEncerraPosicao) and not bGraficoTemporalDiarioOuAcima then ClosePosition; end; end;