Il compito di cercare gli ordini - pagina 13

 
Vladimir Pastushak:
Sì, ho pensato che forse qualcuno ne sapeva di più ....
   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);
      }
   }

Non c'è un modo più veloce. Se vuoi essere più veloce, devi pensare all'intero algoritmo dell'EA, forse puoi liberarti della necessità di cercare due bottom, due top su ogni tick.
 
Dmitry Fedoseev:

Non c'è un modo più veloce. Se hai bisogno di una maggiore velocità, dovresti pensare all'intero algoritmo dell'EA, forse puoi liberarti della necessità di cercare due ordini inferiori e due superiori su ogni tick.

Nella tua variante i dati saranno uguali, cioè il primo e il secondo ordine superiore avranno lo stesso biglietto

Mi dispiace per questo ...

 

Ho fatto questo

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:

È meglio assemblare semplicemente delle funzioni per compiti diversi, affilate specificamente per questi compiti, che cercare di fare qualcosa di universale.


100%

Se fate una soluzione portatile, è destinata ad essere ridondante in qualche parte quando viene applicata ad un compito specifico. Più si cerca di renderlo universale, più lunga sarà la coda di ridondanza. Vale la pena fermarsi in tempo perché questa ridondanza non complichi la vita del codificatore e del prodotto.

 
Vladimir Pastushak:

Ho fatto questo

Funziona correttamente, avete controllato?
 
Dmitry Fedoseev:
Funziona correttamente, avete controllato?
Penso di sì ))) ...
 
Alexander Puzanov:


100%

Se fai una soluzione trasferibile, è destinata ad essere ridondante in qualche parte quando viene applicata ad un compito particolare. Più universale si cerca di renderlo, più lunga sarà la coda di ridondanza. Vale la pena fermarsi in tempo perché questa ridondanza non complichi la vita del codificatore e del prodotto

Sto cercando di passare a OOP per qualche motivo. È scritto nelle lodi di OOP che ti permette di raccogliere e catalogare un sacco di funzioni, ho avuto file con un sacco di funzioni prima... Ho pensato di archiviare tutto, ma se per ogni caso è necessario avere una variante separata allora il senso dei cataloghi delle biblioteche scompare...

Si scopre che per evitare la ridondanza nel 99% dei casi dobbiamo ancora scrivere tutto il codice a mano... Da zero intendo...

 
Vladimir Pastushak:
Penso di sì ))) ...
Sì, Norm.
 
Dmitry Fedoseev:
Sì, va bene.
Questo è quello che volevo quando ho creato questo thread, grazie a tutti!
 
Vladimir Pastushak:
Questo è quello che volevo ottenere creando questo thread, grazie a tutti!

Non sono OTK:) Prova su ordini nel tester o su un conto demo. Si può sbagliare a prima vista.