Erros, bugs, perguntas - página 2047

 
Alexey Navoykov:

Não compreendo o que pretende. Eu disse que estava a falar de "inicialização variável". E, neste contexto, as variáveis estáticas e globais comportam-se de forma idêntica. Até lhe dei um link para a documentação:inicialização de variáveis

Note-se que as variáveis estáticas e globais estão lá em todo o lado juntas.

E não criticamos a sequência de inicialização porque não está relacionada com o problema em questão. Deixem-me lembrar-vos que o problema é que o compilador NÃO irá gerar um erro onde deveria. Se uma variável estática ainda não for inicializada, não se pode aceder a ela.

Bem, mude o nome da variável global, se isso o incomoda assim tanto. Não afectará de forma alguma o resultado.

Olá, aqui vamos nós... Você mesmo leu o link?

Para além do mql também sei, não muito bem, apenas VBA e só aí cumpri a directiva que exige a inicialização de variáveis. Note-se que fica exclusivamente ao critério do programador. E quer que a MQ force a inicialização de absolutamente todas as variáveis? E alterar a sequência de inicialização em cada reclamação de tais utilizadores? Foi-lhe dada a oportunidade de se desviar das regras, compreendendo O QUE faz, e pede para excluir tal oportunidade???

Parece que está apenas à procura de algo para implicar e besuntar a linguagem mql. Remova a estática de uma variável de uma classe e ficará feliz.

 

O que acontece quando a variável de sistema que recebemos da GetTickCount() transborda?

Existe alguma reacção padrão do terminal?

Há necessidade de monitorizar este momento de forma programática e implementar uma resposta?

 
Alexey Viktorov:

Olá, aqui vamos nós... Você mesmo leu este link?

Para além do mql que conheço, também não muito bem, apenas VBA e só aí cumpri a directiva de inicialização obrigatória de variáveis. Note-se que fica exclusivamente ao critério do programador. E quer que a MQ force a inicialização de absolutamente todas as variáveis?

Bem, é aí que reside a razão. Não só não sabe muito bem (e você mesmo já o disse quantas vezes), como também sabe VBA, o que tem pouco a ver com esta língua. Conheço C++ bastante bem. Esta é uma linguagem muito clara e rigorosa, não é permitido o livre arbítrio, sobre o qual está a fantasiar. E a MQL foi criada à imagem e semelhança de C++. Portanto, vamos parar com isto. Familiarize-se com C++ para começar e depois haverá um sentido de discutir sobre algo.

p.s. A propósito, acabei de me aperceber que a conversa foi originalmente levada na direcção errada, porque já me esqueci onde tudo começou, e agora voltei a ver o meu código original e percebi que o seu primeiro ataqueaqui foi completamente fora de tópico. E como poderia não prestar atenção de uma só vez! No meu código, a variável estática é inicializada exactamente como uma constante, tal como é descrita na documentação. Portanto, o problema é que ainda não inicializou nada. E começou a dizer-me que é porque deve ser inicializada com uma constante. E aqui vamos nós...

 

Porque não posso rubricar a matriz com variáveis?

void (double a, double b,double c )

{

double inp[3]={a,b,c};   // компилятор ругается 'а' - constant expression required      

}

 
Alexey Kochetkov:

Porque não posso rubricar a matriz com variáveis?

Porque na MQL só se pode rubricar com constantes.
 
Alexey Navoykov:

Bem, é aí que reside a razão. Não só não sabe muito bem (e você mesmo já o disse quantas vezes), como também sabe VBA, que tem pouco a ver com a língua em questão. Conheço C++ bastante bem. Esta é uma linguagem muito clara e rigorosa, não é permitido o livre arbítrio, sobre o qual está a fantasiar. E a MQL foi criada à imagem e semelhança de C++. Portanto, vamos parar com isto. Familiarize-se com C++ para começar e depois haverá um sentido de discutir sobre algo.

p.s. A propósito, acabei de me aperceber que a conversa foi originalmente levada na direcção errada, porque já me esqueci onde tudo começou, e agora voltei a ver o meu código original e percebi que o seu primeiro ataqueaqui foi completamente fora de tópico. E como poderia não prestar atenção de uma só vez! No meu código, a variável estática é inicializada exactamente como uma constante, tal como é descrita na documentação. Portanto, o problema é que ainda não inicializou nada. E começou a dizer-me que é porque deve ser inicializada com uma constante. E lá vai ele...

Chamo-lhe uma última vez para estudar a sequência de inicialização. Parece-me que a capacidade de pensar logicamente é mais importante do que o conhecimento. Pode conhecer de cor todas as linguagens de programação, mas precisa de compreender a sequência de inicialização.

Uma variável estática NÃO PODE ser inicializada antes da variável global. E isso diz tudo.

 
ChartNavigate bug
const bool Init = ChartSetInteger(0, CHART_AUTOSCROLL, false) && EventSetTimer(1);  

void OnTimer()
{  
  Print("----------")  ;
  Print(ChartGetInteger(0, CHART_FIRST_VISIBLE_BAR));  

  ChartNavigate(0, CHART_BEGIN, 100);
  
  Print(ChartGetInteger(0, CHART_FIRST_VISIBLE_BAR));
}

Resultado em ICMarkets-Demo EURCHF M1 ( barras máximas = 5000):

2017.10.18 21:16:00.800 ----------
2017.10.18 21:16:00.800 4899
2017.10.18 21:16:00.801 199930
2017.10.18 21:16:01.821 ----------
2017.10.18 21:16:01.821 199930
2017.10.18 21:16:01.821 4899
2017.10.18 21:16:02.836 ----------
2017.10.18 21:16:02.836 4899
2017.10.18 21:16:02.836 199930
2017.10.18 21:16:03.845 ----------
2017.10.18 21:16:03.845 199930
2017.10.18 21:16:03.855 4899
2017.10.18 21:16:04.864 ----------
2017.10.18 21:16:04.864 4899
2017.10.18 21:16:04.864 199930
2017.10.18 21:16:05.876 ----------
2017.10.18 21:16:05.876 4999
2017.10.18 21:16:05.886 199930

Não compreendo absolutamente nada. Os números devem ser os mesmos. Mas no final o gráfico está sempre a saltar.

Será que funciona para alguém?

 
Alexey Viktorov:

Peço-lhe uma última vez que se familiarize com a sequência de inicialização. Parece-me que a capacidade de pensar logicamente é mais importante do que o conhecimento. Pode conhecer de cor todas as linguagens de programação, mas precisa de compreender a sequência de inicialização.

Uma variável estática NÃO PODE ser inicializada antes de uma variável global. E isso diz tudo.

Lamento, mas não vou prestar mais atenção às vossas provocações sem sentido e em tal tom. Já peço desculpa por perder tempo em discussões inúteis com um diletante. Em primeiro lugar, apresentava constantes que não diziam respeito à minha situação, e com a mesma arrogância agressiva que agora. Agora está a fazer afirmações infundadas, nem sequer conhecendo o assunto e não compreendendo como é organizada uma linguagem de programação. Guarde os seus "pensamentos lógicos", conjecturas e fantasias para si próprio. Não estou interessado neles.

 
Kirill Belousov:

O que acontece quando a variável de sistema que recebemos da GetTickCount() transborda?

Existe alguma reacção padrão do terminal?

Há necessidade de seguir este momento de forma programática e implementar uma reacção?

Não há necessidade de implementar qualquer reacção.

Se receber o valor devolvido pela GetTickCount numa variável do tipo uint, pode facilmente receber a diferença

uint prev_count=GetTickCount();
...
...
uint diff=GetTickCount()-prev_count;

Mesmo que haja um transbordamento, obterá a diferença correcta. Estas são peculiaridades de operações com números inteiros não assinados. Mas isso só é bom se o valor anterior tiver sido obtido exactamente da mesma forma (GetTickCount) e se o valor anterior não tiver sido obtido antes de 49 dias atrás.

Se verificar mais ou menos, precisa de mais operações do que uma simples subtracção

 
fxsaber:
O bug ChartNavigate

Resultado em ICMarkets-Demo EURCHF M1 ( barras máximas = 5000):

Não compreendo absolutamente nada. Os números devem ser os mesmos. Mas no final o gráfico está sempre a saltar.

Está a reproduzir-se?

Porque é que é um insecto?

A navegação numa carta não acontece de imediato. É um comando assíncrono. O resultado da sua execução não é garantido.

É como se premisse o botão PageUp e o gráfico ficasse parado. E, de repente, masturbou-se.

Razão: