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

 

Quieres decir:

double LastOpenPrice(int ordertype)    { 
double OpenPrice;                            
datetime lastOpen;    
for ( int pos = OrdersTotal()- 1 ; pos >= 0 ; pos--)       
if ( OrderSelect (pos, SELECT_BY_POS) // Only my orders w/
    &&OrderMagicNumber() == MagicNumberLong || MagicNumberShort // my magic number
    &&OrderSymbol() == Symbol()    // and my pair.
    &&OrderType() == ordertype       
    &&OrderOpenTime() > lastOpen )  {        
            if(OpenPrice = OrderOpenPrice()&&OpenPrice!=0)          
               break;          }
               return (OpenPrice);} //  
Por favor, necesito ver su suloción
 
Hand:

Por favor, necesito ver su suloción

NO... necesitas aprender... haz un esfuerzo por ti mismo para variar, lee el libro ( https://book.mql4.com// ) lee la documentación ( https://docs.mql4.com// )... tener diferentes números mágicos para las operaciones largas y para las operaciones de ordenación es una idiotez y NO es necesario. . .
 

quizás de esta manera funcione .

if ( ( (LastOpenPrice(OP_SELL)+0.0030)<MarketInfo("EURUSD",MODE_BID) )&&( LastOpenPrice(OP_SELL)>0) ) <--------------- 0+0.0030=0.0030<Bid: TRUE // creo que funcionará
{ BUY("EURUSD",B_EURUSD_LS_1,B_EURUSD_TP_1,B_EURUSD_SL_1,B_EURUSD_TS_1,"if (

 
Hand:

quizás de esta manera funcione .

if ( ( (LastOpenPrice(OP_SELL)+0.0030)<MarketInfo("EURUSD",MODE_BID) )&&( LastOpenPrice(OP_SELL)>0) ) <--------------- 0+0.0030=0.0030<Bid: TRUE // creo que funcionará
{ BUY("EURUSD",B_EURUSD_LS_1,B_EURUSD_TP_1,B_EURUSD_SL_1,B_EURUSD_TS_1,"if (

Cuando pregunto "¿cuál es su plan de juego?" lo digo en serio. Para decirlo de nuevo, ¿cuál es su ESTRATEGIA?

Si usted NO quiere negociar cuando no hay un último precio abierto, ¿puede considerar como tal?

if(LastOpenPrice(OP_SELL) <=0) { ¿regresar? ¿hacer qué? -----caso de vender

if(LastOpenPrice(OP_BUY) <=0) { ¿regresar?...o ¿hacer qué? ------caso de comprar

entonces, el resto del código procede....

con un error como este, me temo que no puedes "tapar los agujeros" aquí y allá en tus códigos. Tu estrategia parece arruinada.

Este tipo de error "informa" que necesitas revisar la estrategia a un nivel superior ---> CUANDO operar (y cuando no). ¿Tienes respuestas, ideas, etc, a eso?

 
Hand:

Quieres decir:

Por favor necesito ver tu suloción

Me olvidé completamente de mencionar sobre esto pero esto el más importante para la totalidad, y la eternidad de las cosas, relacionadas. Es sólo una locura total que USTED bonifica el pensamiento para ver MI = SU solución, para lo cual no lo hago.

¿En qué lugar del planeta tierra estás? ¿Quién crees que soy? ¿Tu ángel de la guarda, chamán, genio personal, etc.?

Lo que sea que vengas a poner en tu cabeza, realmente no puedo ayudar, solo para tu información.

 

chicos,

Por favor, comprueben las siguientes funciones (si son correctas o no) necesito hacer estas condiciones

if ( lastOpenedOpenPriceBuy()-lastOpenedOpenPriceSell() )>=0.0060

{ hacer algo }

double lastOpenedOpenPriceBuy()
  {
   double ret = 0;
   datetime time=0;
   for(int i=0; i<OrdersTotal(); i++) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()==OP_BUY && OrderOpenTime()>time) {
         time = OrderOpenTime();
         ret = OrderOpenPrice();
      }
   }
   
   return(ret);
  }


double lastOpenedOpenPriceSell()
  {
   double ret = 0;
   datetime time=0;
   for(int i=0; i<OrdersTotal(); i++) {
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()==OP_SELL && OrderOpenTime()>time) {
         time = OrderOpenTime();
         ret = OrderOpenPrice();
      }
   }
   
   return(ret);
  }



double lastClosedClosePrice()
  {
   double ret = 0;
   datetime time = 0;
   for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
      OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
      if(OrderType()<2 && OrderCloseTime()>time) {
         time = OrderCloseTime();
         ret = OrderClosePrice();
      }
   }
   
   return(ret);
  }



double beforelastClosedClosePrice()
  {
   double ret = 0;
   double ret2 = 0;
   datetime time = 0;
   for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
      OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
      if(OrderType()<2 && OrderCloseTime()>time) {
         time = OrderCloseTime();
         ret = ret2;
         ret2 = OrderClosePrice();
      }
   }
   if(ret==0) {
      ret = ret2;
   }
   
   return(ret);
  }
 

Yo puedo ayudar con la primera, tal vez otros puedan venir para el resto.

<-------------------- can consider to use if(OrdersTotal()>0..then proceed  ---------------->
double lastOpenedOpenPriceBuy()  <----- what a name...confusing, maybe.
  {
   double ret = 0;
   datetime time=0; <---- can consider setting Lowest Limit to -9999, at least -1, rather than 0.  
   for(int i=0; i<OrdersTotal(); i++) { <----- do consider counting down.
      OrderSelect(i, SELECT_BY_POS, MODE_TRADES); <------ This returns some BOOLEAN result.then what? -----(?)
      if(OrderType()==OP_BUY && OrderOpenTime()>time) { <------ This can return runtime OrderSelect ERR bec. of above line (?). ------ (!) 
         time = OrderOpenTime(); 
         ret = OrderOpenPrice();
      }
   }
   
   return(ret);<------ return double as UnNormalized price. you sure about this?
  }

 

Tenga en cuenta que:

cuando pongo esta condición

if (  ((lastOpenedOpenPriceBuy()-0.0030)>MarketInfo("EURUSD",MODE_BID))  ) 
   {  SELL("EURUSD",S_EURUSD_LS_1,S_EURUSD_TP_1,S_EURUSD_SL_1,S_EURUSD_TS_1,"if (  ( (lastOpenedOpenPriceBuy()-0.0030)>MarketInfo(EURUSD,MODE_BID) )  )") ;}

no funciona, pero cuando añadí una condición más

if (  (lastOpenedOpenPriceBuy()>0)&&((lastOpenedOpenPriceBuy()-0.0030)>MarketInfo("EURUSD",MODE_BID))  ) 
   {  SELL("EURUSD",S_EURUSD_LS_1,S_EURUSD_TP_1,S_EURUSD_SL_1,S_EURUSD_TS_1,"if (  ( (lastOpenedOpenPriceBuy()-0.0030)>MarketInfo(EURUSD,MODE_BID) )  )") ;}
parece que está bien (lastOpenedOpenPriceBuy()>0)
 
<-------------------- puede considerar usar if(OrdersTotal()>0..then proceed---------------->
double lastOpenedOpenPriceBuy() <-----  que nombre...confuso, tal vez.
{double ret = 0; datetime time=0;<---- puede considerar establecer el Lowest Limit a -9999, al menos -1, en lugar de 0 .Ningún tiempo de apertura de la orden podría <= 0for(int i=0; i<OrdersTotal(); i++) { <----- considera la cuenta atrás .Nada diferente.OrderSelect(i, SELECT_BY_POS, MODE_TRADES); <------ Esto devuelve algún resultado BOOLEAN.¿Entonces qué? -----(?) Si en el bucle, la orden debe existir, cuando la orden exista, el OrderSelect no causará error. Sino está en el bucle, esta línea no se ejecutará.if(OrderType()==OP_BUY && OrderOpenTime()>time) { <------ Esto puede devolver OrderSelect ERR en tiempo de ejecución debido a la línea anterior (?). ------ (!)La misma razón que la última línea.
time = OrderOpenTime(); ret = OrderOpenPrice
(); } } return(ret);<------ return double as UnNormalized price. ¿estás seguro de esto? Ya define ret = 0 en la primera línea.}
 

Vaya, vaya, eres simplemente increíble. Gracias por señalar esos esp, esto:

OrderSelect(i, SELECT_BY_POS, MODE_TRADES); <------Si en el bucle, la orden debe existir, cuando la orden existe, el OrderSelect no causará error. Sino está en el bucle, esta línea no se ejecutará.Creo que esta línea tuya tiene algunos poderes de Houdini para desaparecer del bucle cuando no hay órdenes, reapareciendo cuando las hay.