Cálculo de matriz única durante a otimização - página 7

 
forexman77:

Tentou declarar uma matriz a nível global (código mql4)

preenchê-lo no inite

Quando não está definida no início, imprime a data de 1971, ou seja, a matriz está vazia

Se eu preencher a matriz no início, os valores aparecem. Pode ser a razão pela qual a matriz é reinicializada em datetaime, mas sem ela o código não será compilado?

A matriz desaparece. O que eu estou fazendo de errado?

Aqui eu tenho uma idéia, se alguém precisar dela também. Eu copiei uma matriz em outra.

datetime T_[];//на глобальном уровне
//////////////////////////////////////////////////////////////////
int init()
  {
   ArraySetAsSeries(T_,true);
   massiv();

   return(0);
  }
/////////////////////////////////////////////////////////////////
int start()
  {
   if(ArraySize(T_)==0)
   massiv();

  return(0);  
  }
////////////////////////////////////////////////////////////////
void massiv()
  {
   datetime T[40]=
   {
   1262731020,1262735700,1262821920,1262903400,1262989740,1263247200,1263339060,1263420000,1263507480,1263595500,
   1265324700,1265407200,1265752980,1265926500,1265930820,1267657200,1267740300,1267826460,1268175840,1268346360,
   1270504920,1270684140,1270768500,1272924180,1273011720,1273097100,1273272240,1273528800,1273617180,1275344100,
   1275516000,1275602400,1275689160,1276034400,1276124580,1276208700,1276211640,1278027960,1278369780,1278373920
   };
   ArraySetAsSeries(T,true);
   ArrayInitialize(T_,0);
   ArrayResize(T_,40);
   ArrayCopy(T_,T,0,0,WHOLE_ARRAY);
   ArrayFree(T);
  }
 
forexman77:

Aqui está uma idéia, se alguém precisar dela também. Copiando uma matriz em outra.

Para que serve isto?

A questão original era para que a matriz não fosse recalculada em iterações subseqüentes de otimização. Agora ele é simplesmente preenchido e copiado para o outro. Não vai adiantar de nada. Presumo que esta matriz T[40] é representada desta forma apenas para fins ilustrativos, enquanto que de fato deveria ser calculada e preenchida sequencialmente. Cada próxima execução de otimização recalculará esta matriz como antes, a única diferença é que ela é organizada de forma diferente.

 
Alexey Viktorov:

Para que serve?

A questão original era para que a matriz não fosse recalculada em iterações subseqüentes de otimização. E agora ela é simplesmente preenchida e copiada para outra. Não vai adiantar de nada. Presumo que esta matriz T[40] é representada desta forma apenas para fins ilustrativos, enquanto que de fato deveria ser calculada e preenchida sequencialmente. A cada próxima otimização, esta matriz será recalculada como era antes, a única diferença é que ela está disposta de forma diferente.

A matriz declarada por meio de suportes de encaracolamento não foi salva; não pôde ser declarada globalmente e depois preenchida no inite (a matriz não foi salva dentro de uma corrida).

Entre iterações de otimização, como eu entendo, a matriz não é salva, ou seja, o programa redefine tudo o que era.

 
forexman77:

A matriz declarada com aparelho encaracolado não foi salva, não pôde ser declarada globalmente e depois preenchida no inite (a matriz não foi salva dentro de uma corrida).

Entre iterações de otimização, como eu entendo, a matriz não é salva, ou seja, o programa redefine tudo o que era.

Não vai demorar muito para preenchê-lo no laço dessa maneira. Mas é outra questão, se o cálculo dos itens da matriz leva muito tempo. Se este for o caso, não ajudará. Os elementos da matriz ainda serão recalculados a cada iteração. E se a matriz for preenchida desta forma, você também pode enumerar globalmente todos os elementos entre parênteses encaracolados. Não entendo o objetivo desta feitiçaria...
 
Alexey Viktorov:
E se a matriz for preenchida desta forma, você também pode listar todos os elementos entre parênteses em nível global. algo que não entendo o objetivo desta feitiçaria...
Você também pode fazer isso globalmente. Mas, eu não gosto de fazer uma torre de vários milhares de elementos em cima lá)
 
forexman77:
Você poderia fazer isso em um global. Mas eu não gostei da idéia de construir uma torre de vários milhares de elementos em cima).

Graças a Deus tudo funcionou da maneira que você queria.

A velocidade aumentou?

 
Alexey Viktorov:

Graças a Deus tudo funcionou da maneira que você queria.

A velocidade aumentou?

Está ficando mais rápido.
 

Eu não criei um novo tópico.

Agora estou tentando fazer o seguinte: há uma matriz com data de primeiro valor, segundo e terceiro números o dobro. Preciso ordenar a matriz por data, mas quero que o segundo e terceiro valores sejam vinculados à data.

Depois planejo agrupar várias matrizes em uma só e ordená-las por data.

Tentei fazer desta forma, mas, pelo que entendi, a classificação é feita por índice de matriz, ou seja, por i.

double m[215][3];
m[i][0]=Data;
m[i][1]=f1;
m[i][2]=f2;
 
forexman77:

Eu não criei um novo tópico.

Agora estou tentando fazer o seguinte: há uma matriz com data de primeiro valor, segundo e terceiro números o dobro. Necessidade de classificar a matriz por valor de data, mas ter o segundo e o terceiro valores vinculados à data.

...

Veja aqui:https://www.mql5.com/ru/forum/42036
Сортировка двухмерного массива.
Сортировка двухмерного массива.
  • www.mql5.com
Форум трейдеров MQL5.community
 
Anatoli Kazharski:
Veja aqui:https://www.mql5.com/ru/forum/42036

A maior parte das aulas, que para mim são uma floresta escura. Mas, algumas reflexões surgiram. Faça uma matriz com datas e números separadamente. Somente, como obter o número índice onde estão as datas após a classificação, ou seja, obter o i que está na segunda dimensão?

datetime m[215][1];
double d[215][2];

m[0][i]=Dat_DtTm;
d[i][0]=f1;
d[i][1]=f2;
Razão: