[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 301

 
laveosa.,garder l'historique jusqu'à hier eurusdm1 télécharger via l'importation entre guillemets.
Dossiers :
eurusd1.zip  548 kb
 
J'ai essayé de vérifier un indicateur, j'ai mis les chiffres sur le graphique mais ils ne changent pas, je vais essayer de le dire d'une autre manière, j'ai besoin de l'indicateur ci-joint pour fixer le prix comme une croix qui se tient sur un zigzag ou une alerte ou une impression mais il se bloque sur la connexion.
Dossiers :
 

Une question pour les experts !

J'ai souvent des assistants dans mes EA. Afin de ne pas "encombrer" le code de moments répétitifs, comme :

double maFast = iMA(NULL, 0, i_maFastPeriod, 0, i_maMethod, i_maPrice, index);
double maSlow = iMA(NULL, 0, i_maSlowPeriod, 0, i_maMethod, i_maPrice, index);

De telles répétitions peuvent être de mise. Je voulais m'en débarrasser en écrivant des fonctions séparées.

Voici le début :

//+-------------------------------------------------------------------------------------+
//| Получаем машку с заданными параметрами                                              |
//+-------------------------------------------------------------------------------------+
double GetMA(double typeOfMA, int tf, int maPeriod, int maShift, int maMethod, int maApplied, int index)
{
   switch (typeOfMA)
   {
      case 1:      return (iMA(NULL, i_fastMATF, i_fastMAPeriod, i_fastMAShift, i_fastMAMethod, i_fastMAApplied, i_fastMAIndex));
      case 2:      return (iMA(NULL, i_slowMATF, i_slowMAPeriod, i_slowMAShift, i_slowMAMethod, i_slowMAApplied, i_slowMAIndex));
      case 3:      return (iMA(NULL, i_filtrMATF, i_filtrMAPeriod, i_filtrMAShift, i_filtrMAMethod, i_filtrMAApplied, i_filtrMAIndex));
   }
}
//+-------------------------------------------------------------------------------------+
//| Получаем сигнал от скользящих средних                                               |
//+-------------------------------------------------------------------------------------+
int GetStateOfMA()
{
   if (GetMA(1, i_fastMATF, i_fastMAPeriod, i_fastMAShift, i_fastMAMethod, i_fastMAApplied, i_fastMAIndex) > 
      GetMA(2, i_slowMATF, i_slowMAPeriod, i_slowMAShift, i_slowMAMethod, i_slowMAApplied, i_slowMAIndex))
      return (CROSS_UP);
}

Nous pouvons aller plus loin en déclarant des variables globales pour les lingettes, par exemple fastMA et slowMA, et les renvoyer par référence via la fonction :

GetMA(double typeOfMA, int tf, int maPeriod, int maShift, int maMethod, int maApplied, int index)

Vous obtiendriez quelque chose comme ça :

//+-------------------------------------------------------------------------------------+
//| Получаем машку с заданными параметрами                                              |
//+-------------------------------------------------------------------------------------+
double GetMA(double typeOfMA, int tf, int maPeriod, int maShift, int maMethod, int maApplied, int index, double& fastMA, double& slowMA)
{
   switch (typeOfMA)
   {
      case 1:      return (iMA(NULL, i_fastMATF, i_fastMAPeriod, i_fastMAShift, i_fastMAMethod, i_fastMAApplied, i_fastMAIndex));
      case 2:      return (iMA(NULL, i_slowMATF, i_slowMAPeriod, i_slowMAShift, i_slowMAMethod, i_slowMAApplied, i_slowMAIndex));
      case 3:      return (iMA(NULL, i_filtrMATF, i_filtrMAPeriod, i_filtrMAShift, i_filtrMAMethod, i_filtrMAApplied, i_filtrMAIndex));
   }
}
//+-------------------------------------------------------------------------------------+
//| Получаем сигнал от скользящих средних                                               |
//+-------------------------------------------------------------------------------------+
int GetStateOfMA()
{
   GetMA(double typeOfMA, int tf, int maPeriod, int maShift, int maMethod, int maApplied, int index, double& fastMA, double& slowMA);
   if (fastMA > slowMA)
       return (CROSS_UP);
   if (fastMA < slowMA)
       return (CROSS_DN);
   return (CROSS_NO);
}

La question est la suivante :

J'ai entendu ou lu quelque part que l'opérateur de commutation est lent, cela ne va-t-il pas affecter les performances de l'EA dans son ensemble dans ce cas ? En général, quelle est sa lenteur ?

Beaucoup de paramètres sortent ici, cela ne va-t-il pas ralentir un Expert Advisor ?

Je suis en train d'écrire et de réfléchir sur la productivité, donc la question se pose, comme je ne suis pas un programmeur de formation, de le comprendre moi-même, pas vraiment sort ...

 

Victor, l'appel de fonction est bien plus un frein qu'un interrupteur. Vous pouvez vérifier vous-même la vitesse. Ecrivez un code de test avec une boucle. Où vous allez vérifier votre code. Mesurez le temps à l'entrée. Puis comparez-la avec le temps de sortie.

L'opérateur d'aiguillage est l'un des opérateurs les plus rapides. C'est plus rapide que de courir à travers les conditions.

Le commutateur doit être utilisé avec un défaut sur les exceptions. Ainsi, en cas de condition incorrecte, vous saurez pourquoi le code ne fonctionne pas.

 

Hmm. Je suppose que vous ne pouvez pas utiliser une constante pour la casse comme une variable, selon la documentation. Il s'agit d'une sorte de constante cible, de constante de caractère ou d'expression de caractère.

Cela ne fonctionne que si vous définissez une lettre de type chaîne de caractères, c'est-à-dire 1 caractère (si plus d'un caractère, le compilateur jure) ou un nombre.

Rien d'autre.
Il indique quelques constantes de cible, expressions de caractères et constantes de caractères.

 

Où puis-je trouver des informations sur l'utilisation des variables globales du terminal avec des exemples pratiques ? Plus précisément, je veux que chaque conseiller expert ne négocie que sa part du dépôt et que son profit/lippage n'affecte pas les MM des autres conseillers experts.

 
Ekburg:

Bonjour à tous

Pouvez-vous m'indiquer quelle peut être la cause de l'erreur "shutdown by timeout", lorsque vous exécutez l'Expert Advisor dans le terminal et comment résoudre ce problème ?

 
[quote=Roman.]Changez la cuisine.[/quote]C'est ça le truc, ça ne semble pas avoir de rapport avec la cuisine : l'ordre de vente est dans le log de l'EA. bien sûr, vous pouvez supposer que le courtier a changé le code du distributeur MT4 téléchargé et corrige la direction de la transaction, mais ce serait trop impudent, je pense.
 
Puis-je joindre les codes des programmes au lieu de copier le code entier ici ? Où les administrateurs regardent-ils ?
 
hoz:

Hmm. Je suppose que vous ne pouvez pas utiliser une constante pour la casse comme une variable, selon la documentation. Il s'agit d'une sorte de constante cible, de constante de caractère ou d'expression de caractère.

Cela ne fonctionne que si vous définissez une lettre de type chaîne de caractères, c'est-à-dire 1 caractère (si plus d'un caractère, le compilateur jure) ou un nombre.

Rien d'autre.
Il indique quelques constantes de cible, expressions de caractères et constantes de caractères.

Seulement les constantes entières.