Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 910

 

¿Por qué he copiado incorrectamente los precios de cierre de una hora determinada con una cantidad determinada? MQL5

copied = CopyClose(_Symbol,PERIOD_H4,Time[59],5,MPI); Alert(copied);
  for(int i = 0; i < 100; i++)
    {
     Alert(MPI[i]);
    };
 
Alexandr Sokolov:

¿Por qué he copiado incorrectamente los precios de cierre de una hora determinada con una cantidad determinada? MQL5

¿En qué parte de mql5 has encontrado Time[] o es un array personalizado?

 
Alexey Viktorov:

¿Y en qué parte de mql5 encontraste Time[] o es un array personalizado?

Sí, es un array personalizado, en el que he copiado las horas de apertura de las barras del timeframe en el que se encuentra el indicador. ¿O cómo especificar la fecha (sobre todo teniendo en cuenta que en el futuro habrá que combinarla de varias maneras)?

 
Alexandr Sokolov:

Sí, es un array personalizado, en el que he copiado las horas de apertura de las barras del timeframe en el que se encuentra el indicador. ¿O cómo especificar la fecha (sobre todo porque en el futuro habrá que combinarla de varias maneras)?

Sí, hay algo malo en copiar el TF de "otra persona". Inicié un indicador para severalfolds y noté que CopyRates() no se copia inmediatamente. Al parecer, se debe a la falta de preparación de los datos por períodos. Simplemente volviendo a compilarlo se arregla la situación. Resulta que primero hay que "tirar" del punto y luego copiar. Pero no he llegado a hacerlo. Lo comprobaré mañana. Pero espero tener razón.

Y un enigma para mí: por qué copiar las horas de apertura de las barras en la ventana del marco temporal en el que se encuentra el indicador, si en su lugar se puede utilizar time[]. Y no debemos olvidar la dirección de la indexación.

 
Alexey Viktorov:

Y una pregunta rápida: ¿por qué copiar la hora de apertura de las barras en la ventana del marco temporal en la que se encuentra el indicador, si se puede utilizar time[] en su lugar? Y no se olvide de la dirección de indexación.

El tiempo se utiliza fuera de OnCalculate. Dirección de indexación ArraySetAsSeries(...,true) en todos los buffers


¿Para qué sirve? - Hice un indicador de tendencia (publicado en CodeBase), es "ruidoso". Hice una reducción de la velocidad, pero no lo suficiente. Ahora quiero hacer que los valores de cada vela del marco temporal inferior se calculen a partir de las barras del marco temporal superior

¿A qué te refieres con "yank"?

 
Alexandr Sokolov:

El tiempo se utiliza más allá de OnCalculate. Dirección de indexación ArraySetAsSeries(...,true) en todos los buffers


¿Para qué sirve? - Hice un indicador de tendencia (publicado en CodeBase), es "ruidoso". Hice una reducción de la velocidad, pero no lo suficiente. Ahora quiero que los valores de cada vela del marco temporal inferior se calculen a partir de las barras del marco temporal superior

¿Qué quieres decir con "yank"?

"Yanki" no es mi expresión. Así he leído en este foro la referencia periódica a los datos del periodo deseado.

Recuerdo que incluso yo me enfadaba porque no funcionaba, me expresaba "tirando del periodo como un gato por su fuente", pero no funciona. Después de muchas discusiones sobre el problema, envolví la copia en un bucle do while. Si se ha copiado a la primera, menos mal. Si no lo hizo, le damos N intentos a través de un bucle for vacío durante 200-500 iteraciones, lo que parece ser suficiente. Podemos ir más allá...

Y ese indicador, del que he hablado un poco antes, está todavía en la fase de inicio. Por eso no se hace bien. Estaba comprobando cuántas barras de tf alto necesito para las barras disponibles del periodo actual. Terminé con 17 barras diarias por 5000 barras M5. Y si no se tiene en cuenta eso, entonces se copian 5000 actuales del periodo M5, 5000 de 4h y 5000 diarios. Demasiados extras...

Otro aviso importante: Hace un tiempo se podía invertir la indexación de un array una vez, ahora hay que redirigirla en cada estornudo. Ya he escrito sobre esto en alguna parte. Por eso prefiero trabajar con la opción por defecto. No es difícil acostumbrarse.

 

GlobalVariable por defecto sólo puede ser doble

double close = GlobalVariableGet("close");


Si quiero un valor cercano sin parte fraccionaria, ¿sería correcto escribirlo así?

int close = GlobalVariableGet("close");
 
Alexey Viktorov:

"Yanki" no es mi expresión. Así es como leo la referencia periódica a los datos del periodo correcto en este foro.

Recuerdo que incluso yo me enfadaba porque no funcionaba, me expresaba "tirando del periodo como un gato por su lugar causal", pero no sirve de nada. Después de muchas discusiones sobre el problema, envolví la copia en un bucle do while. Si se ha copiado a la primera, menos mal. Si no lo hizo, le damos N intentos a través de un bucle for vacío durante 200-500 iteraciones, lo que parece ser suficiente. Podemos aumentar...

Y ese indicador que mencioné antes aún está en pañales. Por eso no se hace bien. Estaba comprobando cuántas barras de tf alto necesito para las barras disponibles del periodo actual. Terminé con 17 barras diarias por 5000 barras M5. Y si no se tiene en cuenta eso, entonces se copian 5000 actuales del periodo M5, 5000 de 4h y 5000 diarios. Eso es un montón de extra...

Otro aviso importante: Hace tiempo se podía invertir la indexación de un array una vez, ahora hay que redirigirla en cada estornudo. Ya he escrito sobre esto en alguna parte. Por eso prefiero trabajar con la opción por defecto. No es difícil acostumbrarse.

Espera, ¿nos hemos perdido algo o nos hemos entendido mal, porque

Alert(copied);

... ...devuelve 5, lo cual es correcto, pero los valores del buffer son todos iguales.

 
Alexandr Sokolov:

Espera, ¿nos hemos perdido algo o nos hemos entendido mal, porque

... Devuelvo 5, que es correcto, pero los valores en el buffer son todos iguales

Entonces tenemos que averiguar la dimensión de la matriz MPI y su dirección de indexación, si se copian 5 elementos, ¿por qué el ciclo a 100?

Yo prefiero utilizar el depurador en estos casos. Obtener un array y comprobar todos los campos del array sin reiniciar...

 
Alexey Viktorov:

Entonces tenemos que lidiar con el tamaño del array MPI y la dirección de indexación, si copias 5 elementos, entonces ¿por qué el ciclo a 100?

Yo prefiero utilizar el depurador en estos casos. Obtener el array y comprobar todos los campos del array sin reiniciar...

Lo puse a 100 porque pensé que empezaría a 59, pero es lo mismo a 6.

Razón de la queja: