Cálculo de una matriz durante la optimización - página 7

 
forexman77:

He intentado declarar un array a nivel global (código mql4)

rellenar en el inite

Si no se establece al principio, imprime la fecha de 1971, es decir, la matriz está vacía

Si relleno el array en el inicio, aparecen los valores. ¿Puede ser la razón, que la matriz se reinicia datetaime, pero sin ella el código no compila?

El conjunto desaparece. ¿Qué estoy haciendo mal?

Aquí tengo una idea, por si alguien la necesita también. He copiado una matriz en otra.

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:

He aquí una idea, por si alguien la necesita también. Copiar un array en otro.

¿Para qué sirve esto?

La pregunta original era para que el array no se recalculara en las siguientes iteraciones de optimización. Ahora simplemente se rellena y se copia en el otro. No servirá de nada. Supongo que esta matriz T[40] se representa de esta manera sólo a efectos ilustrativos, mientras que en realidad debería calcularse y llenarse secuencialmente. Cada vez que se ejecute la optimización se recalculará esta matriz como antes, la única diferencia es que se organiza de forma diferente.

 
Alexey Viktorov:

¿Para qué sirve?

La pregunta original era para que el array no se recalculara en las siguientes iteraciones de optimización. Y ahora simplemente se rellena y se copia en otro. No servirá de nada. Supongo que esta matriz T[40] se representa de esta manera sólo a efectos ilustrativos, mientras que en realidad debería calcularse y llenarse secuencialmente. En cada siguiente ejecución de la optimización, esta matriz se recalculará de la misma manera que antes, con la única diferencia de que está dispuesta de forma diferente.

El array declarado a través de llaves no se guardó; no pudo ser declarado globalmente y luego llenado en el inite (el array no se guardó dentro de una ejecución).

Entre iteraciones de optimización, según tengo entendido, el array no se guarda, es decir, el programa reinicia todo lo que había.

 
forexman77:

El array declarado con llaves no se guardó, no se pudo declarar globalmente y luego rellenar en el inite (el array no se guardó dentro de una ejecución).

Entre iteraciones de optimización, según tengo entendido, el array no se guarda, es decir, el programa reinicia todo lo que había.

No tardará mucho en llenarse en el bucle así. Pero otra cosa es que el cálculo de los elementos del array lleve mucho tiempo. Si ese es el caso, no servirá de nada. Los elementos del array seguirán siendo recalculados en cada iteración. Y si el array se rellena de esta manera, también se pueden enumerar globalmente todos los elementos entre llaves. No entiendo el sentido de esta magia...
 
Alexey Viktorov:
Y si el array se rellena de esta manera, también se pueden listar todos los elementos entre llaves a nivel global. algo que no entiendo el sentido de esta magia...
También puedes hacerlo de forma global. Pero, no me gusta tener una torre de varios miles de elementos en la parte superior allí)
 
forexman77:
Podrías hacerlo en un global. Pero no me gustaba la idea de construir una torre de varios miles de elementos encima).

Gracias a Dios que todo salió como querías.

¿Ha aumentado la velocidad?

 
Alexey Viktorov:

Gracias a Dios que todo salió como querías.

¿Ha aumentado la velocidad?

Cada vez es más rápido.
 

No he creado un nuevo tema.

Ahora estoy tratando de hacer lo siguiente: hay un array con el primer valor fecha, el segundo y el tercero números dobles. Necesito ordenar el array por fecha, pero quiero que el segundo y tercer valor estén ligados a la fecha.

Luego pienso agrupar varias matrices en una sola y ordenarlas por fecha.

Lo he intentado así, pero por lo que tengo entendido, la ordenación se realiza por el índice del array, es decir, por i.

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

No he creado un nuevo tema.

Ahora estoy intentando hacer lo siguiente: hay un array con el primer valor fecha, el segundo y el tercero números dobles. Necesito ordenar el array por el valor de la fecha, pero que el segundo y tercer valor estén ligados a la fecha.

...

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

Es sobre todo en las clases, que son un bosque oscuro para mí. Pero, han surgido algunas ideas. Haz un array con las fechas y los números por separado. Sólo que, ¿cómo obtener el número de índice donde están las fechas después de la ordenación, es decir, obtener la i que está en la segunda dimensión?

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

m[0][i]=Dat_DtTm;
d[i][0]=f1;
d[i][1]=f2;
Razón de la queja: