[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 169

 

splxgf:

DhP:

Wie können Sie diesen Zyklus "auflockern"? Es dauert sehr lange zu zählen.
 if(iHigh(NULL,60,i)>LOWprice && LOWprice>iLow(NULL,60,i)) if(LOWprice> bid) CountH++ else CountL++;

Oder noch besser, so:

 if(iHigh(NULL,60,i)>LOWprice) if(LOWprice>iLow(NULL,60,i)) if(LOWprice> bid) CountH++ else CountL++;

Es gibt auch die Idee, ein Array von High und Low Werten zu erzeugen. Vielleicht wird dies die Dinge etwas beschleunigen?

 
abolk:


die Bestellung wird ausgewählt https://docs.mql4.com/ru/trading/OrderSelect - Schleifenbildung oder Auswahl nach Ticket

dann sucht die Funktion Order*() nach dem entsprechenden Order-Parameter

Entschuldigen Sie die unverblümten Fragen, aber:

Wenn wir MODE_HISTORY als Datenquelle für die Auswahl in der Funktion OrderSelect verwenden, d.h. der Auftrag wird unter den geschlossenen und gelöschten Aufträgen ausgewählt, wie finden wir dann die Nummer des zuletzt geschlossenen Auftrags? Wie werden diese Aufträge im Programm nummeriert? Geht es vom letzten zum ersten oder umgekehrt?

 
Xaoss1990:

Entschuldigen Sie natürlich die dummen Fragen, aber:

Wenn MODE_HISTORY in der Funktion OrderSelect als Datenquelle verwendet wird, d.h. der Auftrag unter den geschlossenen und gelöschten Aufträgen ausgewählt wird, wie finde ich dann die Nummer des zuletzt geschlossenen Auftrags? Wie werden diese Aufträge im Programm nummeriert? Geht es vom letzten zum ersten oder umgekehrt?


es gibt viele solcher Fragen im Internet

http://forum.alpari.ru/showthread.php?t=27708

 
Xaoss1990:

Entschuldigung für die dummen Fragen, aber:

Wenn MODE_HISTORY in der Funktion OrderSelect als Datenquelle für die Auswahl verwendet wird, d.h. der Auftrag wird unter den geschlossenen und gelöschten Aufträgen ausgewählt, wie finde ich dann die Nummer des zuletzt geschlossenen Auftrags? Wie werden diese Aufträge im Programm nummeriert? Ist es von der letzten zur ersten oder umgekehrt?


Die Funktion zum Auffinden des letzten der abgeschlossenen Aufträge ist ähnlich wie die Funktion zum Auffinden des Auftrags mit der maximalen Schließzeit
 
LazarevDenis:


viele dieser Fragen sind bereits im Internet gestellt worden

http://forum.alpari.ru/showthread.php?t=27708

О! Ich habe es gefunden, danke:

OrderSelect(HistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY);

Das ist doch richtig, oder?!

 
DhP:

Wie kann man diesen Kreislauf "erleichtern"? Die Berechnung nimmt sehr viel Zeit in Anspruch.

Verzaubert:

   INS = True;
   
   for (int i=1; i<=6000; i++)
   {
      if (INS)
      {
         if (LOWprice > iHigh(NULL,60,i))
         {
            INS = False;
            UPP = True;
            LOW = False;
            continue;
         }
         if (LOWprice < iLow (NULL,60,i))
         {
            INS = False;
            UPP = False;
            LOW = True;
            continue;
         }
      }
      else
      {
         if (UPP)
            if (LOWprice > iHigh(NULL,60,i))
               continue;
            else
            if (LOWprice < iLow (NULL,60,i))
            {
               // INS = "False"
               UPP = False;
               LOW = True;
               continue;
            }
         if (LOW)
            if (LOWprice < iLow (NULL,60,i))
               continue;
            else
            if (LOWprice > iHigh(NULL,60,i))
            {
               // INS = "False"
               UPP = True;
               LOW = False;
               continue;
            }
         
         INS = True;
      }
      
      if (LOWprice > Bid)
         CountH++;
      else
         CountL++;
   }

Die Logik ist, dass der Preis häufiger außerhalb als innerhalb der historischen Balken liegt.

INS = Innen.

Ich habe die Genauigkeit des Codes auf einem Merkblatt überprüft. Ich habe die Geschwindigkeit des Codes nicht überprüft. Aber ich bin sicher, dass boolesche Variablen einen guten Vorteil bieten.

 
MaxZ:

Verzaubert:

Die Logik ist, dass der Preis häufiger außerhalb als innerhalb der historischen Balken liegt.

INS = "Innen".

P.S.: Ich habe die Korrektheit des Codes auf einem Blatt Papier überprüft. Ich habe die Geschwindigkeit des Codes nicht überprüft. Aber ich bin sicher, dass boolesche Variablen einen guten Vorteil bieten.


Ja, ja.

Man muss schon sehr verdreht sein, um drei klare Zeilen Code in schwer verständlichen Code zu verwandeln.

Wenn Sie auf die Idee gekommen wären, den iLow, iHigh Scheck aufzuteilen, hätten Sie ihn gleich aufteilen können:

          if(LOWprice> bid)if(iHigh(NULL,60,i)>LOWprice)if( LOWprice>iLow(NULL,60,i))CountH++;  
          if(LOWprice<=bid)if(iHigh(NULL,60,i)>LOWprice)if( LOWprice>iLow(NULL,60,i))CountL++;
und fummeln Sie nicht an irgendetwas herum
 
      int HourPrices[20000];     
      for(int i=1; i<=6000; i++)
	 for (double cPrice=iLow(NULL,60,i);cprice<=iHigh(NULL,60,i);cPrice+=Point)
	  HourPrices[cPrice/Point]+=1;

Das Auffinden von Widerstandsniveaus ist bei einer solchen Anordnung kein Problem. Fügen Sie neue Balken hinzu und entfernen Sie gleichzeitig alte Balken. Und das Abrufen von Informationen aus ihm ist zwei Zyklen mit einer Bedingung oder ArrayMaximum wird den erforderlichen Wert auf einmal geben.

 
abolk:


Richtig.

Man muss schon so verdreht sein, dass man aus drei klaren Codezeilen einen schwer verständlichen Code macht.

Wenn Sie auf die Idee gekommen wären, die iLow- und iHigh-Kontrolle zu trennen, hätten Sie sie gleich aufteilen können:

und lassen Sie alles stehen und liegen

Eine ähnliche Variante wie die, die ich oben vorgeschlagen habe (Trennung der Wenns).

Und Sie haben nicht einmal versucht, meine Idee zu verstehen (obwohl ich die Logik kurz beschrieben habe)... Wenn der Preis hoch ist, machen wir eine Kontrolle statt zwei. Das Gleiche gilt für den Fall, dass der Preis niedrig ist. Und wenn der Preis innerhalb der historischen Balken liegt (was ziemlich selten vorkommt - das ist die Logik und Idee!), führen wir zwei Überprüfungen durch (es gibt keine andere Möglichkeit).

Die Rechnung gilt für den Preis außerhalb der Bar, nicht innerhalb. Vorhin haben sie nach einer Nadel im Heuhaufen gesucht, während ich, wenn ich keine andere Nadel sehe, auch nicht danach suchen werde... Die Nadel wird sich zeigen, wenn sie gebraucht wird! :)))

 
MaxZ:

Eine ähnliche Variante habe ich oben vorgeschlagen (getrennte Wenns).

Und Sie haben nicht einmal versucht, meine Idee zu verstehen (obwohl ich die Logik kurz beschrieben habe)... Wenn der Preis hoch ist, machen wir statt zwei Schecks nur einen. Das Gleiche gilt für den Fall, dass der Preis niedrig ist. Und wenn der Preis innerhalb der historischen Balken liegt (was ziemlich selten vorkommt - das ist die Logik und Idee!), führen wir zwei Überprüfungen durch (es gibt keine andere Möglichkeit).

         if (LOWprice > iHigh(NULL,60,i)) continue;
        if (UPPprice < iLow (NULL,60,i)) continue;
Ihre Version kann auf diese beiden Zeilen reduziert werden, die der Version des Autors hinzugefügt werden, und sollte mit einigen Änderungen der Bedingungen im Prinzip recht schnell sein.
Grund der Beschwerde: