aidez-moi s'il vous plaît [résolu] - page 2

 
MONTREZ LE CODE.
 

bool order= 0;
int ticket;

void OnTick()
  {


  if(order==0)
    {
     double up= iIchimoku (NULL, 5,9,26,52,3,0);
     double down= iIchimoku (NULL,5,9,26,52,4,0);

     if (MathMax (up,down) < Bid )

    int ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
      {
       if( ticket!=1)
        {
         order=1;
        }
      }
    }
  }
j'ai supprimé toutes les autres fonctions que je n'utilise pas, tout mon code est juste ça
Automated Trading and Strategy Testing
Automated Trading and Strategy Testing
  • www.mql5.com
MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions
 

Votre double déclaration de billet.

bool order= 0;
int ticket;

void OnTick()
  {


  if(order==0)
    {
     double up= iIchimoku (NULL, 5,9,26,52,3,0);
     double down= iIchimoku (NULL,5,9,26,52,4,0);

     if (MathMax (up,down) < Bid )

    int ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
      {
       if( ticket!=1)
        {
         order=1;
        }
      }
    }
  }

La déclaration de ticket cache ... bla bla bla ? tu vois je suis le compilateur humain.

Supprimez le deuxième int.

 
mrluck1:

Je mets

bool order et

int ticket

dans les variables globales, et le reste du code dans OnTick, mais il n'y a toujours pas d'entrée maintenant.

Non compilé, non testé

void OnTick()
  {
   double up   = iIchimoku(NULL,5,9,26,52,3,0),
          down = iIchimoku(NULL,5,9,26,52,4,0);
   static bool was_above = true;
   bool is_above = (MathMax(up,down)< Bid);
   if(!was_above && is_above && open_orders()<1)
     {
      if(OrderSend(NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point)<0)
        {
         printf("OrderSend() failed. Error code: %i",GetLastError());    
        }
     }
   was_above = is_above;
  }

int open_orders()
  {
   int count = 0;
   for(int i=OrdersTotal()-1; i>=0; i--) // good habit to count down
     {
      if(!OrderSelect(i,SELECT_BY_POS))  continue;  // select the order
      if(OrderSymbol() != _Symbol)       continue;  // optional check for same symbol
      if(OrderMagicNumber()!= magic_no)  continue;  // optional check for magic number
      if(OrderType() < 2)                count++;   // 0 == OP_BUY and 1 == OP_SELL
     }
   return(count);
  }
 

Marco : J'ai supprimé l'int dupliqué, mais maintenant aucun trade n'est fait, j'ai besoin d'un trade, si le prix> nuage ichimoku, ce code était d'abord génial, mais il a continué à créer de nouveaux trades si le prix était au-dessus du nuage.

J'ai juste besoin d'aide pour coder de manière à ce que le script s'arrête après la première transaction.

Honest Knave : j'ai essayé votre code, j'ai juste défini magic_no qui manquait, cela fonctionne bien, il attend pour le nouveau trade que le prix touche à nouveau le nuage, cela sera vraiment utile pour les prochains projets, mais

j'ai juste besoin qu'il s'arrête après le 1º trade, que dois-je faire ?

Merci à tous pour votre aide

 
bool order= 0;
int ticket;

void OnTick()
  {


  if(order==0)
    {
     double up= iIchimoku (NULL, 5,9,26,52,3,0);
     double down= iIchimoku (NULL,5,9,26,52,4,0);

     if (MathMax (up,down) < Bid )

    ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
      {
       if( ticket!=1)
        {
         order=1;
        }
      }
    }
  }

C'est le problème.

bool order= 0;
int ticket;

void OnTick()
  {


  if(order==0)
    {
     double up= iIchimoku (NULL, 5,9,26,52,3,0);
     double down= iIchimoku (NULL,5,9,26,52,4,0);

     if (MathMax (up,down) < Bid )

    ticket= OrderSend (NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point);
      {
       if( ticket>-1)
        {
         order=1;
        }
      }
    }
  }


Essayez donc ceci et je l'ai déjà signalé dans quelques messages.

Marco vd Heijden:

Notez également que l'OrderSend renvoie soit le numéro de ticket, soit -1 moins un s'il échoue.

Voir.
 
mrluck1:

Honest Knave : j'ai essayé votre code, j'ai juste défini magic_no qui manquait, cela fonctionne bien, il attend un nouveau trade si le prix touche à nouveau le nuage, cela sera vraiment utile pour les prochains projets, mais

J'ai juste besoin qu'il s'arrête après le premier trade, que dois-je faire ?

Merci à tous pour votre aide

Il ne devrait pas trader plus d'une fois... ? C'est ce qu'il fait :

void OnTick()
  {
   double up   = iIchimoku(NULL,5,9,26,52,3,0),
          down = iIchimoku(NULL,5,9,26,52,4,0);
   static bool was_above = true;
   bool is_above = (MathMax(up,down)< Bid);
   if(!was_above && is_above && open_orders()<1)
     {
      if(OrderSend(NULL,0,0.01,Ask,3, Bid-150*Point, Bid+100*Point)<0)
        {
         printf("OrderSend() failed. Error code: %i",GetLastError());    
        }
     }
   was_above = is_above;
  }

int open_orders()
  {
   int count = 0;
   for(int i=OrdersTotal()-1; i>=0; i--) // good habit to count down
     {
      if(!OrderSelect(i,SELECT_BY_POS))  continue;  // select the order
      if(OrderSymbol() != _Symbol)       continue;  // optional check for same symbol
      if(OrderMagicNumber()!= magic_no)  continue;  // optional check for magic number
      if(OrderType() < 2)                count++;   // 0 == OP_BUY and 1 == OP_SELL
     }
   return(count);
  }
 

Honest Knave :

Votre EA est génial, mais il crée de nouveaux trades si le prix descend à nouveau jusqu'au nuage d'ichimoku et revient ensuite à la hausse. Il ne répète pas les ordres dans la même bougie, comme le problème que j'ai eu, et je vais apprendre beaucoup par cet échantillon que vous m'avez donné, pour créer de nouveaux EA, mais j'ai besoin d'un moyen de coder qu'après le premier trade, il n'y ait pas de nouveau trade.

Mais j'ai besoin d'un moyen de coder qu'après la première transaction, l'EA ou le script se ferme immédiatement, donc je n'ai besoin que d'une seule transaction.

Marco : J'ai essayé votre nouvelle mise à jour, mais il ne fait aucun trade, j'ai mis juste la façon dont vous avez posté la dernière, juste enlevé le deuxième int, dans le ticket. Mais le premier trade n'est jamais fait sur strategy tester, que faire maintenant ?

 
mrluck1:

Honest Knave :

Votre EA est super, mais il crée de nouveaux trades si le prix descend à nouveau jusqu'au nuage d'ichimoku et revient ensuite à la hausse. Il ne répète pas les ordres dans la même bougie, comme le problème que j'ai eu, et je vais apprendre beaucoup par cet échantillon que vous m'avez donné, pour créer de nouveaux EA, mais j'ai besoin d'un moyen de coder qu'après le premier trade, il n'y ait pas de nouveau trade.

Mais j'ai besoin d'un moyen de coder qu'après le premier trade, l'EA ou le script se ferme immédiatement, donc je n'ai besoin que d'un seul trade.

Je ne comprends pas ce que vous voulez dire.

Ce code ne peut pas ouvrir plus d'un ordre à la fois.

Mais si l'ordre se ferme, et que le déclencheur se produit à nouveau, il en ouvrira un autre.

Voulez-vous dire que vous voulez qu'une seule transaction soit ouverte JAMAIS ?

 
honest_knave:

Je ne comprends pas ce que vous voulez dire.

Ce code ne peut pas ouvrir plus d'un ordre à la fois.

Mais si l'ordre se ferme, et que le déclencheur se produit à nouveau, il en ouvrira un autre.

Voulez-vous dire que vous voulez qu'une seule transaction soit ouverte à chaque fois ?

Oui monsieur, une seule transaction jamais ouverte, mais votre exemple était excellent, il sera très utile comme base pour créer de nouvelles facilités.