Neo traderBot

Neo traderBot

Você sabia?

Um backtesting adequado deve buscar simular situações práticas do mercado (slippage, custo de operação, etc...)

leaf leftleaf right
Notifications
Clear all

Código com um pequeno erro de administração de ordem

1 Posts
1 Usuários
0 Reactions
81 Visualizações
(@caffaro)
Novo membro
Registrou: 2 anos atrás
Posts: 1
Iniciador do tópico  

Olá a todos! Venho compartilhar com vocês parte de uma administração de ordens para estratégia de execução em Opções que venho usando em conta real há cerca de 20 dias. Meu objetivo com esse compartilhamento é que vocês possam me ajudar a melhorar o código, pois encontrei um certo bug. Abaixo o código.

Meus robozinhos somente operam Opções de call americanas de Petrobras por conta de liquidez e spread, no código temos até 5 sinais de compra e venda para que a estratégia possa ser executada e nesses 20 dias de uso notei somente um pequeno bug:

* Em certos momentos quando comprado por exemplo a ordem limite é menor que a posição, o que faz com que tenha uma saída precoce da operação, o mesmo para posição vendida, outra observação importante é que esse bug ocorre frequentemente quando troco de ativo já dentro da automatização, caso eu refaça todo o processo de "Nova Automação" dificilmente acontece.

Algo relevante também é que temos um tipo de trailing Stop e Trailing Gain que quando automação é executada de forma correta funciona super bem. 

Vou agradecer bastante se puderem compartilhar o conhecimento de vocês para melhorar essa parte do código. 

if not bPosicionado
   and (Time >= AberturaPosicao) and (Time <= FimAbertura) then
begin

    if (pConfBuy = True) and (pConfBuy1 = True) then
     bSinalCompra := True;
    
    if (aConfBuy = True) and (aConfBuy1 = True) then
     aSinalCompra := True;

    if (zConfBuy = True) and (zConfBuy1 = True) then
     zSinalCompra := True;

    if (yConfBuy = True) and (yConfBuy1 = True) then
     ySinalCompra := True;

    if (rConfBuy = True) and (rConfBuy1 = True) then
     rSinalCompra := True;

    // Confirmação de posição de venda
    if (pConfSell = True) and (pConfSell1 = True) then
     bSinalVenda := True;

    if (aConfSell = True) and (aConfSell1 = True) then
     aSinalVenda := True;
    
    if (zConfSell = True) and (zConfSell1 = True) then
     zSinalVenda := True;

    if (yConfSell = True) and (yConfSell1 = True) then
     ySinalVenda := True;

    if (rConfSell = True) and (rConfSell1 = True) then
     rSinalVenda := True;

  end;
   
    if not bPosicionado and (bSinalCompra = True) or
     (aSinalCompra = True) or 
     (ySinalCompra = True) or
     (rSinalCompra = True) or
     (zSinalCompra = True) then
    begin
      SendOrder(osBuy,otLimit,contratos,close + (Entrada*MinPriceIncrement),close);
      bConfigurouRisco := false;
    end;  

   if GestaodeRisco then
begin

    if (IsBought) then
      begin
        if not bConfigurouRisco and not bTrailingStopAtivado then
          begin   
            fPrecoStop := BuyPrice - cStopEmTicks * MinPriceIncrement;
            fPrecoAlvo := BuyPrice + cAlvoEmTicks * MinPriceIncrement;
            fPrecoStopOffset := fPrecoStop - cStopOffSetEmTicks * MinPriceIncrement;
            bConfigurouRisco := True;

          end;

        if bConfigurouRisco then    
  
        if ((close >= (BuyPrice + StopTrigger*MinPriceIncrement))
           or (StopTrigger = 1)) then
         bTrailingStopAtivado := True;
         
        if (close >= BuyPrice) and (close > close[1]) then
        fFloorTraillingStop := BuyPrice
           + ((close - BuyPrice) / (cStepEmTicks*MinPriceIncrement))
           * cStepEmTicks*MinPriceIncrement;
     
                             
        if ((fFloorTraillingStop - cStepEmTicks*MinPriceIncrement) >= FprecoStop)
         and bTrailingStopAtivado  then
         
                 
        fPrecoStop := fFloorTraillingStop - cStopEmTicks*MinPriceIncrement;
        fPrecoStopOffSet := fPrecoStop - cStopOffSetEmTIcks*MinPriceIncrement;
        fPrecoAlvo := fFloorTraillingStop + cAlvoEmTicks*MinPriceIncrement;  

    

        SellToCoverStop(fPrecoStop,fPrecoStopoffSet);
        SellToCoverLimit(fPrecoAlvo);

        if (close <= fPrecoStopOffSet)  then
          ClosePosition; 

      end;
       
       if not bPosicionado and (bSinalVenda = True) or 
       (aSinalVenda = True) or
       (ySinalVenda = True) or
       (rSinalVenda = True) or 
       (zSinalVenda = True) then
       begin
       SendOrder(osSell,otLimit,contratos,close - (entrada*MinPriceIncrement),close);
       bConfigurouRisco := false;
       end;
   if GestaodeRisco then
begin 
    if (IsSold) then
      begin
        if not bConfigurouRisco and not bTrailingStopAtivado  then
          begin
            fPrecoStop := SellPrice + cStopEmTicks*MinPriceIncrement;
            fPrecoAlvo := SellPrice - cAlvoEmTicks*MinPriceIncrement;
            fPrecoStopOffset := fPrecoStop + cStopOffSetEmTicks*MinPriceIncrement;
            bConfigurouRisco := True;    

          end;
   
        
        if bConfigurouRisco then

        if ((close <= (SellPrice - StopTrigger * MinPriceIncrement)) 
        or (StopTrigger = 1)) then
          bTrailingStopAtivado := True;

          if (Close <= SellPrice) and (close < close[1]) Then
          fFloorTraillingStop := SellPrice
           - ((SellPrice - close) / (cStepEmTicks * MinPriceIncrement))
            * cStepEmTicks * MinPriceIncrement;

        if ((fFloorTraillingStop + cStepEmTicks*MinPriceIncrement) <= fPrecoStop)
         and bTrailingStopAtivado then


          fPrecoStop := fFloorTraillingStop + cStopEmTicks*MinPriceIncrement;
          fPrecoStopOffSet := fPrecoStop + cStopOffSetEmTIcks*MinPriceIncrement;
          fPrecoAlvo := fFloorTraillingStop - cAlvoEmTicks*MinPriceIncrement;
   

        BuyToCoverStop(fPrecoStop,fPrecoStopoffSet);
        BuyToCoverLimit(fPrecoAlvo);
       


        if (close >= fPrecoStopOffSet) then
          ClosePosition;

      end;

 if not bPosicionado and (bConfigurouRisco = true) or (bTrailingStopAtivado = True) then
 begin
    bConfigurouRisco := false;
    bTrailingStopAtivado := false;
  
   end;
   end;
end;
























 


   
Citar