Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1638

 
makssub #:

É o último, não o penúltimo(


Veja o que você escreveu:

"Se o preço cair e outra ordem for aberta, a ordem com o preço máximo de OrdemOpenPrice se torna a penúltima ordem. "

Esta função procura por preço máximo ou mínimo aberto.

Se você só quer penúltimo, é melhor lembrar-se do bilhete quando ele abrir.

 
MakarFX #:

Veja o que você escreveu:

"Se o preço cair e outra ordem for aberta, a ordem com o preço máximo de OrdemOpenPrice é a penúltima ordem. "

Esta função procura por preço máximo ou mínimo aberto.

Se você só quer penúltimo, é melhor lembrar-se do bilhete quando ele abrir.

Peço desculpas, às vezes eu não me expresso de forma muito clara.

Eu já o fiz por tempo e por carrapato, mas em flutuações, quando o preço pode subir, depois descer, pode não ser o penúltimo. Estas variantes já foram trabalhadas. Portanto, o preço de abertura é a melhor opção. Ou um monte de funções que irão checar tudo de novo, e lá estou certo de que ficarei muito confuso. Eu não tenho muito tempo para manter tudo na minha cabeça.

Já escrevi antes na penúltima e ela cedeu. Um problema, não fazia distinção entre OP_SELL e OP_BUY. Quando o segundo aparece, ele começa a contá-lo(

 
makssub #:

Peço desculpas, às vezes eu não me expresso de forma muito clara.

Eu já fiz isso na hora certa, mas em uma flutuação, quando o preço pode subir, depois descer, pode não ser o penúltimo. Estas variantes já foram trabalhadas. Portanto, o preço de abertura é a melhor opção. Ou um monte de funções que irão checar tudo de novo, e lá estou certo de que ficarei muito confuso. Eu não tenho muito tempo para manter tudo na minha cabeça.

Já escrevi antes na penúltima e ela cedeu. Um problema, não fazia distinção entre OP_SELL e OP_BUY. Quando eu recebo o segundo, ele começa a contá-lo(

Escreva simplesmente o que você precisa encontrar (se isso aconteceu, você precisa conseguir)...porque eu já estou confuso também

 
MakarFX #:

Escreva simplesmente o que você precisa encontrar (se isso aconteceu, você precisa conseguir)...porque eu já estou confuso também

Destaquei o preço do pedido que você precisa encontrar

Não é difícil se não houver OP_BUY. Se OP_BUY aparece, meu código não funciona(

double FindPenultSellPrice()
{
   double  UpPrice = DBL_MAX, profit = 0;
   int    i;
   for(i = OrdersTotal()-2; i >=0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL)
         {
            if ( OrderOpenPrice() < UpPrice)
            {
               UpPrice = OrderOpenPrice();
            }
         }
      }
   }
   return(UpPrice);
}
 
MakarFX #:

Escreva simplesmente o que você precisa encontrar (se isso aconteceu, você precisa conseguir)...Eu também já estou confuso

Não é a penúltima ordem pelo tempo, é a penúltima ordem pelo preço, se o preço foi para o outro lado. Alexei escreveu corretamente, devemos pesquisar por preço. Não devemos alterar os valores dos máximos ou dos mínimos.

Zy. Eu teria me lembrado da última ordem (é uma grade) e colocado a penúltima na minha variável. O algoritmo só deve ser refinado, se subir um e imediatamente descer um e novamente subir um e imediatamente descer um)))) Se duas ordens estão indo em uma direção, então devemos nos lembrar do bilhete da penúltima e última ordem só por precaução. Se uma terceira ordem abre, o bilhete da penúltima ordem é igual à última e o bilhete da última ordem é igual à terceira.

 
makssub #:

Destacado em cores que preço de pedido a encontrar

Não é difícil se não houver OP_BUY. Se OP_BUY aparece, meu código não funciona(

Tente desta forma

//+------------------------------------------------------------------+
//|  Функция возвращает по символу и магику                          |
//|  1 - размер лота последней позиции                               |
//|  2 - цена последней открытой позиции                             |
//|  3 - время последней открытой позиции                            |
//+------------------------------------------------------------------+
double GetInfoLastPos(int a=1)
  {
   datetime t=0;
   double result=0,l=0,p=0,f=0;
   
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(t<OrderCloseTime()) {t=OrderOpenTime(); l=OrderLots(); p=OrderOpenPrice();}
              }
           }
        }
     }
   if(a==1) {result=l;} else
   if(a==2) {result=p;} else
   if(a==3) {result=(double)t;}
   else     {result=0;}
   return(result);
  }
//+------------------------------------------------------------------+
double FindOpenPrice()
  {
   double AbsPoint=DBL_MAX;
   double openprice=0;
   
   for(int pos=OrdersTotal()-2;pos>=0;pos--)
     {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL)
              {
               if(AbsPoint>MathAbs(OrderOpenPrice()-GetInfoLastPos(2)))
                 {
                  AbsPoint=MathAbs(OrderOpenPrice()-GetInfoLastPos(2));
                  openprice = OrderOpenPrice();
                 }
              }
           }
        }
     }
   return(openprice);
  }
//+------------------------------------------------------------------+
 
MakarFX #:

Tente isto.

Obrigado por seu trabalho árduo.

Há uma nuança) Encontra-se na parte superior, marcada em vermelho. Para OP_SELL está na parte inferior, marcada a azul. E deixe-me dizer-lhe imediatamente, eu não verifiquei como vai contar se a OP_BUY aparece.

 
makssub #:

Obrigado por seu trabalho árduo.

Há uma nuança) Ela é encontrada na parte superior, marcada em vermelho. Para OP_SELL precisa estar na parte inferior, marcada a azul. E devo dizer desde já que não sabia como funcionaria se a OP_BUY aparecesse.

Acima está o mais próximo!

Eu lhe pedi para escrever o que você deve encontrar e você dá algumas porções.

Por exemplo, eu preciso: "Se uma Venda abriu, devo encontrar a Venda mais próxima de cima... etc.".

P.S. O que você marcou em vermelho? Eu não vejo 0_o
 
MakarFX #:

O que está no topo é o mais próximo!

Eu lhe pedi para escrever o que precisa encontrar, mas você dá algumas porções...

Por exemplo, eu preciso: "Se um Vendedor abriu, então você precisa encontrar o Vendedor mais próximo de cima... etc."

P.S. O que você marcou em vermelho? não vejo 0_o

Isso acontece comigo. Eu penso numa coisa e escrevo outra. Não atento Desculpe) Às custas do próprio vermelho em um choque)

 
makssub #:

Isso acontece comigo. Eu penso numa coisa e escrevo outra. Não estou prestando atenção. Desculpe, estou chocado com o vermelho).

Então o que você quer?)
Razão: