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

 
Сергей Таболин:

La première voie a aidé )))) Merci.

Une autre question : je déchire 3 instances d'indicateur dans l'indicateur pour obtenir des données de différentes TF. Mais lorsque je l'attache à un graphique, j'obtiens cette sorte de feuille de calcul :

Qu'est-ce que cela signifierait ?

Je ne peux pas en être sûr, mais peut-être que le second tampon a été initialisé en retard.

Pour trouver la raison exacte, vous devez ajuster les lignes suivantes comme ceci

if(CopyBuffer(handle_MA,0,0,ma_values_to_copy,buffer_MA) < 0 ) // копируем данные из индикаторного массива в массив buffer_MA
   {                                                                                // если не скопировалось
      Print("Не удалось скопировать данные из индикаторного буфера в buffer_MA, код ошибки "+ IntegerToString(GetLastError()));   // то выводим сообщение об ошибке
      return(0);                                                                    // и выходим из функции
   }

Après cela, nous pourrons dire avec plus de certitude ce qui ne va pas.

 
Oleg Peiko:

Je ne peux pas en être sûr, mais peut-être que le second tampon a été initialisé en retard.

Afin de trouver la raison exacte, vous devez ajuster les lignes suivantes comme ceci

Après cela, nous pourrons dire avec plus de certitude ce qui ne va pas.

2019.03.23 22:58:11.410 my_HMA5_123 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA
2019.03.23 22:58:11.410 my_HMA5_123 (GBPUSD,M30)        Не удалось скопировать данные из индикаторного буфера в buffer_MA2
2019.03.23 22:58:11.410 my_HMA5_123 (GBPUSD,M30)        4806
2019.03.23 22:58:11.637 my_HMA5_123.ex5::my_HMA5 (GBPUSD,M15)   BarsCalculated() вернул -1, код ошибки 4806
2019.03.23 22:58:11.648 my_HMA5_123 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA
2019.03.23 22:58:11.648 my_HMA5_123 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA2
2019.03.23 22:58:11.648 my_HMA5_123 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA3
ERR_INDICATOR_DATA_NOT_FOUND    4806    Запрошенные данные не найдены

Peut-on en faire quelque chose ?

Au fait, cette copie s'ouvre sur M15.

Cependant, la même chose se passe dans d'autres TF aussi...

 
Сергей Таболин:

Y a-t-il quelque chose que vous puissiez faire ?

Au fait, cette copie s'ouvre sur M15.

C'est la même chose sur d'autres échelles de temps...

Dans le chronomètre, une fois toutes les deux minutes, demandez toutes les données pour la période requise. Ainsi, vous disposerez toujours de données actualisées pour la période considérée.

En outre : dans OnCalculate(), au tout début de celui-ci, vous le demandez, par exemple :

   if(iTime(NULL,PERIOD_M15,1)==0)
      return 0;

Ainsi, jusqu'à ce que les données du cadre temporel de quinze minutes soient disponibles, l'indicateur attendra le prochain tick.
Vous pouvez demander la bonne quantité de données pour le calcul en utilisant la fonction CopyXXX :

   datetime array[];
   if(CopyTime(NULL,PERIOD_M15,0,number_of_datas,array)!=number_of_datas)
      return 0;

Dans ce cas, jusqu'à ce que le nombre requis de données_of_datas soit disponible, l'indicateur attendra le prochain tick.

Si vous décidez d'utiliser la fonction

Bars(NULL,PERIOD_M15);

..., vous devez tenir compte du fait que la quantité de données pour le calcul ne doit pas dépasser le taux_total, sinon elle dépassera les limites du tableau. En d'autres termes, s'il y a moins de barres sur l'échelle de temps actuelle que sur la M15, alors nous devons prendre le nombre de barres égal à leur nombre sur l'échelle de temps actuelle = rates_total

 
Artyom Trishkin:

Dans la minuterie, une fois toutes les deux minutes, demandez n'importe quelle donnée pour la période de temps requise. Ainsi, vous disposerez toujours de données actualisées pour la période considérée.

En outre, dans OnCalculate(), au tout début, vous demandez, par exemple, ce qui suit :

Ainsi, jusqu'à ce que les données de l'échelle de temps 15 min soient disponibles, l'indicateur attendra le prochain tick.
Vous pouvez demander la bonne quantité de données pour le calcul avec la fonction CopyXXX :

Dans ce cas, jusqu'à ce que la quantité requise de données dans number_of_datas soit disponible, l'indicateur attendra le prochain tick.

Si vous décidez d'utiliser la fonction

..., vous devez tenir compte du fait que la quantité de données pour le calcul ne doit pas dépasser le taux_total, sinon elle dépassera les limites du tableau. En d'autres termes, s'il y a moins de barres sur l'échelle de temps actuelle que sur la M15, alors nous devons prendre le nombre de barres égal à leur nombre sur l'échelle de temps actuelle = rates_total

Merci.

Je l'ai fait comme ça :

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[])
  {
   
   if(iTime(NULL,PERIOD_CURRENT,1)==0)  return(0); 
   if(iTime(NULL,periodTF1,1)==0)       return(0); 
   if(iTime(NULL,periodTF2,1)==0)       return(0); 
   
   int ma_values_to_copy; 
   int ma_calculated = 0;
   if(PeriodSeconds(PERIOD_CURRENT) < PeriodSeconds(periodTF1) && PeriodSeconds(PERIOD_CURRENT) < PeriodSeconds(periodTF2))   ma_calculated = BarsCalculated(handle_MA);
   else
   if(PeriodSeconds(periodTF1) < PeriodSeconds(PERIOD_CURRENT) && PeriodSeconds(periodTF1) < PeriodSeconds(periodTF2))        ma_calculated = BarsCalculated(handle_MA2);
   else
   if(PeriodSeconds(periodTF2) < PeriodSeconds(PERIOD_CURRENT) && PeriodSeconds(periodTF2) < PeriodSeconds(periodTF1))        ma_calculated = BarsCalculated(handle_MA3);
   
   if(ma_calculated <= 0){ 
      PrintFormat("BarsCalculated() вернул %d, код ошибки %d",ma_calculated,GetLastError()); 
      return(0); 
     }  
   if(prev_calculated == 0 || ma_calculated != ma_bars_calculated || rates_total > prev_calculated + 1){ 
      if(ma_calculated > rates_total) ma_values_to_copy = rates_total; 
      else ma_values_to_copy = ma_calculated; 
     } else { 
      ma_values_to_copy = (rates_total - prev_calculated) + 1; 
     } 

résultat :

2019.03.24 00:56:38.056 my_HMA5_125 (GBPUSD,M30)        BarsCalculated() вернул -1, код ошибки 4806
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA_c
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA2
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA_c2
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA3
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA_c3

J'ai du mal avec les indicateurs ))))

 

Bonjour à tous !
Veuillez me conseiller sur la fonction CopyHigh.
J'ai lu dans la définition de cette fonction, "Gets history data to an array with maximal bar price for a specified symbol and period".

S'agit-il d'un tableau de prix à l'achat ou à la vente ? Ou existe-t-il un moyen de définir le type de prix nécessaire ?

 
renatmt5:

Salut !
Veuillez me conseiller sur la fonction CopyHigh.
J'ai lu dans la définition de cette fonction, "Gets history data to an array of maximum bar prices for a specified symbol and period".

S'agit-il d'un tableau de prix à l'achat ou à la vente ? Ou est-il possible de définir le type de prix nécessaire d'une manière ou d'une autre ?

Référence:Caractéristiques du traçage

Caractéristiques de la réalisation de graphiques

Les données historiques, sur la base desquelles les graphiques sont construits, sont stockées sur le disque dur. Lorsque vous ouvrez un graphique, les données sont téléchargées du disque et les dernières données manquantes du serveur de trading sont téléchargées. Si les données historiques d'un instrument financier ne sont pas disponibles sur le disque dur, les 512 dernières barres de l'historique sont téléchargées.

Pour télécharger les données antérieures, déplacez le graphique dans la zone souhaitée. Une fois le graphique ouvert, la plateforme commencera à recevoir des informations sur les cotations actuelles. Ainsi, le mouvement ultérieur du prix est formé en temps réel. Ces informations sont automatiquement enregistrées dans un fichier historique et sont utilisées lors de la réouverture de cette carte à l'avenir.

  • Le paramètre "Max bars on chart" est défini dans lesparamètres de la plateforme. Ce paramètre permet de contrôler la quantité de données historiques affichées sur le graphique.
  • Lesgraphiques sont tracés par rapport aux cours acheteurs. Si laprofondeur de marché est disponible pour le symbole, les graphiques seront tracés aux derniers prix (le prix de la dernière transaction exécutée).
Просмотр и настройка графиков - Графики котировок, технический и фундаментальный анализ - MetaTrader 5
Просмотр и настройка графиков - Графики котировок, технический и фундаментальный анализ - MetaTrader 5
  • www.metatrader5.com
Графики в торговой платформе отображают изменение котировок финансовых инструментов во времени. Они необходимы для проведения технического анализа и работы советников. Они позволяют трейдерам наглядно следить за котировками валют и акций в режиме реального времени и моментально реагировать на любое изменение ситуации на финансовых рынках...
 
Vladimir Karputov:

Référence:Caractéristiques des graphiques

Caractéristiques de la réalisation de graphiques

Les données historiques, sur la base desquelles les graphiques sont construits, sont stockées sur le disque dur. Lorsque vous ouvrez un graphique, les données sont téléchargées du disque et les dernières données manquantes du serveur de trading sont téléchargées. Si les données historiques d'un instrument financier ne sont pas disponibles sur le disque dur, les 512 dernières barres de l'historique sont téléchargées.

Pour télécharger les données antérieures, déplacez le graphique dans la zone souhaitée. Une fois le graphique ouvert, la plateforme commencera à recevoir des informations sur les cotations actuelles. Ainsi, le mouvement ultérieur du prix est formé en temps réel. Ces informations sont automatiquement enregistrées dans un fichier historique et sont utilisées lors de la réouverture de cette carte à l'avenir.

  • Le paramètre "Max bars on chart" est défini dans lesparamètres de la plateforme. Ce paramètre permet de contrôler la quantité de données historiques affichées sur le graphique.
  • Lesgraphiques sont tracés par rapport aux cours acheteurs. Si laprofondeur de marché est disponible pour le symbole, les graphiques seront tracés aux derniers prix (prix de la dernière transaction).

Bonne journée Vladimir, comme toujours tu me dépannes :) Merci !

 
Bonne journée à tous. Veuillez indiquer comment calculer le volume de la position sur la base des fonds alloués à la transaction.
 

Comment trouver la plus petite bougie de N dans mql5 ?

Dans mql4

   min=99999;
   N=5;
   for(int i=1;i<=N;i++)
     {
      if(High[i]-Low[i]<min) min=High[i]-Low[i];
     }
 
yiduwi:

Comment trouver la bougie minimale de N dans mql5 ?

Dans mql4

Dans un conseiller expert ou dans un indicateur ? Pour la période actuelle ou pour une autre ?

Raison: