Oi Ruy,
bom vou dar um chute aqui: Certifique que as Builds nas duas máquinas são iguais e se não forem sugiro compilar o MESMO fonte nas duas máquinas
Oi Ruy,
bom vou dar um chute aqui: Certifique que as Builds nas duas máquinas são iguais e se não forem sugiro compilar o MESMO fonte nas duas máquinas
Oi Rogério, são idênticas. Mas obrigado pela tentativa :)
Boa noite Ruy.
A minha verificação não é nem de longe a mais inteligente, mas vou disponibilizar aqui, caso você queira testar:
//=== Global internal variables datetime PREVTIME; //+--------------------------------------------------------------------------------------------------------------------+ //| Expert initialization function | //+--------------------------------------------------------------------------------------------------------------------+ int OnInit() { //--- Initializes variables PREVTIME = 0; return(INIT_SUCCEEDED); } //+--------------------------------------------------------------------------------------------------------------------+ //| Expert tick function | //+--------------------------------------------------------------------------------------------------------------------+ void OnTick() { //=== CHECKS IF IS A NEW BAR... if(PREVTIME != iTime(NULL, PERIOD_CURRENT, 0) && TimeCurrent() < (iTime(NULL, PERIOD_CURRENT, 0) + 180)) { //... //... //... PREVTIME = iTime(NULL, PERIOD_CURRENT, 0); } }Abraço.
Boa noite Ruy.
A minha verificação não é nem de longe a mais inteligente, mas vou disponibilizar aqui, caso você queira testar:
Abraço.Vinícius meu amigo!!!
Vou testar mais tarde ou amanhã. Agora preciso sair com minha amada esposa e não sei se vou voltar sóbrio suficiente para testá-lo.
Obrigado e grande abraço,
Boa noite Ruy.
A minha verificação não é nem de longe a mais inteligente, mas vou disponibilizar aqui, caso você queira testar:
Abraço.Vinícius, funcionou perfeitamente,
Deixei hoje em conta real e nenhuma vez "pulou" a leitura.
Simples e funcional.
Hein, me tira uma dúvida, porque você coloca ...&& TimeCurrent() < (iTime(NULL, PERIOD_CURRENT, 0) + 180) ?
Eu não coloquei, me pareceu redundante para a minha necessidade aqui. Mas fiquei curioso.
Obrigado e grande abraço,
Vinícius, funcionou perfeitamente,
Deixei hoje em conta real e nenhuma vez "pulou" a leitura.
Simples e funcional.
Hein, me tira uma dúvida, porque você coloca ...&& TimeCurrent() < (iTime(NULL, PERIOD_CURRENT, 0) + 180) ?
Eu não coloquei, me pareceu redundante para a minha necessidade aqui. Mas fiquei curioso.
Obrigado e grande abraço,
Opa Ruy, beleza, desculpe a demora, estive ausente ontem.
Eu trabalho com timeframes maiores (H1, H4) e no meu código algumas vezes o "return" pode ser acionado quando algum comando não for devidamente executado, então utilizo esses 180 segundos (3 minutos) para o EA tentar finalizar a execução dos comandos, e também quando o EA for anexado ao gráfico ele só executa o código se a barra estiver no início (máximo 3 minutos), para evitar abrir posição fora do tempo (no final da barra).
Não sei se me fiz entender...
Abraço.
Opa Ruy, beleza, desculpe a demora, estive ausente ontem.
Eu trabalho com timeframes maiores (H1, H4) e no meu código algumas vezes o "return" pode ser acionado quando algum comando não for devidamente executado, então utilizo esses 180 segundos (3 minutos) para o EA tentar finalizar a execução dos comandos, e também quando o EA for anexado ao gráfico ele só executa o código se a barra estiver no início (máximo 3 minutos), para evitar abrir posição fora do tempo (no final da barra).
Não sei se me fiz entender...
Abraço.
Foi o que eu imaginei, legal,
Obrigado e grande abraço.

- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Olá pessoal,
To batendo cabeça aqui e preciso de uma ajudinha.
Eu tenho a IsNewBar que já conhecemos deste artigo aqui: https://www.mql5.com/pt/articles/159
A Classe foi criada lá no OnInit(), apenas copiei e colei. Depois carrego no OnTick() como abaixo:
void OnTick()
{
if(!simbolo.RefreshRates())
return;
//INI: Barra-em-Barra
int period_seconds=PeriodSeconds(_Period); // Number of seconds in current chart period
datetime new_time=TimeCurrent()/period_seconds*period_seconds; // Time of bar opening on current chart
if(current_chart.isNewBar(new_time)) // When new bar appears - launch the NewBar event handler
{
if(SemPosicao() && !SemOrdem())
PendingOrderDelete();
if(HorarioEntrada() && !HorarioFechamento())
{
int Resultado_IndicadorEI=IndicadorEI();
if(Resultado_IndicadorEI==1)
{
Compra();
VMin=horario_atual.min;
}
if(Resultado_IndicadorEI==-1)
{
Venda();
VMin=horario_atual.min;
}
}
Até aqui parece tudo em ordem.
Rodando em conta REAL na VPS ele lê corretamente o código no tempo certo, ou seja, na hora que muda a barra, exatamente onde eu quero. E a Abertura da Ordem e Venda idem, abre exatamente na sequencia do código de acordo com o que meu IndicadorEI() apontar.
Por outro lado, em conta local em outra corretora eu tenho o mesmo EA rodando e ele lê o código, entra no IndicadorEI, mas ao voltar para o OnTick() ele só executa a Abertura da Ordem de Compra ou Venda depois que abre um novo Candle. É como se perdesse o time nesse meio do caminho e só continuasse a leitura na próxima vez que entra no IsNewBar.
Resumindo, a leitura do IndicadorEI() ocorre idêntico tanto no VPS quanto na Local, mas a continuidade do IsNewBar que é justamente o momento da Abertura da Ordem de Venda ocorre com um atraso de 1 barra na conexão Local.
Vejam na imagem a seguir, a Abertura deveria ser onde tracei a linha azul. Linha em circulo azul representa a leitura que o IndicadorEI fez (rates[1] e rates[2]...). E na VPS Abre a Venda corretamente exatamente nessa linha azul. Mas a conexão Local que é a do print abaixo só Abre no barra seguinte (circulo vermelho).
O que eu já tentei e não deram certo:
+ Passei o RefreshRates para o OnTick()... nada mudou...
+ Passei o RefreshRates para dentro da cadeia do if(...isnewbar...) e nada...
+ Tentei rodar a chamada da Compra() e Venda() dentro do IndicadorEI() para ver se o problema estava dentro do IndicadorEI ou no retorno da condicional, e nada...
Não sei o que faço para não dar essa diferença. Espero um delay de apenas alguns milesegundos/pontinhos, mas 1 barra inteira me quebra as pernas.