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

 
JRandomTrader #:

Se ha utilizado en la transmisión de datos desde tiempos inmemoriales.

Conveniente. No puedes estar en desacuerdo con eso. Pero como he dicho antes, siempre hay que tener en cuenta la cantidad de datos que se pueden hacer retroceder.

 
Vitaly Muzichenko #:

Pongamos un ejemplo, será sobre el tema

Hayun código para actualizar

No funcionará en este código porque el buffer del indicador vive independientemente de nosotros y no organizamos un buffer de anillo en él - no hay manera de explicar esta MT.

 
Mihail Matkovskij #:

Con ArrayCopy, sólo puedes transferir datos desde otro array. Pero no puedes desplazarlos.

¿Quién te ha dicho esta tontería?

Lea atentamente cómo se hace.

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

Cualquier pregunta de los novatos sobre MQL4 y MQL5, cualquier ayuda y discusión sobre algoritmos y códigos

Alexey Viktorov, 2022.02.13 18:21

En este código, es necesario especificar un array

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

El índice desde el que se escribe y el que se copia depende de la dirección de desplazamiento del array. Así, si el índice 0 debe contener siempre datos nuevos y frescos, copie desde 0 y escriba desde 1. Así, los valores en el índice 0 y 1 serán idénticos, y después se copiará un nuevo valor en el 0.

Y dudo mucho que ArrayCopy() tenga dentro el mismo bucle que el del usuario. Así, teniendo algún array con un tamaño determinado, se desplaza en 1 en cada tick y luego se copia en el buffer del indicador que se muestra como una línea...


 
JRandomTrader #:

No funcionará en este código porque el búfer del indicador vive independientemente de nosotros y no organizamos un búfer de anillo en él - no hay manera de explicar esta MT.

Ya veo.

Bueno, funciona - que funcione hasta ahora, ningún resultado todavía, hay que esperar a nuestros "amigos" de los Pindos hasta que se abra el mercado, y no es pronto.

Veré lo que puedo arbitrar.

 
JRandomTrader #:

o incluso

¡Y nadie se dio cuenta de la unión!

static int head=0;
for(i=head,count=0;count<ArraySize(A);count++)
  {
   -if(++i>=ArraySize(A))i=0;
   DoSomething(A[i]);
   +if(++i>=ArraySize(A))i=0;
  }
 
JRandomTrader #:

¡Y nadie se dio cuenta de la unión!

Todavía no lo veo.

 
Vitaly Muzichenko #:

Todavía no lo veo.

i debe incrementarse al final del bucle, después de su uso.

Pero también se puede comprobar si se sobrepasa el array al final del bucle y al principio del siguiente.

 
Alexey Viktorov #:

¿Quién te ha dicho esas tonterías?

Lea atentamente cómo se hace.


No sabía que esta función fuera tan universal. Pero aunque lo sea, ¿qué diferencia hay? ¿ArrayCopy desplazará los datos más rápido que un bucle normal?

 
Vitaly Muzichenko #:

El código ya funciona, pero hay dudas sobre la velocidad a causa del ciclo.

¿Qué será?

Quiero probar algunas cocinas para la posibilidad de arbitraje, el indicador dibujará la diferencia de valores, funciona en el temporizador una vez en 100ms. Los retrasos en la ejecución del código son críticos para esta situación.

Entonces no lo sé. Prueba con ArrayCopy. La función parece ser capaz de desplazar los datos. Pero difícilmente lo hará más rápido que un bucle habitual. Bueno, quién sabe... Tienes que probarlo.

 
Mihail Matkovskij #:

Entonces no lo sé. Prueba con ArrayCopy. La función parece ser capaz de desplazar los datos. Pero es poco probable que lo haga más rápido que un bucle normal. Bueno, quién sabe... Tienes que probarlo.

No sé por dónde empezar