[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 544

 
Vinin:

Damit die Funktion init() funktioniert, gibt es zeitliche Beschränkungen
Ich ziehe mindestens ein Dutzend Werte aus der Marktumgebung in meinem EA in init(). In der Anfangsphase gab es manchmal Probleme - jetzt funktioniert alles. Dies ist meine persönliche Erfahrung - ich erhebe nicht den Anspruch, eine Regel zu sein. ;)
 
silhouette:

Bitte helfen Sie mir, das Problem der Divergenzfindung bei den Oszillatoren richtig zu verstehen. In diesem Fall sollte es der MACD sein. Ich habe den folgenden Algorithmus skizziert:

1) Zählen Sie die Balken von Anfang an und achten Sie auf die Spitzenwerte des Oszillators:

2) Erstellen Sie Arrays mit Spitzenzeiten:

und tragen in sie den MACD[i]-Wert ein, wenn die Bedingung erfüllt ist. Die letzte neue Spitze muss den Index [n] und die vorletzte Spitze den Index [n+1] haben;

3) Betrachten wir eine weitere Lösung unter Situation (1):

Das eigentliche Problem bei Punkt 2: Wie kann man ein solches Array wie bei einer Zeitreihe so organisieren, dass sich die Werte bei jedem neuen Höchststand verschieben?


Bitte um Hilfe!
 
paladin80:

Habe beschlossen, ein wenig in deinem Code herumzustochern...


Ich bin Ihnen sehr dankbar, dass Sie meinen Code analysiert haben. Danke, dass Sie sich die Zeit dafür genommen haben.

Ich fange gerade erst an, das Programmieren zu lernen, daher sind diese Kommentare sehr wichtig und werden in Zukunft hilfreich sein.

Nun zur Sache:

if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {   if(OrderSymbol() != Symb) continue;
          if(OrderMagicNumber() != 777) continue;
          return;
      }
   }
}

In diesem Formular wird die vollständige Suche nach Aufträgen durchgeführt, und die weitere Analyse erfolgt anhand der offenen Aufträge (hier ist alles klar)

Symb=  Symbol();
...
Min_Lot= MarketInfo(Symbol(),MODE_MINLOT);
...
Steep=   MarketInfo(Symbol(),MODE_LOTSTEP);

Dieser Teil des Codes wurde ebenfalls geändert, aber Forumsteilnehmer schreiben, dass die Marktumgebung für die Funktion init() nicht immer verfügbar ist.

Einige Variablen sind vielleicht nicht definiert oder ich habe etwas falsch verstanden?

Ich verstehe die Logik dieses Beitrags nicht - (ich erkläre meine Sichtweise dieses Betreibers)

while(true)
...

Ich habe einen Fehlerbehandlungsblock.

if (Fun_Error(GetLastError())==1)      // Обработка ошибок
continue;                              // Повторная попытка

Wenn der Fehler korrekt ist, versuchen wir erneut, die Bedingungen zu prüfen und die Bestellung zu öffnen.

Und der while-Operator funktioniert, wenn sein Wert wahr ist, d.h. er akzeptiert kein false.

Ich danke euch für eure Hilfe.

 
silhouette:

Bitte um Hilfe!


Lesen Sie hier:https://www.mql5.com/ru/articles/1357 Es ist einfach und unkompliziert

 
r772ra:


Lesen Sie hier:https://www.mql5.com/ru/articles/1357 Es ist einfach und unkompliziert

Ich danke Ihnen!
 
Guten Tag, bitte helfen Sie mir, ich kann nicht Feinabstimmung meiner Expert Advisor (Öffnen und Schließen von Aufträgen nicht funktionieren, wie erforderlich (durch Überschreiten Stochastik jedes Mal), öffnen Sie auf Stochastik sehr selten und ich kann nicht verstehen, warum ((((), auch alle Aufträge sind nur auf stoploss oder takeprofit (Fehler Ticket-Nummer, kann auch nicht verstehen, wo der Fehler).Vielen Dank für jede Antwort:
 
Vinin:
Vergessen Sie nur nicht, dass das Marktumfeld in init() nicht immer verfügbar ist.
Ehrlich gesagt war ich von dieser Nachricht sehr angetan. Ich habe versucht, mir vorzustellen, unter welchen Bedingungen das Marktumfeld nicht verfügbar sein könnte: vielleicht ein Verbindungsfehler zum Zeitpunkt der Aktivierung des EA oder wenn Sie den EA am Samstag oder Sonntag ausführen. Ich habe bei meinem Gerät keine derartigen Probleme festgestellt. Einerseits sagen sie, dass es möglich ist, in init() eine Schleife zu machen, um einen Wert zu finden, aber ich weiß, dass init() zeitlich begrenzt ist. Vielleicht ist es besser, zu Beginn von start() bei Erscheinen eines neuen Balkens (zumindest bei M1) Werte aus dem Marktumfeld zu finden, als bei jedem Tick.
 
Pacman:


Ich bin Ihnen sehr dankbar, dass Sie meinen Code analysiert haben. Danke, dass Sie sich die Zeit dafür genommen haben.

...

Und die while-Anweisung funktioniert, wenn ihr Wert wahr ist, d.h. es stellt sich heraus, dass sie kein false annimmt.

In while sollten Sie eine Bedingung einfügen, die mindestens zwei Werte annehmen kann, z. B. flag (wahr oder falsch). Wenn der Code statt einer Bedingung eine Konstante (true) enthalten soll, ist while nutzlos. Entfernen Sie while (true) und die Klammern und Sie erhalten das gleiche Ergebnis.
 
Frage für Kenner. In der OrderSend()-Hilfe wird der Schlupf mit 3 angegeben, z. B. bei 4-stelligen Kursen. Können wir bei 5-stelligen Anführungszeichen 3 lassen oder brauchen wir 30?
 
paladin80:
Frage für Expert Advisors. Die OrderSend() anstelle von Slippage ist 3. Ist sie z.B. für 4-stellige Quotes? Kann ich bei 5-stelligen Anführungszeichen 3 lassen oder brauche ich 30?

Für 5-stellige Ziffern benötigen Sie 30.

Ich füge eine solche Konstruktion in init() eines jeden EA ein, dann macht es keinen Unterschied für 4 oder 5 Stellen DT, ich empfehle es:

  if (Digits==3 || Digits==5){myPoint=Point*10; slpg=slpg*10;}
  else myPoint=Point; 
Grund der Beschwerde: