Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1901

 
JRandomTrader #:

Elle est utilisée dans la transmission de données depuis des temps immémoriaux.

Pratique. Vous ne pouvez pas être en désaccord avec cela. Mais comme je l'ai déjà dit, vous devez toujours tenir compte de la quantité de données que vous pouvez récupérer.

 
Vitaly Muzichenko #:

Prenons un exemple, il sera dans le sujet.

Il y aun code pour mettre à jour

Cela ne fonctionnera pas dans ce code parce que le tampon indicateur vit indépendamment de nous et que nous n'y organisons pas de tampon circulaire - il n'y a aucun moyen d'expliquer ce MT.

 
Mihail Matkovskij #:

Avec ArrayCopy, vous ne pouvez transférer des données qu'à partir d'une autre matrice. Mais vous ne pouvez pas les déplacer.

Qui vous a dit ces bêtises ?

Lisez attentivement comment cela se passe.

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Toutes les questions des débutants sur MQL4 et MQL5, toute aide et discussion sur les algorithmes et les codes.

Alexey Viktorov, 2022.02.13 18:21

Dans ce code, vous devez spécifier un tableau

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

L'index à partir duquel écrire et celui à copier dépend de la direction du décalage du tableau. Ainsi, si l'index 0 doit toujours contenir des données fraîches et nouvelles, il faut copier à partir de 0 et écrire à partir de 1. Ainsi, les valeurs dans les index 0 et 1 seront identiques, et ensuite une nouvelle valeur sera copiée en 0.

Et je doute fort que ArrayCopy() contienne la même boucle que celle de l'utilisateur. Ainsi, ayant un certain tableau avec une certaine taille, il est décalé de 1 à chaque tick et ensuite copié dans le tampon de l'indicateur qui est affiché comme une ligne...


 
JRandomTrader #:

Cela ne fonctionnera pas dans ce code parce que le tampon de l'indicateur vit indépendamment de nous et que nous n'y organisons pas de tampon circulaire - il n'y a aucun moyen d'expliquer ce MT.

Je vois.

Eh bien, cela fonctionne - laissons-le fonctionner jusqu'à présent, pas encore de résultat, nous devons attendre nos "amis" du Pindos jusqu'à l'ouverture du marché, et ce n'est pas pour tout de suite.

Je vais voir ce que je peux arbitrer.

 
JRandomTrader #:

ou même

Et personne n'a remarqué le joint !

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 #:

Et personne n'a remarqué le joint !

Je ne le vois toujours pas.

 
Vitaly Muzichenko #:

Je ne vois toujours pas.

i doit être incrémenté à la fin de la boucle, après utilisation.

Mais vous pouvez également vérifier les dépassements de tableau à la fin de la boucle et au début de la suivante.

 
Alexey Viktorov #:

Qui vous a dit de telles bêtises ?

Lisez attentivement comment cela se passe.


Je ne savais pas que cette fonction était si universelle. Mais même si c'est le cas, quelle différence cela fait-il ? ArrayCopy déplacera les données plus rapidement qu'une boucle normale ?

 
Vitaly Muzichenko #:

Le code fonctionne maintenant, mais il y a des doutes sur la vitesse à cause de la boucle.

Qu'est-ce que ce sera ?

Je veux tester quelques cuisines pour la possibilité d'arbitrage, l'indicateur va dessiner la différence des valeurs, fonctionne sur le timer une fois par 100ms. Les délais d'exécution du code sont critiques dans cette situation.

Alors je ne sais pas. Essayez ArrayCopy. La fonction semble être capable de déplacer les données. Mais elle ne le fera guère plus vite qu'une boucle habituelle. Eh bien, qui sait... Vous devez l'essayer.

 
Mihail Matkovskij #:

Alors je ne sais pas. Essayez ArrayCopy. La fonction semble être capable de déplacer les données. Mais il est peu probable qu'elle le fasse plus rapidement qu'une boucle normale. Eh bien, qui sait... Vous devez l'essayer.

Je ne sais pas par où commencer

Raison: