Die Sprache MQL5 von Grund auf selbst erlernen - Seite 80

 

Es gibt Fehler, so dass der Code nicht wie vom Autor beabsichtigt funktionieren wird. Sie müssen es herausfinden. Sie haben den Code, Sie haben die Karten in der Hand.


Aus dem, was Sie gezeigt haben, ersehe ich, dass entweder die Kerzen kleiner als 60 sind, oder dass das Handle eines der Indikatoren UNGÜLTIG ist, was bedeutet, dass die Parameter falsch an ihn gesendet werden. Oder es liegt ein Fehler in einem anderen Teil des Codes vor, den ich nicht sehe.

Mit freundlichen Grüßen, Vladimir.

Ups, Alexey;)

 
MrBrooklin #:

Ich konnte selbst herausfinden, wo das Problem liegt, aber die Frage bezog sich auf etwas anderes: Was kann von diesen Fehlern betroffen sein und was sollte ich im Code ändern, um sie zu beseitigen?

Mit freundlichen Grüßen, Vladimir.

Wenn ein Fehler auftritt, wird der Expert Advisor nicht an das Diagramm angehängt.

Sie brauchen nichts zu tun. Was bereits geschehen ist - im Falle eines Fehlers wird der Expert Advisor vom Chart abgekoppelt

und benachrichtigt den Benutzer.

Dieser Fehler tritt praktisch nicht auf, es sei denn, der Computer ist in einem Chaos.

==

Wenn dies jedoch immer während des Entwicklungsprozesses geschieht...

Dies bedeutet, dass der Indikator nicht korrekt aufgerufen wird - korrigieren Sie die Parameter des Indikators.

 
Dmitry Fedoseev #:

Wenn der Fehler auftritt, wird der EA nicht an das Diagramm angehängt.

Sie brauchen nichts zu tun. Was bereits geschehen ist - im Falle eines Fehlers löst sich der Expert Advisor vom Chart

und benachrichtigt den Benutzer.

Dieser Fehler tritt praktisch nicht auf, es sei denn, der Computer ist in einem Chaos.

==

Wenn dies jedoch immer während des Entwicklungsprozesses geschieht...

Das bedeutet, dass der Indikator falsch aufgerufen wird - korrigieren Sie die Parameter des Indikators.

Vielen Dank, Dmitry, für deine umfassende und verständliche Antwort!

Mit freundlichen Grüßen, Vladimir.

 
SanAlex #:

hier funktioniert es - vielleicht haben Sie den Punkt nicht richtig gesetzt

Danke für den Tipp!!! Das Problem war in der Tat, dass ich in den Einstellungen des Testers die Zeiträume für beide Indikatoren nicht von "Null" und höher einstellen konnte. Ich hätte sie mindestens auf "eins" und höher setzen sollen.

Ich danke Ihnen allen für Ihre Teilnahme!

Mit freundlichen Grüßen, Vladimir.

 
MrBrooklin #:

P.S. Sie sollten den EA-Code "spoils" entfernen, denn diese "spoils" ärgern viele Leute. Ich habe meine bereits entfernt.

Diejenigen, die sehr lästig sind, lassen Sie sie gehen Wälder regelmäßig mit Mutterkraut oder Tinktur von Fliegenpilz.

Ich mag diese Schnürsenkel auch nicht, aber ich schaue sie mir einfach nicht an.

 
Nicht viele Menschen wollen die Sprache lernen. Warum sollte das so sein?
 
Vladimir Baskakov #:
Ich habe beschlossen, die Sprache zu lernen, aber nicht viele Menschen haben damit begonnen. Und wozu?

Vladimir, es ist ganz einfach. Ich habe gelernt, was ich lernen musste. Jetzt nehme ich verschiedene EAs und mache sie für mich. Das Wichtigste ist, dass ich MQL5 jetzt nicht mehr als die chinesischen Schriftzeichen betrachte, sondern als ein normales Stück Software. Vielen Dank an alle Fachleute, die mir bei meinem Selbststudium geholfen haben!

Mit freundlichen Grüßen, Vladimir.

 
MrBrooklin #:


Ich habe lieber einen Spoiler, als eine Datei herunterzuladen und sie in meinen Sandkasten zu stecken. )

 

Guten Morgen allerseits und gute Laune!

Fortsetzung des Selbststudiums der Programmiersprache MQL5. Dann kam die Zeit, in der ich mich mit Arrays beschäftigen musste. Ich habe beschlossen, die Losgröße in Abhängigkeit von dem in den Eingabeparametern angegebenen Risiko zu berechnen. Nach der Kompilierung habe ich keine Fehler oder Warnungen, aber der Funktionscode funktioniert nicht. Können Sie mir bitte sagen, wo der Fehler liegt?

Mit freundlichen Grüßen, 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 der Programmiersprache MQL5. Dann kam die Zeit, in der ich mich mit Arrays beschäftigen musste. Ich habe beschlossen, die Losgröße in Abhängigkeit von dem in den Eingabeparametern angegebenen Risiko zu berechnen. Nach der Kompilierung habe ich keine Fehler oder Warnungen, aber der Funktionscode funktioniert nicht. Können Sie mir bitte sagen, wo der Fehler liegt?

Mit freundlichen Grüßen, Vladimir.

Ich hoffe sehr, dass Sie es nicht geschrieben haben...

Hier ist eine funktionierende Funktion

/********************************************************************\
|   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)));
 }/******************************************************************/

Alles, was Sie tun müssen, ist, den Risikobetrag einzugeben, so dass er nicht auf die volle freie Marge angerechnet wird...