Questions des débutants MQL5 MT5 MetaTrader 5 - page 494

 
Nickolay72:
Jusqu'à hier, mon EA n'a ouvert qu'un seul ordre à la fois et le prochain ne s'ouvrira pas tant que je n'aurai pas placé un ordre. Maintenant, comment faire pour que mon EA ouvre des ordres lorsque la barre précédente s'est ouverte au-dessus (au-dessous) du canal ?
 if (CountTrades()==0) CheckForOpen();
   else
  {
   if(CountTrades()<max_trades) CheckForOpen();
  }

Si vous analysez ce fragment de code, alors, selon ce code, si la fonctionCountTrades() renvoie zéro, la condition if (CountTrades()==0) CheckForOpen()sera exécutée, et la fonctionCheckForOpen() sera appelée.Au tick suivant, si l'ordre a été ouvert, la fonctionCountTrades() doit retourner 1, puis la condition else est remplie.

....  
else
  {
   if(CountTrades()<max_trades) CheckForOpen();
  }

S'il apparaît que CountTrades()<max_trades, la fonctionCheckForOpen() sera exécutée une nouvelle fois.Selon le code, la valeur de la variable max_trades est égale à 3. Ainsi, vous aurez 4 ordres ouverts.

Si l'EA n'ouvre pas les ordres correctement, vérifiez la logique, dans laquelle vous définissez les conditions d'ouverture des positions dans la fonction CheckForOpen(). Et vérifiez également les conditions de temps si (CurrTime < EaStartTime || CurrTime >= EaEndTime). Si j'étais vous, j'utiliserais la fonction if (TimeHour(TimeCurrent())) = heure de départ && TimeMinute(TimeCurrent()) = minutes de départ ). L'heure et les minutes sont définies dans des variables de type int ou uint.

 
Artyom Trishkin:
Si l'Open Bar numéro 1 est au-dessus ou au-dessous du canal.
Mince, je viens de voir que j'ai un trade autour de la limite inférieure du canal, j'ai juste copié les ordres et n'ai pas corrigé le bas vers le haut, je vais essayer la version corrigée).
//-----Ставим ордер на покупку.
 if(PriceCurrentOpen<PriceLow&&PriceCurrentOpen<PriceCurrentClose&&SignalCurrent<MacdCurrent&&SignalMAPrevious<SignalMAThis)
 {
  ticket=OrderSend(NULL,OP_BUY,Lots,Ask,slippage,0,0,"5",magic,0,Blue);
   if(ticket>0)
    return; 
 }
//-----Ставим ордер на продажу.
 if(PriceCurrentOpen>PriceLow&&PriceCurrentOpen>PriceCurrentClose&&SignalCurrent>MacdCurrent&&SignalMAPrevious>SignalMAThis)
 {
  ticket=OrderSend(NULL,OP_SELL,Lots,Bid,slippage,0,0,"5",magic,0,Red);
   if(ticket>0)
    return;

	          
 
Vitalii Ananev:

Ainsi, vous aurez 4 ordres ouverts.

Si l'EA n'ouvre pas les ordres correctement, vérifiez la logique, où vous spécifiez les conditions dans lesquelles les positions doivent être ouvertes dans la fonction CheckForOpen(). Et vérifiez également les conditions de temps si (CurrTime < EaStartTime || CurrTime >= EaEndTime). J'utiliserais la fonction if (TimeHour(TimeCurrent()) = heure de départ && TimeMinute(TimeCurrent()) = minutes de départ ). L'heure et la minute sont définies dans des variables de type int ou uint.

Je voulais ouvrir 3 ordres mais ce n'était pas ce que je souhaitais ; je voulais jusqu'à trois, mais un ordre pour chaque nouvelle barre.

Il n'y a pas de problème de temps, il fonctionne dans une période de temps strictement spécifiée.

 
Nickolay72:

Je voulais jusqu'à trois ordres, mais un ordre pour chaque nouvelle barre. Il arrive que plusieurs barres d'affilée donnent des signaux positifs.

Il n'y a pas de problème de temps, il fonctionne dans une période de temps strictement spécifiée.

La condition : si la barre de la dernière ouverture de position n'est pas égale à zéro et que le nombre de positions ouvertes est inférieur au maximum autorisé, alors une nouvelle position peut être ouverte.
 

Karputov 2016.01.13_05:14AM. Bonjour M. Karputov ! J'ai écrit dans MQL4

.mq4, on a le fichier .ex4. Mais cela ne fonctionne pas dans le testeur de stratégie. Final

était d'écrire un EA pour MT4. Dans MQL5, j'ai obtenu .mq5 et

Les fichiers .ex5. Et le fichier .ex5 a ouvert des métiers. La quatrième version est différente de

La quatrième version a quelques différences avec la cinquième, et je ne suis pas encore un bon programmeur MQL, c'est pourquoi j'ai obtenu de mauvais résultats.

Je n'ai pas compris ce qui ne va pas maintenant, le fichier journal du testeur a été enregistré. Я

Je vais essayer de le traduire. En attendant, je vous demande de me dire

Qu'est-ce qui ne va pas avec le code du programme ? Pendant que vous répondez, je vais essayer

pour le découvrir.
J'ai été surpris de trouver dans ma quatrième version de l'éditeur l'option d'écrire

J'étais sur le point de l'écrire. Mais je ne l'ai pas écrit. Je joins

les fichiers journaux du testeur et une capture d'écran. 05:30 MSC. Journal du testeurKarputovKarputov

Dossiers :
20160112.log  7 kb
 
Николай Никитюк:

2016.01.13_05:14AM MOSCOW TIME. Bonjour M. Karputov ! J'ai écrit en MQL4

.mq4, on a un fichier .ex4. Mais cela ne fonctionne pas dans le testeur de stratégie.

Pourquoi avez-vous collé le code sous forme d'image ? )) Qui les comprendra ?
 
Николай Никитюк:


Veuillez insérer votre code correctement dans le post :Insérer le code correctement dans le forum
 

Où puis-je trouver des descriptions d'erreurs ?

Je ne comprends pas ce que le compilateur n'aime pas, pourquoi il m'avertit ?

vérifier la précédence des opérateurs pour détecter une éventuelle erreur ; utiliser les parenthèses pour clarifier la précédence


if(Low[X]>PriceBuy && High[X]>PriceBuy ||
               Low[X]<PriceBuy && High[X]<PriceBuy)
               calcBarX++;

et ici

l'expression n'a aucun effet


         for(calc_day;calc_day>0; calc_day--)
           {
            if(iLow(Symbol(),TF_3Day,calc_day)<iLow(Symbol(),TF_3Day,calc_day+1)) calc_day_OK++;
            else break;
           }

 
-Aleks-:

Où puis-je trouver des descriptions d'erreurs ?

Je ne comprends pas ce que le compilateur n'aime pas, pourquoi me prévient-il ?

En fait, outre le texte de l'erreur, le compilateur vous indique également le numéro de la ligne de code où l'erreur s'est produite et sa position dans la ligne.
 
Karputov Vladimir:
En fait, outre le texte de l'erreur, le compilateur signale également le numéro de la ligne de code où se trouve l'erreur et sa position dans la ligne.
Il en est ainsi - dans le premier cas sur les signes de comparaison à tour de rôle - apparemment entre le "ou" il faut mettre une parenthèse, et dans le deuxième cas il jure sur la parenthèse dans laquelle est écrite l'expression logique.
Raison: