Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 731

 
Vitalie Postolache:

Não são 10.000 x 10.000 bidimensionais?

double arr[10000][10000];

e tudo isso...

Top2n:
Bem, sim, é bidimensional, não é assim que eu o digo, aparentemente não é uma matriz mas uma matriz. Será que uma matriz implica multidimensionalidade?
Concordo. Não foi isso que foi dito, além de ter sido mal compreendido.

O que está a travar neste código não é a escrita de uma matriz mas sim um loop in a loop.
 
Alexey Viktorov:
Concordo. Não foi isso que foi dito e foi mal compreendido.

O que está a travar neste código não é a escrita de uma matriz mas sim um loop in a loop.

É necessário portar para outro ambiente de programação, ou este não é um problema comum a todos os tipos de linguagens? Qual pode ser a solução para acelerar?

Se um laço e aumentar o valor da variável a partir do laço eliminado

         for(int q=0; q<ARRAY_SIZE_X*ARRAY_SIZE_Y; q++) // Перебор по периоду, колонка X
                 {
                  int arr++
                  if(arr=ARRAY_SIZE_X) {z++;arr=0;}

                  arra[q]=sm.d[q].m[nBar-z];                // M(I) SMA              
                 }
         //--- запишем данные массива в конец файла FileTell IsFileLineEnded
               FileSeek(handle,0,SEEK_END);
               FileWriteArray(handle,arra);


Posso tê-lo verificado mas não quero incomodar o computador - se não acelerar, será colocado stress extra no disco rígido novamente))))

 
Top2n:

É necessário portar para outro ambiente de programação, ou este não é um problema comum a todos os tipos de linguagens? Qual pode ser a solução para acelerar?

Se um laço e aumentar o valor da variável de um laço apagado nele, irá acelerar?

Eu poderia verificá-lo, mas não quero torturar o computador, se não for acelerado, voltará a colocar tensão extra no disco rígido))))

E não se pode escrever a matriz depois do laço? Só o pode fazer em cada linha? Estou a referir-me à primeira variante, em que o laço está no laço.
 
Vitalie Postolache:
Não se pode escrever a matriz depois do laço? É possível fazê-lo apenas em cada linha? Estou a referir-me à primeira variante em que o laço está no laço.
Um conjunto deste tamanho não caberia na RAM atribuída.

Claro que, além disso, é possível inserir um contador e escrever neste contador, não cada linha separadamente, mas é pouco provável que acelere tanto o processo, que seja perceptível sem medição.
 
Alexey Viktorov:
Um conjunto deste tamanho não caberia na RAM atribuída.

Claro que, além disso, pode inserir um contador e gravar por este contador, não cada fila separadamente, mas é pouco provável que acelere tanto o processo que será perceptível sem medição.

Por favor, informe, a documentação diz (e o compilador também) que:"AbandeiraAS_SERIES não pode ser hasteada para arrays multidimensionais"

Pergunta: Como posso ordenar uma matriz em mql5?

void Func()
{
double m[][3];

if(условия)
  {
   // много кода
         c++;
         ArrayResize(m, c);
         m[c-1][0]= Lots();
         m[c-1][1]= Ticket();
         m[c-1][2]= Profit();
  }
 BySort(m); // передаём в функцию "BySort"
}

void BySort(double &mas[][3])
{
// Сортируем по размеру лота от большего к меньшему
  ArraySort(mas);
  ArraySetAsSeries(mas,true); // при такой записи mql5 ругается, в mql4 работает

 ... здесь работа с массивом и основной код 

}
 
Vitaly Muzichenko:

Por favor, informe, a documentação diz (e o compilador também) que:"A bandeiraAS_SERIES não pode ser hasteada para arrays multidimensionais".

Pergunta: como ordenar a matriz:

double m[][3];

if(условия)
 {
// много кода
         c++;
         ArrayResize(m, c);
         m[c-1][0]= Lots();
         m[c-1][1]= Ticket();
         m[c-1][2]= Profit();
 }

void BySort(double &mas[][3])// выделенное лишнее
 {
// Сортируем по размеру от большего к меньшему
  ArraySort(mas, WHOLE_ARRAY, 0, MODE_DESCEND); // вот это не работает в mql5

  ArraySort(mas);
  ArraySetAsSeries(mas,true);
// а при такой записи ругается // это тоже лишнее
 }
AS_SERIES e triagem são conceitos completamente diferentes.

1 - muda a direcção da indexação das células da matriz sem alterar o seu conteúdo e 2 - muda o conteúdo das células sem alterar a sua indexação para que sejam ordenadas em ordem ascendente ou descendente.

Além disso, a documentação diz que a matriz só pode ser ordenada pela primeira dimensão.
 
Alexey Viktorov:
AS_SERIES e triagem são conceitos completamente diferentes.

1 - muda a direcção da indexação das células da matriz sem alterar o seu conteúdo, e 2 - sem alterar a indexação muda o conteúdo das células para que sejam ordenadas em ordem ascendente ou descendente.

Além disso, a documentação diz que a matriz só pode ser ordenada pela primeira dimensão.

Aqui, ordena-se por ordem ascendente

ArraySort(mas);

Como é que o inverto agora? Tem de estar em ordem decrescente, está a ordenar lotes.

 
Vitaly Muzichenko:

Aqui, ordena-se por ordem ascendente

ArraySort(mas);

Como é que o inverto agora? Precisa dele por ordem decrescente, ele classifica os lotes.

Uau. Esta é a minha primeira vez que olho para a ordenação em mql5. Estou a usar mql4 de memória. Se for este o caso, pode inverter o ciclo de leitura. Se precisar de procurar um valor específico, devolverá o índice da matriz, independentemente da forma como o classifica.

E a opção mais idiota é reescrever todo o conjunto na ordem inversa. Vale a pena?
 
Vitaly Muzichenko:

Aqui, ordena-se por ordem ascendente

ArraySort(mas);

Como é que o inverto agora? Precisa dele por ordem decrescente, ele classifica os lotes.

E se após a ordenação alterar a ordem de indexação usando o ArraySetAsSeries?
 
Vitalie Postolache:
E se, após a classificação, alterar a ordem de indexação usando o ArraySetAsSeries?

Depois é assim:

Razão: