Preguntas "para" de los operadores de bicicletas - página 11

 
WhooDoo22:


Creo que no has entendido lo que quiero decir. . . si añado unos corchetes quizás quede más claro. ... usted hizo esto ...

Creo que quise hacer esto...

Esto es porque quería que la condición...

se aplicara a la sección de código entre llaves ("{ }").

Entonces, ¿por qué no has hecho ese cambio en tu última versión de tu código . . . si querías hacerlo ¿por qué no lo has hecho?

 
WhooDoo22:

Simon,


El 0 en tu imagen es probablemente de... .


No, no, no... ;)

Hagamos un viaje por el carril de la documentación, ¿de acuerdo? Jajaja.

datetime OrderCloseTime( )
Devuelve la hora de cierre de la orden actualmente seleccionada. Si el tiempo de cierre de la orden no es 0, entonces la orden seleccionada ha sido cerrada y recuperada del historial de la cuenta. El tiempo de cierre de las órdenes abiertas y pendientes es igual a 0.

Nota: El pedido debe ser seleccionado previamente por la función OrderSelect ().


Primero, echemos un vistazo al bloque de código de la función OrderClose() que he codificado recientemente...

A continuación, echemos un vistazo al resultado mostrado en una instantánea del panel de 'Expertos'...

Aaah, ¿qué tenemos aquí? :)

No estoy seguro de lo que quiere decir aquí, ¿puede explicarlo, por favor? el Print(OrderCloseTime()) es obviamente incorrecto pero todavía lo tiene en su código, ¿por qué? ¿qué pasó cuando añadió las 2 líneas de código que sugerí?
 

Simón,

Entonces, ¿por qué no has hecho ese cambio en la última versión de tu código? ... si lo querías hacer, ¿por qué no lo has hecho?

Dame un segundo para echar un vistazo, por favor.

Tenía la intención de codificar esto anteriormente, pero no tengo la intención de codificar esto actualmente. No hay ninguna razón para codificar esto...

   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))       
      {
      if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
      if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}           
      if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
         {
         OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);
         Print(OrderCloseTime());
         GetLastError();
         }
      }

Cuando pueda codificar esto en su lugar...

   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))       
   if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}
   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);
      Print(OrderCloseTime());
     }

Todas las condiciones 'if' se aplican a lo que está dentro de las llaves ("{}"). Añadir llaves a este bloque de código (en la forma en que pretendía codificarlo) es ineficiente y no sirve para nada.


Gracias.

 

Simon,


No estoy seguro de qué punto estás tratando de hacer aquí, ¿puedes explicar por favor?

   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))       
   if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}
   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);
      Print(OrderCloseTime());
     }

// replace above code block with...

   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))       
   if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}
   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);
//      Print(OrderCloseTime());
     }

Haga una vuelta con el EA (sin la función Print()) en el terminal en una cuenta de demostración muy rápido, a continuación, haga clic en el panel "Expertos" y visualizar la ausencia del cero (0) del resto de los resultados en el panel "Expertos".

Observe que no hay ningún 0. Hmm, ¿verdad? ;)

Ahora dé una vuelta al EA (con la función Print() incluida).

Observe que hay un 0 en el panel "Expertos".


Usted hizo una conjetura sobre por qué había un cero en los resultados del panel 'Expertos' anteriormente y estaba en lo cierto (tache "¡Nah-uh-uh! ;)" al principio del mensaje).

El 0 en su imagen es probablemente de . .

Print(OrderCloseTime());

¿Te acuerdas? Seguro que sí :)


el Print(OrderCloseTime()) es obviamente erróneo pero aún lo tienes en tu código, ¿por qué?

Por favor, explica por qué crees que está mal.

Lo tengo en el código para mostrarte un punto. El punto es: El cero aparece en el panel de 'Expertos' debido a que este trozo de código está en el código.


¿Qué pasó cuando añadiste las 2 líneas de código que sugerí?

Actualmente estoy trabajando de manera expedita en esto :)


Gracias

 
WhooDoo22:

el Print(OrderCloseTime()) es obviamente incorrecto pero todavía lo tiene en su código, ¿por qué?

Por favor, explique por qué cree que es incorrecto.

Lo tengo en el código para mostrarte un punto. El punto es: El cero aparece en el panel de "Expertos" debido a que este trozo de código está en el código.


La última imagen que has publicado muestra que la orden del USDJPY se cerró a las 01:45:35... la siguiente línea de código que sigue a la línea que cerró la orden es Print(OrderCloseTime()); y da como resultado un valor de 0... . 0 como fecha es la medianoche del 1 de enero de 1970, que no es cuando cerraste la orden, como señalaste correctamente un valor de retorno de 0 de OrderCloseTime() también puede ser cuando la orden está abierta o es una orden pendiente, bueno tu orden está cerrada, sabes que está cerrada, tu última imagen lo demostró . . entonces, ¿cómo puede ser correcto un valor de 0? la respuesta es que no puede ser correcto, por lo que significa que está mal.

 

Simon,

Estoy trabajando en esto...

   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))       
   if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}           
   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {
      int ClosedTicketNum = OrderTicket();   //  <---- add this line
      
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);
      
      OrderSelect(ClosedTicketNum, SELECT_BY_TICKET);   //  <---- add this line

      Print(OrderCloseTime());
      GetLastError();
     }

Gracias.

 
WhooDoo22:

Simón,

Entonces, ¿por qué no has hecho ese cambio en la última versión de tu código? ... si lo querías hacer, ¿por qué no lo has hecho?

Dame un segundo para echar un vistazo, por favor.

Tenía la intención de codificar esto anteriormente, pero no tengo la intención de codificar esto actualmente. No hay ninguna razón para codificar esto...

Cuando pueda codificar esto en su lugar...

Todas las condiciones 'if' se aplican a lo que está dentro de las llaves ("{}"). Añadir llaves a este bloque de código (en la forma en que yo quería codificarlo) es ineficiente y no sirve para nada.

Bien, mirando este código . . . .

if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))                                  // 1.
if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}                   // 2.
if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}                  // 3.
if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))   // 4.
     {  
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);                   // 5.
      Print(OrderCloseTime());                                                    // 6.
     }

He numerado las líneas para facilitar la discusión.

Mirando la línea 1. ¿Cuál de las otras líneas de código numeradas se ejecutará si OrderStopLoss() y OrderTakeProfit() son ambas0?

 

Simon,

Arreglado, para que funcione como se pretende.

if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}                   // 2.
if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}                  // 3.
if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))                                  // 1.
if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))   // 4.
     {  
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);                   // 5.
      Print(OrderCloseTime());                                                    // 6.
     }

Líneas 2 y 3.

Gracias.

 

Simon,

   if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}
   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))
   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {
      int ClosedTicketNum=OrderTicket();
      
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);

      OrderSelect(ClosedTicketNum,SELECT_BY_TICKET);
      
      Print(OrderCloseTime());
     }

Resultado:

Resultado del panel "Expertos".

¿Por qué la hora de cierre de la orden se representa de esa forma (1357306061)?

¿La razón por la que la función Print() funciona es porque la función OrderSelect() (dentro de las llaves) debe seleccionar la orden cerrada y NO una orden abierta? Esto debe hacerse dentro de las llaves, ¿verdad?) Tricky, tricky.

Gracias.

 

Simon,

Aquí viene... ¡BAM!

   if(OrderType()==OP_BUY){bid_ask=MarketInfo("USDJPY",MODE_BID);}
   if(OrderType()==OP_SELL){bid_ask=MarketInfo("USDJPY",MODE_ASK);}
   if((OrderStopLoss()!=0)&&(OrderTakeProfit()!=0))
   if((OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)&&(OrderSymbol()=="USDJPY"))
     {      
      OrderClose(OrderTicket(),OrderLots(),bid_ask,3,CLR_NONE);

      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==true)
      
      Print(OrderCloseTime());
     }

¡Mejor aún! Jajaja ;)

Gracias.

Archivos adjuntos: