Caractéristiques du langage mql5, subtilités et techniques - page 203

 
 

Nous étendons les séquences d'initialisation "{ ... }", dans la prochaine version, toute expression sera autorisée, pas seulement une constante.

Au lieu de ce changement, il y aura une restriction sur l'utilisation des constantes pour les énumérations (comme pour une expression normale) : si une constante ne fait pas partie d'une énumération, une erreur appropriée sera générée.

L'analyse des codes existants a montré que la séquence de zéro unique "{0}" est souvent utilisée de manière incorrecte.

Par exemple, comme ceci :

MqlTradeRequest request={0};


Une telle notation signifie que la valeur zéro est attribuée au premier champ de la structure et que les autres champs sont mis à zéro.

Pour la ligne de code ci-dessus, selon les nouvelles règles, il y aura une erreur puisque le premier champ a le type ENUM_TRADE_REQUEST_ACTIONS, une énumération qui n'a pas la valeur "0".

cannot convert 0 to enum 'ENUM_TRADE_REQUEST_ACTIONS'


La manière correcte serait :

MqlTradeRequest request={};
 
Ilyas:

C'est exact :

MqlTradeRequest request={};

Et alors, à quoi serait égale la requête.action ?

 
mktr8591:

Et alors, à quoi serait égale la requête.action ?

Zéro, bien sûr, comme si ZeroMemory était appelé pour l'objet de cette structure.

 

Comment garder la trace des séries chronologiques et des indicateurs basés sur celles-ci ?

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading

Bugs, bugs, questions

Slava, 2021.05.29 18:16

Je tiens à vous rappeler.

1. Pour chaque symbole, pour lequel au moins un graphique est ouvert, un thread séparé fonctionne pour traiter les ticks entrants. Plusieurs graphiques peuvent être ouverts pour un certain symbole, mais il n'y aura toujours qu'un seul fil.

2. Le fil des symboles gère les séries chronologiques, pas les graphiques. C'est-à-dire, les mêmes tableaux de données, qui sont soumis à la requête CopyRates.

3. il est inutile de demander à votre symbole dans OnTick ou OnCalculate, s'il est synchronisé. Bien sûr qu'elle l'est !

4. Toutes les séries chronologiques sont traitées dans l'ordre, du plus bas au plus haut. Nous appliquons d'abord le tick, puis le calcul de tous les indicateurs, créés à cette série temporelle. Si vous demandez des données pour le même symbole H1 à l'indicateur, qui travaille sur M1, vous n'obtiendrez jamais de données avec le tick appliqué. Les données seront toujours en retard d'un tick, peu importe les astuces que vous appliquerez. Parce qu'il y a un fil par symbole avec un traitement consécutif dans le temps.

5. La déclaration précédente ne s'applique pas aux EA et aux scripts, car ces derniers fonctionnent chacun dans leur propre fil conducteur.


 
Andrey Khatimlianskii:

Comment garder la trace des séries chronologiques et des indicateurs basés sur celles-ci ?

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading

Bugs, bugs, questions

Slava, 2021.06.01 06:34

Lors de la première demande, il se peut que l'indicateur ne reçoive pas les données de son symbole mais d'un autre cadre temporel pour une seule raison : la série temporelle requise n'a pas encore été construite ou a déjà été détruite après un certain temps, lorsqu'il n'y avait pas de demandes.

Après une demande infructueuse, il suffit d'envoyer une commande à votre graphique pour le mettre à jour et de mettre immédiatement fin à OnCalculate. Il est garanti que OnCalculate sera appelé et que la série chronologique sera prête à ce moment-là.

 

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégies de trading

Caractéristiques du langage mql5, subtilités et astuces

fxsaber, 2017.11.30 09:48

Mémo

Action/type de programme Changement de TF ou de symbole Changement de compte
Indicateur Exécution de OnDeinit et OnInit, modification de l'objet global de la classe (réinitialisation complète). Rien ne se passe sauf que prev_calculé est remis à zéro.
EA Exécuter OnDeinit et OnInit, l'objet global de la classe ne change pas. Exécution de OnDeinit et OnInit, modification de l'objet global de la classe (rechargement complet).
Le comportement des indicateurs mis en évidence a changé. Il est maintenant identique à l'EA.
 
fxsaber:
Le comportement de l'indicateur mis en évidence a changé. Il coïncide maintenant avec l'EA.

Le point est différent - pourrait-il s'agir d'un oubli plutôt que d'un changement délibéré de comportement ? Tu l'as découvert ?

 
Artyom Trishkin:

Le point est différent - pourrait-il s'agir d'un oubli plutôt que d'un changement délibéré de comportement ? Vous l'avez reconnu ?

Je ne l'ai pas fait. Le retour d'information est presque inexistant. Cependant, il y a une fonctionnalité que je viens de découvrir.

const bool Init = EventSetMillisecondTimer(1);
const long Account = AccountInfoInteger(ACCOUNT_LOGIN);

#define  TOSTRING(A) #A + " = " + (string)(A) + " "

void OnTimer()
{
  if (Account != AccountInfoInteger(ACCOUNT_LOGIN))
    Alert(TOSTRING(Account) + TOSTRING(AccountInfoInteger(ACCOUNT_LOGIN)));
}

Ce conseiller expert émet des alertes lors du passage d'un compte à l'autre. Il semblerait qu'il ne devrait pas le faire selon la règle.

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Caractéristiques du langage mql5, subtilités et astuces

fxsaber, 2017.11.30 09:48

Mémo

Action/type de programme Changement de TF ou de symbole Changement de compte
Indicateur Exécution de OnDeinit et OnInit, modification de l'objet global de la classe (réinitialisation complète). Rien ne se passe sauf que prev_calculé est remis à zéro.
EA Exécuter OnDeinit et OnInit, l'objet global de la classe ne change pas. Exécution de OnDeinit et OnInit, modification de l'objet global de la classe (rechargement complet).
Toutefois, cela est dû à la minuterie.
 
fxsaber:

Ce conseiller émet des alertes lorsqu'il passe d'un compte à l'autre. Il semblerait qu'elle ne devrait pas le faire, selon la règle

Cependant, cela se produit à cause de la minuterie.

Personne n'a garanti que les autres gestionnaires d'événements seront interrompus (ou ne seront pas exécutés).

Après l'alerte, deinit et init se produisent, non ?