Fragen von Anfängern MQL4 MT4 MetaTrader 4 - Seite 120

 
Ihor Herasko:

Ja, das kann ich sehen. Und ich sehe die Antwort auf diese Frage in dem Beitrag unterhttps://www.mql5.com/ru/forum/160587/page115#comment_6521492. Mit anderen Worten, das Problem besteht darin, dass die Funktionalität nicht in logische Teilaufgaben unterteilt ist. Sie haben die Abfrage von Aufträgen, die Entscheidung über Handelsaktionen und die Ausführung von Geschäften in einen Topf geworfen.

Eine solche Aufgabe lässt sich genau in drei Stufen lösen:

  1. Sammeln von Informationen über Aufträge, die vom Programm überwacht werden sollen. Dies ist nur die Schleife der Auftragsauswertung, die Sie bereits haben. Das Ergebnis dieses Zyklus muss die Reihe der Aufträge sein.
  2. Berechnung von Handelssignalen. Das Ergebnis der Berechnung ist ein Befehl zum Öffnen und/oder Schließen von Aufträgen. Das hängt von der Handelsstrategie ab. Früher, als es noch keine Aufzählung gab, habe ich folgende Codes verwendet: 0 - kein Signal, 1 - Kauf öffnen, -1 - Verkauf öffnen, 2 - Kauf schließen, -2 - Verkauf schließen.
  3. Ausführung einer Handelsoperation. Wenn ein Handelssignal vorliegt und einer der Aufträge (Punkt 1) darauf passt, wird eine Handelsoperation durchgeführt. Danach wird der gesamte Algorithmus von Punkt 1 an neu gestartet. In einigen Fällen wird OnTick sogar verlassen, um mit dem nächsten Tick fortzufahren.

Ich danke Ihnen. Zumindest ist es klar, was zu tun ist. Ich werde versuchen, selbst herauszufinden, "wie" man das macht. Allerdings bin ich mit Arrays noch nicht vertraut. Trotzdem nochmals vielen Dank.

 

Sagen Sie mir, wie ich da rauskomme!!!


for(int i=OrdersTotal()-1; i>=0; i--)

{

OrderSelect(i,SELECT_BY_POS);

if(OrderMagicNumber()==Magic && OrderType()==OP_SELL)

Pause;

Die Warnung lautet: Der Rückgabewert von 'OrderSelect' muss überprüft werden

Wiesolltedieser"OrderSelect"-Wertsonst überprüft werden?

wenn ich Folgendes tue: j=OrderSelect(); Ist das richtig?


 
Rewerpool:

Sagen Sie mir, wie ich da rauskomme!!!


for(int i=OrdersTotal()-1; i>=0; i--)

{

OrderSelect(i,SELECT_BY_POS);

if(OrderMagicNumber()==Magic && OrderType()==OP_SELL)

Pause;

Die Warnung lautet: Der Rückgabewert von 'OrderSelect' muss überprüft werden

Wiesolltedieser"OrderSelect"-Wertsonst überprüft werden?

wenn ich Folgendes tue: j=OrderSelect(); Ist das richtig?


 if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
 
Alekseu Fedotov:

Es hat nicht geklappt!(

((((

 
Ich habe in die Datei geschrieben, alles ist in Ordnung, aber wie speichere ich nun Daten wie "eurusd" "1.2242" temporäre Daten usw.?
 
Mickey Moose: Ich habe es in eine Datei geschrieben, alles ist in Ordnung, aber wie kann ich nun die Daten sparren, z.B. "eurusd" "1.2242" temporäre Daten usw.?

string s=FileReadString(F1); // Lesen der nächsten Zeile der Textdatei
StringSplit(s, "," , a); // Kommagetrennte Elemente in Array aufteilen
datetime T1=StrToTime(a[4]); // Weiter geht es mit der Transformation ...
int ord=StrToInteger(a[8]);
double Price=StrToDouble(a[12]);

 
novichok2018:

Ich danke Ihnen. Zumindest ist es klarer, was zu tun ist. Ich werde versuchen, das "Wie" selbst herauszufinden. Mit Arrays bin ich allerdings noch nicht vertraut. Wie auch immer, nochmals vielen Dank.

Schreiben Sie mindestens einen Block und zeigen Sie ihn mir. Sie werden Ihnen in diesem Fall weitere Informationen geben.

 
Rewerpool:

Hat nicht geklappt!(


Lesen Sie ihn noch einmal sorgfältig durch.

 if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

Der gesamte Code wird wie folgt aussehen

   for(int i=OrdersTotal()-1; i>=0; i--) 
     {
     if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
       if(OrderMagicNumber()==Magic && OrderType()==OP_SELL)
          {
         break;
          }
        }
      }
 
Rewerpool:

Es hat nicht geklappt!(


Sie haben also nichts getan. Sie haben es oben geschrieben:

if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

Und Sie haben es ohne Überprüfung geschrieben. Obwohl es so besser lesbar wäre:

for (int i = OrdersTotal() - 1; i >= 0; --i)
{
   if (!OrderSelect(i, SELECT_BY_POS))
      continue;
   ....
}
 

@Ihor Herasko @Alekseu Fedotov

DANKESCHÖN!!! SO HAT ES FUNKTIONIERT!