[Archive] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 2. - page 463

 

Bonjour à tous !

Pouvez-vous me dire comment apprendre à l'Expert Advisor à se souvenir qu'il y a eu un fait d'ouverture d'un ordre (après avoir fermé l'ordre). Les variables logiques globales conviennent, mais uniquement pour un seul instrument. Si j'ai plus d'un symbole dans une borne, les variables changent et ne fonctionnent pas comme prévu.

 
demlin:

Bonjour à tous !

Pouvez-vous me dire comment apprendre à l'Expert Advisor à se souvenir qu'il y a eu un fait d'ouverture d'un ordre (après avoir fermé l'ordre). Les variables logiques globales conviennent, mais uniquement pour un seul instrument. Si j'ai plus d'un symbole dans une borne, les variables changent et ne fonctionnent pas comme prévu.


Chaque outil a donc sa propre variable globale).
 
tol64:

Chaque outil a donc sa propre variable globale).
C'est logique, mais comment faire pour que le programme génère les noms ? Je n'ai pas envie de fourrer manuellement 60 variables dans le code))).
 

Bonjour à tous !

J'ai des difficultés... J'ai travaillé sur l'Expert Advisor 24 heures sur 24, aujourd'hui sur EUR/USD j'avais une condition pour ouvrir un short, (l'ouverture de la bougie précédente était supérieure à la MA, et sa clôture est inférieure à la MA), mais l'ordre ne s'est pas ouvert, j'ai essayé d'ouvrir cette section dans le testeur, l'ordre s'est ouvert comme une belle,

Où est l'erreur dans le code - je ne comprends pas, j'ai spécifiquement inséré la condition, si l'ordre n'a pas ouvert - essayer de l'ouvrir 10 fois, mais il ne semble pas aider, s'il vous plaît aider un débutant ...

void CheckForOpensell()
  {
   double maopensell;
   int    ticketsell=0;


//---- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//---- get Moving Average 
   maopensell=iMA(NULL,TF,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//---- sell conditions
   if(Open[1]>maopensell && Close[1]<maopensell)
   for (int it=1; it<=10; it++)
    {
      while (!IsTradeAllowed()) Sleep(5000); 
      RefreshRates();
      ticketsell=OrderSend(Symbol(),OP_SELL,LotsOptimizedsell(),Bid,3,0,0," MA Sell M"+TF,MAGICMA,0,Red);
      if(ticketsell>0)
         {
          OrderModify (ticketsell,OrderOpenPrice(),Bid+StopLoss*Point,Bid-TakeProfit*Point,0,Gold);
          return;  
         }
      
      else
       {
        int err=GetLastError();
        if (err==128 || err==142 || err==143 || err==144) 
         {
           Sleep(2000);
           Print("Error(",err,") opening position: ",ErrorDescription(err),", try ",it);
           continue;
         }
        if (err==146) while (IsTradeContextBusy()) Sleep(2000);
        Print("Error(",err,") opening position: ",ErrorDescription(err),", try ",it);
        if (err==2 || err==64 || err==65 || err==4110 || err==4111) break;
        Sleep(2000);
       }
      
     }
  }
 
Abylhat:

Bonjour à tous !

J'ai des difficultés... J'ai travaillé sur l'Expert Advisor 24 heures sur 24, aujourd'hui sur EUR/USD j'avais une condition pour ouvrir un short, (l'ouverture de la bougie précédente était supérieure à la MA, et sa clôture est inférieure à la MA), mais l'ordre ne s'est pas ouvert, j'ai essayé d'ouvrir cette section dans le testeur, l'ordre s'est ouvert comme une belle,

Si la commande n'a pas été ouverte, j'ai essayé de l'ouvrir 10 fois, mais cela n'a pas aidé, s'il vous plaît aidez un débutant ...


Il est très possible que le problème se situe dans cette zone.

 if(Volume[0]>1) return;

Les signaux présentant une telle condition peuvent être ignorés. Mais dans le testeur, ils fonctionneront à coup sûr.

Il n'y a pas de saut de tique dans le testeur

 
Vinin:


Il est très possible que le problème se situe dans cette section.

Les signaux présentant cette condition peuvent être manqués. Mais ils fonctionneront certainement dans le testeur.

Pas de saut de tique dans le testeur


Merci, pourriez-vous me dire comment définir la condition différemment ?
 
Abylhat:

Merci, pourriez-vous me dire comment définir la condition différemment ?

int start(){
   static int prevtime=0;
   if (Time[0]==prevtime) return(0);
   prevtime=Time[0];

//
   return(0);
}
Vous pouvez utiliser TimeCurrent() au lieu de Time[0].
 
demlin:

Bonjour à tous !

Pouvez-vous me dire comment apprendre à l'Expert Advisor à se souvenir qu'il y a eu un fait d'ouverture d'un ordre (après avoir fermé l'ordre). Les variables logiques globales conviennent, mais seulement pour un seul instrument. S'il y a plusieurs symboles dans un terminal, les variables vont changer et ne fonctionneront pas comme prévu.

Alors, est-ce que le conseiller expert négocie plusieurs symboles à la fois ?

S'il ne négocie qu'un seul instrument, le numéro magique du conseiller expert peut être ajouté au nom de la variable globale.

 
rlx:

Le conseiller expert négocie-t-il plus d'un instrument à la fois ?

S'il n'en négocie qu'une, le numéro de magie du conseiller expert peut être ajouté au nom de la variable globale.

Le conseiller expert négocie plusieurs instruments en même temps.
 
Vinin:

Vous pouvez utiliser TimeCurrent() au lieu de Time[0].

merci, je vais postuler et tester....
Raison: