Erreurs, bugs, questions - page 1178

 

Comme ça :

   long cf=ObjectGetInteger(0,"name",OBJPROP_TIMEFRAMES);
   Alert(((cf&OBJ_PERIOD_H1)==OBJ_PERIOD_H1) || cf==0);
Si l'indicateur de visibilité sur H1 est activé, il sera vrai.
 
Integer:
Ensuite, vous devez lire le drapeau de visibilité et faire un & logique avec la constante.

Si tu veux dire :

ObjectGetInteger(0,"line",OBJPROP_TIMEFRAMES,OBJ_PERIOD_W1&OBJ_PERIOD_MN1,res);

Ou

ObjectGetInteger(0,"line",OBJPROP_TIMEFRAMES,OBJ_PERIOD_W1&&OBJ_PERIOD_MN1,res);
C'est la même chose.
 
svds75:

Si tu veux dire :

Ou

C'est la même chose.
Non. Il n'y a pas besoin de faire du get avec l'énumération. Il suffit d'obtenir, puis de vérifier si le drapeau du délai requis est activé. Voici un exemple.
 
svds75:

Si tu veux dire :

Ou

C'est la même chose.

Votre erreur ici est bool(res), puisque res est toujours plus grand que 1 dans n'importe quel mappage, voir ce qui est retourné dans res, donc bool(res) ne retournera 0 ou false que lorsque res=0.

Vous utilisez la conversion et la comparaison de types de manière inattentive.

OBJ_NO_PERIODS

0

L'objet n'apparaît à aucun moment

OBJ_PERIOD_M1

0x00000001

L'objet est représenté sur des graphiques de 1 minute

OBJ_PERIOD_M2

0x00000002

L'objet est représenté sur des graphiques de 2 minutes

OBJ_PERIOD_M3

0x00000004

L'objet est représenté sur des graphiques de 3 minutes

OBJ_PERIOD_M4

0x00000008

L'objet est représenté sur des graphiques de 4 minutes

OBJ_PERIOD_M5

0x00000010

L'objet est représenté sur des graphiques de 5 minutes

OBJ_PERIOD_M6

0x00000020

L'objet est représenté sur des graphiques de 6 minutes

OBJ_PERIOD_M10

0x00000040

L'objet est représenté sur des graphiques de 10 minutes

OBJ_PERIOD_M12

0x00000080

L'objet est représenté sur des graphiques de 12 minutes

OBJ_PERIOD_M15

0x00000100

L'objet est représenté sur des graphiques de 15 minutes

OBJ_PERIOD_M20

0x00000200

L'objet est représenté sur des graphiques de 20 minutes

OBJ_PERIOD_M30

0x00000400

L'objet est représenté sur des graphiques de 30 minutes

OBJ_PERIOD_H1

0x00000800

L'objet est représenté sur des graphiques de 1 heure

OBJ_PERIOD_H2

0x00001000

L'objet est représenté sur des graphiques de 2 heures

OBJ_PERIOD_H3

0x00002000

L'objet est représenté sur des graphiques de 3 heures.

OBJ_PERIOD_H4

0x00004000

L'objet est représenté sur des graphiques de 4 heures.

OBJ_PERIOD_H6

0x00008000

L'objet est représenté sur des graphiques de 6 heures.

OBJ_PERIOD_H8

0x00010000

L'objet est représenté sur des graphiques de 8 heures

OBJ_PERIOD_H12

0x00020000

L'objet est représenté sur des graphiques de 12 heures

OBJ_PERIOD_D1

0x00040000

L'objet est représenté sur des graphiques quotidiens

OBJ_PERIOD_W1

0x00080000

L'objet est représenté sur des graphiques hebdomadaires

OBJ_PERIOD_MN1

0x00100000

L'objet est tracé sur des graphiques mensuels

OBJ_TOUTES_PÉRIODES

0x001fffff

L'objet est représenté sur tous les horizons temporels

 
Integer:

Et voilà :

Si l'indicateur de visibilité sur H1 est activé, il sera vrai.
Ça marche, merci.
 
meat:

Dans la continuité de mon précédent post, j'ai réussi à trouver la zone problématique menant au bug en utilisant la méthode scientifique.

Nous avons une telle bibliothèque avec la fonction :

Voici le fichier principal :

Le conseiller expert résultant ne fonctionne pas et affiche dans le journal : "EX5 loading failed".

Merci pour le post, il a été corrigé.
 

Salut. J'ai verrouillé l'EA dans la fonction OnInit et cela doit être la raison pour laquelle le terminal se bloque lorsque je désactive l'EA et change de timeframe (le timeframe ne change pas après les freins). Ma question est donc la suivante : est-ce dû à des pendaisons ? Si c'est le cas, est-ce que cela se corrige si je déplace l'algorithme vers OnTick ? Si non, qu'est-ce qui pourrait aider ?

PS : La boucle a une fonction Sleep, afin que le terminal ne soit pas surchargé. Les champs de saisie sont lus dans la boucle.

 
king20:

Salut. J'ai verrouillé l'EA dans la fonction OnInit et cela doit être la raison pour laquelle le terminal se bloque lorsque je désactive l'EA et change de timeframe (le timeframe ne change pas après les freins). Ma question est donc la suivante : est-ce dû à des pendaisons ? Si c'est le cas, est-ce que cela se corrige si je déplace l'algorithme vers OnTick ? Si non, qu'est-ce qui pourrait aider ?

PS : La boucle a une fonction Sleep, afin que le terminal ne soit pas surchargé. Les champs de saisie sont lus dans la boucle.

Formatez le disque dur.
 
king20:

Salut. J'ai verrouillé l'EA dans la fonction OnInit et probablement à cause de cela le terminal se bloque lorsque je désactive l'EA et change de timeframe (le timeframe ne change pas après les freins). Ma question est donc la suivante : est-ce dû à des pendaisons ? Si c'est le cas, est-ce que cela se corrige si je déplace l'algorithme vers OnTick ? Si non, qu'est-ce qui pourrait aider ?

PS : La boucle a une fonction Sleep, afin que le terminal ne soit pas surchargé. Les champs de saisie sont lus dans la boucle.

OnInit - sert uniquement à l'initialisation. Tous les calculs doivent être effectués plus loin - OnTick, OnTimer etc.

Si vous avez besoin de connaître la modification du champ de saisie, il existe une bibliothèque standard pour cela : https://www.mql5.com/ru/docs/standardlibrary/controls/cedit.

Документация по MQL5: Стандартная библиотека / Классы для создания панелей и диалогов / CEdit
Документация по MQL5: Стандартная библиотека / Классы для создания панелей и диалогов / CEdit
  • www.mql5.com
Стандартная библиотека / Классы для создания панелей и диалогов / CEdit - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
king20:

Salut. J'ai verrouillé l'EA dans la fonction OnInit et cela doit être la raison pour laquelle le terminal se bloque lorsque je désactive l'EA et change de timeframe (le timeframe ne change pas après les freins). Ma question est donc la suivante : est-ce dû à des pendaisons ? Si c'est le cas, est-ce que cela se corrige si je déplace l'algorithme vers OnTick ? Si non, qu'est-ce qui pourrait aider ?

PS : La boucle a une fonction Sleep, afin que le terminal ne soit pas surchargé. Les champs de saisie sont lus dans la boucle.

La boucle doit se dérouler comme suit : while(true){} ? Oui ?

Cela devrait se passer comme suit : while(!isStopped()) {}. Mais cela causerait un autre problème - il s'arrêterait pour une raison inconnue. Cela devrait être fait dès le début. Si nous devons accélérer le démarrage, nous pouvons appeler startup depuis init.

Il est préférable de ne pas boucler du tout, maintenant qu'il y a un timer, nous devrions utiliser le timer.