[Arquivo!] Qualquer pergunta de novato, de modo a não desorganizar o fórum. Profissionais, não passem por ela. Não poderia ir a lugar algum sem você - 2. - página 131

 
Vinin:

Continuação do tema

Anterior aqui https://www.mql5.com/ru/forum/111497

No testador MT4 nos resultados de otimização e nos gráficos de otimização nada é exibido, apenas vazio. Socorro!
 
Sergey_Rogozin:

Estou tentando preencher uma matriz unidimensional ValueArr[].

Não tenho certeza se está correto.

Em cada tick, a função GetValue() produz um valor int. Como preencher o ValueArr[]?

Minha tentativa está correta?

O tamanho da matriz deve ser aumentado em um em cada carrapato? Então, seu tamanho será limitado pela memória disponível no computador.

Aumente o tamanho da matriz ValueArr[] usando a função ArrayResize() e anexe os novos dados à matriz. Novamente - onde você quer adicioná-las? No início ou no final?

Se no início você precisar mover dados escritos anteriormente, caso contrário eles serão sobrescritos pelos novos dados escritos.

Se no final, então:

Inite set array size = zero, e no início aumente-o em 1 (size++), depois redimensione o array ( ArrayResize(ValueArr, tamanho);) e escreva os dados, obtidos por GetValue(); (ValueArr[size-1]=GetValue();) em array cell ValueArr[], indexado por size-1 (ValueArr[size-1]).

 
artmedia70:

Você quer que o tamanho da matriz aumente um em cada carrapato? Então, seu tamanho será limitado pela memória disponível no computador.

A cada tick, aumente o tamanho da matriz ValueArr[] usando a função ArrayResize() e anexe novos dados à matriz. Novamente - onde você quer adicioná-las? No início ou no final?

Se no início você precisar mover dados escritos anteriormente, caso contrário eles serão sobrescritos pelos novos dados escritos.

Inite set array size = zero, e no início aumente-o em 1 (size++), depois redimensione o array ArrayResize(ValueArr, tamanho); e anexe os dados obtidos pela função GetValue() à célula de array ValueArr[] indexada por tamanho 1 (ValueArr[size-1]);

Sim, os dados da GetValue() serão escritos em cada tick da matriz ValueArr[].

O tamanho da matriz é aumentado a cada tique, mas pode ser definido de uma só vez, digamos, [10000].


Os elementos da matriz estão dispostos na ordem de chegada, ou seja, o primeiro elemento escrito é o primeiro da "fila geral",

o segundo elemento é o segundo na fila.


Se eu entendi corretamente, é o que parece:


 int size=0;
 int ValueArr[size];
 
//-----------------

int start()
 {
   size++;
   ArrayResize(ValueArr, size);
   ValueArr[size-1] = GetValue();
   
 return();
 }

//-----------------

int GetValue()
 {
 .......
 return(Val);
 }

Espero tê-lo entendido corretamente.

 
Sergey_Rogozin:

Os elementos da matriz estão dispostos por ordem de chegada, ou seja, o primeiro escrito é o primeiro na "fila geral",

por que não usar uma série de tempos
 
eddy:
por que não usar uma série de tempos?
Uma série de tempos? Há alguma forma de isso ajudar a registrar algo como a história da teca?
 
Sergey_Rogozin:

Estou tentando preencher uma matriz unidimensional ValueArr[].

Não tenho certeza se está correto.

Em cada tick, a função GetValue() produz um valor int. Como preencher o ValueArr[]?

Minha tentativa está correta?

Então
 int ValueArr[size]; 

você não pode. Ao declarar uma matriz, ou você especifica uma constante como o tamanho ou nada, e a matriz é então considerada dinâmica.

A maneira correta é esta

int ValueArr[]; 

int init()
{
   ArrayResize(ValueArr,size);
}
 
teca - não
 

Por favor, avise! Existe alguma função no MT4, que levaria em conta o resultado de uma negociação anterior para abrir uma nova? Se sim, como posso especificá-lo corretamente?

 
sto_mat:

Por favor, avise! Existe alguma função no MT4, que levaria em conta o resultado de uma negociação anterior para abrir uma nova? Se sim, como posso especificá-lo corretamente?


Não existe tal função integrada, você mesmo tem que escrevê-la, eu mostrei um exemplo aqui:https://www.mql5.com/ru/forum/131277/page113
 
alsu:
Isto é

você não pode. Ao declarar uma matriz, ou uma constante é especificada como um tamanho, ou nada, e a matriz é então considerada dinâmica.

A maneira correta é esta


Então, acho que é isso:

 int size, ValueArr[]; 
//-----------------
 int init()
 {
   ArrayResize(ValueArr,size);
 }
//-----------------

int start()
 {
   ValueArr[size-1] = GetValue();
 return();
 }

//-----------------

int GetValue()
 {
 .......
 return(Val);
 }

Isto é correto?