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] NÃO CARREGAR OPERAÇÃO PARA O DIA SEGUINTE

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

Senhores, já tentei de tudo e mais um pouco, mas não consigo encerrar as operação no mesmo dia...Conforme relatório do backtest do profit, sempre aparece uma operação q fica aberta para o dia subsequente. Não consigo achar o erro...A estratégia em questão é utilizando a banda de bollinger - "classico: fecho fora, fecho dentro" .

 

Input
Desvio(2);
MediaB(8);
Alvo (1.6);
Quant (100);
Tempo (1730);
Var

BolChC: Float;
BolChV: Float;
StopV : Float;
StopC : Float;
 bBarraDesejada                 : boolean;
  pDataDesejada,pHorarioDesejado : integer;
  pMargemMinutos: integer;
Inicio
BolChc := BollingerBands (Desvio, MediaB, 1)[1];    /// Superior
BolChV := BollingerBands (Desvio, MediaB, 1)[0];    /// Inferior

 Se (IsSold) então      //Saida para vendido
 Inicio
    //Alvo
    BuyToCoverLimit(Sellprice-(ABS(SellPrice-stopV)*alvo), quant) ;

 //STOP

 BuyToCoverStop (StopV, StopV);

 Fim;

 Se (IsBought)  entao  //Saida para comprado
 Inicio

 //Alvo
 //Alvo
 SellToCoverLimit (BuyPrice+(ABS(BuyPrice-stopC)*alvo), quant) ;

 //STOP

 SellToCoverStop (StopC, StopC);


 Fim;

 //// INICIO DO CODIGO PARA COMPRAR E FECHAR POSIÇÃO NO MESMO DIA////
      begin
  pHorarioDesejado := Tempo;
  pMargemMinutos := 15;

  
  //Para Gráficos de Candle/Renko executados em tempo real
  if Time > pHorarioDesejado then

  //Para Gráficos de Renko, em backtesting, utiliza-se uma margem de tempo em torno do horário desejado
  //if  (Time >= CalcTIme(pHorarioDesejado, -pMargemMinutos)) then
    begin
      bBarraDesejada := true;
      //Encerra posição caso esteja comprado/vendido
      if isBought or isSold then ClosePosition;
    end
  else
    bBarraDesejada := false;
end;     
//// FIM DO CODIGO PARA COMPRAR E FECHAR POSIÇÃO NO MESMO DIA//// 

 If (BuyPosition = 0) e (SellPosition = 0)  entao   //Verificar existe posição
  inicio
 //Condições de venda
 Se (fechamento [1]> BolChV) e (Fechamento < BolChV)entao
 Inicio
 SellShortStop (Minima - MinPriceIncrement, Minima - MinPriceIncrement, quant);
 StopV := Maxima + MinPriceIncrement;
 Fim;
 // Condição de compra
 Se (fechamento [1]< BolChc) e (Fechamento > BolChc)entao
 Inicio
 BuyStop (Maxima + MinPriceIncrement, Maxima + MinPriceIncrement, quant);
 StopC := Minima - MinPriceIncrement;
 Fim;
 


fim;
Fim;

 

Desde já, obrigado!


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

E aí @rafael-lobato! Tudo bem!

Cara, fiz alguns ajustes:

  • A chamada da função de bollinger, não sei se o [i] funciona. Para retornar as linhas do indicador de banda de bollinger, o manual NTSL diz para usar o operador |i|;
  • Coloquei a quantidade nas ordens stop que você utilizou nos primeiros IFs do código quando verifica se tem posição comprada ou vendida;
  • Retirei um begin que não fazia diferença
  • Fiz comparações entre o preço atual e o desejado para abrir posição, para saber se deve enviar uma ordem limitada ou stop. (se tiver dúvidas sobre isso, assiste esse vídeo: Tipos de ordens)

Parece-me que está funcionando e não está carregando posição para o dia seguinte.

Testa aí e confirma!
Abs!

Input
Desvio(2);
MediaB(8);
Alvo (1.6);
Quant (100);
Tempo (1730);
Var

BolChC: Float;
BolChV: Float;
StopV : Float;
StopC : Float;
pDataDesejada,pHorarioDesejado : integer;
pMargemMinutos: integer;

Inicio
BolChc := BollingerBands (Desvio, MediaB, 1)|1|;    /// Superior
BolChV := BollingerBands (Desvio, MediaB, 1)|0|;    /// Inferior

 Se (IsSold) então      //Saida para vendido
 Inicio
    //Alvo
    BuyToCoverLimit(Sellprice-(ABS(SellPrice-stopV)*alvo), Quant) ;
   //STOP
   BuyToCoverStop (StopV, StopV, Quant);
 Fim;

 Se (IsBought)  entao  //Saida para comprado
 Inicio
   //Alvo
   SellToCoverLimit (BuyPrice+(ABS(BuyPrice-stopC)*alvo), Quant) ;
   //STOP
   SellToCoverStop (StopC, StopC, Quant);
 Fim;

 //// INICIO DO CODIGO PARA COMPRAR E FECHAR POSIÇÃO NO MESMO DIA////
pHorarioDesejado := Tempo;
pMargemMinutos := 15;

//Para Gráficos de Candle/Renko executados em tempo real
if Time >= pHorarioDesejado then
  if isBought or isSold then ClosePosition;
//// FIM DO CODIGO PARA COMPRAR E FECHAR POSIÇÃO NO MESMO DIA//// 

If Not hasPosition  entao   //Verificar existe posição
inicio
  //Condições de venda
  Se (fechamento [1]> BolChV) e (Fechamento < BolChV)entao
  Inicio
    if (Close < (Minima - MinPriceIncrement)) then SellShortLimit(Minima - MinPriceIncrement, Quant)
    else SellShortStop(Minima - MinPriceIncrement, Minima - MinPriceIncrement, Quant);
    StopV := Maxima + MinPriceIncrement;
  Fim;
  // Condição de compra
  Se (fechamento [1]< BolChc) e (Fechamento > BolChc)entao
  Inicio
    if (Close < (Maxima + MinPriceIncrement)) then BuyStop(Maxima + MinPriceIncrement, Maxima + MinPriceIncrement, Quant)
    else BuyLimit(Maxima + MinPriceIncrement, Quant);
    StopC := Minima - MinPriceIncrement;
  Fim;
Fim;

Fim;

   
ReplyCitar