Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1638

 
makssub #:

Es el último, no el penúltimo(


Mira lo que has escrito:

" Si el precio baja y se abre otra orden, la orden con el máximo OrderOpenPrice se convierte en la penúltima orden. "

Esta función busca el precio máximo o mínimo de apertura.

Si sólo quieres el penúltimo, más vale que te acuerdes del billete cuando se abra.

 
MakarFX #:

Mira lo que has escrito:

" Si el precio baja y se abre otra orden, la orden con el máximo OrderOpenPrice es la penúltima orden. "

Esta función busca el precio máximo o mínimo de apertura.

Si sólo quieres el penúltimo, más vale que te acuerdes del billete cuando se abra.

Pido disculpas, a veces no me expreso con claridad.

Ya lo he hecho por tick y por tiempo, pero en las fluctuaciones, cuando el precio puede subir y luego bajar, puede no ser el penúltimo. Estas variantes ya han sido elaboradas. Así que el precio de apertura es la mejor opción. O un montón de funciones que lo comprobarán todo, y ahí seguro que me confundiré mucho. No tengo mucho tiempo para tener todo en la cabeza.

Ya he escrito antes sobre la penúltima y se ha rendido. Un problema, no distingue entre OP_SELL y OP_BUY. Cuando aparece el segundo, empieza a contarlo(

 
makssub #:

Pido disculpas, a veces no me expreso con claridad.

Ya lo he hecho al tick, y a tiempo, pero en una fluctuación, cuando el precio puede subir, y luego bajar, puede que no sea la penúltima. Estas variantes ya han sido elaboradas. Así que el precio de apertura es la mejor opción. O un montón de funciones que lo comprobarán todo, y ahí seguro que me confundiré mucho. No tengo mucho tiempo para tener todo en la cabeza.

Ya he escrito antes sobre la penúltima y se ha rendido. Un problema, no distingue entre OP_SELL y OP_BUY. Cuando consigo el segundo, empieza a contarlo(

Escribe simplemente lo que necesitas encontrar (si pasó, necesitas conseguirlo)... porque yo ya estoy confundido también

 
MakarFX #:

Escribe simplemente lo que necesitas encontrar (si pasó, necesitas conseguirlo)...porque yo ya estoy confundido también

He resaltado el precio del pedido que debe encontrar

No es difícil si no hay OP_BUY. Si aparece OP_BUY, mi código no 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 #:

Escribe simplemente lo que necesitas encontrar (si pasó, necesitas conseguirlo)... Yo también estoy ya confundido

No es la penúltima orden por tiempo, es la penúltima orden por precio si el precio se ha ido al revés. Alexei ha escrito correctamente, debemos buscar por precio. No debemos cambiar los valores de los máximos o mínimos.

Zy. Habría recordado la última orden (es una cuadrícula) y puesto la penúltima en mi variable. El algoritmo sólo debe ser refinado, si sube uno e inmediatamente baja uno y de nuevo sube uno e inmediatamente baja uno)))) Si dos órdenes van en una dirección, entonces debemos recordar el ticket de la penúltima y última orden por si acaso. Si se abre una tercera orden, entonces el ticket de la penúltima orden es igual a la última y el ticket de la última orden es igual a la tercera.

 
makssub #:

Resaltado en color el precio de la orden a encontrar

No es difícil si no hay OP_BUY. Si aparece OP_BUY, mi código no funciona(

Inténtelo de esta manera

//+------------------------------------------------------------------+
//|  Функция возвращает по символу и магику                          |
//|  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 #:

Prueba esto.

Gracias por su duro trabajo.

Hay un matiz) Se encuentra en la parte superior, marcado en rojo. Para OP_SELL está en la parte inferior, marcada en azul. Y déjame decirte de entrada que no he comprobado cómo va a contar si aparece OP_BUY.

 
makssub #:

Gracias por su duro trabajo.

Hay un matiz) Se encuentra en la parte superior, marcado en rojo. Para OP_SELL tiene que estar en la parte inferior, marcada en azul. Y debo decir de inmediato que no sabía cómo funcionará si aparece OP_BUY.

¡Arriba está el más cercano!

Te pedí que escribieras lo que debías encontrar y diste algunas porciones.

Por ejemplo, necesito: "Si se ha abierto una venta, debo encontrar la venta más cercana desde arriba... etc.".

P.D. ¿Qué has marcado en rojo? No lo veo 0_o
 
MakarFX #:

El de arriba es el más cercano.

Te pedí que escribieras lo que necesitas encontrar, pero das algunas porciones...

Por ejemplo, necesito: "Si se abre una venta, busca la venta más cercana en la parte superior...etc..."

P.D. ¿Qué has marcado en rojo? no veo 0_o

A mí me pasa. Pienso una cosa y escribo otra. No atento Lo siento) A expensas del propio rojo en un choque)

 
makssub #:

A mí me pasa. Pienso una cosa y escribo otra. No estoy prestando atención. Lo siento. Estoy sorprendido por el rojo).

Entonces, ¿qué quieres?)
Razón de la queja: