Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1638

 
makssub #:

Es ist die letzte, nicht die vorletzte(


Sehen Sie sich an, was Sie geschrieben haben:

" Wenn der Preis sin kt und ein weiterer Auftrag eröffnet wird, wird der Auftrag mit dem höchsten OrderOpenPrice zum vorletzten Auftrag. "

Diese Funktion sucht nach dem maximalen oder minimalen offenen Preis.

Wenn Sie nur den vorletzten Platz wollen, sollten Sie sich das Ticket merken, wenn es geöffnet wird.

 
MakarFX #:

Sehen Sie sich an, was Sie geschrieben haben:

" Wenn der Preis fällt und ein weiterer Auftrag eröffnet wird, ist der Auftrag mit dem höchsten OrderOpenPrice der vorletzte Auftrag. "

Diese Funktion sucht nach dem maximalen oder minimalen offenen Preis.

Wenn Sie nur den vorletzten Platz wollen, sollten Sie sich das Ticket merken, wenn es geöffnet wird.

Ich entschuldige mich dafür, dass ich mich manchmal nicht sehr klar ausdrücke.

Ich habe es schon nach Tick und nach Zeit gemacht, aber bei Schwankungen, wenn der Preis mal hoch und dann wieder runter geht, kann es sein, dass es nicht das Vorletzte ist. Diese Varianten sind bereits ausgearbeitet worden. Der Eröffnungspreis ist also die beste Option. Oder eine Reihe von Funktionen, die alles doppelt überprüfen, und da bin ich sicher, dass ich sehr verwirrt sein werde. Ich habe nicht viel Zeit, um alles in meinem Kopf zu behalten.

Ich habe schon einmal über die vorletzte geschrieben und sie hat den Geist aufgegeben. Ein Problem: Es wurde nicht zwischen OP_SELL und OP_BUY unterschieden. Wenn die zweite erscheint, beginnt sie zu zählen(

 
makssub #:

Ich entschuldige mich dafür, dass ich mich manchmal nicht sehr klar ausdrücke.

Ich habe schon auf die Minute genau gehandelt, und zwar pünktlich, aber bei einer Fluktuation, wenn der Preis mal steigt, mal fällt, ist es vielleicht nicht der vorletzte. Diese Varianten sind bereits ausgearbeitet worden. Der Eröffnungspreis ist also die beste Option. Oder eine Reihe von Funktionen, die alles doppelt überprüfen, und da bin ich sicher, dass ich sehr verwirrt sein werde. Ich habe nicht viel Zeit, um alles in meinem Kopf zu behalten.

Ich habe schon einmal über die vorletzte geschrieben und sie hat den Geist aufgegeben. Ein Problem: Es wurde nicht zwischen OP_SELL und OP_BUY unterschieden. Wenn ich den zweiten erhalte, fängt er an, ihn zu zählen(

Schreiben Sie einfach, was Sie finden müssen (wenn es passiert ist, müssen Sie es bekommen)...denn ich bin auch schon verwirrt

 
MakarFX #:

Schreiben Sie einfach, was Sie finden müssen (wenn es passiert ist, müssen Sie es bekommen)...denn ich bin auch schon verwirrt

Ich habe hervorgehoben, welchen Bestellpreis Sie finden müssen

Es ist nicht schwierig, wenn es kein OP_BUY gibt. Wenn OP_BUY erscheint, funktioniert mein Code nicht(

double FindPenultSellPrice()
{
   double  UpPrice = DBL_MAX, profit = 0;
   int    i;
   for(i = OrdersTotal()-2; i >=0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL)
         {
            if ( OrderOpenPrice() < UpPrice)
            {
               UpPrice = OrderOpenPrice();
            }
         }
      }
   }
   return(UpPrice);
}
 
MakarFX #:

Schreiben Sie einfach, was Sie finden müssen (wenn es passiert ist, müssen Sie es bekommen) ... Ich bin auch schon verwirrt

Es handelt sich nicht um den vorletzten Auftrag nach Zeit, sondern um den vorletzten Auftrag nach Preis, wenn sich der Preis in die andere Richtung entwickelt hat. Alexej hat richtig geschrieben, wir sollten nach dem Preis suchen. Wir sollten die Werte der höchsten und niedrigsten Werte nicht ändern.

Zy. Ich hätte mir die letzte Reihenfolge gemerkt (es ist ein Raster) und die vorletzte in meine Variable eingetragen. Der Algorithmus sollte nur verfeinert werden, wenn oben eine und sofort unten eine und wieder oben eine und sofort unten eine)))) Wenn zwei Aufträge in eine Richtung gehen, sollte man sich das Ticket des vorletzten und des letzten Auftrags merken, nur für den Fall, dass ein dritter Auftrag eröffnet wird, ist das Ticket des vorletzten Auftrags gleich dem letzten und das Ticket des letzten Auftrags gleich dem dritten.

 
makssub #:

Farblich hervorgehoben, welcher Bestellpreis zu finden ist

Es ist nicht schwierig, wenn es kein OP_BUY gibt. Wenn OP_BUY erscheint, funktioniert mein Code nicht(

Versuchen Sie es auf diese Weise

//+------------------------------------------------------------------+
//|  Функция возвращает по символу и магику                          |
//|  1 - размер лота последней позиции                               |
//|  2 - цена последней открытой позиции                             |
//|  3 - время последней открытой позиции                            |
//+------------------------------------------------------------------+
double GetInfoLastPos(int a=1)
  {
   datetime t=0;
   double result=0,l=0,p=0,f=0;
   
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(t<OrderCloseTime()) {t=OrderOpenTime(); l=OrderLots(); p=OrderOpenPrice();}
              }
           }
        }
     }
   if(a==1) {result=l;} else
   if(a==2) {result=p;} else
   if(a==3) {result=(double)t;}
   else     {result=0;}
   return(result);
  }
//+------------------------------------------------------------------+
double FindOpenPrice()
  {
   double AbsPoint=DBL_MAX;
   double openprice=0;
   
   for(int pos=OrdersTotal()-2;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(AbsPoint>MathAbs(OrderOpenPrice()-GetInfoLastPos(2)))
                 {
                  AbsPoint=MathAbs(OrderOpenPrice()-GetInfoLastPos(2));
                  openprice = OrderOpenPrice();
                 }
              }
           }
        }
     }
   return(openprice);
  }
//+------------------------------------------------------------------+
 
MakarFX #:

Versuchen Sie dies.

Ich danke Ihnen für Ihre harte Arbeit.

Es gibt eine Nuance) Sie findet sich oben, in rot markiert. Bei OP_SELL befindet sie sich am unteren Rand und ist blau markiert. Und ich möchte Ihnen gleich sagen, dass ich nicht überprüft habe, wie es sich auswirkt, wenn OP_BUY erscheint.

 
makssub #:

Ich danke Ihnen für Ihre harte Arbeit.

Es gibt eine Nuance) Sie befindet sich am oberen Rand und ist rot markiert. Für OP_SELL muss es unten stehen und blau markiert sein. Und ich muss gleich sagen, dass ich nicht wusste, wie es funktionieren wird, wenn OP_BUY erscheint.

Oben ist die nächste!

Ich habe Sie gebeten, aufzuschreiben, was Sie finden müssen, und Sie geben einige Teile davon ab.

Ich brauche zum Beispiel: "Wenn ein Verkauf eröffnet wurde, sollte ich den nächstgelegenen Verkauf von oben finden... usw.".

P.S. Was haben Sie rot markiert? Ich sehe nichts 0_o
 
MakarFX #:

Der oberste ist der nächstgelegene!

Ich habe Sie gebeten, zu schreiben, was Sie finden müssen, aber Sie geben einige Teile heraus...

Ich brauche zum Beispiel: "Wenn ein Verkauf eröffnet wurde, müssen Sie den nächstgelegenen Verkauf von oben finden... usw."

P.S. Was haben Sie rot markiert? ich sehe es nicht 0_o

Das passiert mir auch. Ich denke das eine und schreibe das andere. Nicht aufmerksam Sorry) Auf Kosten von Rot selbst in einen Schock)

 
makssub #:

Das passiert mir auch. Ich denke das eine und schreibe das andere. Ich passe nicht auf, tut mir leid, ich bin schockiert über das Rote.)

Was wollen Sie also?)
Grund der Beschwerde: