[ARQUIVO] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por aqui. Em nenhum lugar sem você - 3. - página 306

 
drknn:

Uma matriz de comprimento "infinito" pode ser declarada em um indicador. Declare-o e, em seguida, escreva imediatamente no laço os valores encontrados na matriz. A única questão é como transferir a seleção necessária para o Expert Advisor/Script? Existem algumas ferramentas, mas precisamos avaliar a complexidade. Talvez fosse realmente mais fácil fazer duas corridas - na primeira calculamos o número de valores filtrados, depois mudamos a dimensão da matriz, e na segunda inserimos os valores na matriz?

Obrigado, mas a variante com o indicador não é adequada - antes de transferir a amostra obtida para o Expert Advisor, há um problema com a transferência das condições da amostra do Expert Advisor para o indicador.
 
PapaYozh:

Declarar um conjunto maior do que o tamanho máximo exigido.


Exatamente :) Funcionará se aumentarmos o tamanho muitas vezes. Por exemplo, sabemos de antemão que o número de valores filtrados não pode exceder mil. Vamos declarar um conjunto de vários milhares de células e estamos prontos :)

Mas será preciso um pouco da memória necessária. :(

 
drknn:


Exatamente :) Funcionará se aumentarmos o tamanho muitas vezes. Por exemplo, sabemos de antemão que o número de valores filtrados não pode exceder mil. Vamos declarar um conjunto de vários milhares de células e estamos prontos :)

Mas será preciso um pouco da memória necessária. :(


Se "sabemos de antemão que o número de valores filtrados não pode exceder mil", basta declarar a matriz com tamanho 1000.
 
splxgf:

https://docs.mql4.com/ru/math/MathPow não? Ou operações elementares são uma condição do problema. Então a opção http://bpascal.ru/download/desc/436.php se você fizer tudo à mão, então implemente expoente e logaritmo com suas próprias funções.

Sim, exatamente de acordo com a condição. Obrigado pela ligação, é exatamente o que eu preciso!
 
Elenn:
Boa tarde, alguns conselhos: O loop busca valores que satisfaçam certas condições. Os valores encontrados são escritos em um array. Não se sabe antecipadamente quantos valores serão encontrados. Portanto, o tamanho do conjunto a ser declarado é desconhecido. Do ponto de vista de tempo e recursos, prefiro não fazer duas séries (para que eu pudesse contar o número de valores encontrados na primeira série, declarar a série e escrever os dados na segunda série). Existe alguma maneira de obter o resultado necessário em uma única corrida?
Você pode aumentar o tamanho da matriz em uma célula para cada valor encontrado. Mas isto não é muito rápido. Você pode otimizar aumentando o tamanho por várias células e depois pular o redimensionamento para várias iterações.
 
PapaYozh:

Se você "sabe de antemão que o número de valores filtrados não pode exceder mil", você pode simplesmente declarar uma matriz de tamanho 1000.


Mas e quanto a um plano de contingência em caso de força maior? Você escreveria um código que informasse sobre um erro e bloqueasse o Expert Advisor? Bem, uma pessoa pode não ver - bem, ele estava apenas no trabalho naquele momento.

Sim, de fato, há mais de uma solução para o problema. Penso que a melhor solução é aquela sugerida por Zhunko - aumentar dinamicamente a dimensionalidade da matriz dentro do laço filtrante. Francamente falando, estou encantado com esta resposta. Nunca me ocorreu :)

 
drknn:


Penso que o melhor ainda seria aquele sugerido por Zhunko - aumentar dinamicamente a dimensionalidade da matriz dentro do laço filtrante. Honestamente, estou encantado com essa resposta. Nunca me ocorreu :)

A solução é realmente original, eu deveria tentar. Mas ao declarar novamente a matriz, será que os dados não se perderão devido à reinicialização?
 
Elenn:
A solução é realmente original, devemos experimentá-la. Mas quando você redescobre a matriz, será que os dados não se perderão devido à reinicialização?

Eu faço isso com freqüência. Eu crio alguma matriz inicial. Então (se necessário) eu o maximizo por algum valor (não se pode, leva muito tempo para realizar operações de array) e apenas verifico o tamanho do array realmente preenchido em meu trabalho. Até agora, não houve problemas
 
Vinin:

As operações de matriz levam muito tempo para serem concluídas
Alguma operação de array é longa, ou apenas certas operações?
 
Elenn:
Leva muito tempo para realizar qualquer operação de matriz ou apenas certas operações?

Especialmente o redimensionamento de uma matriz. É melhor fazê-los o menos freqüentemente possível
Razão: