La tarea de búsqueda de pedidos - página 13

 
Vladimir Pastushak:
Sí, pensé que tal vez alguien sabía mejor ....
   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);
      }
   }

No hay manera más rápida. Si quieres ser más rápido, tienes que pensar en todo el algoritmo del EA, tal vez puedas deshacerte de la necesidad de buscar dos fondos, dos máximos en cada tick.
 
Dmitry Fedoseev:

No hay manera más rápida. Si quieres que sea más rápido, deberías pensar en todo el algoritmo del EA, tal vez puedas deshacerte de la necesidad de buscar dos bajadas y dos subidas en cada tick.

En su variante los datos serán iguales, es decir, el primer y el segundo orden superior tendrán el mismo ticket

Lo siento...

 

Hice esto

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 mejor ensamblar simplemente funciones para diferentes tareas, específicamente afiladas para estas tareas, que intentar hacer algo universal.


100%

Si se hace una solución portátil, seguramente será redundante en alguna parte cuando se aplique a una tarea específica. Cuanto más universal se intente hacer, más larga será la cola de la redundancia. Vale la pena detenerse a tiempo para que esta redundancia no complique la vida del codificador y del producto.

 
Vladimir Pastushak:

Hice esto

¿Funciona correctamente, lo has comprobado?
 
Dmitry Fedoseev:
¿Funciona correctamente, lo has comprobado?
Creo que sí ))) ...
 
Alexander Puzanov:


100%

Si se hace una solución transferible, es seguro que será redundante en alguna parte cuando se aplique a una tarea concreta. Cuanto más universal se intente hacer, más larga será la cola de la redundancia. Vale la pena detenerse a tiempo para que esta redundancia no complique la vida del codificador y del producto

Por alguna razón estoy tratando de pasarme a la POO. Está escrito en alabanzas de la POO que te permite recoger y catalogar un montón de funciones, antes tenía archivos con un montón de funciones... He pensado en archivar todo, pero si para cualquier caso es necesario tener una variante separada entonces el sentido de los catálogos de las bibliotecas desaparece...

Resulta que para evitar la redundancia en el 99% de los casos todavía tenemos que escribir todo el código a mano... Desde cero, quiero decir...

 
Vladimir Pastushak:
Creo que sí ))) ...
Sí. La norma.
 
Dmitry Fedoseev:
Sí. De acuerdo.
Eso es lo que quería cuando creé este hilo, ¡gracias a todos!
 
Vladimir Pastushak:
Eso es lo que quería conseguir creando este hilo, ¡gracias a todos!

No soy OTK:) Pruebe con órdenes en el probador o en una cuenta demo. Puede equivocarse a primera vista.