Auto-apprentissage du langage MQL5 à partir de zéro - page 80

 

Il y a des erreurs, donc le code ne fonctionnera pas comme l'auteur l'a prévu. Tu dois trouver une solution. Vous avez le code, vous avez les cartes en main.


D'après ce que vous avez montré, je vois que soit les bougies sont inférieures à 60, soit le handle d'un des indicateurs est INVALIDE, ce qui signifie que les paramètres lui sont envoyés de manière incorrecte. Ou bien il y a une erreur dans une autre partie du code que je ne vois pas.

Salutations, Vladimir.

Oups, Alexey ;)

 
MrBrooklin #:

J'ai réussi à trouver moi-même l'origine du problème, mais la question portait sur autre chose : qu'est-ce qui peut être affecté par ces erreurs et que dois-je changer dans le code pour les éliminer ?

Sincèrement, Vladimir.

Si une erreur se produit, le conseiller expert ne sera pas attaché au graphique.

Vous n'avez rien à faire. Ce qui a déjà été fait - en cas d'erreur, le conseiller expert est détaché du graphique.

et en informe l'utilisateur.

Cette erreur ne se produit pratiquement pas, sauf lorsque l'ordinateur est en panne.

==

Cependant, si cela se produit toujours pendant le processus de développement...

Cela signifie que l'indicateur n'est pas appelé correctement - corrigez les paramètres de l'indicateur.

 
Dmitry Fedoseev #:

Si l'erreur se produit, l'EA ne sera pas attaché au graphique.

Vous n'avez rien à faire. Ce qui a déjà été fait - en cas d'erreur, le conseiller expert se détache du graphique.

et en informe l'utilisateur.

Cette erreur ne se produit pratiquement pas, sauf lorsque l'ordinateur est en panne.

==

Cependant, si cela se produit toujours pendant le processus de développement...

Cela signifie que l'indicateur est appelé de manière incorrecte - corrigez les paramètres de l'indicateur.

Merci, Dmitry, pour votre réponse complète et compréhensible !

Salutations, Vladimir.

 
SanAlex #:

ici, ça marche - peut-être que vous ne mettez pas la période correctement.

Merci pour le tuyau ! !! En effet, le problème était que je ne pouvais pas définir les périodes pour les deux indicateurs à partir de "zéro" et plus dans les paramètres du testeur. J'aurais dû les fixer au moins à partir de "un" et plus.

Merci à tous pour votre participation !

Salutations, Vladimir.

 
MrBrooklin #:

P.S. Vous devriez supprimer le code "spoils" de l'EA, car ces "spoils" ennuient beaucoup de gens. J'ai déjà enlevé le mien.

Ceux qui sont très gênants laissent partir les bois en prenant périodiquement de l'agripaume ou de la teinture d'amanite tue-mouches.

Je n'aime pas non plus ces lacets, mais je ne les regarde pas.

 
Peu de gens veulent apprendre la langue. Pourquoi cela serait-il
 
Vladimir Baskakov #:
J'ai décidé d'apprendre cette langue, mais peu de gens ont commencé à l'apprendre. Pour quoi faire ?

Vladimir, c'est très simple. J'ai appris ce que j'avais besoin d'apprendre. Maintenant, je prends différents Expert Advisors et les développe pour mes propres besoins. La chose la plus importante est que maintenant je ne regarde plus MQL5 comme les caractères chinois, mais comme un logiciel normal. Un grand merci à tous les professionnels qui m'ont aidé dans mon auto-apprentissage !

Salutations, Vladimir.

 
MrBrooklin #:


Je préfère avoir un spoiler plutôt que de télécharger un fichier et de le coller dans mon bac à sable. )

 

Bonjour à tous et bonne humeur !

Poursuite de l'auto-apprentissage du langage de programmation MQL5. Le moment est venu où j'ai dû m'occuper de tableaux. J'ai décidé de calculer la taille du lot en fonction du risque spécifié dans les paramètres d'entrée. Je n'ai aucune erreur ou avertissement après la compilation, mais le code de la fonction ne fonctionne pas. Pouvez-vous me dire s'il vous plaît, où se trouve l'erreur ?

Salutations, Vladimir.

input double   Risk0=1.0;           //Риск (% от баланса)
.
.
.
.
input double   Risk9=1.0;           //Риск (% от баланса)

//+------------------------------------------------------------------+
//| Функция Money_Management рассчитывает размер лота в зависимости  |
//|  от риска, заданного во входных параметрах советника.            |
//+------------------------------------------------------------------+
double Money_Management()
  {
   static int Risk[];
   int Number=0;
//----+ Объвляем переменную для хранения размеров массивов переменных
   static int Size_ = 0;
//----+ Изменяем размер массивов переменных
   if(Number + 1 > Size_)
     {
      uint size = Number + 1;
      //---- Предварительно обнуляем ячейки массива
      Risk[Number] = false;
     }
   if(Risk[0] != Risk[Number])
     {
      Risk[Number] = Risk[0];
     }
   double Lots=AccountInfoDouble(ACCOUNT_MARGIN_FREE)*Risk[Number]/100000*10;
   Lots=MathMin(5,MathMax(0.1,Lots));
   if(Lots<0.1)
      Lots=NormalizeDouble(Lots,2);
   else
     {
      if(Lots<1)
         Lots=NormalizeDouble(Lots,1);
      else
         Lots=NormalizeDouble(Lots,0);
     }
   return(Lots);
  }
//+------------------------------------------------------------------+
 
MrBrooklin du langage de programmation MQL5. Le moment est venu où j'ai dû m'occuper de tableaux. J'ai décidé de calculer la taille du lot en fonction du risque spécifié dans les paramètres d'entrée. Je n'ai aucune erreur ou avertissement après la compilation, mais le code de la fonction ne fonctionne pas. Pouvez-vous me dire s'il vous plaît, où se trouve l'erreur ?

Sincèrement, Vladimir.

J'espère vraiment que vous ne l'avez pas écrit...

Voici une fonction qui fonctionne

/********************************************************************\
|   Calculate optimal lot size     Расчет объема лота                |
/********************************************************************/
double contractSize(double Lot)
 {
  double volume = Lot > 0.0 ? Lot : AccountInfoDouble(ACCOUNT_MARGIN_FREE)/10000,
         v = volume,
         volumeStep = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_STEP),
         minLot = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MIN),
         maxLot = SymbolInfoDouble(_Symbol, SYMBOL_VOLUME_MAX);
  v = round(volume/volumeStep)*volumeStep;
  return(fmin(maxLot, fmax(minLot, v)));
 }/******************************************************************/

Tout ce que vous devez faire est d'entrer le montant du risque, afin qu'il ne soit pas comptabilisé dans la marge libre totale...

Raison: