Obrigado, mas preciso corrigir meu código também quando exact é true, pois não entendi direito esse parâmetro. A documentação em inglês do iBarShift está errada.
Acho que esse também é meu erro, o iBarShift deve retornar a barra que contém o horário especificado (não com o horário exato de abertura).
Posso usar sua função em minha biblioteca (com seus direitos autorais, é claro)? Se ela for mais rápida e correta, por que eu deveria reinventar a roda?)
Acho que esse também é o meu erro, iBarShift deve retornar a barra que contém o tempo especificado (não com o tempo exato de abertura).
Posso usar sua função em minha biblioteca (com seus direitos autorais, é claro)? Se ela for mais rápida e correta, por que eu deveria reinventar a roda?)
Obrigado, mas preciso corrigir meu código também quando exact é true, pois não entendi direito esse parâmetro. A documentação em inglês do iBarShift está errada.
O erro do mql5 está na função Bars(), e eu o relatei ao Service Desk.
Parece que o erro Bars() foi corrigido no build 880.
Se o último tique "abrir" uma nova barra, então if(time>LastBar) se tornará falso - porque agora time == LastBar
Não tem certeza do que quer dizer? Acho que o "último tick" é irrelevante. Quando você usa a função, o tempo=LastBar ou não.
E mais tarde chegamos aqui:
E agora shift == 0 , que retorna -1 em vez de 0!
se time==Lastbar, então shift=1 e não 0. Portanto, não há nenhum erro (shift vem de Bars(), que é a contagem de barras, por isso retornamos 'shift-1').
Portanto, acho que isso:
deve ser alterado para
Calli
Sua correção também funcionaria, mas o caso 'time==LastBar' é processado como um caso "normal".
A declaração
if(time>LastBar)
foi adicionada como uma correção de erro se o tempo for maior que o tempo da barra atual 0.
Obrigado, mas preciso corrigir meu código também quando exact é true, pois não entendi direito esse parâmetro. A documentação em inglês do iBarShift está errada.
Acho que esse também é meu erro, o iBarShift deve retornar a barra que contém o horário especificado (não com o horário exato de abertura).
Posso usar sua função em minha biblioteca (com seus direitos autorais, é claro)? Se ela for mais rápida e correta, por que eu deveria reinventar a roda?)
Acho que esse também é o meu erro, iBarShift deve retornar a barra que contém o tempo especificado (não com o tempo exato de abertura).
Posso usar sua função em minha biblioteca (com seus direitos autorais, é claro)? Se ela for mais rápida e correta, por que eu deveria reinventar a roda?)
Obrigado, mas preciso corrigir meu código também quando exact é true, pois não entendi direito esse parâmetro. A documentação em inglês do iBarShift está errada.
O erro do mql5 está na função Bars(), e eu o relatei ao Service Desk.
A versão 880 corrigiu o erro em Bars(), e tudo está funcionando bem agora.
em m2 com m1, os valores em trudy, por algum motivo, têm valores diferentes de -1, e na barra zero há um retorno à primeira barra.
A função está incorreta em pelo menos dois pontos:
1) if(time>LastBar)
return(0);
Se exact=true, a lógica deve retornar -1 caso o tempo não pertença explicitamente à última barra, ou seja, se time>LastBar+PeriodSeconds(timeframe).
2) if(CopyTime(symbol,timeframe,time,1,checkcandle)==1)
...
return(-1);
Novamente, se exact=false, a barra mais próxima deve ser retornada, nesse caso Bars(symbol,timeframe)-1.
Acho que há um pequeno erro em seu código:
Se o último tick "abrir" uma nova barra, então if(time>LastBar) se tornará falso - porque agora time == LastBar
E mais tarde chegamos aqui:
E agora shift == 0, que retorna -1 em vez de 0!
Portanto, acho que isso:
deve ser alterado para
Calli
Acho que há um pequeno erro em seu código:
Se o último tique "abrir" uma nova barra, então if(time>LastBar) se tornará falso - porque agora time == LastBar
E mais tarde chegamos aqui:
E agora shift == 0 , que retorna -1 em vez de 0!
Portanto, acho que isso:
deve ser alterado para
Calli
Sua correção também funcionaria, mas o caso 'time==LastBar' é processado como um caso "normal".
A declaração
if(time>LastBar)foi adicionada como uma correção de erro se o tempo for maior que o tempo da barra atual 0.