Discussion de l'article "Guide étape par étape pour rédiger un conseiller expert en MQL5 pour les débutants" - page 12

 

Veuillez m'excuser, je n'ai pas compris comment utiliser ce bouton à l'époque, mais je pense maintenant que c'est le cas.

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);
}
[Supprimé]  
Grenjohn:

Veuillez m'excuser, je n'avais pas compris à l'époque comment utiliser ce bouton, mais je pense maintenant que je l'ai compris.

Tout est une question de condition :

if( OrdersTotal() == 0 )

Il manque une vérification que la date que vous avez spécifiée date1 a eu lieu. Or, vous devriez ouvrir un ordre immédiatement au premier tick, s'il n'y a pas d'ordre ouvert ! En d'autres termes, vous devez faire la même chose qu'ici,

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

mais en spécifiant le jour, l'heure, la minute et la seconde (quelques secondes) corrects.

Oui et encore une chose. Les prix sl et tp doivent être normalisés, sinon il peut y avoir des erreurs.

 

Quelque chose qu'il a cessé de joindre au graphique et dites-moi ce que cela signifie de normaliser les prix sl et tp ?

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:

Pardonnez-moi, je ne comprenais pas comment utiliser ce bouton, maintenant je pense que je le comprends.

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 - pas de position
   case 0:
   {
     // Lorsque l'heure de la date1 arrive, ouvrir une position
     if ( TimeCurrent() >= date1 )
     {
       if ( ticket <= 0 )
       {
         ticket = OrderSend( ... );
       }
       if ( ticket > 0 )
       {
         flag = 1;
       }
     }
     break;
   }
   // 1 était une position
   case 1:
   {
     // Fermer la position lorsque l'heure de la date2 arrive
     if ( TimeCurrent() >= date2 )
     {
        if ( ticket > 0 && OrderSelect( ticket, SELECT_BY_TICKET ) && OrderCloseTime() <= 0 )
        {
           if ( OrderClose( ticket, ... ) == true )
           {
              ticket = 0;
              flag = 2;
           }
        }
     }
     break;
   }
 }
}

Lorsque la date1 arrive , nous ouvrons une position, lorsque la date2 arrive, nous la fermons, après cela nous ne faisons rien jusqu'au redémarrage.

[Supprimé]  
Grenjohn:

Quelque chose qu'il a arrêté de joindre au graphique et s'il vous plaît dites-moi ce que cela signifie de normaliser les prix sl et tp ?

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

Merci beaucoup à tous pour votre aide et votre patience, mais jusqu'à présent, malheureusement, cela ne fonctionne pas !!!?

J'essaie d'ajouter un Expert Advisor, mais il n'est pas ajouté !?!?

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 - pas de position
   case 0:
   {
     // Lorsque l'heure de la date1 arrive, ouvrir une position
     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 était une position
   case 1:
   {
     // Fermer la position lorsque l'heure de la date2 arrive
     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:

Merci beaucoup à tous pour votre aide et votre patience, mais jusqu'à présent, malheureusement, cela ne fonctionne pas !!!?

J'essaie d'ajouter un Expert Advisor, mais il n'est pas ajouté !?!?


Cela signifie que vous n'avez pas créé un Expert Advisor, mais un indicateur.

Créez un nouvel EA à l'aide de l'assistant et remplacez uniquement le code de la fonction OnStart et toutes les variables globales/paramètres externes.

[Supprimé]  
komposter:

Cela signifie que vous n'avez pas créé un Expert Advisor, mais un indicateur.

Créez un nouvel EA à l'aide de l'assistant et remplacez uniquement le code de la fonction OnStart et toutes les variables globales/paramètres externes.

Il est très probable qu'il ait créé un Expert Advisor, mais avec la fonction OnStart(), qui n'est destinée qu'aux scripts.
[Supprimé]  
Grenjohn:

Merci beaucoup à tous pour votre aide et votre patience, mais jusqu'à présent, malheureusement, cela ne fonctionne pas !!!?

J'essaie d'ajouter un Expert Advisor, mais il n'est pas ajouté !?!?


Créez un nouveau Conseiller Expert dans MQL4, copiez le code existant et remplacez la ligne

void OnStart()

par

void OnTick()

Ceci au cas où vous souhaiteriez créer un conseiller expert. Si vous souhaitez créer un script, créez un nouveau script et copiez complètement le code existant sans le modifier (bien qu'un script n'ait aucun sens dans le cas d'une négociation basée sur le temps).

 
Extrait de l'article :
Новый бар характеризуется величиной тикового объема, равной 1, если он больше 1, то выполнение функции OnTick завершается.

Où se trouve le code qui répond à cette description ? Je ne comprends pas quelque chose, ou le code ne contient rien de tel.