[¡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 523

 
Roll:


Sin hacer afirmaciones de alto nivel, vamos a ponerlo a prueba:

Sí, en la práctica resulta que el elemento con índice Bars*6-60,60 es la barra actual... entonces como se explica eso en el ejemplo :

double array1[][6];
ArrayCopyRates(array1,"EURUSD", PERIOD_H1);
Print("Текущий бар ",TimeToStr(array1[0][0]),"цена открытия ", array1[0][1]);
La barra actual es array1[0][0] y después de copiar el array se convierte en array1[Bars*6-60,60][0]... resulta que en alguna parte hay una renumeración... Por supuesto, el resultado está claro después de usar la función en la práctica... pero la lógica es un lío, en mi opinión)))
 
Lisi4ka330:

Sí, en la práctica resulta que el elemento con índice Bars*6-60,60 es la barra actual ...


Esta es su conclusión.
 
Roll:


Sin hacer afirmaciones de alto nivel, vamos a ponerlo a prueba:

#property show_inputs
extern string s=" -----номер бара--------";
extern int a=9;//номер 10 последних баров 
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
{if(a<10)
{double array1[][6];double array2[10][6];
  ArrayCopyRates(array1);
  ArrayCopy(array2,array1,0,Bars*6-60,60);
// теперь array2 содержит 10 последних баров из истории(имеется в виду,что последний бар-это текущий бар,бар с индексом [0])
Alert("Контрольный бар - ",a," время - ",TimeToStr(array2[a][0]),"  цена открытия - ",array2[a][1]);}return(0);}

Así que aquí está un elemento específico de la matrizTimeToStr(array2[a][0]).

Que la salida es correcta, estoy de acuerdo. ¿Pero qué tiene que ver Bars*6-60 con esto? ¿Qué valor se sustituye por Bar durante el cálculo? Si son barras, ¿cómo se obtienen las últimas 10 barras?

Ya lo habrás notado, no soy el único que no lo ha entendido en el foro, sino que mucha gente lo ha hecho.

Resulta que el número de todas las barras multiplicado por 6 y menos 60. ¿De dónde sacamos 6? No tiene ningún sentido.

 
hoz:

Así que aquí está un elemento específico de la matrizTimeToStr(array2[a][0]).

La salida es correcta, estoy de acuerdo. Pero qué tiene que ver Bars*6-60... ¿Qué valor se sustituye por Bar durante el cálculo? Si son barras, ¿cómo se obtienen las últimas 10 barras?

Como podrás notar, no soy el único que no lo ha entendido en el foro, muchos otros no lo han hecho.



int Bars -- Número de barras en el gráfico actual.

 
hoz:

Resulta que el número de todas las barras multiplicado por 6 y menos 60. ¿De dónde sacamos 6? No tiene ningún sentido.

MQL4 Reference - Array Operations - ArrayCopyRates
 
Roll:



int Bars -- Número de barras en el gráfico actual.


Entonces, ¿de dónde salieron los últimos 10?

int Bares = 10 000;

Entonces Bares*6 - 60 = 10 000*6 - 60 = 60 000 - 60 = 59 960;

El valor de59 960 es mayor que el de Bares. Y ya significa que está fuera del conjunto. Y el 10 no se encuentra en ninguna parte...

 
hoz:

Resulta que el número de todas las barras multiplicado por 6 y menos 60. ¿De dónde sacamos 6? No tiene ningún sentido.

Para no agravar la confusión, quiero corregir el error que cometí en la respuesta anterior: la notación "array1[Bars*6-60,60][0]" no es correcta, porque Bars*6 es el número total de elementos del array1.Cada barra tiene 6 propiedades, supongamos que tenemos 30 barras, multiplicando por 6 obtenemos el número de elementos de la primera matriz - 180. La segunda matriz tiene sólo 60 "celdas" libres (es decir, 10 x 6 propiedades), por lo que debemos seleccionar sólo 60 elementos de la primera matriz para copiarlos. Utilizando la expresión [Bars*6-60,60] restamos 60 del total, es decir, 180 - 60 = 120, es decir, 120 elementos de la primera matriz se copiarán en el elemento cero de la segunda, 121 en la primera, y así sucesivamente. Otra cuestión es cómo resulta que la información sobre los últimos compases formados no se escribe al principio de la primera matriz, sino al final... Pero aparentemente la respuesta está en el código de la función, y no tiene sentido indagar más...
 
hoz:


Entonces, ¿de dónde salieron los últimos 10?

int Bares = 10.000;

Entonces Bares*6 - 60 = 10 000*6 - 60 = 60 000 - 60 = 59 960 -- ¡¡¡Error!!!

El valor de59 960 es mayor que el de Bares. Y esto ya significa que ha superado los límites de la matriz. Y el 10 no aparece por ningún lado.


Víctor, no te preocupes, lo conseguirás. "La experiencia es el hijo de los errores difíciles..." Ir de lo simple a lo complejo, no al revés:

"PROGRESO (del lat. progressus - movimiento hacia adelante), una dirección de desarrollo caracterizada por una transición de lo inferior a lo superior, de lo menos perfecto a lo más perfecto. Se puede hablar de progreso en relación con el sistema en su conjunto, sus elementos individuales, la estructura del objeto en desarrollo. El concepto de progreso es lo contrario del concepto de retroceso.

REGRESIÓN (del latín regressus - movimiento inverso), tipo de desarrollo que se caracteriza por la transición de lo superior a lo inferior. Lo contrario del progreso".

 
Roll:


Víctor, no te preocupes, vas por delante. "La experiencia es hija de los errores..." Ir de lo simple a lo complejo, no al revés:

"Progreso (del latín progressus - movimiento hacia adelante), la dirección del desarrollo, caracterizada por la transición de lo inferior a lo superior, de lo menos perfecto a lo más perfecto. El progreso puede referirse al sistema en su conjunto, a sus elementos individuales, a la estructura del objeto en desarrollo. El concepto de progreso es lo contrario del concepto de retroceso.

REGRESIÓN (del latín regressus - movimiento inverso), el tipo de desarrollo que se caracteriza por la transición de lo superior a lo inferior. Lo contrario del progreso".


¿por qué no explicárselo a la persona? ¿ayudarle a progresar? y toda esta charla sobre la regresión es más bien una frivolidad de un profesor...
 
Lisi4ka330:
Para no aumentar la confusión, quiero corregir el error que cometí en la respuesta anterior, la entrada "array1[Bars*6-60,60][0]" no es correcta, porque Bars*6 es el número total de elementos del array1.Cada barra tiene 6 propiedades, supongamos que tenemos 30 barras, multiplicando por 6 obtenemos el número de elementos de la primera matriz - 180. La segunda matriz tiene sólo 60 "celdas" libres (es decir, 10 x 6 propiedades), por lo que debemos seleccionar sólo 60 elementos de la primera matriz para copiarlos. Al expresar [Bars*6-60,60] restamos 60 del total, es decir, 180 - 60 = 120, es decir, 120 elementos de la primera matriz se escribirán en el elemento cero de la segunda, 121 en la primera, y así sucesivamente. Otra cuestión es cómo resulta que la información sobre los últimos compases formados no se escribe al principio de la primera matriz, sino al final... pero aparentemente la respuesta está en el código de la función, y No tiene sentido indagar más....
Razón de la queja: