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

Aumentar a mão após x loss consecutivos

3 Posts
2 Usuários
1 Reactions
157 Visualizações
(@carlospqf)
Membro ativo
Registrou: 2 anos atrás
Posts: 3
Iniciador do tópico  

Primeiramente, ao John, parabéns pelo canal no youtube e pelo site, top demais...

Estou tentando uma lógica que aumenta a mão após uma quantidade x de loss, no backtest meu código funcionou, qnd ploto "estratégia de execução" nográfico, tbm funciona, mas qnd coloco no módulo "automação de estrategias" (pra valer), não funciona, não aumenta a mão ou aumenta na sequência errada. Tentei algumas formas de fazer funcionar, por isso tem partes "bloqueadas" com "//"

Ex.:

qnt inicial = 1 ctr (contarto)

se tomar um loss, qnt aumenta para 2 ctrs

se tomar outro loss na sequência, qnt aumenta para 3 ctrs

assim por diante, de acordo com os parâmetros definidos de limite de aumento.

se der um gain, qnt retorna para qnt inicial = 1

Obs.: Peço desculpa pq axo q meu código talvez seja um pouco confuso, sou iniciante e não sei exatamente as "regras" para organizar de uma forma padrão.

Const
OffSetEntrada = 100;
OffSetStop = 500;

Input

  pontos (30);    
  gain (30);       
  Loss (65);       
  horaini (0910); 
  horafim (1800);  
  horaEncerraDia (1720);
  

  QntGains(3333); //  2    4

// novas definições
inicio_aumento_mao(1);     //   1
mao_maxima_operavel(3);    //   3

  m_rap (12);    //  
  m_lenta (26);  // 
  m_sinal (26);  // 
  m_media (9);   // 


var

Alvo,Stop,entrada    : real;

Qnt_Contratos :  integer;
compra,venda: boolean;

  hoje        : float;
  contgain    : inteiro;
  contlos    : inteiro;
  indice:inteiro;
  contloss:inteiro; 

sAgAcum,agS  : Real;
i,a,b,mov    : Inteiro;

Agress_Compra_Max   : float;
Agress_Compra_Min   : float;
Agress_Compra_Saldo : float;
Agress_Venda        : float;
Agress_Venda_Saldo  : float;
Histo_Agress_Compra : float;
Histo_Agress_Venda  : float;


Agress_Saldo_ok        : boolean;
Agress_Compra_ok       : boolean;
Agress_Venda_ok        : boolean;
Money_Flow_Compra_ok   : boolean;
Money_Flow_Venda_ok    : boolean;
Histo_Agress_Compra_ok : boolean;
Histo_Agress_Venda_ok  : boolean;

scompra: boolean;
svenda:boolean;

begin

// PaintBar(clWhite);


/////////// Formula HISTOGRAMA AGRESSÃO ///////////

Inicio
  
  Se (AgressionVolBalance > 0) entao 
    agS := agS + AgressionVolBalance 
    senao
          agS := 0 ;     

fim;                                                                 

/////////// PARAMETROS DO HISTOGRAMA AGRESSÃO ///////////

Histo_Agress_Compra := 5000 ; 
 
Histo_Agress_Venda  := 1000;

Histo_Agress_Compra_ok := (agS >= Histo_Agress_Compra) e (close>close[1]) ;

Histo_Agress_Venda_ok  := (mov = 0) e (sAgAcum >= Histo_Agress_Compra) ;


// CALCULOS DA AGRESSÃO

Agress_Compra_Min   :=  1000  ;
Agress_Compra_Max   :=  2000000 ;
Agress_Compra_Saldo :=  1000 ;
Agress_Venda        :=  10000 ;   
Agress_Venda_Saldo  :=  -1000 ;   


Agress_Compra_ok := (AgressionVolBuy >= Agress_Compra_Min) 
                    and (AgressionVolBuy <= Agress_Compra_Max)
                    and (AgressionVolBalance >= Agress_Compra_Saldo)  
             //       and (AgressionVolBalance > AgressionVolBalance[1])
             
                                                                        ;

Agress_Venda_ok  := (AgressionVolSell  >= Agress_Venda) and 
                    (AgressionVolBalance <= Agress_Venda_Saldo)  
                                                                      ;
    



 compra := (Agress_Compra_ok)
                                           
                                                                                       ;

 venda  := Agress_Venda_ok 
//            (Close < Media(media_maior,low)) e (Close < Media(media_menor,low))
//            e (Ifr_Venda_ok)
//            e (Didi_Venda_ok)
//            e (MACD_Linha_Venda_ok)
//            e  
 
                                                                                       ;
{
/////////// REGRA DE COLORAÇÃO ///////////
if(compra) then
   begin
     PaintBar(clVerde);
   end;                                      }


 se(contloss-inicio_aumento_mao>=mao_maxima_operavel) entao    // ZERAR CONTADOR SE ATINGIR MÃO MAX.
  inicio
  contloss:=0;
  fim;                         


if(hoje<>Date) entao      // comentar esta parte se não quiser que ele zere diariamente o contador
  inicio                  // comentar esta parte se não quiser que ele zere diariamente o contador
//  contloss := 0;
  contlos:=0;            // comentar esta parte se não quiser que ele zere diariamente o contador
  contgain:=0;
  hoje:=date;             // comentar esta parte se não quiser que ele zere diariamente o contador
  fim;                    // comentar esta parte se não quiser que ele zere diariamente o contador
                                                

/////////// ENTRADA NA COMPRA /////////// 

if (IsBought = false) and (time >= horaini) and (time < horafim) then

   if (compra) then  
   begin
       Entrada := close  ;
       Stop := close - loss  ;
       Alvo := close + gain ; 
       if (contgain < QntGains) and (contloss < inicio_aumento_mao) then     
            begin
                BuyAtMarket(1);             
            end;
      
            se (contloss >= inicio_aumento_mao) entao   // SE A CONTAGEM FOR MAIOR QUE O VALOR DE INÍCIO
            inicio                                      // RODAR O LOOP DE ENTRADAS
                para indice:= 0 ate (contloss - inicio_aumento_mao+1) faca
                inicio
                    BuyAtMarket(1) ;    
                fim;
            fim;                             
                                                                          
                                                                                        
{                       
        
        if (contloss = 0) then
          begin
//              BuyLimit(close, contloss +1);
              BuyAtMarket(1);
          end
            else
          if (contloss = 1) then
          begin
//                BuyLimit(close, 2);
              BuyAtMarket(2);
//              BuyAtMarket;
          end
            else
          if (contloss = 2) then
          begin
//                BuyLimit(close, 3);
              BuyAtMarket(3);
//              BuyAtMarket;
//              BuyAtMarket;
          end
            else
          if (contloss = 3) then
          begin
//                BuyLimit(close, 4);
              BuyAtMarket(4);
//              BuyAtMarket;
//              BuyAtMarket;
//              BuyAtMarket;
          end;     
                                                   
                                                                   }
                                                         
 
   
            
                                                    
   end;        
 
  
/////////// SAÍDA DA COMPRA ///////////

if (IsBought) then
  begin
      SellToCoverLimit(Buyprice + gain, Buyposition);   /// É possível aumentar o gain até 60pts ///
      SellToCoverStop(Stop, Stop, Buyposition);  
           
      if (close > Entrada) then
        begin
             alvo := close;
             contloss :=0;
             contgain := contgain + 1;
             contlos := 0;
        end
        senao
        if (close < Entrada) then
          begin
                 Stop := close ;
                 contloss := contloss + 1;
                 contlos := 1;
                 contgain := 0; 
          end;                                                

{      SellToCoverLimit(alvo , Buyposition);
      SellToCoverStop(open - 30, Stop-OffSetStop, Buyposition);       }   


      
  end;


/////////// SAÍDA PELO HORÁRIO ///////////

  if (Time >= horaEncerraDia) then
    
    ClosePosition;

  end;
This topic was modified 2 anos atrás by Carlospqf

   
Citar
(@admin)
Membro Admin
Registrou: 2 anos atrás
Posts: 216
 

Oi @carlospqf! Tudo bem!?

Obrigado, cara! Eu geralmente peço o seguinte, para otimizar nosso tempo.

Me indique um ativo, tempo gráfico, Data e hora, o que deveria acontecer e o que aconteceu de errado.

Com base nessas informações, você me ajuda a entender seu código mais rapidamente e eu consigo te ajudar de maneira mais efetiva.

 

Fico aguardando o retorno.

Abs!


   
Carlospqf reacted
ReplyCitar
(@carlospqf)
Membro ativo
Registrou: 2 anos atrás
Posts: 3
Iniciador do tópico  

@admin Obrigado pelo retorno Johnathas, seguem os dados:

Ativo: WING23 (ou série atual)

Tempo gráfico: Renko 7r (30 pts)

Data e hora: não consigo informar, pois o problema é exatamente pq nos backtests o código funciona perfeitamente, qnd ploto "estrategia de execução, ybm fica perfeito, porém qnd coloco na automação, não faz o q deveria.

O que acointece é que no backtest e na plotagem no gráfico, qnd ocorre um LOSS, há um incremento na quantidade de contratos, ex.:

passo 1: estrategia inicia com 1 ctr;

ocorre um LOSS

passo 2: Proxima entrada vai com 2 ctrs;

ocorre outro LOSS

passo 3: Proxima entrada vai com 3 ctrs;

ocorre outro LOSS

passo 4: Proxima entrada vai com 4 ctrs;

e assim sucessivamente, como for definido nas variaveis:

// novas definições
inicio_aumento_mao(1);     //   1
mao_maxima_operavel(3);    //   3

O problema é que na automação não acontece o "aumento de mão", ou qnd acontece é fora de ordem, qnd ocorre um loss ao invés de incrementar mais um contrato já entrata com 3 ou 4 contratos ou então não incrementa nenhum e mantém 1 contrato.


   
ReplyCitar