Erreurs, bugs, questions - page 2469

 

Je transfère un programme de MQL4 à MQL5.

J'ai été confronté à cette erreur.

Sur les périodes jusqu'à m30, la valeur de Period() est correcte.

2019.05.22 17:45:38.628 TestStat (GBPUSD,M15) 4854 Period()=15
2019.05.22 17:46:08.267 TestStat (GBPUSD,M30) 4854 Period()=30

A partir de la trame temporelle H1, j'obtiens des valeurs incompréhensibles.

2019.05.22 17:31:07.446 TestStat (GBPUSD,H1) 4854 Period()=16385
2019.05.22 17:46:39.362 TestStat (GBPUSD,H4) 4854 Period()=16388
2019.05.22 17:46:55.552 TestStat (GBPUSD,D1) 4854 Period()=16408

Version du terminal build 2057 datée du 21 mai 2019.

 

Merci.

Dans la description :

Période

Renvoie la valeur de l'intervalle de temps du graphique actuel.

ENUM_TIMEFRAMESPériode() ;

Valeur retournée

Contenu de la variable _Period , contenant la valeur de l'horizon temporel du graphique actuel. Lavaleur peut être l'une des valeurs de l'énumération ENUM_TIMEFRAMES.

Voir aussi

PeriodSeconds, Périodes du graphique, Date et heure, , Visibilité de l'objet

=================

Ce n'est pas très bien fait. Elle doit être correctement écrite dans la description. Vous ne devez pas chercher la source du problème sur le forum.

Il s'avère que Period() ne donne pas la valeur de l'horizon temporel actuel car il dit :La valeur peut être une des valeurs de l'énumération ENUM_TIMEFRAMES.

C'est tout autre chose.

Veuillez corriger la description de la langue pour les développeurs.

 
Merci encore àTheXpert pour avoir fourni le code.
Nous avons les résultats suivants sur la capacité ArrayResize MT5(build 2057) :

#import "msvcrt.dll"
  long memcpy(int &dst[], long &src, int cnt);
#import

#define  PRINT(x) ; Print(#x, ":", string(x))

template<typename T>
struct ArrayStore
{
   long offset;
   T x[];
   
   int capacity() 
   {
      int ints[sizeof(ArrayStore) / sizeof(int)];
      memcpy(ints, this.offset, sizeof(ArrayStore));
      return ints[8];
   }
   
   int size() 
   {
      int ints[sizeof(ArrayStore) / sizeof(int)];
      memcpy(ints, this.offset, sizeof(ArrayStore));
      return ints[4];
   }
};

template<typename T>
int TestArrayCapacity(ArrayStore<T> &store, int size, int reserved_size = 0){
   ArrayResize(store.x, size, reserved_size);
   return store.capacity(); 
}

template<typename T>
int TestArraySize(ArrayStore<T> &store, int size, int reserved_size = 0){
   ArrayResize(store.x, size, reserved_size);
   return store.size(); 
}


void OnStart()
{
   ArrayStore<int> store;
   
   PRINT("TEST_ArrayCapacity");
   
   PRINT(TestArrayCapacity(store, 100, 0)); 
   PRINT(TestArrayCapacity(store, 100, 100)); 
   PRINT(TestArrayCapacity(store, 101, 100)); 
   PRINT(TestArrayCapacity(store, 200, 100)); 
   PRINT(TestArrayCapacity(store, 201, 100)); 
   PRINT(TestArrayCapacity(store, 202, 100)); 
   PRINT(TestArrayCapacity(store, 100,   1)); 
   PRINT(TestArrayCapacity(store, 100, 400)); 
   PRINT(TestArrayCapacity(store, 300, 400)); 
   PRINT(TestArrayCapacity(store, 301, 600));
   PRINT(TestArrayCapacity(store, 302, 600));
   PRINT(TestArrayCapacity(store, 303, 600));
   PRINT(TestArrayCapacity(store, 100,   0)); 
   PRINT(TestArrayCapacity(store, 100, 100)); 
   PRINT(TestArrayCapacity(store, 100,  -1)); 
   PRINT(TestArrayCapacity(store, 100, 100)); 
   PRINT(TestArrayCapacity(store, 105, 100)); 
}

Résultat :
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TEST_ArrayCapacity:TEST_ArrayCapacity
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,0):100
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,100):100
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,101,100):201
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,200,100):201
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,201,100):201
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,202,100):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,1):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,400):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,300,400):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,301,600):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,302,600):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,303,600):903
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,0):903
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,100):903
2019.05.22 17:00:50.250 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,-1):100
2019.05.22 17:00:50.250 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,100):100
2019.05.22 17:00:50.250 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,105,100):205
 
Eugeni Neumoin:

Description :

Contenu de la variable _Period , qui stocke la valeur de l'horizon temporel du graphique actuel. La valeur peut être l'une des valeurs de l'énumération ENUM_TIMEFRAMES.

Ce n'est pas bien fait. Elle doit être correctement écrite dans la description. Vous ne devez pas chercher la source du problème sur le forum.

Il n'est donc écrit nulle part que cette valeur est égale à la période en minutes (comme c'était le cas en quad).

https://www.mql5.com/ru/articles/81

C'est là que commence l'article de liaison.

Переход с MQL4 на MQL5
Переход с MQL4 на MQL5
  • www.mql5.com
Данная статья, построенная в форме справочника по функциям MQL4, призвана помочь переходу с MQL4 на MQL5. Для каждой функции языка MQL4 приведено описание и представлен способ ее реализации на MQL5, что позволит вам значительно ускорить перевод своих программ с MQL4 на MQL5. Для удобства функции разбиты на группы, как в документации по MQL4.
 
Igor Zakharov:

Il n'est donc dit nulle part que cette valeur est égale à la période en minutes (comme elle l'était en quarts).

https://www.mql5.com/ru/articles/81

C'est là que commence l'article sur le lien.

Une description du langage dit : La valeur peut être l'une des valeurs de l'énumération ENUM_TIMEFRAMES.

Voir la description de la langue plus bas :

Périodes graphiques

Toutes les périodes graphiques prédéfinies ont un identifiant unique. L'identifiant PERIOD_CURRENT signifie la période actuelle du graphique, à laquelle le programme mql5 est exécuté.

ENUM_TIMEFRAMES

Identifiant

Description

PERIOD_CURRENT

Période actuelle

PERIOD_M1

1 minute

PERIODE_M2

2 minutes

PERIOD_M3

3 minutes

PERIOD_M4

4 minutes

PERIOD_M5

5 minutes

PERIOD_M6

6 minutes

PERIODE_M10

10 minutes

PERIOD_M12

12 minutes

PERIOD_M15

15 minutes

PERIOD_M20

20 minutes

PERIODE_M30

30 minutes

PERIOD_H1

1 heure

PERIOD_H2

2 heures

PERIOD_H3

3 heures

PERIOD_H4

4 heures

PERIOD_H6

6 heures

PERIOD_H8

8 heures

PERIOD_H12

12 heures

PERIOD_D1

1 jour

PERIODE_W1

1 semaine

PERIOD_MN1

1 mois

======================

Et nulle part dans la description il n'est dit que cette valeur est en secondes.

La description devrait tout dire.

Et quand il faut chercher d'autres articles, c'est dommage.

 
Sergey Dzyublik:
Merci encore àTheXpert pour avoir fourni le code.
Nous avons les résultats suivants sur la capacité ArrayResize MT5(build 2057) :
Donc, conclusions sur les performances de ArrayResize et son impact sur la capacité réelle :

1. le premier ArrayResize est très important, il alloue réellement la mémoire en prenant en compte la taille + la taille réservée et fixe la capacité.
2. Toutes les exécutions ultérieures de ArrayResize avec une nouvelle valeur de reserved_size n'ont aucun effet sur la quantité de mémoire allouée et la capacité, respectivement.
3 Une nouvelle allocation de mémoire n'est effectuée que lorsque la capacité est dépassée. Dans ce cas, la taille + la taille réservée est utilisée à nouveau pour déterminer la quantité de mémoire allouée et définir une nouvelle capacité.
4. Une valeur de reserved_size < 0 libère la mémoire réservée à la taille de la taille.
 
Eugeni Neumoin:

Et nulle part dans la description il n'est dit que cette valeur est en secondes.

Donc ce n'est pas en quelques secondes...

 
Eugeni Neumoin:

Une description du langage dit : La valeur peut être l'une des valeurs de l'énumération ENUM_TIMEFRAMES.

Voir plus loin dans la description de la langue :

Périodes graphiques

Toutes les périodes graphiques prédéfinies ont un identifiant unique. L'identifiant PERIOD_CURRENT signifie la période actuelle du graphique, à laquelle le programme mql5 est exécuté.

ENUM_TIMEFRAMES

======================

Et nulle part dans la description il n'est dit que cette valeur est en secondes.

La description devrait tout dire.

Et quand il faut passer par d'autres articles, c'est dommage.

Qui vous a dit que ce sont des valeurs en secondes ?

 
Eugeni Neumoin :

Une description du langage dit : Value can be one of the values of enumeration ENUM_TIMEFRAMES.

Voir plus loin dans la description de la langue :

Périodes graphiques

Toutes les périodes graphiques prédéfinies ont un identifiant unique. L'identifiant PERIOD_CURRENT indique la période actuelle du graphique, à laquelle le programme mql5 est exécuté.

ENUM_TIMEFRAMES

Identifiant

Description

PERIOD_CURRENT

Période actuelle

PERIOD_M1

1 minute

PERIODE_M2

2 minutes

PERIOD_M3

3 minutes

PERIOD_M4

4 minutes

PERIOD_M5

5 minutes

PERIOD_M6

6 minutes

PERIODE_M10

10 minutes

PERIOD_M12

12 minutes

PERIOD_M15

15 minutes

PERIOD_M20

20 minutes

PERIODE_M30

30 minutes

PERIOD_H1

1 heure

PERIOD_H2

2 heures

PERIOD_H3

3 heures

PERIOD_H4

4 heures

PERIOD_H6

6 heures

PERIOD_H8

8 heures

PERIOD_H12

12 heures

PERIOD_D1

1 jour

PERIODE_W1

1 semaine

PERIOD_MN1

1 mois

======================

Et nulle part dans la description il n'est dit que cette valeur est en secondes.

La description devrait tout dire.

Et quand on doit passer par d'autres articles, c'est dommage.

Vous ne devez jamais vous fier à une valeur d'énumération.

Utilisez PeriodSeconds().

 
Igor Zakharov:

Donc ce n'est pas en quelques secondes...

C'est ce que devrait être la description linguistique en premier lieu.

Pas dans des articles que vous devez chercher. La dernière chose que vous devez rechercher sur le forum est la suivante.

Sinon, il s'avère que : je regarde dans un livre, mais je vois une fig...

Raison: