Die Aufgabe der Suche nach Aufträgen - Seite 13

 
Vladimir Pastushak:
Ja, ich dachte, vielleicht weiß es jemand besser ....
   double Max1=0;
   double Max2=0; 
   
   int Ticket1=0;
   int Ticket2=0;

   int t=OrdersTotal();
   for(int i=0;i<t;i++){
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)){
         if(OrderMagicNumber()==Magic && OrderSymbol()==Symbol()){
            if(OrderType()==OP_BUY){
               if(OrderOpenPrice()>Max1){
                  Max2=Max1;
                  Ticket2=Ticket1;                  
                  Max1=OrderOpenPrice();
                  Ticket1=OrderTicket();
               }
               else if(OrderOpenPrice()>Max2){
                  Max2=OrderOpenPrice();
                  Ticket2=OrderTicket();                  
               }
            }
         }
      }
      else{
         return(false);
      }
   }

Es gibt keinen schnelleren Weg. Wenn Sie schneller wollen, müssen Sie über den gesamten EA-Algorithmus nachdenken, vielleicht können Sie die Notwendigkeit loswerden, für zwei Böden, zwei Tops auf jedem Tick zu suchen.
 
Dmitry Fedoseev:

Es gibt keinen schnelleren Weg. Wenn Sie schneller sein wollen, sollten Sie den gesamten Algorithmus des EAs überdenken, vielleicht können Sie die Notwendigkeit der Suche nach zwei unteren und zwei oberen Aufträgen bei jedem Tick loswerden.

In Ihrer Variante werden die Daten gleich sein, d.h. die erste und die zweite Bestellung haben das gleiche Ticket

Das tut mir leid ...

 

Ich habe dies getan

void OrdersInfo :: SearchTicketPriceType()
  {
   double   price_max=0,price_min=0,price_max2=0,price_min2=0,op=0;
   int      tc=-1;
   m_tick_upper  = 0;
   m_tick_upper_ = 0;
   m_tick_lower  = 0;
   m_tick_lower_ = 0;
   Counter=0;
   for(int i=OrdersTotal()-1; i>=0; i--)
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         if(OrderMagicNumber()==m_magic || m_magic==-1)
            if(OrderSymbol  ()==m_symbol || m_symbol==NULL)
               if(OrderType()==m_type_order)
                 {
                  Counter++;
                  op=OrderOpenPrice();
                  tc=OrderTicket   ();
                  //---
                  if(op>price_max) // Самый верхний ордер
                    {
                     price_max=op;
                     m_tick_upper=tc;
                    }
                  if(op<price_min || price_min==0) // Самый нижний ордер
                    {
                     price_min=op;
                     m_tick_lower=tc;
                    }
                  if(tc!=m_tick_upper) // Предпоследний верхний ордер
                     if(op>price_max2)
                       {
                        price_max2=op;
                        m_tick_upper_=tc;
                       }
                  if(tc!=m_tick_lower)
                     if(op<price_min2 || price_min2==0) // Предпоследний нижний ордер
                       {
                        price_min2=op;
                        m_tick_lower_=tc;
                       }
                  //---
                 }
  }
 
Dmitry Fedoseev:

Es ist besser, einfach Funktionen für verschiedene Aufgaben zusammenzustellen, die speziell für diese Aufgaben geschärft sind, als zu versuchen, etwas Universelles zu schaffen.


100%

Wenn Sie eine übertragbare Lösung entwickeln, ist sie zwangsläufig in einigen Teilen redundant, wenn sie auf eine bestimmte Aufgabe angewendet wird. Je universeller man es machen will, desto länger wird der Schwanz der Redundanz sein. Es lohnt sich, rechtzeitig damit aufzuhören, damit diese Redundanz das Leben des Programmierers und das Produkt nicht erschwert.

 
Vladimir Pastushak:

Ich habe dies getan

Funktioniert sie ordnungsgemäß, haben Sie das überprüft?
 
Dmitry Fedoseev:
Funktioniert sie ordnungsgemäß, haben Sie das überprüft?
Ich denke schon ))) ...
 
Alexander Puzanov:


100%

Wenn Sie eine übertragbare Lösung entwickeln, ist sie zwangsläufig in einigen Teilen redundant, wenn sie auf eine bestimmte Aufgabe angewendet wird. Je universeller man versucht, sie zu gestalten, desto länger wird der Redundanzschwanz sein. Es lohnt sich, rechtzeitig damit aufzuhören, damit diese Redundanz das Leben des Programmierers und das Produkt nicht erschwert.

Aus irgendeinem Grund versuche ich, auf OOP umzusteigen. Es wird in den Lobeshymnen auf OOP geschrieben, dass man damit eine Menge Funktionen sammeln und katalogisieren kann, ich hatte vorher Dateien mit vielen Funktionen... Ich dachte daran, alles zu archivieren, aber wenn man für jeden Fall eine eigene Variante haben muss, dann verschwindet der Sinn von Bibliothekskatalogen...

Es stellt sich heraus, dass wir in 99 % der Fälle den gesamten Code von Hand schreiben müssen, um Redundanzen zu vermeiden... Von Grund auf, meine ich...

 
Vladimir Pastushak:
Ich denke schon ))) ...
Ja, Norm.
 
Dmitry Fedoseev:
Ja, okay.
Das ist genau das, was ich wollte, als ich diesen Thread erstellt habe, vielen Dank an alle!
 
Vladimir Pastushak:
Das war es, was ich mit diesem Thread erreichen wollte, vielen Dank an alle!

Ich bin nicht OTK:) Testen Sie mit Aufträgen im Tester oder auf einem Demokonto. Auf den ersten Blick kann man sich irren.

Grund der Beschwerde: