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

 

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. En exécutant OnDeinit et OnInit, l'objet global de la classe change (rechargement complet).

Pouvez-vous me dire comment éviter le redémarrage complet d'EA lors d'une reconnexion (par exemple manuelle) ?

Je ne comprends pas pourquoi tout est remis à zéro lors du relogging. Est-ce un défaut ?

 
fxsaber:

Cela fonctionne, mais vous pouvez suggérer une macro appropriée.

Si vous ne vous souciez guère de la qualité de votre artisanat, alors je m'en soucie encore moins.

 
Vict:

Si vous ne vous souciez guère de la qualité de votre artisanat, alors je m'en soucie encore moins.

C'est ici que vous écrivez sur les caractéristiques de MQL5.

 
fxsaber:

Ils écrivent ici sur les caractéristiques de MQL5.

Qui dit que c'est une fonctionnalité et non un B.U. ? Y a-t-il des informations dans les documents ? Dans la plupart des cas, UB est nécessaire pour donner la liberté au compilateur de faire toutes sortes d'optimisations. Quel sera le résultat dans différents cas dans le code réel - je ne sais pas, cela dépend de l'humeur de l'optimiseur. Il se peut que j'exécute ce code en croix également et que j'obtienne des résultats. Devrais-je alors me faire dire "regardez quelle particularité" ?

Je peux exécuter ce code en croix et obtenir quelques résultats, et on me dira alors : "regardez, quelle est la particularité" ?

 
Vict:

Qui dit que c'est une fonctionnalité et non un B.U. ? Y a-t-il des informations dans les docks ?

C'est là que tu écris sur des choses qui ne sont pas dans les docks. Sinon, le fil de discussion n'a pas lieu d'être.

 
fxsaber:

C'est là que tu écris sur des choses qui ne sont pas dans les docks. Sinon, le fil de discussion n'a pas lieu d'être.

Cela aurait du sens s'il y avait des commentaires des développeurs, mais sinon...

Donc, oui, c'est écrit dans docks : ordre d'exécution, - donc, tout semble être légal. Mais tout de même, étant donné que dans les plus est vraiment féroce ub, je voudrais m'assurer que la référence signifie vraiment exactement ordre d'exécution et non associativité des opérateurs.

 
fxsaber:

Pouvez-vous me dire comment éviter un redémarrage complet de l'EA lors de la reconnexion (par exemple manuellement) ?

Je ne comprends pas pourquoi tout est remis à zéro lors du relogging. Est-ce un défaut ?

J'ai eu la tâche de sauter certains calculs lors de la reconnexion, et de supprimer le conseiller expert lors du changement de compte. Tout a été résolu en un seul endroit.

Voici à quoi cela ressemble lorsque nous voulons simplement supprimer le conseiller expert lors du changement de compte.

string GetGlobalNameAccount( void )
{
  return(::MQLInfoString(MQL_PROGRAM_NAME) + (string)::ChartID() + "_Account");
}

void SaveAccount( void )
{  
  if (!::GlobalVariableSet(GetGlobalNameAccount(), CurrentAccount))
    ::Alert("GlobalVariableSet - ERROR!");
  
  return;
}

int LoadAccount( void )
{
  int Res = 0;
  
  const string Name = GetGlobalNameAccount();
    
  if (::GlobalVariableCheck(Name))
  {
    Res = (int)::GlobalVariableGet(Name);
    
    ::GlobalVariableDel(Name);      
  }
  
  return(Res);
}

const int CurrentAccount = (int)AccountInfoInteger(ACCOUNT_LOGIN);
int PrevAccount = 0;

int OnInit( void )
{
  PrevAccount = LoadAccount();
  
  bool Res = !PrevAccount || (PrevAccount == CurrentAccount);
  
  if (Res)
  {
    // .....
  }
  else
    Alert("Account is changed! " + (string)PrevAccount + " -> " + (string)CurrentAccount);
    
  return(Res ? INIT_SUCCEEDED : INIT_FAILED);
}

void OnDeinit( const int Reason )
{
  if (Reason == REASON_ACCOUNT)
    SaveAccount();
}


La tâche la plus simple dans MQL5 me fait danser la subversion.

 
Vladimir Simakov:

Cela aurait un sens s'il y avait des commentaires des développeurs, mais sinon...

Donc, oui, les docs disent : ordre d'exécution, - donc, tout semble être légal. Mais tout de même, étant donné que dans les plus c'est vraiment le ub féroce, je voudrais m'assurer que l'aide signifie bien exactement ordre d'exécution et non associativité des opérateurs.

Veuillez ne pas jeter de détritus sur cette branche. Ce fil de discussion porte sur les fonctionnalités de MQL5, et non sur le C++.

 
Artyom Trishkin:

Veuillez ne pas jeter de détritus sur cette branche. Ce fil de discussion concerne les particularités de MQL5, et non du C++.

C'est bizarre, l'un écrit sur UB et l'autre lui fait aveuglément écho. Est-il possible que dans l'aide du MCL.

Remarque : La préséance des opérations dans MQL5 correspond à la préséance С++ et diffère de la priorité donnée dans le MQL4.

Et ce qui est appelé "Ordre d'exécution" dans le tableau est en fait appelé "associativité" et n'a aucun effet sur l'ordre d'évaluation, qui dans le cas général n'est pas défini.

Bon, tant pis, c'est une tâche ingrate, tout le monde ici est un putain d'expert, alors je ne m'impose pas.

 
Vict:
Attention : La priorité des opérations dans MQL5 correspond à l'ordre de priorité de l'opération. С++et diffère de la priorité donnée dans le MQL4.

Il est fort probable que cela ne s'applique qu'au mode non strict.

Des centaines de personnes ont écrit des trucs multiplateformes ici depuis des années.