A tarefa de busca de pedidos - página 13

 
Vladimir Pastushak:
Sim, eu pensei que talvez alguém soubesse melhor ....
   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);
      }
   }

Não há maneira mais rápida. Se você quiser mais rápido, você precisa pensar em todo o algoritmo EA, talvez você possa se livrar da necessidade de procurar dois fundos, dois tops em cada carrapato.
 
Dmitry Fedoseev:

Não há maneira mais rápida. Se você precisar mais rápido, deve pensar em todo o algoritmo do EA, talvez você possa se livrar da necessidade de procurar duas partes baixas e duas partes altas em cada carrapato.

Em sua variante os dados serão iguais, ou seja, a primeira e a segunda ordem superior terão o mesmo ticket

Desculpe por isso ...

 

Eu fiz isso

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:

É melhor simplesmente montar funções para diferentes tarefas, especificamente afiadas para estas tarefas, do que tentar fazer algo universal.


100%

Se você fizer uma solução portátil, ela será redundante em alguma parte quando aplicada a uma tarefa específica. Quanto mais universal você tentar fazer isso, mais longa será a cauda da redundância. Vale a pena parar a tempo para que esta redundância não complique a vida útil do codificador e do produto.

 
Vladimir Pastushak:

Eu fiz isso

Funciona corretamente, você já verificou?
 
Dmitry Fedoseev:
Funciona corretamente, você já verificou?
Eu acho que sim ))) ...
 
Alexander Puzanov:


100%

Se você faz uma solução transferível, ela é obrigada a ser redundante em alguma parte quando aplicada a uma tarefa específica. Quanto mais universal você tentar fazer isso, mais longa será a cauda de redundância. Vale a pena parar a tempo para que esta redundância não complique a vida útil do codificador e do produto

Estou tentando mudar para OOP por alguma razão. Está escrito em elogios ao OOP que permite coletar e catalogar muitas funções, eu tinha arquivos com muitas funções antes... Pensei em arquivar tudo, mas se para qualquer caso é necessário ter uma variante separada, então o sentido dos catálogos de bibliotecas desaparece...

Acontece que, para evitar redundância em 99% dos casos, ainda precisamos escrever todo o código à mão. Do zero, quero dizer...

 
Vladimir Pastushak:
Eu acho que sim ))) ...
Sim. Norma.
 
Dmitry Fedoseev:
Sim, tudo bem.
Era isso que eu queria quando criei este fio, obrigado a todos vocês!
 
Vladimir Pastushak:
Era isso que eu queria obter ao criar este fio, obrigado a todos!

Eu não sou OTK:) Teste em pedidos no testador ou em uma conta de demonstração. Você pode estar errado à primeira vista.