Erros, bugs, perguntas - página 2276

 

Quando preciso de preencher uma parte de um grande conjunto com um único valor Z, utilizo a construção:

ArrayInitialize(ar,Z);     // промежуточный массив размер массива ar = 1000 
ArrayCopy(arr,ar,5000);    // основной массив заполняется значением Z c 5000 по 5999 элемент


Muitos comerciantes dirão porque é que é tão complicado, pode ser mais simples:

ArrayFill(arr,5000,1000,Z);

Mas por alguma razão desconhecida, a primeira variante que utiliza uma matriz intermédia corre visivelmente mais depressa do que a segunda

2018.09.04 11:01:17.222 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayFill = 338
2018.09.04 11:01:17.222 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayInitialize + ArrayCopy = 111
2018.09.04 11:01:18.563 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayFill = 301
2018.09.04 11:01:18.563 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayInitialize + ArrayCopy = 122
2018.09.04 11:01:19.717 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayFill = 334
2018.09.04 11:01:19.717 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayInitialize + ArrayCopy = 142
2018.09.04 11:01:21.095 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayFill = 364
2018.09.04 11:01:21.095 TestArrayFill (EURUSD,M4)       Время заполнения через ArrayInitialize + ArrayCopy = 156

Já escrevi sobre este assunto à AC há alguns anos atrás. Recebi uma resposta dizendo que tinha encontrado e resolvido o problema e que estaria tudo bem na próxima construção.

Mas o problema persiste.

Tenho o mesmo teste em MT4:

2018.09.04 11:08:21.258 TestArrayFill EURUSD,H1: Время заполнения через ArrayInitialize + ArrayCopy = 113
2018.09.04 11:08:21.258 TestArrayFill EURUSD,H1: Время заполнения через ArrayFill = 78
Arquivos anexados:
 
Nikolai Semko:

Quando preciso de preencher uma parte de um grande conjunto com um único valor Z, utilizo a construção:


Muitos comerciantes dirão porque é que é tão complicado, pode ser mais simples:

Mas por alguma razão desconhecida, a primeira variante que utiliza uma matriz intermédia corre visivelmente mais depressa do que a segunda

Já escrevi sobre este assunto à AC há alguns anos atrás. Recebi uma resposta dizendo que tinha encontrado e resolvido o problema e que estaria tudo bem na próxima construção.

Mas o problema persiste.

Tenho o mesmo teste em MT4:

Talvez este seja um bom local para fazer o check in.

 
Artyom Trishkin:

Talvez este seja um bom local para fazer o check in.

Que peculiaridade e subtileza!
A importante função padrão de trabalhar com matrizes na linguagem de negociação algorítmica mais rápida do mundo é 4 vezes mais lenta do que na obsoleta linguagem MQL4.
Só aqui.

É um claro "bogey".
Consegue imaginar quantos programas vão falhar quando for corrigido?
 
Nikolai Semko:

Que peculiaridade e subtileza!
A importante função padrão de trabalhar com arrays na linguagem de negociação algorítmica mais rápida do mundo é 4 vezes mais lenta do que na língua MQL4 desactualizada.
Só aqui.

É um claro "bogey".
Consegue imaginar quantos programas serão afectados quando for corrigido?

Bom.

Mas como uma característica no momento - isso é uma coisa má?
 
Artyom Trishkin:

Bom.

Mas como uma característica no momento - isso é uma coisa má?
Sim, provavelmente afirmei o problema de forma incorrecta. Parecia como se estivesse a falar da sua solução.
Claro que não. Eu estava a tentar formular o problema. A opção de matriz intermédia não é de todo uma solução para o problema, porque leva mais tempo a executar do que deveria com base na lógica da memória, e também leva a um consumo adicional de memória.
 
Artyom Trishkin:

Bom.

Mas como uma característica no momento - isso é uma coisa má?

Anecdote.

Um homem idoso vai ao médico. Diz ele:

- Doutor, doem-me as costas.

- Inclinar-se. Será que dói?

- Dói.

- Incline-se mais!

- Aí, isso sabe melhor...

- Pronto! É assim que se caminha!

)))))

 
Nikolai Semko:

Quando preciso de preencher uma parte de um grande conjunto com um único valor Z, utilizo a construção:


Muitas pessoas dirão porque é que é tão complicado - pode ser mais simples:

Mas por alguma razão desconhecida, a primeira variante que utiliza uma matriz intermédia funciona muito mais rapidamente do que a segunda

Não compreendo! Porque precisou de preencher parte de uma grande matriz com um único valor Z? Ou, que dados atribui à matriz, para que finalidade? Fechar, AVG, valores RSI? Mas não estão presentes na memória do MetaTrader depois de o indicador estar carregado? Estava a jogar com a matriz 0 e 1 e finalmente recebi a palavra SOS, ou seja, atribuí valor 0 a S e 1 a O. Claro que podia entrar na Ajuda para um melhor resultado no segundo tamanho da matriz. Depois verificar o tempo de enchimento para o tamanho de cada matriz. Depois somar tudo e dividir por 4.
 
Bob1Thec:
Não consigo entender! Porque precisou de preencher parte de uma grande matriz com um único valor Z? Ou, que dados atribui à matriz, para que fim?
O fundo monocromático (incluindo a transparência) de uma imagem é feito desta forma.
 
fxsaber:
O fundo monocromático (incluindo a transparência) de uma imagem é feito desta forma.

mais precisamente um fundo inclinado

 
Nikolai Semko:

mais precisamente um fundo inclinado

Não faço ideia do que desempenha aqui o preenchimento de uma matriz com um único valor.