Erreurs, bugs, questions - page 1233

 
La question concernant l'erreur 4806 "Pourquoi la fonction CopyBuffer placée dans un indicateur personnalisé entraîne-t-elle l'erreur 4806 ?

alors que la même fonction avec les mêmes paramètres dans le code EA fonctionne bien ? "

mon code fonctionne à partir du débogueur, mais ne fonctionne pas en mode normal (ou plutôt, il fonctionne parfois et je n'ai pas pu établir un schéma simple expliquant pourquoi il fonctionne et pourquoi il ne fonctionne pas)

pourquoi avons-nous besoin d'indicateurs comme iXXX, s'ils ne peuvent pas être utilisés normalement ?

 
tyn:
La question concernant l'erreur 4806 "Pourquoi la fonction CopyBuffer placée dans un indicateur personnalisé entraîne-t-elle l'erreur 4806 ?

alors que la même fonction avec les mêmes paramètres dans le code EA fonctionne bien ? "

mon code fonctionne sous le débogueur, mais il ne fonctionne pas en mode normal (en fait, il fonctionne parfois et je n'ai pas pu établir le schéma simple pourquoi il fonctionne et pourquoi il ne fonctionne pas)

Pourquoi avons-nous besoin d'indicateurs de type iXXX s'ils ne peuvent être utilisés correctement ?

Après-midi. Les données du CopyBuffer proviennent du même TF dans lequel votre indicateur est exécuté ?

Avez-vous essayé d'utiliser la fonction BarsCalculated() pour résoudre le problème ?

 
marketeer:
Dans la POO MQL, comment vérifier si un pointeur est membre d'une certaine classe - comme instanceof en JavaScript ou typeid en C++ ?
CObject *ob;
datetime t;

typename(ob); // CObject
typename(t);  // datetime
Документация по MQL5: Основы языка / Объектно-ориентированное программирование / Шаблоны функций
Документация по MQL5: Основы языка / Объектно-ориентированное программирование / Шаблоны функций
  • www.mql5.com
Основы языка / Объектно-ориентированное программирование / Шаблоны функций - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Puis-je définir ma propre valeur (qui s'affiche) pour l'étiquette de prix au lieu du prix auquel elle est fixée ? Si oui, comment ?
 
Tapochun:

Bon après-midi. Les données de CopyBuffer proviennent-elles du même TF que celui où s'exécute votre indicateur ?

Avez-vous essayé d'utiliser la fonction BarsCalculated() pour résoudre le problème ?

Merci pour la question. J'ai pris les données de l'iATR sur D1 ; l'indicateur principal fonctionne sur des périodes plus petites, BarsCalculated() renvoie également -1 et la même erreur. Comme je le devine, il y a une fonction mais pas d'indicateur (en cours d'exécution). Si je crée un indicateur dans une autre fenêtre sur le même outil, tout fonctionne. En mode débogage, cela fonctionne aussi. Mais ma question est la suivante : est-ce un bug ou je ne comprends pas quelque chose ?
 

Bon après-midi.

Problème avec les appels de fonction de la dll système. La tâche consiste à écrire un simple serveur TCP en MQL5, qui fonctionne sur un certain port et ne fait que recevoir des messages.

Fonctions importées de ws2_32.dll WSAStartup(), WSAClenup(), socket(), bind(), accept(), listen(), recv(). Tout fonctionne exactement jusqu'à ce que vous essayiez d'arrêter le serveur. Lorsque j'essaie d'arrêter le serveur et de terminer le script correctement, le terminal se ferme tout simplement.

Depuis lors, la fonction recv() est utilisée comme méthode scientifique.

Dans le fichier joint, il y a une ligne (171) :

  int bytesCnt = recv(clientSocket, rcvBuffer, RCVBUFFSIZE, 0);

s'il est configuré pour ressembler à ça :

  int bytesCnt = 10; //recv(clientSocket, rcvBuffer, RCVBUFFSIZE, 0);

alors le serveur s'arrête sans aucune erreur. Je regardais des exemples d'utilisation des fonctions de mise en réseau sur MSDN et je faisais tout par analogie.

Quelqu'un a-t-il une idée de la façon de résoudre ce problème ?

Dossiers :
 
tyn:
Merci de demander. J'ai pris les données de l'iATR sur D1 ; l'indicateur principal fonctionne sur des périodes plus petites, BarsCalculated() renvoie également -1 et la même erreur. Comme je le devine, il y a une fonction mais pas d'indicateur (en cours d'exécution). Si je crée un indicateur dans une autre fenêtre sur le même outil, tout fonctionne. En mode débogage, cela fonctionne aussi. Mais ma question est la suivante : est-ce un bug ou je ne comprends pas quelque chose ?

J'ai moi-même été confronté à ce problème récemment. Je l'ai résolu, je ne sais pas si c'était optimal, mais je l'ai résolu. Seules les données ont été prises sur iFractals, mais cela n'a pas d'importance. Pourquoi ai-je demandé à propos du TF ? D'après mes observations, la chose suivante se produit. Par exemple, l'indicateur fonctionne à M15. Si les données de l'indicateur sont demandées de M1 à M15 - tout va bien, les données sont disponibles au moment où elles sont demandées (si ce n'est pas au premier appel). Si les données sont demandées à partir de M30 (je répète, l'indicateur fonctionne sur TF M15), alors au moment de la demande il n'y a pas de données sur M30 pour une nouvelle bougie (soit nous avons besoin d'une demande préliminaire, soit les données sont retardées par le tick). J'ai résolu le problème de la manière suivante. Je me souviens du résultat de BarsCalculated() sur la bougie actuelle. Dès que la prochaine fois BarsCalculated() renvoie la valeur 1 de plus (une nouvelle bougie est apparue), nous nous souvenons de la nouvelle valeurde BarsCalculated() et copions les données. Mais ce moment (lorsque les données de l'indicateur apparaissent sur la TF supérieure) ne coïncide pas avec la formation d'une nouvelle bougie dans la TF actuelle.

Oui,BarsCalculated() renvoie -1 lorsqu'il n'y a pas de données du tout, cela se produit, pour autant que je sache, uniquement lors de la première exécution. C'est-à-dire, lorsque vous obtenez le manche de l'indicateur et que vous demandez immédiatement des données. Vous devez également attendre.

 

Immédiatement après la création de la poignée de l'indicateur, les données ne peuvent pas être interrogées car elles ne sont pas prêtes. Le processus d'initialisation et de recalcul est complexe et dépend de nombreux facteurs.

La stratégie correcte consiste à créer un handle dans oninit et à travailler avec les données lorsque le premier tick arrive.

 
Renat:

Immédiatement après la création de la poignée de l'indicateur, les données ne peuvent pas être interrogées car elles ne sont pas prêtes. Le processus d'initialisation et de recalcul est complexe et dépend de nombreux facteurs.

La stratégie correcte consiste à créer un handle dans oninit et à travailler avec les données lorsque le premier tick arrive.

Alors cette question. Si l'indicateur est lancé sur M15. Une nouvelle bougie est formée. Lorsque vous demandez des données pour M15 et M30, doivent-elles être disponibles en même temps ?
 
Tapochun:
Alors cette question. Si l'indicateur fonctionne sur M15. Une nouvelle bougie est formée. Lorsque vous demandez des données pour M15 et M30, doivent-elles être disponibles en même temps ?

Oui.

Après avoir créé un indicateur(en l'incluant dans le cycle de traitement normal) et être entré dans le cycle de traitement normal des tics (ontik), les données seront disponibles avec une forte probabilité. Mais n'oubliez pas qu'il n'y a aucune garantie en raison de l'historique possible du téléchargement pour d'autres symboles.

C'est-à-dire qu'il faut toujours vérifier les résultats des demandes de données d'indicateurs. Si vous demandez les données dans l'ontika et qu'elles ne sont pas disponibles, sortez immédiatement pour vérifier le prochain tick.

Ne commettez pas l'erreur typique "tout est toujours prêt, je ne pense pas aux processus techniques de livraison et de calcul des données, cela ne devrait pas me concerner, j'ai toujours de la chance". Mettez toujours en œuvre une logique d'initialisation et un contrôle des données paresseux.

Veillez à tester vos programmes sur une base graphique vide. Il suffit généralement de redémarrer le terminal avec une base de données historique effacée manuellement pour obtenir diverses erreurs d'accès sur un mauvais index ou une division par zéro.

Si vous avez une barre m15 sur un symbole, alors il y a certainement une barre m30 sur le même symbole.