A NeoTraderBot é a primeira comunidade aberta no Brasil com foco em compartilhar informações sobre automatização de estratégias
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;
qual é o intervalo do grafico que voce está usando?
@landosan Boa noite, qual u uso o gráfico de 50R. Para o ativo USARUS no BlackArrow.
@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.
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;
@landosan Muito obrigado pelas dicas vou colocar em prática e fazer os testes e retorno.
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;
@landosan Bom dia, ganhou um fardo de coca, muito obrigado funcionou.