Erros, bugs, perguntas - página 239

 

O gráfico acabou de ser 'actualizado'. E é novamente a mesma coisa:

 
Yedelkin:

O gráfico acabou de ser 'actualizado'. E é novamente a mesma coisa:

Escreva urgentemente ao Servicedesk e não feche o terminal
 
AlexSTAL:
Escreva para Servicedesk com urgência e mantenha o terminal aberto
OK, vou copiar sem rodeios o link para este fio.
 

Apenas verificado no terminal - o gráfico EURUSD M1 está completamente presente no local especificado, sem lacunas.

Tente dar o comando "Actualizar" a partir do menu de contexto do gráfico.

 
Renat:

Apenas verificado no terminal - o gráfico EURUSD M1 está completamente presente no local especificado, sem lacunas.

Tente dar o comando "Actualizar" a partir do menu de contexto do gráfico.

Refrescado manualmente, obrigado. Uma vez que praticamente não trabalho com gráficos, tenho uma pergunta: Como posso actualizar a base dos minitérios ao nível do Expert Advisor em tal situação? O terminal só funciona com a base de dados que possui. Devo integrar a função para verificar a sincronização?
 
Renat:

Apenas verificado no terminal - o gráfico EURUSD M1 está completamente presente no local especificado, sem lacunas.

Tente dar o comando "Actualizar" a partir do menu de contexto do gráfico.


Penso que há um insecto flutuante algures.... Uma vez que não sou o único que tem mais ou menos a mesma situação em....
 
Yedelkin:
Foi actualizado manualmente, obrigado. Uma vez que praticamente não trabalho com gráficos, tenho uma pergunta: como actualizar a base de minutos numa situação destas? O terminal só funciona com a base que possui. Preciso de integrar a função de verificação da sincronização?

Memorizei a hora da perda e retoma da comunicação no temporizador.

Tendo esta informação, pode tentar descarregar o histórico para o período (pode também verificar a sincronização com o servidor, se isso fizer sentido).

 

Cavalheiros desenvolvedores, estou sem palavras. Enfrentei um problema difícil de apanhar com variáveis locais "limpando" o método do objecto após chamada interna do mesmo método a partir de outro objecto. Pode estar relacionado com alguma optimização em chamadas de funções aninhadas de objectos, mas pelo menos não há erros no registo e não há fugas de memória. Não posso citar um código grande, mas o significado será claro a partir dos exemplos em princípio:

variante 1

bool operate(CAlgoBlockLogic* s1, CAlgoBlockLogic* s2) {
 bool d1 = s1.process();
 bool d2 = s2.process();
 return (d2 && d1);
}

variante 2

bool operate(CAlgoBlockLogic* s1, CAlgoBlockLogic* s2) {
 return (s2.process() && s1.process());
}

Emteoria, o código deve funcionar exactamente damesma maneira. Mas... as variantes funcionam de forma diferente.

Assim. A variante 1 não funciona correctamente. Corri um registo no ficheiro de depuração e descobri que a variável d1 definida na função operar é sobregravada com o valor da variável d1 numa chamada interna da mesma função operar, mas noutro objecto do mesmo tipo. Isto é, em suma, após a chamada
 bool d2 = s2.process();

A variável d1 altera o seu valor para o que ocorreu na chamada de operação interna dentro do processo s2.process. Este comportamento é o mesmo que quando se altera o valor de uma variável estática para objectos do mesmo tipo. Mas aqui a variável tem claramente um âmbito local.

A questão das variáveis estáticas foi levantada neste fio e tudo está claro. Mas o que fazer com a incerteza dos valores variáveis locais?

Документация по MQL5: Основы языка / Переменные / Область видимости и время жизни переменных
Документация по MQL5: Основы языка / Переменные / Область видимости и время жизни переменных
  • www.mql5.com
Основы языка / Переменные / Область видимости и время жизни переменных - Документация по MQL5
 

"...a variável d1 definida na função operar é sobrescrita pelo valor da variável d1 na chamada interna da mesma função operar, mas num outro objecto do mesmo tipo. Ou seja, em suma, após chamada
bool d2 = s2.process();
variável d1 altera o seu valor para o que ocorreu na chamada de operação interna dentro do s2.process".

Parece ou uma repetição oculta, com o habitual conjunto de efeitos secundários, ou ...

 
Vigor:

Em teoria, o código deve funcionar exactamente damesma maneira. Mas... as variantes funcionam de forma diferente.


Não. Não é idêntica.

No primeiro caso, s1.process e s2.process são chamados incondicionalmente

Na segunda variante, o s1.process só será chamado se o s2.process voltar a ser verdadeiro. A isto chama-se "avaliação do estado abreviada".