Preguntas de los principiantes MQL4 MT4 MetaTrader 4 - página 22

 
A1exPit:
Me refería a que cuando se pasan datos a un array, éste se rellena secuencialmente, es decir, array1[] = x; ¿en qué celda se escribirá el valor x si no se especifica directamente el número de celda?

No. Si quiere llenar todas las celdas con el mismo valor , utilice ArrayInitialize().

Si quieres escribir diferentes valores, utiliza el bucle de forma secuencial. Si necesita escribir en una celda específica, especifique su dirección.

 
Vitalie Postolache:

No. Si quiere llenar todas las celdas con el mismo valor , utilice ArrayInitialize().

Si quieres escribir diferentes valores, utiliza el bucle de forma secuencial. Si necesita escribir en una celda específica, especifique su dirección.

Gracias,

Aquí hay otra pregunta: a través de ArrayCopy, ¿podré crear un nuevo array con un tamaño igual al número de celdas llenas del anterior? ¿O debo crear primero una segunda matriz y sólo después copiar?

int  ArrayCopy(
   void&        dst_array[],         // куда копируем
   const void&  src_array[],         // откуда копируем
   int          dst_start=0,         // с какого индекса пишем в приемник
   int          src_start=0,         // с какого индекса копируем из источника
   int          count=WHOLE_ARRAY    // сколько элементов
   );
 
A1exPit:

Gracias,

Aquí hay otra pregunta: con ArrayCopy, ¿puedo crear un nuevo array con el mismo tamaño que el número de celdas llenas del anterior? ¿O tengo que crear primero un segundo array y luego copiarlo?

int  ArrayCopy(
   void&        dst_array[],         // куда копируем
   const void&  src_array[],         // откуда копируем
   int          dst_start=0,         // с какого индекса пишем в приемник
   int          src_start=0,         // с какого индекса копируем из источника
   int          count=WHOLE_ARRAY    // сколько элементов
   );
Crear primero, por supuesto.
 
Vitalie Postolache:
Crear primero, por supuesto.
Gracias, de nuevo.
 
Spread = MarketInfo(Symbol(),MODE_SPREAD);
if ( Spread >= 0 ) ExtSpread [x] = Spread;
if ( TimeCurrent() - iTime( NULL, 0, 0) >= 60 ){
int Spread2[x];
ArrayCopy( Spread2[],ExtSpread[],0,0, WHOLE_ARRAY);}
x=x+1;
if (x > 1000) x = 0;

Así, escribo el valor de Spread en ExtSpread[] y cuando la barra de un minuto termina, lo muevo a otro array - que debería, en teoría, sobrevivir a la siguiente barra.

Tamaño ExtSpread[1000]

Una pregunta más: si la matriz se numera empezando por cero, entonces, si su tamaño es 1000, su última celda será 999?

Entonces es correcto: x++ y si ( x > 999 ) x=0;

 
A1exPit:
Spread = MarketInfo(Symbol(),MODE_SPREAD);
if ( Spread >= 0 ) ExtSpread [x] = Spread;
if ( TimeCurrent() - iTime( NULL, 0, 0) >= 60 ){
int Spread2[x];
ArrayCopy( Spread2[],ExtSpread[],0,0, WHOLE_ARRAY);}
x=x+1;
if (x > 1000) x = 0;

Así, escribo el valor de Spread en ExtSpread[] y cuando la barra de un minuto termina, lo muevo a otro array - que debería, en teoría, sobrevivir a la siguiente barra.

Tamaño ExtSpread[1000]

Una pregunta más: si la matriz se numera empezando por cero, entonces, si su tamaño es 1000, su última celda será 999?

Entonces es correcto: x++ y si ( x > 999 ) x=0;

Spread = (int)MarketInfo(Symbol(),MODE_SPREAD);
if ( Spread >= 0 ) ExtSpread [x] = Spread;
if ( TimeCurrent() - iTime( NULL, 0, 0) >= 60 ){
int Spread2[];ArrayInitialize (Spread2,EMPTY_VALUE); ArrayResize( Spread2,x,0);
ArrayCopy( Spread2,ExtSpread,0,0, WHOLE_ARRAY);}
x=x+1;
if (x > 999) x = 0;
 
¿Ya no se admite la versión del terminal?(( Si es así, ¿dónde puedo descargar una que funcione?
 

Aplazado:

scomoroh, 2016.12.04 18:58

Aparece un error al compilar. ¿Cuál es el problema? ¡Ayude a resolverlo!
Archivos adjuntos:
 
Vladimir Karputov:

Aplazado:

scomoroh, 2016.12.04 18:58

Durante la compilación aparecerá un error. ¿Cuál es el problema? ¡Ayúdame a resolverlo!

ArrayInitialize(max,0) =>ArrayInitialize(arr,0);

for(int a=1;a<=pr;a++) =>for(int a=1;a<pr;a++)

Este es un código muy poco óptimo, el terminal se cuelga durante unos minutos al lanzarlo, y luego será muy lento, y si lo ejecutas con varios gráficos, entonces no funcionará en absoluto

 
Vitalie Postolache:

ArrayInitialize(max,0) =>ArrayInitialize(arr,0);

for(int a=1;a<=pr;a++) =>for(int a=1;a<pr;a++)

Este es un código muy poco óptimo, el terminal se cuelga durante unos minutos al lanzarlo, y luego será muy lento, y si lo ejecutas con varios gráficos, entonces no funcionará en absoluto

Sí, gracias, arreglado todo, sin errores. Retrasos, sí, muy. ¿Podría decirme en qué dirección avanzar para optimizar, o tendré que reescribir todo?