Discusión sobre el artículo "Guía paso a paso para escribir un Expert Advisor en MQL5 para principiantes" - página 12

 

Por favor, perdóname, no entendía cómo usar este botón en ese momento, ahora creo que sí.

extern int tp = 1000;
extern int sl = 1000;
extern double Lots = 0.2;
int ticket;
void OnStart()
{
datetime date1=D'2014.10.28.13.22.13';
 if(OrdersTotal()==0)
 {
 ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-sl*Point,Bid+tp*Point,"",123,0,Red);
 }
 if (OrdersTotal()==1 && Hour( )==13 && Minute( )==23 && Seconds ( )>=00)
 {
 bool select1=OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
 bool close1=OrderClose(ticket,Lots,Bid,20,Green);
 }
 return(0);
}
[Eliminado]  
Grenjohn:

Por favor, perdóname, entonces no entendía cómo usar este botón, ahora creo que sí.

Se trata de la condición:

if( OrdersTotal() == 0 )

Le falta comprobar que la fecha que ha especificado date1 ha ocurrido. Ahora debería abrir una orden inmediatamente con el primer tick, ¡si no hay órdenes abiertas! Es decir, tiene que hacer lo mismo que aquí,

if (OrdersTotal()==1 && Hour( )==13 && Minute( )==23 && Seconds ( )>=00)

pero especifique el día correcto, hora, minuto, segundo (unos pocos segundos).

Sí y una cosa más. Los precios sl y tp deben ser normalizados, de lo contrario puede haber errores.

 

Algo que ha dejado de unirse a la carta y por favor, dime lo que significa normalizar sl y tp precios?

extern int tp = 1000;
extern int sl = 1000;
extern double Lots = 0.3;
int ticket;
void OnStart()
{
datetime date1=D'2014.10.28.15.08.30';
 if(OrdersTotal()==0 && Hour( )==15 && Minute( )==08 && Seconds( )>=30)
 {
 ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-sl*Point,Bid+tp*Point,"",123,0,Red);
 }
 if (OrdersTotal()==1 && Hour( )==15 && Minute( )==09 && Seconds( )>=00)
 {
 bool select1=OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
 bool close1=OrderClose(ticket,Lots,Bid,20,Green);
 }
 return(0);
}
 
Grenjohn:

Por favor perdonadme, no entendía como usar este botón, ahora creo que lo entiendo.

extern datetime date1=D'2014.10.28 13:22:13';
extern datetime date2=D'2014.10.29 13:22:13';
extern int tp = 1000;
extern int sl = 1000;
extern double Lots = 0.2;
int ticket = 0;

void OnStart()
{
 static int flag = 0;

 switch ( flag )
 {
   // 0 - sin posición
   case 0:
   {
     // Cuando llegue la hora de date1, abre una posición
     if ( TimeCurrent() >= date1 )
     {
       if ( ticket <= 0 )
       {
         ticket = OrderSend( ... );
       }
       if ( ticket > 0 )
       {
         flag = 1;
       }
     }
     break;
   }
   // 1 era una posición
   case 1:
   {
     // Cierra la posición cuando llega la hora date2
     if ( TimeCurrent() >= date2 )
     {
        if ( ticket > 0 && OrderSelect( ticket, SELECT_BY_TICKET ) && OrderCloseTime() <= 0 )
        {
           if ( OrderClose( ticket, ... ) == true )
           {
              ticket = 0;
              flag = 2;
           }
        }
     }
     break;
   }
 }
}

Cuando ocurre la fecha1 abrimos una posición, cuando ocurre la fecha2 la cerramos, después de eso no hacemos nada hasta reiniciar.

[Eliminado]  
Grenjohn:

Algo que ha dejado de unirse a la carta y por favor dígame lo que significa normalizar sl y tp precios?

https://www.mql5.com/es/docs/convert/normalizedouble
Документация по MQL5: Преобразование данных / NormalizeDouble
Документация по MQL5: Преобразование данных / NormalizeDouble
  • www.mql5.com
Преобразование данных / NormalizeDouble - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 

Muchas gracias a todos por su ayuda y por su paciencia, pero hasta ahora, por desgracia, no funciona!!!?

Estoy tratando de añadir un Asesor Experto, pero no se agrega!!!?

extern datetime date1=D'2014.10.29 22:29:10';
extern datetime date2=D'2014.10.29 21:30:00';
extern int tp = 1000;
extern int sl = 1000;
extern double Lots = 0.30;
int ticket = 0;
void OnStart()
{
 static int flag = 0;

 switch ( flag )
 {
   // 0 - sin posición
   case 0:
   {
     // Cuando llegue la hora de date1, abre una posición
     if ( TimeCurrent() >= date1 )
     {
       if ( ticket <= 0 )
       {
         ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,0,Bid-sl*Point,Bid+tp*Point,"",123,0,Red);
       }
       if ( ticket > 0 )
       {
         flag = 1;
       }
     }
     break;
   }
   // 1 era una posición
   case 1:
   {
     // Cierra la posición cuando llega la hora date2
     if ( TimeCurrent() >= date2 )
     {
        if ( ticket > 0 && OrderSelect( ticket, SELECT_BY_TICKET ) && OrderCloseTime() <= 0 )
        {
           if ( OrderClose( ticket,Lots,Bid,20,Green) == true )
           {
              ticket = 0;
              flag = 2;
           }
        }
     }
     break;
   }
 }
}


 
Grenjohn:

Muchas gracias a todos por su ayuda y por su paciencia, pero hasta ahora, por desgracia, no funciona!!!?

Estoy tratando de añadir un Asesor Experto, pero no se agrega!!!?


Significa que no ha creado un Asesor Experto, sino un indicador.

Cree un nuevo EA a través del asistente y reemplace sólo el código de la función OnStart y todas las variables globales/parámetros externos.

[Eliminado]  
komposter:

Significa que no ha creado un Asesor Experto, sino un indicador.

Cree un nuevo EA a través del asistente y reemplace sólo el código de la función OnStart y todas las variables globales/parámetros externos.

Lo más probable es que haya creado un Asesor Experto, pero con la función OnStart(), que es sólo para scripts.
[Eliminado]  
Grenjohn:

Muchas gracias a todos por su ayuda y por su paciencia, pero hasta ahora, por desgracia, no funciona!!!?

Estoy tratando de añadir un Asesor Experto, pero no se agrega!!!?


Cree un nuevo Asesor Experto en MQL4, copie el código existente allí y reemplace la línea

void OnStart()

por

void OnTick()

Esto es en caso de que desee crear un Asesor Experto. Si desea crear un script, cree un nuevo script y copie completamente el código existente allí sin cambios (aunque no tiene sentido un script en caso de comercio basado en el tiempo).

 
Del artículo:
Новый бар характеризуется величиной тикового объема, равной 1, если он больше 1, то выполнение функции OnTick завершается.

¿Dónde está el código que satisface esta descripción? No entiendo algo, o no existe tal cosa en el código.