Symboles personnalisés. Erreurs, bogues, questions, suggestions. - page 28

 

Il y a quelques jours, j'ai rencontré cette erreur lors de la création d'un symbole personnalisé. J'ai revérifié beaucoup de choses à la main. J'ai également remarqué un bogue très étrange : après ArrayCopy, certains ticks ont des valeurs aléatoires. Comme il était plutôt douloureux de le répéter sur une machine propre, j'ai généré à partir de moules un autre synthétique personnalisé, et l'attitude à l'égard des rapports ici ces derniers temps est particulière, à savoir l'ignorance complète, je n'ai pas commencé à faire un rapport. Mais j'ai résolu le problème avec un seul appel àCustomTicksAdd. C'est-à-dire que toutes les tics sont d'abord remplies dans un tableau, puis copiées manuellement et ensuite appelées par un symbole personnalisé. De cette façon, aucune erreur n'est signalée. Essayez-le.

P.S. Je dois ajouter que j'ai rencontré toutes sortes de bogues étranges avec CopyTicks, j'ai changé pour CopyTicksRange.

 
fxsaber:

J'ai regardé le code de plus près. Il vous manque des ticks quand vous recevez des portions. La situation est possible lorsque Ticks[Limit - 1].time_msc == Ticks[Limit + k], k >= 0.

De même, lorsque vous ajoutez un saut, les drapeaux peuvent ne pas correspondre.


Je l'omets intentionnellement dans ce test pour garantir l'absence de chevauchement, car l'étiologie du problème n'est pas encore claire, et il peut être causé par des tics dupliqués (par analogie avec Andrey, j'ai décidé d'exclure cette possibilité par une méthode "rapide et sale").

En ce qui concerne les drapeaux, veuillez préciser. Le contenu des ticks (y compris les drapeaux) ne change jamais, et je n'ai rien lu sur une quelconque influence des drapeaux sur la séquence des ticks. En tout cas, la description du code d'erreur ne dit rien sur les drapeaux.

 
Stanislav Korotky:

À propos des drapeaux, veuillez préciser. Personne ne modifie le contenu des ticks (y compris les drapeaux), et je n'ai rien lu sur une quelconque influence des drapeaux sur la séquence des ticks. Au moins, la description du code d'erreur ne dit rien sur les drapeaux.

Quant aux drapeaux, c'est une hypothèse. Il y a quelque temps, j'ai eu un problème avec eux, j'ai donc généré moi-même des drapeaux pour les tics externes avant de les envoyer.


Par exemple, après le premier tick, le prix de l'offre est différent, mais il n'y a pas de drapeau à ce sujet.

 

On ne comprend pas bien pourquoi cette ligne, si la variable _start avec ms incrémentée de un n'est pas utilisée ailleurs.
Et lorsque la fonction sort, elle est détruite.
D'après ce que je vois, le décalage horaire n'est utilisé ou mémorisé nulle part.
Et pourquoi assignez-vous quelque chose à cette variable _start, qui sert de variable d'entrée.
Elle renvoie cette valeur à la fonction while et il y a un blocage dans son utilisation.
Le code est donc plutôt confus et peu clair. Ou je ne comprends pas cette construction ;))

_start = array[size - 1].time_msc + 1;
 
Roman:

On ne comprend pas bien pourquoi cette ligne, si la variable _start avec ms incrémentée de un n'est pas utilisée ailleurs.
Et lorsque la fonction sort, elle est détruite.
D'après ce que je vois, le décalage horaire n'est utilisé ou mémorisé nulle part.
Et pourquoi assignez-vous quelque chose à cette variable _start, qui sert de variable d'entrée.
Elle renvoie cette valeur à la fonction while et il y a un blocage dans son utilisation.
Le code est donc plutôt confus et peu clair. Ou peut-être que je ne comprends pas cette construction))

Cette référence variable est lancée dans un paramètre de fonction "en place" du code appelant, change constamment et est utilisée dans des itérations.

 
fxsaber:

Sur les drapeaux - une hypothèse. Une fois, il y a eu un problème avec eux, donc pour les ticks de tiers, j'ai généré des drapeaux moi-même avant de les envoyer.


Par exemple, après avoir passé le premier tick, le prix de l'offre est différent, mais il n'y a pas de drapeau à ce sujet.

L'idée est claire. Mais sans l'explication de MQ, tout cela restera au niveau de nos spéculations (en termes d'influence possible sur l'apparition de telle ou telle erreur).

 
Stanislav Korotky:

Cette référence variable - jetée dans un paramètre de fonction "en place" du code appelant, changeant constamment et utilisée dans les itérations.

Oui, je n'ai pas fait attention à la référence, et j'ai voulu proposer pour cela, mais elle est là.
Essayez d'allouer explicitement une variable pour gagner du temps.

 

Nouveau mystère. Problème avec CopyTicks sur la build 2507, fonctionnait bien sur les anciennes builds (notamment 2374).

Je l'ai réduit à un simple script de test dans l'application. Il demande les nouveaux ticks depuis le sondage précédent.

Peu après le premier passage réussi de la boucle, le script commence à copier les ticks dans le tableau avec l'heure connue pour être antérieure à celle spécifiée dans le paramètre from, c'est-à-dire depuis le début du jour en cours.

Quel est le problème ?

Dossiers :
CopyTicks.mq5  1 kb
 
Stanislav Korotky:

Nouveau mystère. Problème avec CopyTicks sur la build 2507, fonctionnait bien sur les anciennes builds (notamment 2374).

Je l'ai réduit à un simple script de test dans l'application. Il demande les nouveaux ticks depuis le sondage précédent.

Peu après le premier passage réussi de la boucle, le script commence à copier les ticks dans le tableau avec l'heure connue pour être antérieure à celle spécifiée dans le paramètre from, c'est-à-dire depuis le début du jour en cours.

Quel est le problème ?

Je confirme le bug en 2509.

Cette variante ne semble pas échouer.

int size = CopyTicksRange(_Symbol, array, COPY_TICKS_ALL, cursor);
 
Ambiguïté avec les symboles personnalisés. Il est possible de créer deux symboles ne différant que par la casse des lettres (par exemple, "xEURUSD" et "XEURUSD"), mais l'ajout de guillemets à "duplicate" ne fonctionne pas - CustomRatesUpdate renvoie 0, sans erreur. Nous devons soit autoriser les noms sensibles à la casse (pour que ces caractères fonctionnent pleinement), soit ne pas autoriser la création de noms "similaires".