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

[Solucionado] Correção de código GRADIENTE LINEAR

1 Posts
1 Usuários
0 Reactions
422 Visualizações
(@carlospqf)
Membro ativo
Registrou: 2 anos atrás
Posts: 3
Iniciador do tópico  
Boa noite galera, vou enviar aqui um código q um amigo fez de GRADIENTE LINEAR, mas identifiquei um erro e não conseguimos corrigir. essa estrategia é para o grafico de pontos 10p (50pts). 

O erro: percebi que em algumas operações o GAIN está acima dos 50 pts, e em outros momentos o LOSS está menor saindo no preço de entrada (5 pts de diferença), sendo que se o box subisse (como fez nos exemplos em anexo) deveria fazer outra venda.

Na maior parte do código funciona perfeitamente, mas em alguns casos acontece esse erro.

Segue anexo arquivos de imagem com exemplo dos erros. 

input

hora_inicio(0900);                
hora_fim(1800);     
        
Inicio_Abertura_b3(0950); 
Fim_Abertura_b3(1010);    
  
Inicio_Abertura_DJ(1020);  
Fim_Abertura_DJ(1040);    


distanciaOrdens(50.0);    // 50
take(50.0);               // 50

  n_ordens(12);  // 12
  Qnt_Max_Ctr (11);  // 35    // com MACD histo = 11

  OrdemAumentoMao(5);  // 5
                                                       
var


compra, venda, horarioOK, Horario_B3_ok, Horario_DJ_ok : boolean;

precoUltEnt,precoSaida: float;

indice,ordensPend: inteiro;
stopDia, stopDiaVenda:inteiro;

Alt_Min_Venda_ifr  : float;
Alt_Max_Venda_ifr  : float;

Ifr_Venda_ok       : boolean;


begin

/////////// Formula IFR ///////////


 Alt_Max_Venda_ifr := 90  ;  
 Alt_Min_Venda_ifr := 20 ;   

 Ifr_Venda_ok := ((ifr(9)>=Alt_Min_Venda_ifr) and (ifr(9)<=Alt_Max_Venda_ifr));

                                            

if(Date<>Date[1]) then
  begin
  stopDia:=0;
  stopDiaVenda:=0;
  end;                     


venda  := (Ifr_Venda_ok);   
                                                         
 
{
////////////// REGRA DE COLORAÇÃO /////////////////

PaintBar(clbranco);
if (venda) e (horarioOK) e (stopDiaVenda=0) then
   begin
     PaintBar(clVermelho);
   end;                                                           
                                                                      
                                                           }       
                                                 
                                                    
///////////////// CONDIÇÃO PARA VENDA /////////////////

Horario_B3_ok  := (Time>Inicio_Abertura_b3) e (Time<Fim_Abertura_b3) ;
Horario_DJ_ok  := (Time>Inicio_Abertura_DJ) e (Time<Fim_Abertura_DJ) ;

horarioOK := ((time>hora_inicio) e (time<hora_fim)) e (not Horario_B3_ok) e (not Horario_DJ_ok);


if((horarioOK) e (venda) e (stopDiaVenda=0)) then
  begin
  
  ordensPend := n_ordens + (n_ordens - OrdemAumentoMao) - SellPosition;
   
  for indice:=1 to ordensPend do
    begin
    precoUltEnt := close + distanciaOrdens*indice;
    SellShortLimit(precoUltEnt,1);
    if(SellPosition>=OrdemAumentoMao) then SellShortLimit(precoUltEnt,1);
    end;

                                                                  
  end;                                   


if(isSold) and (Sellposition <= Qnt_Max_Ctr + (n_ordens - OrdemAumentoMao)) then
  begin
  precoSaida := close - take;
  
  if(venda) and (precoSaida<precoUltEnt) then 
    begin
    BuyToCoverLimit(precoSaida,1);
    if(SellPosition>OrdemAumentoMao) then BuyToCoverLimit(precoSaida,1);
    end
  else
  if(not venda) and (sellPosition >= 1) then 
    begin
    closePosition;
//    stopDiaVenda:=1;  
    end;
                                                                       
  end
  else
  if(isSold) and (Sellposition > Qnt_Max_Ctr + (n_ordens - OrdemAumentoMao)) then
    begin
    closePosition;
    stopDiaVenda:=1;
    PlotText("StopDia", clamarelo, -1, 20);
    end;                                                                                
                                                                                     

if(not horarioOK) then 
  begin
  closePosition;
  
  end;                                                              



end;

   
Citar
Marcadores do tópico