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

Saídas a mercado por horário.

8 Posts
2 Usuários
0 Reactions
139 Visualizações
(@lucianoribeiro)
Membro eminente
Registrou: 2 anos atrás
Posts: 15
Iniciador do tópico  

Senhores. Boa tarde.

Estou tentando implementar em meu código o seguinte:

Possuo 4 janelas de horário operacional declaradas via input:

  iHoraIntervalo1(True);
  iHoraInicio1(0500);
  iHoraFim1(2300);

  iHoraIntervalo2(False);
  iHoraInicio2(0000);
  iHoraFim2(0000);

  iHoraIntervalo3(False);
  iHoraInicio3(0000);
  iHoraFim3(0000);

  iHoraIntervalo4(False);
  iHoraInicio4(0000);
  iHoraFim4(0000);

 

Quero efetuar entradas apenas se a condição verdadeira estiver dentro da faixa de horário.

Criei variáveis booleanas para cada faixa de horário:

  Se (iHoraIntervalo1 = True) Então
    vIntervalo1 := (Time > iHoraInicio1) e (Time < iHoraFim1)
  Senao
    vIntervalo1 := False;
    
  Se (iHoraIntervalo2 = True) Então
    vIntervalo2 := (Time > iHoraInicio2) e (Time < iHoraFim2)
  Senao
    vIntervalo2 := False;
    
  Se (iHoraIntervalo3 = True) Então
    vIntervalo3 := (Time > iHoraInicio3) e (Time < iHoraFim3)
  Senao
    vIntervalo3 := False; 
   
  Se (iHoraIntervalo4 = True) Então
    vIntervalo4 := (Time > iHoraInicio4) e (Time < iHoraFim4)
  Senao
    vIntervalo4 := False; 

 

e outra variável booleana para verificar qual faixa de horário esta habilitada para operações:

 fHorarioOK := (vIntervalo1 = True) ou (vIntervalo2 = True) ou (vIntervalo3 = True) ou (vIntervalo4 = True); 

 

Efetuando Backtest funciona perfeitamente a questão da faixa horário, porém em mercado real não funciona, o robô ignora a verificação de horários. O que posso fazer para que eu consigo implementar essa questão de faixas de horário no meu robô?

Outra coisa que queria implementar seria, se eu estiver fora da faixa horaria de operações. ex: se passou 2 minutos do final de uma das faixas de horário e estiver posicionado, quero zerar a posição. 

Tentei fazer com o código abaixo, porém quando o código abaixo esta implementado, ao fechar um candle e eu estiver posicionado, em qualquer faixa de horário, a posição é zerada.

Se poderem me dar uma ajuda.

if ((iHoraIntervalo1 and (Time > iHoraFim1)) or
    (iHoraIntervalo2 and (Time > iHoraFim2)) or
    (iHoraIntervalo3 and (Time > iHoraFim3)) or
    (iHoraIntervalo4 and (Time > iHoraFim4))) and HasPosition then
begin
  ClosePosition;
end;

 


   
Citar
(@landosan)
Membro eminente
Registrou: 12 meses atrás
Posts: 14
 

qual é o intervalo do grafico que voce está usando?


   
ReplyCitar
(@lucianoribeiro)
Membro eminente
Registrou: 2 anos atrás
Posts: 15
Iniciador do tópico  

@landosan Boa noite, qual u uso o gráfico de 50R. Para o ativo USARUS no BlackArrow.


   
ReplyCitar
(@lucianoribeiro)
Membro eminente
Registrou: 2 anos atrás
Posts: 15
Iniciador do tópico  

@landosan reformulando minha resposta, queria operar hoje no primeiro período das 0500 às 1140, segundo períodos das 1210 até às 1800 os outros dois períodos desabilitados. E zerar operações abertas caso estivesse posicionado ao final de cada período.


   
ReplyCitar
(@landosan)
Membro eminente
Registrou: 12 meses atrás
Posts: 14
 

vai aí um chute...

nao tenho o BlackArrow pra confirmar, mas... quando comecei no Profit, há 2 meses, eu tinha o ESFUT em tempo real (S&P)... fiz uns testes e descobri que nos candles ele usava o horario de lá

chutando entao... devem fazer o mesmo no BA... como NY é 2 horas pra trás... ajusta aí teus horarios em -2 horas e vê o que dá... kkkkk

 

isso pode explicar a diferenca entre o backtest e o real... dependeria dos horarios que voce mandou o trade em cada caso

 

quanto à zeragem no final... tem um problema na logica... se voce usar só 1 dos intervalos, ok... mas se usar 2 intervalos, veja o que acontece: um trade feito às 1211 estaria dentro do iHoraIntervalo2, mas estaria fora do iHoraIntervalo1... isso ja vai fazer zerar o trade

Testa isso aqui...

if (((iHoraIntervalo1 and (Time > iHoraFim1)) or (iHoraFim1 = 0)) and
    ((iHoraIntervalo2 and (Time > iHoraFim2)) or (iHoraFim2 = 0)) and
    ((iHoraIntervalo3 and (Time > iHoraFim3)) or (iHoraFim3 = 0)) and
    ((iHoraIntervalo4 and (Time > iHoraFim4)) or (iHoraFim4 = 0))) and HasPosition then
begin
  ClosePosition;
end;

   
ReplyCitar
(@lucianoribeiro)
Membro eminente
Registrou: 2 anos atrás
Posts: 15
Iniciador do tópico  

@landosan Muito obrigado pelas dicas vou colocar em prática e fazer os testes e retorno.


   
ReplyCitar
(@landosan)
Membro eminente
Registrou: 12 meses atrás
Posts: 14
 

tô achando que aquela minha proposta pra saida nao funciona...

mas essa aqui, eu aposto uma coca-cola que funciona... kkkkkkk

if ((Time < iHoraInicio1) or (Time > iHoraFim1) or (iHoraFim1 = 0)) and
   ((Time < iHoraInicio2) or (Time > iHoraFim2) or (iHoraFim2 = 0)) and
   ((Time < iHoraInicio3) or (Time > iHoraFim3) or (iHoraFim3 = 0)) and
   ((Time < iHoraInicio4) or (Time > iHoraFim4) or (iHoraFim4 = 0)) and HasPosition then
begin
  ClosePosition;
end;

   
ReplyCitar
(@lucianoribeiro)
Membro eminente
Registrou: 2 anos atrás
Posts: 15
Iniciador do tópico  

@landosan Bom dia, ganhou um fardo de coca, muito obrigado funcionou.


   
ReplyCitar