[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 311

 
drknn:


1. La variable Velas no se utiliza en ninguna parte.

2. La línea

no está escrito correctamente. Se encuentra en el bucle - en cada iteración del bucle se crea una nueva variable Cls. Y no lo necesitas ahí. El siguiente texto será suficiente.


1. Me olvidé de señalar que el trabajo de los indicadores no se ha completado. Pero, en cualquier caso, esto no debería afectar en absoluto al funcionamiento de esta función en particular.

2. Así fue al principio. Pero cuando empezó a darme un error, pensé que el problema podría estar de alguna manera en pasar los datos de un array a un array.

 
drknn:

Y prueba la línea

sustitúyalo por


No ayudó. El error sigue siendo el mismo.
 
drknn:
Hay una cosa más. Si declaraste una dimensión de 4 celdas en una de las dimensiones del array, no puedes llamar a Buffer_OHLC[4][] - la cuestión es que la numeración empieza por cero, no por uno. Así que lo máximo que se puede llamar es Buffer_OHLC[3][];


La celda cero también puede permanecer vacía. En el libro de texto se describe un ejemplo similar. Pues bien, en general, incluso cambiando el tamaño de la matriz, el error se mantiene.

PS El indicador debe tomar los datos de otra herramienta y aplicarlos a la actual. ¿Quizás estoy haciendo algo fundamentalmente equivocado al resolver esta tarea?

 
silhouette:


La celda nula también puede permanecer vacía. En el libro de texto se describe un ejemplo similar. Pues bien, en general, incluso después de cambiar el tamaño del array, el error persiste.

PS El indicador debe tomar los datos de otra herramienta y aplicarlos a la herramienta actual. ¿Quizás estoy haciendo algo fundamentalmente equivocado al resolver este problema?

Simplemente no estás trabajando correctamente con un array bidimensional

 

1. Intercambiar el primer índice con el segundo índice

2. utilizar ArrayResize

 
silhouette:


La celda cero también puede permanecer vacía. En el libro de texto se describe un ejemplo similar. Pues bien, en general, incluso cambiando el tamaño de la matriz, el error se mantiene.

PS El indicador debe tomar los datos de otra herramienta y aplicarlos a la actual. ¿Quizás estoy haciendo algo mal en principio al resolver esta tarea?


Has declarado el array Buffer_OHLC[4][]. Estás dirigiéndote a una celda inexistente del array, concretamente a Buffer_OHLC[4][i] - no existe tal celda en el array que has declarado. El máximo que hay es Buffer_OHLC[3][i].

Me explico: has declarado 4 celdas en la segunda dimensión del array (digamos, 4 filas de alguna tabla con un número infinito de columnas). Como la numeración empieza por cero, la primera línea a la que se puede acceder es Buffer_OHLC[0][], la segunda es Buffer_OHLC[1][], la tercera es Buffer_OHLC[2][], y la cuarta es Buffer_OHLC[3][]. La línea Buffer_OHLC[4][] no existe en el array que has declarado .

 
También [3,i] no existe cuando i>0 :)
 

No te preocupes por los frenos, es la primera vez que trato con arrays multidimensionales :)

drknn, ¡ gracias! Entiendo su comentario

tara:

1. Intercambiar el primer índice con el segundo

2. utilizar ArrayResize

Gracias. Tengo el resultado. Pero también me gustaría aclarar lo de la función ArrayResize y el tamaño de la primera dimensión del array.

   int counted_bars=IndicatorCounted();
   int limit=Bars-counted_bars-1;
   if (limit>1) 
      limit=Bars-1;
   
   ArrayResize(Buffer_OHLC,limit-1);
   for(int i=limit; i>=0; i--)
    {
      Buffer_OHLC[i][0]=iOpen (Smb,Period(),i);
      Buffer_OHLC[i][1]=iHigh (Smb,Period(),i);
      Buffer_OHLC[i][2]=iLow  (Smb,Period(),i);
      Buffer_OHLC[i][3]=iClose(Smb,Period(),i);
      
      if(Line==true)
       {
        Buffer_ind[i]=Buffer_OHLC[i][3];
       }
    }
   return(0);

Cuando se utiliza el límite-1, hay un gráfico, pero aparece el error 4051 "Valor no válido del parámetro de la función".

 
¿Puede alguien explicar cómo abrir una orden en cualquier momento de una barra y sólo abrir la siguiente orden en la siguiente barra?
 
silhouette:

No te preocupes por los frenos, es la primera vez que trato con arrays multidimensionales :)

Es más fácil orientarse si se piensa en una matriz multidimensional como algo más. Es decir, si se encuentra un modelo para el conjunto que capte su esencia, el modelo es más fácil de mantener ante los ojos.

Una matriz unidimensional son objetos en una línea (un rayo de coordenadas que comienza en cero). Un ejemplo de este tipo de matriz sería la cola de una tienda. El primero en la cola es la persona que está justo detrás de la persona que está comprando ahora. La persona que compra no puede ser llamada la primera de la cola - está comprando - es cero. Está dentro de la celda cero de la matriz unidimensional.

Un array bidimensional son objetos en un plano (plano de coordenadas). Un ejemplo sería un auditorio. Tal y tal fila, tal y tal lugar. Añade la fila cero y el asiento cero a este modelo, y tendrás un modelo exacto de una matriz bidimensional.

Una matriz tridimensional es un objeto en el espacio (espacio de coordenadas): la coordenada del objeto viene dada por tres valores. Es un cubo, con caras. Un modelo podría ser un edificio residencial con entrada número cero, piso número cero y piso número cero (entre todos los demás). Siempre que en cada entrada la numeración plana comience desde cero.

Una matriz cuatridimensional es similar a una matriz unidimensional. Se trata de un rayo de coordenadas cuyos puntos son matrices tridimensionales. El modelo es una calle. La matriz de coordenadas estará especificada por los valores: número de casa, número de entrada, número de piso, número de piso.

Y así sucesivamente hasta llegar a la enn-dimensionalidad: de las calles a los distritos, de los distritos a las ciudades, de los distritos a las ciudades, de las ciudades a los países, de los países a los planetas...

Razón de la queja: