Neo traderBot

Neo traderBot

Você sabia?

A NeoTraderBot é a primeira comunidade aberta no Brasil com foco em compartilhar informações sobre automatização de estratégias

leaf leftleaf right
Notifications
Clear all

Setup - InsideBar

1 Posts
1 Usuários
2 Reactions
327 Visualizações
(@admin)
Membro Admin
Registrou: 3 anos atrás
Posts: 216
Iniciador do tópico  

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;

 


   
Citar