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

 

Pourquoi ai-je des prix de clôture incorrectement copiés à partir d'un moment spécifié avec une quantité spécifiée. MQL5

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

Pourquoi ai-je des prix de clôture incorrectement copiés à partir d'un moment spécifié avec une quantité spécifiée. MQL5

Où dans mql5 avez-vous trouvé Time[] ou est-ce un tableau personnalisé ?

 
Alexey Viktorov:

Et où dans mql5 avez-vous trouvé Time[] ou est-ce un tableau personnalisé ?

Oui, il s'agit d'un tableau personnalisé, dans lequel j'ai copié les heures d'ouverture des barres de l'intervalle de temps dans lequel se trouve l'indicateur. Ou comment spécifier autrement la date (surtout si l'on considère qu'à l'avenir elle devra être combinée de plusieurs façons) ?

 
Alexandr Sokolov:

Oui, il s'agit d'un tableau personnalisé, dans lequel j'ai copié les heures d'ouverture des barres de l'intervalle de temps dans lequel se trouve l'indicateur. Ou comment spécifier autrement la date (d'autant plus qu'à l'avenir, elle devra être combinée de plusieurs manières) ?

Oui, il y a quelque chose de mal à copier la TF de "quelqu'un d'autre". J'ai commencé un indicateur pour severalfolds et j'ai remarqué que CopyRates() n'est pas immédiatement copié. Apparemment, c'est à cause de données non préparées par période. Il suffit de le recompiler pour régler la situation. Il s'avère que nous devons d'abord "tirer" la période, puis copier. Mais je ne l'ai pas encore fait. Je le vérifierai demain. Mais j'espère que j'ai raison.

Et une énigme pour moi : pourquoi copier les heures d'ouverture des barres dans la fenêtre de la trame temporelle dans laquelle se trouve l'indicateur, si time[] peut être utilisé à la place. Et il ne faut pas oublier la direction de l'indexation.

 
Alexey Viktorov:

Et une petite question : pourquoi copier l'heure d'ouverture des barres dans la fenêtre timeframe où se trouve l'indicateur, si on peut utiliser time[] à la place. Et n'oubliez pas la direction de l'indexation.

Le temps est utilisé en dehors de OnCalculate. Direction d'indexation ArraySetAsSeries(...,true) dans tous les buffers


C'est pour quoi faire ? - J'ai fait un indicateur de tendance (posté dans CodeBase), il est "bruyant". J'ai fait un ralentissement - pas assez. Maintenant, je veux que les valeurs de chaque bougie de l'échelle de temps inférieure soient calculées à partir des barres de l'échelle de temps supérieure

Qu'entendez-vous par "yank" ?

 
Alexandr Sokolov:

Le temps est utilisé au-delà de OnCalculate. Direction d'indexation ArraySetAsSeries(...,true) dans tous les buffers


A quoi ça sert ? - J'ai fait un indicateur de tendance (posté dans CodeBase), il est "bruyant". J'ai fait un ralentissement - pas assez. Maintenant, je veux que les valeurs de chaque bougie de l'échelle de temps inférieure soient calculées à partir des barres de l'échelle de temps supérieure.

Que voulez-vous dire par "tirer" ?

"Yank" n'est pas mon expression. C'est ainsi que je lis sur ce forum la référence périodique aux données de la période souhaitée.

Je me souviens que même moi, j'étais en colère parce que ça ne marchait pas, je m'exprimais en "tirant sur la période comme un chat par le derrière", mais ça ne marche pas. Après de nombreuses discussions sur le problème, j'ai enveloppé la copie dans une boucle do while. S'il a copié du premier coup, Dieu merci. Si ce n'est pas le cas, nous lui donnons N essais via une boucle for vide pour 200-500 itérations, ce qui semble être suffisant. Nous pouvons aller plus loin...

Et cet indicateur, dont j'ai parlé un peu plus tôt, en est encore au stade du tout début. C'est pourquoi ce n'est pas fait correctement. Je vérifiais juste combien de barres de tf élevé j'ai besoin pour les barres disponibles de la période actuelle. Je me suis retrouvé avec 17 barres quotidiennes pour 5000 barres M5. Et si vous ne tenez pas compte de cela, alors 5000 périodes M5 actuelles, 5000 4h et 5000 quotidiennes sont copiées. Trop d'extra...

Autre remarque importante : il y a quelque temps, nous pouvions inverser l'indexation d'un tableau une fois, maintenant nous devons le faire à chaque éternuement. J'ai déjà écrit sur ce sujet quelque part. C'est pourquoi je préfère travailler avec l'option par défaut. Il n'est pas difficile de s'y habituer.

 

Par défaut, GlobalVariable ne peut être que double.

double close = GlobalVariableGet("close");


Si je veux une valeur proche sans partie fractionnaire, serait-il correct de l'écrire comme ceci :

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

"Yank" n'est pas mon expression. C'est ainsi que je lis la référence périodique aux données de la bonne période sur ce forum.

Je me souviens que même moi, je me suis mis en colère parce que ça ne marchait pas, m'exprimant en "tirant la période comme un chat par sa place causale", mais ça ne sert à rien. Après de nombreuses discussions sur le problème, j'ai enveloppé la copie dans une boucle do while. S'il a copié du premier coup, Dieu merci. Si ce n'est pas le cas, nous lui donnons N essais via une boucle for vide pour 200-500 itérations, ce qui semble être suffisant. Nous pouvons augmenter...

Et cet indicateur que j'ai mentionné plus tôt n'en est qu'à ses débuts. C'est pourquoi il n'est pas fait correctement. Je vérifiais juste combien de barres de tf élevé j'ai besoin pour les barres disponibles de la période actuelle. Je me suis retrouvé avec 17 barres quotidiennes pour 5000 barres M5. Et si vous ne tenez pas compte de cela, alors 5000 périodes M5 actuelles, 5000 4h et 5000 quotidiennes sont copiées. C'est beaucoup d'extra...

Autre remarque importante : il y a quelque temps, nous pouvions inverser l'indexation d'un tableau une fois, maintenant nous devons le faire à chaque éternuement. J'ai déjà écrit sur ce sujet quelque part. C'est pourquoi je préfère travailler avec l'option par défaut. Il n'est pas difficile de s'y habituer.

Attends, est-ce qu'on a raté quelque chose ou est-ce qu'on s'est mal compris, parce que

Alert(copied);

... ...il renvoie 5, ce qui est correct, mais les valeurs dans le tampon sont toutes les mêmes.

 
Alexandr Sokolov:

Attends, est-ce qu'on a raté quelque chose ou est-ce qu'on s'est mal compris, parce que

... Je renvoie 5, ce qui est correct, mais les valeurs dans le tampon sont toutes identiques.

Ensuite, nous devons comprendre la dimension du tableau MPI et sa direction d'indexation, si vous copiez 5 éléments, pourquoi faire un cycle jusqu'à 100 ?

Je préfère utiliser le débogueur dans de tels cas. Récupérer un tableau et vérifier tous les champs du tableau sans redémarrer...

 
Alexey Viktorov:

Ensuite, nous devons tenir compte de la taille du tableau MPI et de la direction de l'indexation. Si vous copiez 5 éléments, pourquoi le cycle à 100 ?

Je préfère utiliser le débogueur dans de tels cas. Récupérer un tableau et vérifier tous les champs du tableau sans redémarrer...

Je l'ai réglé sur 100 parce que je pensais que ça commencerait à 59, mais c'est pareil à 6.

Raison: