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

 
Empieza a aprender a codificar y deja de bichear tu hilo.
 

Sólo necesito un poco de ayuda, entonces todo estará bien (necesito saber la última orden de compra, la última orden de venta y la orden anterior para cualquier compra o venta).

Muchas gracias.

int LastOpenTicketForBuy(){
    datetime lastTime  = 0;
    int      lastTicket = -1; // None open.
    int magi.number=0;
    //for(int pos=0; pos<OrdersTotal(); i++) {
      OrderSelect(pos, SELECT_BY_POS);
    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.
    &&  OrderOpenTime()     >  lastTime
    && OrderType()==OP_BUY
    ){
      lastTime   = OrderOpenTime();
      lastTicket = OrderTicket();
    }
    return(lastTicket);
}

int LastOpenTicketForSell(){
    datetime lastTime  = 0;
    int      lastTicket = -1; // None open.
    int magi.number=0;
    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.
    &&  OrderOpenTime()     >  lastTime
    && OrderType()==OP_SELL
    ){
      lastTime   = OrderOpenTime();
      lastTicket = OrderTicket();
    }
    return(lastTicket);
}

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

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

chicos,

podrían echar un vistazo y decirme qué es lo que está mal.


Necesito crear algunas funciones para:
1- función para obtener y mantener el último precio de apertura de la orden de compra.
2- función para obtener y mantener el último precio de apertura de la orden de venta.
3- función para obtener y mantener la última orden de cierre de compra o venta

int LastOpenTicketForBuy(){ datetime lastTime = 0 ; int lastTicket = - 1 ; // None open. 
int magi.number= 0 ;
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 )
{ lastTime = OrderOpenTime ();
lastTicket = OrderTicket (); }
return (lastTicket);}

int LastOpenTicketForSell()
{ datetime lastTime = 0 ; int lastTicket = - 1 ; // None open.

int magi.number= 0 ;
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_SELL )
{ lastTime = OrderOpenTime (); 

lastTicket = OrderTicket (); }
return (lastTicket);}

int lastcloseorder()
{ datetime lastTime = 0 ; int lastTicket = - 1 ; // None open. 
int magi.number= 0 ; 
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.
&& OrderCloseTime () > lastTime
&& OrderType ()==OP_BUY||OP_SELL )
{ lastTime = OrderCloseTime (); lastTicket = OrderTicket (); }
return (lastTicket);}




entonces pondré si ((LastOpenTicketForBuy()+LastOpenTi cketForSell())/2)<MarketInfo("EURUSD",MODE_BID)Clo se la posición

 
En su opinión... ¿qué hace return (lastTicket);?
 

¿Quieres decir que debería

1-poner doble LastOpenForBuy() en lugar de int

2-poner doble orderforbuy y luego return( orderforbuy )

de esta manera puedo obtener la última orden abierta para comprar 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);}

 
Hand:

¿Quiere decir que debería

Es una pregunta... No quiero decir nada más que . . . ¿cuál es su respuesta?

Si quieres que te ayude, tienes que responder a mi pregunta... y "no sé" no es una respuesta aceptable. Piénsalo un poco.

 

En su opinión... ¿qué hace return(lastTicket);?

Devuelve el número de ticket del pedido seleccionado actualmente.

 
Hand:

Gracias WHRoeder,

Si necesito obtener la última orden de compra y la última orden de venta y luego compararlas haciendo :

si ( la última orden de compra == OOTlastest )

{ hacer algo }

else

{ } ....... es el código de abajo funcionará.

¿esto realmente funciona?

primer bucle

for(int pos = OrdersTotal()-1; pos >= 0 ; pos--) if (

entra en el segundo

 for(pos--; pos >= 0 ; pos--) if (

pos decrece hasta cero. el segundo bucle termina --> salta de nuevo al primero, y el primer bucle no sabe dónde había quedado pos desde la última vez. lo más probable es que pos = cero.

 

este código posiblemente funcione... sólo hay que cambiar una cosa

la segunda sentencia for

for(pos--; pos >= 0 ; pos--) if (

por un iterador diferente como

for(int a=pos--; a>=0 ; a--) if(// abort the use of pos again and introduce a new iterator, a

y de la misma manera, sustituir pos por el nuevo iterador (en este caso, a) en toda la lógica del segundo bucle SOLO.

 
Hand:

En su opinión... ¿qué hace return(lastTicket);?

Devuelve el número de ticket de la orden actualmente seleccionada.

Usted ha dicho..........................

"necesito crear algunas funciones para
1- función para obtener y mantener el último precio de apertura de la orden de compra.
2- función para obtener y mantener el último precio de apertura de la orden de venta.

3- función para obtener y mantener la última orden de cierre sobre la compra o la venta "

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