cómo puedo obtener el más alto después de la apertura de orderopenprice. - página 3

 

Entonces, ¿por qué devuelve el número de billete? Lee el código que estás copiando y pegando, entiéndelo, aprende....

lo he utilizado para hacer lo siguiente

if(OrderSelect(LastOpenTicketForBuy(), SELECT_BY_POS)==true)
{ orden de compra= OrderOpenPrice();}

entonces si ( (( orden de compra+ orden de venta)/2))<MarketInfo("EURUSD",MODE_BID) )

cerrar la posición

 
Hand:


if(OrderSelect(LastOpenTicketForBuy(), SELECT_BY_POS)==true)


un pequeño cambio con su permiso

if(OrderSelect(LastOpenTicketForBuy(), SELECT_BY_TICKET)==true)
 

Estimado qjol

Muchas gracias por su ayuda real. pero todavía no estoy seguro de si va a funcionar o no (creo que mis funciones un poco diffecult). vamos a ver

primera función :

función para obtener y mantener el precio de apertura de la ultima orden para la compra solamente

double LastOpenForBuy(){ datetime lastTime = 0 ; int lastTicket = - 1 ; // None open. 
int magi.number= 0 ; double orderforbuy;
for ( int pos = OrdersTotal ()- 1 ; pos >= 0 ; pos--)
if ( OrderSelect (pos, SELECT_BY_POS) // Only my orders w/
&& OrderMagicNumber () == magic.number // my magic number
&& OrderSymbol () == Symbol () // and my pair.
&& OrderType ()==OP_BUY )
{ orderforbuy = OrderOpenprice ();
lastTicket = OrderTicket (); }
return (orderforbuy);}

if(OrderSelect(LastOpenForBuy(), SELECT_BY_TICKET)==true)
{ order for buy= OrderOpenPrice();}

// then something like// // if ( (( order for buy+ order for sell)/2))<MarketInfo("EURUSD",MODE_BID) )

//close the position

     lo que necesito es: 1- función para obtener y mantener el último precio de apertura de la orden sólo para la compra 
2- función para obtener y mantener el precio de apertura de la última orden de venta
3- función para obtener y mantener el precio de cierre de la última orden, ya sea de compra o de venta
4- función para obtener y mantener el precio de cierre anterior a la última orden de cierre de compra o de venta.
 

Bien, prueba esto...

Hará 1 y 2...

LastOpenPrice(OP_BUY) para el precio de apertura de la última compra.

LastOpenPrice(OP_SELL) para el precio de apertura de la última venta.

double LastOpenPrice(int  OrderType)
   { 
 
   double OpenPrice;                         

   for ( int pos = OrdersTotal()- 1 ; pos >= 0 ; pos--)
      if ( OrderSelect (pos, SELECT_BY_POS) // Only my orders w/
      && OrderMagicNumber() == magic.number // my magic number       //  <-------  what Magic Number do you use when you place a trade ?  it must match  ! !
      && OrderSymbol() == Symbol()  // and my pair.                  //            magic.number  should be a Globally defined variable that has your Magic Numer  
      && OrderType() == OrderType )
         {
         OpenPrice = OrderOpenprice();
         break;
         }
   return (OpenPrice);                                             //  <-------  this returns the Order Open Price  NOT the ticket
}
 

Y esto...

por 3...

double LastClosePrice()
   { 
 
   double ClosePrice;                         

   for ( int pos = OrdersHistoryTotal()- 1 ; pos >= 0 ; pos--)
      if ( OrderSelect (pos, SELECT_BY_POS, MODE_HISTORY)            // Only my CLOSED  orders 
      && OrderMagicNumber() == magic.number // my magic number       //  <-------  what Magic Number do you use when you place a trade ?  it must match  ! !
      && OrderSymbol() == Symbol()  // and my pair.                  //            magic.number  should be a Globally defined variable that has your Magic Numer  
      && OrderType() < OP_BUYLIMIT )
         {
         ClosePrice = OrderCloseprice();
         break;
         }
   return (ClosePrice);                                             //  <-------  this returns the Order Open Price  NOT the ticket
}
 
No sé si entiendo lo que quieres decir con el número 4.
 

raptor

creo que te falta algo si tiene más de 1 orden en el mismo par (y la misma magia) por lo tanto creo que es mejor así

double LastOpenPrice(int OrderType)
   { 
 
   double OpenPrice;                         
   datetime lastOpen; // First line added

   for ( int pos = OrdersTotal()- 1 ; pos >= 0 ; pos--)
      if ( OrderSelect (pos, SELECT_BY_POS) // Only my orders w/
      && OrderMagicNumber() == magic.number // my magic number       //  <-------  what Magic Number do you use when you place a trade ?  it must match  ! !
      && OrderSymbol() == Symbol()  // and my pair.                  //            magic.number  should be a Globally defined variable that has your Magic Numer  
      && OrderType() == OrderType
      && OrderOpenTime() > lastOpen) // Second line added
         {
         OpenPrice = OrderOpenprice();
         break;
         }
   return (OpenPrice);                                             //  <-------  this returns the Order Open Price  NOT the ticket
}

tu opinion

 
Si se hace una cuenta atrás, la primera orden que coincida con el Número y el Símbolo Mágicos será la última que se haga para el EA y el Símbolo en cuestión, ¿no?
 
No estoy seguro
 
qjol:

raptor

creo que te falta algo si tiene más de 1 orden en el mismo par (y la misma magia) por lo tanto creo que es mejor así

su opinión


chicos,

muchas gracias,

dejame decirte porque quiero usar LastOpenPrice(OP_BUY) y LastOpenPrice(OP_SELL) porque quiero usarlos en algunas condiciones como

if ( LastOpenPrice(OP_BUY) -LastOpenPrice(OP_SELL)) > 0.0090 // por esa razón necesito mantener la última orden abierta para la compra y la última orden abierta para la venta, así que necesito una última orden separada una para la compra y otra para la venta.

-----

para el doble LastClosePrice() // puedo usar if ( OrderType() == OP_BUY || OP_SELL) en lugar de *** OrderType() < OP_BUYLIMIT*** para obtener el último cierre sea de compra o de venta.

----

para la función número 4:

4- función para obtener y mantener el precio de cierre anterior a la última orden de cierre de compra o venta. // quiero obtener la orden cerrada antes de la última orden cerrada de compra o venta .

gracias