Erreurs, bugs, questions - page 930

 
kPVT
Merci pour le conseil.
Veuillez partager vos expériences. Plus précisément :
1. Mécanisme de génération de noms uniques. Énumération directe des noms existants par auto-incrémentation ?
2. Mécanisme de vérification de l'authenticité des objets. C'est-à-dire qu'il ne faut pas seulement vérifier s'il existe un objet portant ce nom, mais aussi tous ses paramètres, par exemple les tailles, les types, le texte, etc. Dans un souci d'économie des ressources. Il est plutôt laborieux d'effectuer un nombre colossal de vérifications pour chaque propriété de chaque objet à chaque tic. Bien sûr, s'il y avait soit un blocage de l'objet contre toute modification extérieure (sauf pour le créateur de l'EA), soit un calcul du hachage de l'objet pour vérifier rapidement (en un "si") l'authenticité de l'objet.
 

Veuillez confirmer la reproduction de la situation avec l'absence de redécoupage des graphiques.

Vous trouverez ci-joint un simple expert. Conditions :

1. De 2013.01.07 à 2013.02.11. Très probablement non affecté.

2. test en mode visuel.

3. Lors du premier passage, réduisez la vitesse au minimum :

4. Lors de la prochaine exécution après l'initialisation, appuyez sur F12 (générer un tick).

Une autre condition très importante est que le terminal doit fonctionner en mode hors ligne. Pour une expérience propre, essayez de déconnecter l'ordinateur du réseau (déconnectez tous les adaptateurs réseau).

Observez.

1. Affichage tardif des valeurs de l'écart sur le graphique.

La fonction ChartRedraw ne fonctionne pas correctement ou ai-je fait quelque chose de mal ? Si vous déplacez le graphique avec la souris (en le déplaçant horizontalement (temps), il est redessiné correctement.

Dossiers :
1.mq5  4 kb
 
voix_kas:
kPVT
Merci pour le conseil.
Veuillez partager votre expérience. Plus précisément :
1. Mécanisme de génération de noms uniques. Énumération directe des noms existants par auto-incrémentation ?
2. Mécanisme de vérification de l'authenticité des objets. C'est-à-dire qu'il ne faut pas seulement vérifier s'il existe un objet portant ce nom, mais aussi tous ses paramètres, par exemple les tailles, les types, le texte, etc. Dans un souci d'économie des ressources. Il est plutôt laborieux d'effectuer un nombre colossal de vérifications pour chaque propriété de chaque objet à chaque tic. Bien sûr, s'il y avait soit un verrouillage de l'objet contre toute modification extérieure (à l'exception du conseiller-créateur), soit un calcul du hachage de l'objet pour vérifier rapidement son authenticité (en un seul "si").

Sans prétendre être vrai ou optimal.

1.vous pouvez utiliser la bibliothèque standard qui utilise un nombre aléatoire + le nom pour le nom de l'objet, par ex :18467RadioGroupItem0Button, 06334ClientBack. Et vous n'avez pas besoin de supprimer les objets vous-même.

Je ne me suis pas encore vraiment fait d'amis avec le biblio standard et je le fais de cette façon, je n'ai pas eu de problèmes.

int nOBJ=0;//счетчик однотипных объектов
int OnInit()
  {
   //уникальное имя на основе текущего времени в момент инициализации (в 36 системе для краткости, пример: MI7E9G)
   basedName=ULongTo36Base(TimeLocal());
   leftName="LeftBorder "+basedName;//имя для единичного объекта
   ObjectCreate(0,leftName,OBJ_VLINE,0,time,0);
   for(nOBJ=1;nOBJ<=100;nOBJ++)//создание 100 однотипных объектов
    ObjectCreate(0,(string)nOBJ+basedName,OBJ_TREND,0,time,price);
   return(0);
  }
void OnDeinit(const int reason)
  {
   for(int del=1; del<=nOBJ; del++)
      ObjectDelete(0,(string)del+basedName);
   ObjectDelete(0,leftName);
   return;
  }

Ici, la discrétisation sera de 1 seconde. Si vous ajoutez plusieurs indicateurs identiques à partir du modèle, les collisions se produiront. Dans ce cas, vous pouvez ajouter des paramètres d'indicateur à basedName, ou peut-être des millisecondes à TimeLocal(), un nombre aléatoire ou autre. En général, il existe des variantes.

2. l'authenticité de l'objet - son nom unique. Deux objets, même de types différents et portant le même nom, ne peuvent pas se trouver dans la même fenêtre graphique. Pourquoi devriez-vous vérifier toutes les propriétés de l'objet ? Expliquer.

Voulez-vous vérifier la modification manuelle des propriétés de l'objet? Il existe l'événementCHARTEVENT_OBJECT_CHANGE.

Pour contrôler la suppression accidentelle, lorsque vous accédez à un objet, vous devez vérifier son existence et le restaurer si nécessaire (d'ailleurs, il existe un événement de suppression d'objet - je ne l'utilise pas).


Si vous souhaitez toujours utiliser Comment pour éditer des informations formatées, vous pouvez, par exemple, spécifier la longueur requise de la chaîne et, connaissant cette longueur, insérer la description et la valeur du paramètre (en définissant leurs longueurs) aux bons endroits.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
voix_kas:
kPVT
Merci pour le conseil.
Veuillez partager vos expériences. Plus précisément :
1. Mécanisme de génération de noms uniques. Énumération directe des noms existants par auto-incrémentation ?
2. Mécanisme de vérification de l'authenticité des objets. C'est-à-dire qu'il ne faut pas seulement vérifier s'il existe un objet portant ce nom, mais aussi tous ses paramètres, par exemple les tailles, les types, le texte, etc. Dans un souci d'économie des ressources. Il est plutôt laborieux d'effectuer un nombre colossal de vérifications pour chaque propriété de chaque objet à chaque tic. Bien sûr, s'il y avait soit un verrouillage de l'objet contre toute modification extérieure (sauf EA du créateur), soit un calcul du hachage de l'objet pour FAST (en un "si"), l'objet serait vérifié pour son authenticité.
Peut-être que ceci pourrait aider : regarder le marché à travers des classes prêtes à l'emploi.
 

kPVT

Merci pour le conseil. Je vais essayer d'utiliser CHARTEVENT_OBJECT_CHANGE pour le contrôler.

Dima_S

Merci. Mais je ne vois pas l'utilité d'utiliser des classes standard.

Très aimablement, veuillez tester la fonction ChartRedraw en utilisant un simple Expert Advisor prêt à l'emploi dans mon post précédent. Malheureusement, pour une raison quelconque, il donne un tick de retard. C'est-à-dire que dans l'exemple, la valeur de l'écart est indiquée pour le tick précédent, tandis que le traitement et la sortie se font au tick actuel.

 
voix_kas:

kPVT

Merci pour le conseil. Je vais essayer d'utiliser CHARTEVENT_OBJECT_CHANGE pour le contrôler.

Dima_S

Merci. Mais je ne vois pas l'utilité d'utiliser des classes standard.

Très aimablement, veuillez tester la fonction ChartRedraw en utilisant un simple Expert Advisor prêt à l'emploi dans mon post précédent. Malheureusement, pour une raison quelconque, il donne un tick de retard. C'est-à-dire que dans l'exemple, la valeur du spread est indiquée pour le tick précédent, alors que le traitement et la sortie se font au tick actuel.

Vous êtes les bienvenus. Si vous aviez lu l'article, vous auriez trouvé les réponses aux deux questions :))
 

Les programmes volumineux ne peuvent pas être téléchargés et installés à partir du Marché. Faites attention. La raison en est inconnue.

Il peut y avoir certaines restrictions. Il n'y a pas d'information officielle à leur sujet.

 

Pouvez-vous me donner un indice ?

1. un indicateur appelé à partir de ressources ne peut pas recevoir de paramètres d'entrée ?
2. Sinon, y a-t-il une possibilité et comment contourner cela (avec des béquilles) ?
 

C'est possible. C'est la même chose que iCustom().

handle=iCustom(_Symbol,_Period,"::Indicators\\Examples\\ZigZag.EX5",12,5,3);
 
Karlson:

C'est possible. C'est la même chose que iCustom().

Exactement, c'est possible. J'ai fait une erreur dans le code.

Merci.