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

 
Roman:

L'aide indique qu'il faut renvoyer la valeur de l'intervalle de temps, et non l'identifiant converti avecEnumToString()
La variable _Period renvoie un int.
ENUM_TIMEFRAMES Period() implique également le retour d'un int.

Vous êtes le seul à le sous-entendre. En fait, Period() renvoie la valeur de enum_TIMEFRAMES.

Si vous imprimez les valeurs des constantes de cette énumération, vous verrez des chiffres qui vous sont déjà familiers.

Et ça a toujours été comme ça. C'est comme ça depuis la naissance de MQL5.

Et il est clairement écrit dans l'aide ce qui est retourné :

Lavaleur peut être une des valeurs de l'énumération ENUM_TIMEFRAMES.

Документация по MQL5: Проверка состояния / Period
Документация по MQL5: Проверка состояния / Period
  • www.mql5.com
Проверка состояния / Period - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin:

Vous êtes le seul à le sous-entendre. En fait, Period() renvoie la valeur de l'énumération ENUM_TIMEFRAMES.

Si vous imprimez les valeurs des constantes de cette énumération, vous verrez des chiffres qui vous sont déjà familiers.

Et ça a toujours été comme ça. C'est comme ça depuis la naissance de MQL5.

Et l'Aide a clairement écrit ce qui est rendu :

Quel type pensez-vous que l'énumération ENUM renvoie ?)
Et la référence indique clairement
Renvoie la valeur de l'intervalle de temps du graphique actuel.

Imprimez-le vous-même

Print(PERIOD_M30);
Print(PERIOD_H1);
 
Roman:

Et l'énumération ENUM, quel type pensez-vous qu'elle renvoie ?))
Et la référence dit clairement
Renvoie la valeur de l'intervalle de temps du graphique actuel.

Imprimez le vôtre.

Que veux-tu me prouver ?

Je suis parfaitement conscient de ce qui est imprimé et des données qui sont renvoyées, quand et où.

Vous voulez le nombre de minutes de la période actuelle ?

Faites-le comme ça :

PeriodSeconds(Period())/60;

ou comme ça :

PeriodSeconds(PERIOD_CURRENT)/60;

Ou comme ça :

PeriodSeconds()/60;
 
Artyom Trishkin:

Que veux-tu me prouver ?

Rien pour vous, je ne vous ai pas écrit au sujet du problème, j'ai écrit aux développeurs.
Imprimez plus sur M30, et sur H1 et voyez la différence.

Print(_Period);
 
Roman:

Vous vous en fichez, je ne vous ai pas écrit au sujet du problème, j'ai écrit aux développeurs.
Imprimez plus sur M30, et sur H1 et voyez la différence.

Ce n'est pas un problème. Il ne l'a jamais été.

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

Bugs, bugs, questions

Artyom Trishkin, 2020.04.09 22:11

Que voulez-vous prouver ?

J'ai une bonne compréhension de ce qui est imprimé et des données qui sont renvoyées, quand et où.

Vous voulez le nombre de minutes de la période actuelle ?

les obtenir de cette façon :

PeriodSeconds(Period())/60;

ou comme ça :

PeriodSeconds(PERIOD_CURRENT)/60;

ou comme ça :

PeriodSeconds()/60;

 
Roman:

Vous n'avez pas à le faire, je n'ai pas écrit le problème à vous, je l'ai écrit aux développeurs.
Imprimez davantage sur M30 et H1 et voyez la différence.

Tu ne peux pas t'éloigner de MQL4 ?

Faites-le dans MQL4 comme ceci :

PeriodSeconds(Period())/60;

ou comme ça :

PeriodSeconds(PERIOD_CURRENT)/60;

Ou comme ça :

PeriodSeconds()/60;

Et imprimez les valeurs résultantes.

 
Artyom Trishkin:

Tu ne peux pas t'éloigner de MQL4 ?

Faites-le dans MQL4 comme ceci :

ou comme ça :

ou comme ça :

et imprimer les valeurs résultantes.

Je n'ai pas utilisé mql4 ;) et je ne m'y suis pas habitué.
Pourquoi faut-il encore diviser par 60 ?
Où est-ce que c'est indiqué dans l'aide ?
C'est déjà vos béquilles qui contournent le bug.
Maintenant, vérifiez votre béquille, sur toutes les échelles de temps.

Print(_Period / 60);
 
Roman:

Je n'ai pas utilisé mql4 ;) et je ne m'y suis pas habitué.
Pourquoi faut-il encore diviser par 60 ?
Où est-ce que c'est indiqué dans l'aide ?
C'est déjà vos béquilles qui contournent le bug.

facepalm ...
 
Roman:

Les variables _Period et Period() fonctionnent jusqu'à et y compris la valeur de sortie M30 en minutes.
Si période M1 alors 1
Si la période M2 alors 2
...
Si période M30 alors 30

Il est logique que la période horaire soit de 60 ans.
période de deux heures 120
trois heures 180
etc.

Mais à partir de H1 les mauvaises valeurs sont affichées.

si le programme produit des "valeurs erronées", vous devez voir ce que le programme "pense", mais il ne peut penser qu'en format binaire.

J'ai vérifié, et c'est le cas :

void OnStart()
{

   ENUM_TIMEFRAMES allperiod[] = {PERIOD_CURRENT, PERIOD_M1, PERIOD_M2, PERIOD_M3, PERIOD_M4, PERIOD_M5, PERIOD_M6, PERIOD_M10, PERIOD_M12, PERIOD_M15, PERIOD_M20, PERIOD_M30, PERIOD_H1, PERIOD_H2,
                                  PERIOD_H3, PERIOD_H4, PERIOD_H6, PERIOD_H8, PERIOD_H12, PERIOD_D1, PERIOD_W1, PERIOD_MN1
                                 };
   for(int i = 0; i < ArraySize(allperiod); i++)
      Print(UintToBinary((uint)allperiod[i]));

}
//+------------------------------------------------------------------+
string UintToBinary(uint n)
{
   string r = "";
   if(n == 0) return("0");
   while(n != 0)
   {
      r = (n % 2 == 0 ? "0" : "1") + r;
      n /= 2;
   }
   return(r);
}
//+------------------------------------------------------------------

2020.04.10 00:38:57.118 tst (EURUSD,H1) 0

2020.04.10 00:38:57.118 tst (EURUSD,H1) 1

2020.04.10 00:38:57.118 tst (EURUSD,H1) 10

2020.04.10 00:38:57.118 tst (EURUSD,H1) 11

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100

2020.04.10 00:38:57.118 tst (EURUSD,H1) 101

2020.04.10 00:38:57.118 tst (EURUSD,H1) 110

2020.04.10 00:38:57.118 tst (EURUSD,H1) 1010

2020.04.10 00:38:57.118 tst (EURUSD,H1) 1100

2020.04.10 00:38:57.118 tst (EURUSD,H1) 1111

2020.04.10 00:38:57.118 tst (EURUSD,H1) 10100

2020.04.10 00:38:57.118 tst (EURUSD,H1) 11110

2020.04.10 00:38:57.118 tst (EURUSD,H1) 10000000001

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100000000000010

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100000000000011

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100000000000100

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100000000000110

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100000000001000

2020.04.10 00:38:57.118 tst (EURUSD,H1) 1000000001100

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100000000011000

2020.04.10 00:38:57.118 tst (EURUSD,H1) 100000000001

2020.04.10 00:38:57.118 tst (EURUSD,H1) 1100000000000001


 
Artyom Trishkin:
facepalm ...

Une vraie manche...

Imprimez sur des calendriers différents.

Print(_Period);
2020.04.09 23:39:49.963 VP (EPM20,M1)   1
2020.04.09 23:39:53.135 VP (EPM20,M3)   3
2020.04.09 23:39:53.758 VP (EPM20,M5)   5
2020.04.09 23:39:54.377 VP (EPM20,M10)  10
2020.04.09 23:39:55.094 VP (EPM20,M15)  15
2020.04.09 23:39:55.679 VP (EPM20,M30)  30
2020.04.09 23:39:56.384 VP (EPM20,H1)   16385  //Почему не 60 ?
2020.04.09 23:39:57.071 VP (EPM20,H4)   16388  //Почему не 240 ?
2020.04.09 23:39:57.641 VP (EPM20,D1)   16408  //Почему не 1440 ?
2020.04.09 23:39:58.181 VP (EPM20,W1)   32769  и т.д.
2020.04.09 23:39:58.768 VP (EPM20,MN1)  49153