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

 

Après les dernières réponses, l'image est devenue plus claire et la plus évidente est que je ne suis pas destiné à devenir un programmeur :-)

Jusqu'à présent, j'ai commencé par la liste la plus simple et voici ce qu'elle est devenue :


2018.10.20 08:42:43.343 _t1 CADJPY,Daily : tmp1[4] = 86.0999999999999999 2018.10.15 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Daily : tmp1[3] = 85.989999999999999999 2018.10.16 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Daily : tmp1[2] = 86.76000000000001 2018.10.17 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Daily : tmp1[1] = 86.5 2018.10.18 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Daily : tmp1[0] = 85.72 2018.10.19 00:00:00



Dans certains cas, pour une raison quelconque, le prix dépasse la dimension de deux chiffres significatifs après le point, dans un sens ou dans l'autre.

Et cela se passe sans aucune erreur de calcul, c'est juste la sortie de la valeur du prix de la base du graphique tmp1[i]=close[i] ;

Y a-t-il un moyen de le réparer ou de l'ignorer ?



 

Vous pouvez en retirer tout ce qui concerne le cinq et obtenir un modèle pour le quatre.


Cela peut être écrit par quelqu'un qui sait faire la différence entre un cinq et un quatre, et ce n'est certainement pas moi :-)


//--- Проверка количества доступных баров
   if(rates_total<fmax(period_ma,4)) return 0;


D'où vient le chiffre 4, quelle est sa signification sacrée ?

 
psyman:


Cela peut être écrit par quelqu'un qui sait faire la différence entre un cinq et un quatre, et ce n'est certainement pas moi :-)



D'où vient le chiffre 4, quelle signification sacrée a-t-il ?

Vous n'écoutez ou ne lisez certainement pas... Je l'étais :

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Toutes les questions des débutants de MQL4, assistance et discussion sur les algorithmes et les codes

Artyom Trishkin, 2018.10.18 09:26

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//--- Проверка количества доступных баров (1 - минимально, 4 - оптимально для большинства расчётов. Но всё "по месту"...)
   if(rates_total<4) return 0;
//--- Проверка и расчёт количества просчитываемых баров
   int limit=rates_total-prev_calculated; // 0 - пришел новый тик, новый бар формироваться не начал. 1 - пришел новый тик и начал формироваться новый бар.
   if(limit>1) 
               // если вписать "limit>0", то на нулевом баре будет расчёт только нулевого бара, на каждом новом баре будет полный перерасчёт всей истории
               // если вписать "limit>1", то на нулевом баре будет расчёт только нулевого бара, на открытии нового бара - пересчёт первого и нулевого,
               // при подгрузке истории и на первом запуске - перерасчёт всей истории
     {
      limit=rates_total-1;
      // здесь должна быть инициализация всех используемых буферов индикатора необходимыми значениями (обычно EMPTY_VALUE и 0)
     }
//--- Расчёт индикатора
   for(int i=limit; i>=0 && !IsStopped(); i--)
     {
      // необходимые действия по расчёту индикатора
     }

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

 
psyman:

Après les dernières réponses, l'image est devenue plus claire et la plus évidente est que je ne suis pas destiné à devenir un programmeur :-)

Jusqu'à présent, j'ai commencé par la liste la plus simple et voici ce qu'elle est devenue :


2018.10.20 08:42:43.343 _t1 CADJPY,Daily : tmp1[4] = 86.0999999999999999 2018.10.15 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Daily : tmp1[3] = 85.989999999999999999 2018.10.16 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Daily : tmp1[2] = 86.76000000000001 2018.10.17 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Daily : tmp1[1] = 86.5 2018.10.18 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Daily : tmp1[0] = 85.72 2018.10.19 00:00:00



Dans certains cas, pour une raison quelconque, le prix dépasse la dimension de deux chiffres significatifs après le point, dans un sens ou dans l'autre.

Et cela se passe sans aucune erreur de calcul, c'est juste la sortie de la valeur du prix de la base du graphique tmp1[i]=close[i] ;

Y a-t-il un moyen de le réparer ou de l'ignorer ?



C'est bon. Pour imprimer des nombres fractionnaires, il suffit d'utiliser DoubleToString() avec la précision requise. Dans ce cas, la précision requise devrait être Digits()

 
psyman:

Après les dernières réponses, l'image est devenue plus claire et la plus évidente est que je ne suis pas destiné à devenir un programmeur :-)

Jusqu'à présent, j'ai commencé par la liste la plus simple et voici ce qu'elle est devenue :


2018.10.20 08:42:43.343 _t1 CADJPY,Daily : tmp1[4] = 86.0999999999999999 2018.10.15 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Daily : tmp1[3] = 85.989999999999999999 2018.10.16 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Daily : tmp1[2] = 86.76000000000001 2018.10.17 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Daily : tmp1[1] = 86.5 2018.10.18 00:00:00

2018.10.20 08:42:43.343 _t1 CADJPY,Daily : tmp1[0] = 85.72 2018.10.19 00:00:00


Dans certains cas, pour une raison quelconque, le prix dépasse la dimension de deux chiffres significatifs après le point, dans un sens ou dans l'autre.

Et cela se passe sans aucune erreur de calcul, c'est juste la sortie de la valeur du prix de la base du graphique tmp1[i]=close[i] ;

Peut-on y remédier d'une manière ou d'une autre ou simplement l'ignorer ?

ce sont des valeurs normales pour un nombre réel. vous pouvez apprendre à écrire des programmes, tout le monde commence par là - il suffit de lire beaucoup et d'essayer d'écrire et de rédiger ses propres codes.

La précision du nombre réel, la mantisse, et la façon dont tout cela est stocké en mémoire, vous pouvez le googler sur le web, les principes de stockage sont les mêmes partout.

si vous voulez une belle sortie, utilisez DoubleToStr()

 
Igor Makanu:

ce sont des valeurs normales pour un nombre réel, vous pouvez apprendre à écrire des programmes, tout le monde commence par là - il suffit de lire beaucoup et d'essayer d'écrire et de créer ses propres codes

La précision du nombre réel, la mantisse, et la façon dont tout cela est stocké en mémoire, vous pouvez le googler sur le web, les principes de stockage sont les mêmes partout.

si vous voulez une belle sortie, utilisez DoubleToStr()

Lorsqu'il est possible d'utiliser des fonctions compatibles, il est préférable de les proposer à l'utilisation. Sinon, cette épopée va recommencer. Dans ce cas : DoubleToString()

 

Comment pouvez-vous empêcher l'EA de fonctionner sur les mêmes instruments ?

Par exemple, l'EA fonctionne dans la fenêtre eur/usd, mais lorsqu'il est exécuté dans d'autres fenêtres sur eur/usd, un message d'alerte s'affiche. Je vous serai très reconnaissant de votre aide.

 
gans71:

Comment pouvez-vous empêcher l'EA de fonctionner sur les mêmes instruments ?

Par exemple, l'EA fonctionne dans la fenêtre eur/usd, mais lorsqu'il est exécuté dans d'autres fenêtres sur eur/usd, un message d'alerte s'affiche. Je vous serais très reconnaissant de m'aider.

Vous avez besoin de transférer des données d'un EA à un autre, cherchez dans le forum

ou utiliser les variables globales du terminal (c'est le moyen le plus simple) - vous pouvez y écrire la valeur de la première EA, et les copies suivantes de l'EA liront cette valeur et ne s'exécuteront pashttps://www.mql5.com/ru/docs/globals.

Документация по MQL5: Глобальные переменные терминала
Документация по MQL5: Глобальные переменные терминала
  • www.mql5.com
Глобальные переменные существуют в клиентском терминале 4 недели с момента последнего обращения, после этого автоматически уничтожаются. Обращением к глобальной переменной считается не только установка нового значения, но и чтение значения глобальной переменной.
 
Igor Makanu:

vous devez transférer des données d'un EA à un autre, cherchez dans le forum

ou utiliser les variables globales du terminal (c'est le moyen le plus simple) - vous pouvez y écrire la valeur de la première EA, et les copies suivantes de l'EA liront cette valeur et ne s'exécuteront pashttps://www.mql5.com/ru/docs/globals.

l'EA est le même, vous devez lui interdire de fonctionner sur les mêmes instruments
 
gans71:
l'EA est le même, vous ne devez pas lui permettre de fonctionner sur les mêmes symboles

et ? vous n'auriez pas pu étudier l'aide en 2 minutes

Si vous parlez spécifiquement de la façon de passer une chaîne de caractères à une variable globale, la seule façon est de créer un nom pour la variable globale, c'est-à-dire que dans votre cas vous exécutez un EA sur EURUSD, faites une vérification

if(GlobalVariableCheck(_Symbol)) .....

Si une telle variable n'existe pas, créez-en une surdimensionnée, comme ceci

if(GlobalVariableSet(_Symbol,Magic)==0) Print("Erreur d'écriture dans la variable globale # ",GetLastError()) ;

puis, à la fin de l'Expert Advisor, supprimez la variable glob.

tel qu'il est, le terminal n'est pas pratique, et j'ai en quelque sorte indiqué la direction de la recherche

Raison: