Задача по поиску ордеров - страница 13

 
Vladimir Pastushak:
Ну да, думал может кто то что то лучще знает ....
   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);
      }
   }

Быстрее некуда. Если надо быстрее, надо думать о всем алгоритме советника, может быть можно избавиться от необходимости на каждом тике искать два нижних, два верхних. 
 
Dmitry Fedoseev:

Быстрее некуда. Если надо быстрее, надо думать о всем алгоритме советника, может быть можно избавиться от необходимости на каждом тике искать два нижних, два верхних. 

В вашем Варианте данные будут равны, тоесть у первого и второго верхнего ордера будет один и тот же тиккет

поспешил пардон ...

 

Я сделал так

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:

Лучше просто собирать функции для различных задач, специально заточенные под эти задачи, чем пытаться сделать что-то универсальное.


100%

Если делаете переносимое решение, оно обязательно будет избыточным в какой-то части при применении к конкретной задаче. Чем универсальнее будете стараться сделать, тем длиннее будет хвост избыточности. Стоит вовремя остопориться чтобы эта избыточность потом не усложняла жизнь и кодеру и продукту

 
Vladimir Pastushak:

Я сделал так

А работает правильно, проверяли?
 
Dmitry Fedoseev:
А работает правильно, проверяли?
Вроде бы да ))) ...
 
Alexander Puzanov:


100%

Если делаете переносимое решение, оно обязательно будет избыточным в какой-то части при применении к конкретной задаче. Чем универсальнее будете стараться сделать, тем длиннее будет хвост избыточности. Стоит вовремя остопориться чтобы эта избыточность потом не усложняла жизнь и кодеру и продукту

и как это все дело собирать, я почему на ООП пытаюсь перейти,  в хвальбе этого самого ООП написано что позволяет собрать и каталогизировать массу функций,  ранее я имел файлы с большим количеством функций... Думал все оформить, но если на всякий случай нужно иметь отдельный вариант тогда смысл каталогов библиотек пропадает...

Получается что что бы избежать избыточности то 99% случаев нужно все равно писать весь код в ручную... С нуля я имею ввиду...

 

 
Vladimir Pastushak:
Вроде бы да ))) ...
Да. Норм.
 
Dmitry Fedoseev:
Да. Норм.
Вот этого я и хотел получить создавая данную ветку, всем спасибо !
 
Vladimir Pastushak:
Вот этого я и хотел получить создавая данную ветку, всем спасибо !

Не я не ОТК:) Тестируйте на ордерах в тестере или на демосчете.  На первый взгляд можно ошибиться.

Причина обращения: