matriz estática ? - página 4

 
Para i=Bars en el segundo bucle imprime todos los elementos del array pero no los valores, y todo = 0

Estoy confundido

quité la terminación i-- en el primer bucle oops. pero no tuvo efecto

 

Con un pequeño cambio tu código parece hacer algo .

2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[0]= 0
2011.09.21 11:24:41 2007.04.05 21:11 Agente86_5min AUDUSD,H1: v1[1]= 0
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[2]= 0
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[3]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[4]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[5]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[6]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[7]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agente86_5min AUDUSD,H1: v1[8]= 0

Cuando leíste el libro sobre Arrays, ¿viste dónde decía esto?

"Al declarar un array, se debe especificar el tipo de datos, el nombre del array y el número de elementos de cada dimensión:"

 
RaptorUK:

Con un pequeño cambio tu código parece hacer algo .

2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[0]= 0
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[1]= 0
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[2]= 0
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[3]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[4]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[5]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[6]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agent86_5min AUDUSD,H1: v1[7]= 0.8202
2011.09.21 11:24:41 2007.04.05 21:11 Agente86_5min AUDUSD,H1: v1[8]= 0

Cuando leíste el libro sobre Arrays, ¿viste dónde decía esto?

"Al declarar un array, se debe especificar el tipo de datos, el nombre del array y el número de elementos de cada dimensión:"

Sí, lo hice

Mi entendimiento era que double v1[] decidía el tipo de datos globalmente y antes del start()
Luego [i] inicializaba el array diciéndole cuantos elementos hay en el array en este caso de 1 dimensión con elementos = Bares, sin embargo el número cambia durante el deincremento de i--.
¿correcto?

Entonces, si se desincrementa el número de elementos, ¿cómo almacena el buffer y publica el indicador si el número de elementos ya no está allí?
O supongo que debería decir ¿qué pasa con los elementos al desincrementar [i]?
¿Simplemente desaparecen? ¿Siguen almacenados en v1[i] para ser referenciados o desaparecen?

Si puedo averiguar esto, tal vez pueda entender cómo hacer referencia a ellos o, si se han ido, entonces puedo averiguar cómo mantenerlos para su uso.
Lo que no entiendo es que la sentencia else parece ser capaz de referenciar v1[i]=v1[i+1] Así que cómo puede referenciar v1[i] si en ese momento v1[i] = 0 cuando imprimo en este punto.

Esto tiene sentido para = 0 en algún sentido porque si la matriz está vacía entonces imprimiría la matriz vacía como 0 ya que no hay elementos en la matriz.

No estoy seguro de entenderlo pero sigo pensando en ello y leyendo el documento una y otra vez.

Ahora bien, considerando que Bars tiene más de un número asociado a él, la dimensión podría ser diferente de lo que estoy pensando.
Así que supongo que voy a leer más en eso también para estar seguro de que entiendo lo que realmente es.

Pensaba que era un solo número de conteo como en Bar=el número de barras en el gráfico
Cuando imprimo Bares me da 1002 en el gráfico de 5min y estoy pensando que esto es una sola dimensión.


Seguiré trabajando en ello.

 

Si quieres hacer un Array más grande (o más pequeño) tienes que usar ArrayResize... un Array es como cualquier otra variable ... es sólo que puede haber muchos de ellos a los que puedes acceder fácilmente ....

Copia este código y ejecútalo como un script, ¿cuál crees que será el resultado?

//+------------------------------------------------------------------+
//|                                                  TestArray.mq4   |
//|                      Copyright © 2011, MetaQuotes Software Corp. |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2011, MetaQuotes Software Corp."
#property link      ""


// #property indicator_chart_window



//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   
   
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
   {
   double test[];
   
   test[39] = 45.6;
   Print("test[39]= ",test[39] );
   

      return(0);
   }
//+------------------------------------------------------------------+

     
 
2011.09.21 07:54:26 ninguno EURUSD,M5: eliminado
2011.09.21 07:54:26 ninguno EURUSD,M5: uninit reason 0
2011.09.21 07:54:26 ninguno EURUSD,M5: desinicializado
2011.09.21 07:54:26 ninguno EURUSD,M5: test[39]= 0
2011.09.21 07:54:26 ninguno EURUSD,M5: inicializado


Esto es lo que produce el script Lo copié exactamente

Acabo de hacer doble clic en él y se ejecutó y esto es lo que aparece en la pestaña de expertos

El diario del script sólo dice
2011.09.21 07:54:26 Script none EURUSD,M5: removed
2011.09.21 07:54:26 Script none EURUSD,M5: loaded successfully

Pensé que debería ver 45.6 como la salida ? estoy equivocado ?

He creado mi propio array[5] fijo = {1,2,3,4,5}

Y parece que puedo imprimir[5] o imprimir[3] etc.

dejame poner los corchetes y ver el script de nuevo





 

Vale, bien... ahora edita esta línea...

. . . e inténtalo de nuevo.

double test[];

to

double test[40];
 
2011.09.21 08:07:58 ninguno EURUSD,M5: desinicializado razón 0
2011.09.21 08:07:58 ninguno EURUSD,M5: deinitialized
2011.09.21 08:07:58 ninguno EURUSD,M5: test[39]= 45.6


Darn, tiene que salir corriendo estar de vuelta en un par de horas.

Tal vez puedo pensar en esto un poco más mientras se conduce

 

Realmente no hay nada que pensar...

"Al declarar un array, se debe especificar el tipo de datos, el nombre del array y el número de elementos de cada dimensión:"

Es necesario declarar el número de elementos del array. . .

 

Interesante
Pensaba que la declaración del número de elementos se hacía con v1[i] ? como i=Bars pensaba que era lo mismo que decir v1[Bars] que es el número que sea


Si no está declarado no entiendo como el indicador podría saber que es v1[i] si tampoco puedo referenciarlo ?
Este mismo script funciona en la versión del indicador y lo almacena en el buffer de v1[] así que ¿cómo sabe referenciar el buffer para dibujar la línea?

Actualmente funciona en el indicador. ¿Es un tema diferente?

 

Sí, los buffers indicadores se manejan de manera diferente a los arrays ordinarios.

v[i] no está declarando el Array, es sólo uno de los elementos... pero double v[]; es un array con cero elementos... así que v[anything] siempre = 0

Razón de la queja: