MetaTrader 4 Build 529 beta lançado com novo compilador - página 17

 
Barbarian:

Funcionou antes? Não consigo descobrir para onde você declara a variável i:


Em variáveis globais, eu inicializo uma vez e depois a uso em todos os loops, é mais conveniente e mais fácil ...
 
ALXIMIKS:

É suposto ser que quando você muda os parâmetros de um indicador que já está funcionando e funcionando, ao clicar duas vezes sobre ele,

o indicadornão atualiza as variáveis estáticas, portanto, não é redesenhado?


As variáveis estáticas mantêm seu valor ao reinicializar o programa. Os valores não são salvos somente quando o programa é removido do gráfico e reintegrado. Para repor as variáveis estáticas na reinicialização, uso esta construção:

bool g_init;

void OnInit()
{
   g_init = true;
}

void MyFunction()
{
   static int myStatic;
   if (g_init)
   {
      myStatic = 0;
      g_init = false;
   }
}
 
VOLDEMAR:
É assim que funciona ...

Não funciona desta forma.


No segundo caso, o escopo da matriz declarada na função é uma função.

No código

for(i=Coment-1; i>=1; i--){info[i]=info[i-1]; cv  [i]=cv  [i-1];}info[0]=txt;cv[0]=et;


você tem certeza de que inicializa todos os itens da matriz com valores txt e et? Talvez as duas últimas tarefas devam vir antes do loop e o loop deva ser construído de forma diferente. Ou é uma idéia assim?

 
Scriptong:


As variáveis estáticas mantêm seu valor ao reinicializar um programa. Os valores não são retidos somente quando o programa é removido do gráfico e reatrelado. Para repor as variáveis estáticas na reinicialização, utilizo a seguinte construção:


Então agora eu tenho que procurar na biblioteca e reescrever tudo... É absurdo, porque tudo estava bem em 509, e aqui ......
 
alexvd:


No segundo caso, o escopo de uma matriz declarada em uma função é uma função.

No código.


Você tem certeza de que está inicializando todos os elementos da matriz com txt e et? Provavelmente as duas últimas tarefas devem vir antes do loop. Ou isto é uma idéia?


O texto é primeiro deslocado um nível no laço, depois os valores nulos são atribuídos ao novo texto...

Estas matrizes são utilizadas apenas nas funções que apresentei acima ...

Antes em 509 e antes constrói tudo funcionava em ambos os casos ... Agora apenas no primeiro caso ...

 
ALXIMIKS:

Para que serve passar pela biblioteca e reescrever tudo? É absurdo, porque tudo estava bem em 509 e agora é ......


É simplesmente melhor rubricar todas as variáveis a serem utilizadas no código no início do código...

Isto simplifica o trabalho e torna possível ver e redefinir corretamente as variáveis no início do programa e usá-las posteriormente ...

 
ALXIMIKS:

É suposto ser que quando você muda os parâmetros de um indicador que já está funcionando e funcionando, ao clicar duas vezes sobre ele,

Eu sempre fui assim (509 construir, com certeza).

Tanto quanto me lembro, sempre foi assim (em 509, construído com certeza). É um bug.

VOLDEMAR:

Notei uma coisa estranha em computadores diferentes, um com XP e outro com W 7

Ao inicializar uma matriz dentro de uma função, a matriz não é preenchida com o valor total, apenas 0 valor ...

Ao inicializar uma matriz em nível global além de todas as funções, as matrizes são completamente preenchidas como deveria ser ...

Já foi dito mil vezes - inicializar arrays e variáveis explicitamente, não esperar por "bênçãos celestiais".

Em caso de declaração local, você tem apenas sorte e eles não recebem lixo. Mas eu não contaria com isso.

 
Observe que o novo compilador e o novo ambiente de execução controlam a qualidade do código muitas vezes de forma mais rigorosa. Muito do código MQL4 foi escrito por desenvolvedores terceirizados com as mãos para baixo, e agora estas falhas serão imediatamente visíveis.
 

Corrija-me se eu me enganei.

Eu uso uma função de biblioteca em um indicador, esta função declara algumas variáveis estáticas que participam do cálculo da matriz de indicadores.

Se eu quiser alterar os parâmetros do indicador para corrigir o cálculo do indicador (dependendo das variáveis estáticas),

passar a bandeira para a função da biblioteca responsável pela reinicialização (você deve expandir os parâmetros de entrada de cada função que tenha variáveis estáticas)

fazer zeragem das variáveis estáticas no corpo, e não se esqueça de remover a bandeira antes de completar o cálculo.

Seria muito mais fácil se as variáveis estáticas tivessem algum parâmetro, definido durante sua declaração, responsável por se essas variáveis serão zeradas durante a reinicialização.

 
Renat:
Observe que o novo compilador e o novo tempo de execução são muito mais rigorosos no controle da qualidade do código. Muito do código MQL4 foi escrito por desenvolvedores terceirizados e agora estas falhas serão imediatamente visíveis.
O Manual MQL4 (que está no editor) também foi atualizado de acordo?