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

 
Aleksey Vyazmikin:

Veuillez m'aider à créer une fonction.

J'ai un TF actuel et un TF estimé, la fonction doit retourner la différence entre les deux TF dans toutes les combinaisons, si la mesure était en barres.

Calcul TF 15 15 15 60 60 60 240 240 240
TF actuel 15 5 1 15 5 1 60 15 5
Différence en Nbar 1 3 15 4 12 60 4 16 48

Comment l'appliquer correctement ?


Je l'ai fait de cette façon.

int TFk()
{
   int K=0;
   K=TF_transfer(TF)/TF_transfer(Period());
//   Print(TF_transfer(TF),"   ",TF_transfer(Period()));
//Print (K);
   if   (K<1)return(1);
   else      return(K);
}


int TF_transfer(ENUM_TIMEFRAMES tf)
  {
   if (tf==PERIOD_CURRENT) return(0);
   if (tf==PERIOD_M1) return(1);
   if (tf==PERIOD_M5) return(5);
   if (tf==PERIOD_M15) return(15);
   if (tf==PERIOD_M30) return(30);
   if (tf==PERIOD_H1) return(60);
   if (tf==PERIOD_H4) return(240);
   if (tf==PERIOD_D1) return(1440);
   if (tf==PERIOD_W1) return(10080);
   if (tf==PERIOD_MN1) return(43200);  
   if (tf==PERIOD_M2) return(2);
   if (tf==PERIOD_M3) return(3);
   if (tf==PERIOD_M4) return(4);
   if (tf==PERIOD_M6) return(6);
   if (tf==PERIOD_M10) return(10);
   if (tf==PERIOD_M12) return(12);
   if (tf==PERIOD_H2) return(120);
   if (tf==PERIOD_H3) return(180);  
   if (tf==PERIOD_M6) return(360);
   if (tf==PERIOD_H8) return(480);
   if (tf==PERIOD_H12) return(720);
   return(1);
  }

Le problème est que j'ai besoin de ce bonheur pour l'indicateur, mais il ne veut pas s'initialiser correctement et à ce code

int OnInit()
  {
   Print ("K=",TFk()," Период=",Period());

return(INIT_SUCCEEDED); }

Il réagit comme ceci :

2017.09.22 14:23:27.742 donchian_channel_prognoz_MTF (Eu Splice,M5) K=3 Period=5

2017.09.22 14:23:27.776 donchian_channel_prognoz_MTF (Eu Splice,M5) test

2017.09.22 14:23:27.790 donchian_channel_prognoz_MTF (Eu Splice,M15) K=1 Period=15

Le plus déroutant est qu'il imprime un test qui se trouve déjà dans le corps de OnCalculate !

if(BarsCalculated(handle)<0) {Print ("test");return(0);}

La première fois, le délai était défini correctement, mais la deuxième fois, il ne l'était pas...

Je ne sais pas ce qui est si étrange...

Bien que je sache, c'est l'appel de l'indicateur de l'indicateur... qui tourne en rond...
 
Aleksey Vyazmikin:

Je l'ai fait comme ça

Le problème est que j'ai besoin de ce bonheur pour l'indicateur, mais il est étrange et ne veut pas s'initialiser correctement, en réponse à ce code

Il réagit comme ça :

2017.09.22 14:23:27.742 donchian_channel_prognoz_MTF (Eu Splice,M5) K=3 Period=5

2017.09.22 14:23:27.776 donchian_channel_prognoz_MTF (Eu Splice,M5) test

2017.09.22 14:23:27.790 donchian_channel_prognoz_MTF (Eu Splice,M15) K=1 Period=15

Le plus déroutant est qu'il imprime un test qui se trouve déjà dans le corps de OnCalculate !

La première fois, le délai était défini correctement, mais la deuxième fois, il ne l'était pas...

Je ne sais pas ce que sont ces merveilles.

Bien que je sache que c'est appeler l'indicateur depuis l'indicateur... qui tourne en rond...

Pourquoi dois-je me donner tout ce mal ?

N'est-ce pas plus facile ?

K = PeriodSeconds(TF)/PeriodSeconds(Period());
 
Alexey Viktorov:

C'est quoi tous ces rebondissements ?

Cela ne rendrait-il pas les choses plus faciles ?


Le fil de discussion est donc destiné aux débutants, c'est pourquoi je ne connaissais pas cette possibilité, merci de l'avoir signalée.

 

Pouvez-vous me dire quelle est la fonctioniBarShift la plus fiable avec deux TFs en ce moment ?

J'ai pour tâche de trouver, par exemple, sur une barre minute la valeur de l'indicateur du TF supérieur, par exemple, M15. Les délais peuvent être quelconques, ce qui complique la solution.

Pour une heure TF, j'ai fait à travers la structure, mais si c'est M15, alors ici je suis confus ...

 
Aleksey Vyazmikin:

Pouvez-vous me dire quelle est la fonction iBarShift la plus fiable avec deux TFs en ce moment ?

J'ai pour tâche de trouver, par exemple, sur une barre minute la valeur de l'indicateur du TF supérieur, par exemple, M15. Les délais peuvent être quelconques, ce qui complique la solution.

Pour une heure TF, j'ai fait à travers la structure, mais si c'est M15, ici je suis confus ...

Faites tourner ce script :Recherche du bar le plus proche

 
Vladimir Karputov:

Faites tourner ce script :Recherche du bar le plus proche


Merci.

 
Aleksey Vyazmikin:

Le fil de discussion est donc destiné aux débutants, c'est pourquoi je ne connaissais pas cette fonctionnalité, merci pour le conseil.

Aleksey, mql4 l'a fait il y a longtemps.


Aleksey Vyazmikin:

Pouvez-vous me dire quelle est la fonction iBarShift la plus fiable avec deux TFs en ce moment ?

J'ai pour tâche de trouver, par exemple, sur une barre minute la valeur de l'indicateur du TF supérieur, par exemple M15. Les délais peuvent être quelconques, ce qui complique la solution.

Pour une heure TF, j'ai fait à travers la structure, mais si c'est M15, je suis confus ici ...

Dans ce cas, vous devriez essayer d'oublier la numérotation des barres telle qu'elle était dans mql4. Dans le mql5, tout est presque résolu par le temps de bar. En cas de besoin, vous pouvez utiliser la fonction Bars().

int  Bars(
   string           symbol_name,     // имя символа
   ENUM_TIMEFRAMES  timeframe,       // период
   datetime         start_time,      // с какой даты
   datetime         stop_time        // по какую дату
   );
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
  • www.mql5.com
Доступ к таймсериям и индикаторам / Bars - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov:
Alexei, cela est disponible dans mql4 depuis longtemps.

Apparemment, cela montre que je ne connais pas bien mql4 non plus, ce que je n'ai jamais prétendu...

Alexey Viktorov:

Et dans ce cas, essayez d'oublier la numérotation des barres comme c'était le cas dans mql4. Dans le mql5, tout est presque résolu par le temps du bar. À la rigueur, essayez d'utiliser la fonction Bars().

Vous êtes sûr de l'arrondi ?

Supposons que l'heure sur m1 est 14:44, mais que j'ai besoin de 14:30 (première mesure de M15).

 
Aleksey Vyazmikin:

Apparemment, cela montre que je ne connais pas très bien mql4 non plus, ce que je n'ai jamais prétendu...

Vous êtes sûr de l'arrondi ?

Disons que l'heure sur m1 est 14:44 et que je dois obtenir une heure de 14:30 (première mesure de m15).

C'est quelque chose qui sort d'une autre série. Que devez-vous obtenir à 14:44 de la période de barre M15 de 14:30 ? Prenez la fonction Copy**** et mettez-y PERIOD_M15 et le temps 14:44 pour voir ce que vous obtenez. Et lorsque le résultat n'est pas celui que vous attendez, les questions seront différentes.

 
Alexey Viktorov:

C'est quelque chose d'une autre série. Que devez-vous obtenir à 14:44 de la période de barre M15 de 14:30 ? Prenez la fonction Copy**** et mettez-y PERIOD_M15 et le temps 14:44 pour voir ce que vous obtenez. Et lorsque le résultat n'est pas celui que vous attendez, les questions seront différentes.


Oui, c'était la direction dans laquelle je travaillais. Dans l'ensemble, j'ai été aidé. Merci à vous aussi.