Erros, bugs, perguntas - página 2000

 
Alexey Viktorov:

E não faz sentido fazer isto já na OnCalculate. Não há razão para inicializar a matriz com algo e depois preenchê-la com alguns valores da fórmula? Quando se adiciona uma barra, e respectivamente uma célula de matriz, de que serve enchê-la com algo e depois imediatamente com um valor da fórmula ou um valor vazio?

Isto se a fórmula for aplicada em todas as barras. E se se aplicar apenas à última? Eu, por exemplo, tenho muitos índices que me permitem definir o número de barras a calcular, uma vez que os cálculos podem ser pesados. A inicialização é necessária.

Em geral, se não o queres fazer, não o faças. Já não estou a discutir mais o assunto. ;-)

 
fxsaber:

Portanto, não se trata de ArrayResize, mas sim de ArrayInitialize. O ArrayResize garante zeros em MT4.

E se o ler com atenção? Deixe-me citá-lo novamente.

Inicialização de um array com expressãoArrayInitialize(array, init_val) não significa inicialização de elementos da reserva atribuída a este array com o mesmo valor. Quando a função ArrayResize() aumenta subsequentemente o tamanho do array dentro da reserva actual, os elementos cujos valores não são definidos e na maioria das vezes não são iguais ainit_val são adicionados ao fim do array.

ArrayInitialize - Операции с массивами - Справочник MQL4
ArrayInitialize - Операции с массивами - Справочник MQL4
  • docs.mql4.com
ArrayInitialize - Операции с массивами - Справочник MQL4
 
Stanislav Korotky:

E se o ler com atenção? Vou citá-lo novamente.

Inicialização de um array com expressãoArrayInitialize(array, init_val) não significa inicialização de elementos da reserva, atribuídos a este array. Quando a função ArrayResize() aumenta subsequentemente o tamanho do array dentro da reserva actual, os elementos cujos valores não são definidos e na maioria das vezes não são iguais ainit_val são adicionados ao fim do array .

Apenas o tornaram seguro para que fosse mais difícil explicar que não há init_val lá. Mas, claro, pode substituí-lo por "cujos valores são nulos".
 
Stanislav Korotky:

E porquê inventar cenários tão irrealistas, essencialmente erros de programador MQL? Obviamente, a inicialização completa só é feita uma vez, ou se for detectada uma descarga de dados. Nesse caso, seria feito de forma mais eficiente pelo núcleo.

Onde é que eu disse sobre a dupla inicialização? Mais ou menos o mesmo, acima mencionado, preenchimento de todos os elementos de um loop, de que falava. Se estiver presente, a inicialização é desnecessária e apenas desperdiça recursos.

Bem, se não estiver a contar todas as barras, então trate você mesmo de encher com zeros.

 
Stanislav Korotky:

Isto se a fórmula for aplicada em todas as barras. E se se aplicar apenas à última? Eu, por exemplo, tenho muitos índices que me permitem definir o número de barras a calcular, uma vez que os cálculos podem ser pesados. A inicialização é necessária.

Em geral, se não o queres fazer, não o faças. Já não estou a discutir mais o assunto. ;-)

Aqui estão as palavras de ouro... Mas é melhor dizer "onde não for preciso, não o faremos". Ou vice versa "só o faremos onde for necessário".

 
fxsaber:

Apenas novos elementos de matriz são inicializados. E a questão continua a ser a mesma - resultados idênticos de corrida em corrida, mesmo que haja um erro no código (muitas vezes não o seu).Dei um exemplo com a biblioteca matemática acima.

O lixo é mau.

Nem sequer consigo encontrar palavras decentes para o comentar.

Se lhe pedirem para se manchar com ele... Acho que não iriam alinhar. Digamos que na primeira vez não sabe o que é, depois na segunda vez?

Porque pede aos criadores que o protejam da porcaria? Proteja-se. Ou se tiver argumentos irrefutáveis de que é necessário, então não os esconda do público.

Sabe, o mql3 era um lugar onde se podia escrever tantos erros que se fazia o cabelo em pé... Mas a EA não importa, funciona na mesma... Funciona bem? Quem se importa?

Por alguma razão não há qualquer argumento sobre ir para fora da matriz. E parece que este é um mal menor do que o lixo de uma matriz ou variável. Bem, já não temos um índice como costumava ser, por isso, estejam à vontade e vamos continuar a trabalhar. mãos, vamos voltar ao trabalho. Está tudo resolvido...

 
Alexey Viktorov:

Então porque é que está a exigir que os criadores o protejam da porcaria? Proteja-se. Ou se houver argumentos convincentes para o fazer, então não os esconda do público.

Não houve exigências, a irrefutabilidade é demonstrada.

Fórum sobre comércio, sistemas automatizados de comércio e teste de estratégias comerciais

Insectos, insectos, perguntas

fxsaber, 2017.09.12 16:17

#property strict

void OnStart()
{
  uchar Array[];
  
  const int Size = ArrayResize(Array, 10000);
  
  bool Res = false;
  
  for (int i = 0; (i < Size) && (!Res); i++)
    Res = Array[i];
    
  Print(Res);
}

Em MT4, voltará sempre a ser falso, porque sem lixo é tudo zeros. Em MT5 é verdade.

Assim, o mesmo código no testador MT4 mostrará sempre resultados idênticos de corrida para corrida. Num testador MT5, não o fará.

 
fxsaber:

Não havia nenhum requisito, a irrefutabilidade é demonstrada

Quem proíbe a adição de apenas uma linha?

  uchar Array[];
  const int Size = ArrayResize(Array, 10000);
  bool Res = false;
  ArrayInitialize(Array, 0);
  for (int i = 0; (i < Size) && (!Res); i++)
    Res = Array[i];
  Print(Res); 

Ou não sabe que falso é 0, tudo o resto é verdade independentemente do sinal? Tira valores das reservas de matriz e quer certificar-se de que há 0. Bem, nesse caso é razoável inicializar a matriz com zeros, mas porquê sobrecarregar o sistema com a nulidade forçada quando não é necessário?

Desculpe, mas este exemplo é um perfeito disparate.

 
Alexey Viktorov:

Quem proíbe a adição de apenas uma linha?

Isto não se trata de mim.

Fórum sobre comércio, sistemas de comércio automatizados e testes estratégicos

Insectos, insectos, perguntas

fxsaber, 2017.09.12 16:52

É horrível pensar que alguma biblioteca matemática (incluindo\Math -7Mb código-fonte) não tenha sido rubricada em um/dois lugares! E como desenterrar este erro, que no MT5 tester dá diferentes corridas únicas e no MT4 as mesmas corridas?

 
fxsaber:

Não se trata de mim.

A única coisa a fazer é desistir de todas as outras bibliotecas de pessoas. E eu nunca olhei ou usei nenhuma dessas bibliotecas. É mais fácil escrever tudo o que precisa do que escavar através de uma pilha para verificar a existência de insectos... E para usar apenas duas ou três funções...