Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1239

 
BarCloseB1 = iClose(nameSym,xPeriod,xshiftBar);
BarCloseB1Signal = iClose(nameSymSignal,xPeriod,xshiftBar)

Bonne journée !

J'apprends la valeur de clôture pour le symbole actuel et l'autre (celle du signal pour la barre actuelle) lors de l'ouverture d'une nouvelle barre horaire.

Mais en réalité, la valeur de l'instrument courant correspond, tandis que la valeur de l'instrument de signal prend la valeur de la barre précédente, c'est-à-dire que si xshiftBar = 1, alors il prendxshiftBar=2 pour le signal 1, c'est-à-dire une barre de plus.

 
Vitaly Muzichenko:

Vous ne pouvez retirer que ce que vous avez gagné grâce à cette ressource, qui est la vente de logiciels, de signaux et de puissance informatique. Ce qui est inscrit ne peut être dépensé que pour cette ressource.

Vitaly, vous vous trompez. Vous devez d'abord retirer de l'argent, et ensuite, si vous en avez besoin, vous pouvez le déposer.

 
Yerkin Sagandykov:

Bonne journée !

J'apprends la valeur de clôture pour le symbole actuel et l'autre (celle du signal pour la barre actuelle) lors de l'ouverture d'une nouvelle barre horaire.

Mais en réalité, la valeur de l'instrument courant correspond, tandis que la valeur de l'instrument de signal prend la valeur de la barre précédente, c'est-à-dire que si xshiftBar = 1, alors il prendxshiftBar=2 pour le signal 1, c'est-à-dire une barre de plus.

Pour le vérifier, remplacez les variables par les valeurs 1 et 2. Vous saurez alors où se trouve l'erreur.

 
Alekseu Fedotov:

Avec iCustom

Merci, mais pouvez-vous me dire pourquoi les niveaux dessinés descendent trop vite ?
Dossiers :
snake.mq4  16 kb
 
Alexey Viktorov:

Pour vérifier, mettez les valeurs 1 et 2 à la place des variables. Vous saurez alors où se trouve l'erreur.

Le problème n'est pas dans les valeurs des variables à mon avis. j'ai juste un recalcul dans mon code à l'arrivée d'une nouvelle heure. et il s'avère que par le symbole actuel nouvelle barre apparaît et calcule la valeur de la barre =1, mais par le symbole de signal est une nouvelle barre n'a pas encore formé ou quelque chose et calcule les valeurs pour la barre =2

 if  ( iTime(nameSym, LPeriod, 0 ) == counted_bar ) return; 
Обработчик события "новый бар"
Обработчик события "новый бар"
  • www.mql5.com
Для создателей индикаторов и экспертов всегда был актуален вопрос написания экономичного кода с точки зрения времени выполнения. Можно подойти к решению этой задачи с разных сторон. Из этой обширной темы в данной статье будет затронут, казалось бы уже решенный вопрос: проверка появления нового бара. Это достаточно популярный способ ограничения...
 
Yerkin Sagandykov:

Le problème n'est pas dans les valeurs de la variable à mon avis. J'ai juste un recalcul dans mon code, et il s'avère que pour le symbole actuel une nouvelle barre apparaît et calcule la barre =1, mais pour le symbole du signal une nouvelle barre n'a pas encore été formée et calcule les valeurs pour la barre =2

Je veux que ce soit exact et non pas "selon mon opinion". Je pourrai alors dire avec certitude que la nouvelle barre apparaît sur le symbole du signal. Et en quelque sorte attendre ce nouveau bar. Il existe plusieurs options, c'est à vous de décider laquelle utiliser.

 

Salutations. Pourriez-vous me donner un indice ?

J'ai besoin de calculer le drawdown maximum sur les ordres d'un EA particulier.

Si je compte par tous les ordres, alors je le fais, et cela correspond aux résultats de MT elle-même :

      if(AccountEquity()>max_equity){
         max_equity=AccountEquity();
      }   
      if(max_drawdown_total<max_equity-AccountEquity()){
         max_drawdown_total=max_equity-AccountEquity();
      } 

Je le calcule de cette façon pour un conseiller expert :

      if(MoneyCount()>max_equity_1){
         max_equity_1=MoneyCount();
      }   
      if(max_drawdown_total_1<max_equity_1-MoneyCount()){
         max_drawdown_total_1=max_equity_1-MoneyCount();
      }

double MoneyCount(){
   double count=0;
   for(int i=OrdersTotal()-1; i>=0; i--){
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)){
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==magic){
            count+=(OrderProfit()+OrderSwap()+OrderCommission()); //
         }   
      }
   }
   return count;
}

Je pense que les résultats devraient être les mêmes dans le testeur, mais il y a une différence (pas immédiatement) d'un peu plus d'un pour cent. Qu'est-ce que je compte mal ?

 
Bon après-midi. Pourriez-vous me conseiller sur la langue à privilégier : mql4 ou 5 ? Et pourquoi mt4 a un méta-éditeur intégré 5, ou est-ce pour mql4 aussi ?
 
Bonjour, pourriez-vous nous indiquer comment refléter les valeurs des indicateurs dans le code lorsque l'un est superposé à l'autre, par exemple ATR est superposé à MA, est-ce possible dans MT4 ?
 
ZahvatkiN:
Bonjour, pourriez-vous nous indiquer comment refléter les valeurs des indicateurs dans le code lorsqu'un indicateur est superposé à un autre, par exemple ATR est superposé à MA, est-ce possible dans MT4 ?

Pour MQL4, utilisez iMAOnArray(), pour MQL5 - lors de la création d'un handle iMA, spécifiez le handle d'un ATR précédemment créé au lieu du prix auquel la moyenne mobile est calculée.

Raison: