Page 1 sur 1

[MQL5] Indice d'une barre a partir d'une datetime

Publié : 22 févr. 2018, 14:40
par Pierre8r
Bonjour,

Je cherche à connaitre l'indice d'une barre à partir d'une donnée de type datetime.
Par exemple
datetime dtBarDatetime=D'2018.02.08 13:05';

Re: [MQL5] Indice d'une barre a partir d'une datetime

Publié : 24 févr. 2018, 18:25
par Pierre8r
Le code peut être sans doute amélioré.

Code : Tout sélectionner

//+------------------------------------------------------------------+
//|                                       scriptIndexBarResearch.mq5 |
//|                                   Copyright 2018, Pierre Rougier |
//|                           https://www.mql5.com/en/users/pierre8r |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, Pierre Rougier"
#property link      "https://www.mql5.com/en/users/pierre8r"
#property version   "1.00"
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int index_bar_research(datetime dt_bar_research)
  {
   datetime dt_start_time=D'1970.01.01 00:00';
   datetime time_array[];

   int res=CopyTime(NULL,NULL,dt_start_time,dt_bar_research,time_array);
   if(res<=0)
     {
      Print("Getting index bar research Failed! Error",GetLastError());
      return(0);
     }
   return(res-1);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {

   datetime dt_index_bar_research=D'2018.02.08 13:05';
   int i_index_bar_research=index_bar_research(dt_index_bar_research);
   Print("dt_index_bar_research :"+TimeToString(dt_index_bar_research)
         +" - i_index_bar_research :"+IntegerToString(i_index_bar_research));

   dt_index_bar_research=D'2017.09.14 13:05';
   i_index_bar_research=index_bar_research(dt_index_bar_research);
   Print("dt_index_bar_research :"+TimeToString(dt_index_bar_research)
         +" - i_index_bar_research :"+IntegerToString(i_index_bar_research));

   dt_index_bar_research=D'2017.09.06 10:35';
   i_index_bar_research=index_bar_research(dt_index_bar_research);
   Print("dt_index_bar_research :"+TimeToString(dt_index_bar_research)
         +" - i_index_bar_research :"+IntegerToString(i_index_bar_research));

//---
  }
//+------------------------------------------------------------------+

Re: [MQL5] Indice d'une barre a partir d'une datetime

Publié : 24 févr. 2018, 18:44
par Jeff719
Cet usage de CopyTime est un dévoiement.

Ce n'est pas fait pour ça.

Pour trouver l'indice sachant le time c'est la fonction iBarShift()

Qui plus est ça doit prendre 100 fois moins de ressources.

A moins qu'iBarShift n'existe plus en MQL5 ? :lol:

Re: [MQL5] Indice d'une barre a partir d'une datetime

Publié : 26 févr. 2018, 10:44
par Pierre8r
Salut Jeff719,
A moins qu'iBarShift n'existe plus en MQL5 ? :lol:
Je vois que tu connais MQL4.
Et probablement MQL5, je te sens taquin. :D
Oui iBarShift n'existe pas en MQL5.
Peut-être les développeurs de MetaTrader 5 ont-ils une bonne raison.
Les bars des charts ne sont souvent pas numérotés dans le même sens en MQL4 et MQL5, encore que cette numérotation soit réversible, au moins en MQL5, en MQL4 je ne sais pas.

Re: [MQL5] Indice d'une barre a partir d'une datetime

Publié : 26 févr. 2018, 11:28
par Jeff719
Salut Pierre,

La numérotation des bars est réversible en MQL4 parce que Metaquote à fini par céder aux récriminations de crétins à qui ça faisait mal à la tête de penser à des indices allant croissants vers le passé (ce qui pourtant est l'élégante solution).

Metaquote étant une machine destinée à plumer le retail et surtout le développeur amateur retail, tout est fait pour que ça marche à fond. En particulier satisfaire les demandes saugrenues des amateurs les plus crasses. Il y a aussi l'algo genet dont l'objet est de n'être pas seulement sur optimisé, mais assurément sur optimisé à mort. A la plus grande joie des brokers.

Non je ne connais pas MQL5. Mais si effectivement iBarShift n'existe pas (et n'est pas remplacé par une primitive équivalente), ça veut dire que MQL5 est une immense merde, pire que MQL4 et qu'il convient de le faire savoir pour l'édification du public.

Quelqu'un connaît la question ? (Quelle primitive iBarShift).

Sinon je peux toujours t'écrire une recherche dicho qui va faire ce que te fait iBarShift (car le calcul ne peut être exact vu qu'on ne sait jamais les trous de cotation qu'on a dans l'historique), mais avoir besoin de ça est à pleurer.

a+

Re: [MQL5] Indice d'une barre a partir d'une datetime

Publié : 26 févr. 2018, 11:29
par Pierre8r
Nouvelle version.
On doit pouvoir encore améliorer mais pour le moment j’arrête là.

Code : Tout sélectionner

//+------------------------------------------------------------------+
//|                                       scriptIndexBarResearch.mq5 |
//|                                   Copyright 2018, Pierre Rougier |
//|                           https://www.mql5.com/en/users/pierre8r |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, Pierre Rougier"
#property link      "https://www.mql5.com/en/users/pierre8r"
#property version   "1.00"
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int index_bar_research(datetime dt_bar_research)
  {
   datetime dt_start_time;
   datetime time_array[];

   int res=CopyTime(NULL,NULL,0,1,time_array);
   if(dt_bar_research>time_array[0])
     {
      Print("Error. dt_bar_research "+TimeToString(dt_bar_research)+" greater than the last time bar "+TimeToString(time_array[0]));
      return(0);
     }

   res=CopyTime(NULL,NULL,Bars(NULL,NULL)-1,1,time_array);
   dt_start_time=time_array[0];
   if(dt_bar_research<dt_start_time)
     {
      Print("Error. dt_bar_research "+TimeToString(dt_bar_research)+" smaller than the first time bar "+TimeToString(time_array[0]));
      return(0);
     }

   res=Bars(NULL,NULL,dt_start_time,dt_bar_research);
   if(res<=0)
     {
      Print("Getting index bar research Failed! Error",GetLastError());
      return(0);
     }
   return(res-1);
  }
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {

   datetime dt_index_bar_research=D'2017.08.18 14:55';
   int i_index_bar_research=index_bar_research(dt_index_bar_research);
   Print("dt_index_bar_research :"+TimeToString(dt_index_bar_research)
         +" - i_index_bar_research :"+IntegerToString(i_index_bar_research));

   dt_index_bar_research=D'2018.02.08 13:05';
   i_index_bar_research=index_bar_research(dt_index_bar_research);
   Print("dt_index_bar_research :"+TimeToString(dt_index_bar_research)
         +" - i_index_bar_research :"+IntegerToString(i_index_bar_research));

   dt_index_bar_research=D'2017.09.14 16:45';
   i_index_bar_research=index_bar_research(dt_index_bar_research);
   Print("dt_index_bar_research :"+TimeToString(dt_index_bar_research)
         +" - i_index_bar_research :"+IntegerToString(i_index_bar_research));

   dt_index_bar_research=D'2017.09.06 10:35';
   i_index_bar_research=index_bar_research(dt_index_bar_research);
   Print("dt_index_bar_research :"+TimeToString(dt_index_bar_research)
         +" - i_index_bar_research :"+IntegerToString(i_index_bar_research));

//---
  }
//+------------------------------------------------------------------+

Re: [MQL5] Indice d'une barre a partir d'une datetime

Publié : 26 févr. 2018, 14:10
par neo-13
Hello,
ca me semble lourd comme code juste pour trouver une barre, je pense que ta solution se trouve là:
https://www.mql5.com/en/docs/series/copyrates.
Le copyrate va te créer un tableau dans lequel tu pourras retrouver ta barre.

Re: [MQL5] Indice d'une barre a partir d'une datetime

Publié : 26 févr. 2018, 17:42
par Pierre8r
neo-13 a écrit :Hello,
ca me semble lourd comme code juste pour trouver une barre, je pense que ta solution se trouve là:
https://www.mql5.com/en/docs/series/copyrates.
Le copyrate va te créer un tableau dans lequel tu pourras retrouver ta barre.
Salut neo-13,

Merci pour le conseil.
Je vais garder mon code, de toutes façon il sera utilisé dans un indic, pas dans l'EA.

Re: [MQL5] Indice d'une barre a partir d'une datetime

Publié : 26 févr. 2018, 19:32
par neo-13
Qu'il soit dans un indic ou dans un EA, au plus le code est optimisé, au mieux c'est!
Je pense, mais cela n'engage que moi, que lors de chaque programme on se doit de clarifier son code au mieux et aussi et surtout de l'optimiser.
Surtout en trading, car s'il est bien un domaine où l'adage, "le temps c'est de l'argent" se vérifie, c'est bien celui là!!
Mais encore une fois cela n'engage que moi.

Re: [MQL5] Indice d'une barre a partir d'une datetime

Publié : 26 févr. 2018, 19:42
par Jeff719
Ouais enfin copyrate c'est un peu pareil. Pour avoir la flemme de mettre le doigt sur le bon indice d'après un ptit algo de quelques lignes, c'est l'enclume pour écraser une mouche : recopier l'entièreté d'un tableau dans un autre, juste pour le plaisir que le sous produit de l'opération te fournisse le bon indice. :shock:

En fait on a déjà le tableau. Ce sont les bars, avec Time(i) par exemple. A moins que ce soit différent en MQL5 ?

Bien sûr si on iBarShift "y a une heure ou deux" en M5, la stupide charge de calcul ne va pas se voir. Mais si par malheur vous faites du momentum 2 mois en allant voir des vieilles bougies M5, vous allez recopier 12000 bougies dans un tableau temporaire alloué dynamiquement. Comme Metaquote sont des truffes totales en allocation de mémoire, gros risque de voir un backtest de 10 ans en M5 passer de 3mn à 3heures, si c'est pas 3 jours. :lol:

Comme la question de Pierre m'a interpellé (et que je zieute de temps en temps ce qui se dit sur MQL5), j'ai été voir sur le forum MQL5. Y font pas mieux. Ça bricole encore et encore avec CopyTruc dans une table, la flemme de coder un truc moins débile.

C'est clair que Metaquote, disposant d'un tas de programmeurs qui seraient capables de résoudre l'affaire en quelques lignes, n'a pas envie de se faire chier. Le mieux est de laisser les amateurs se vautrer dans des trucs ineptes, car ça rapporte inéluctablement des tunes aux brokers ce qui est le but de la manip.

Quelqu'un a été voir du coté de Forex Factory ? Car normalement on trouve tout la bas. 8)

Re: [MQL5] Indice d'une barre a partir d'une datetime

Publié : 15 juin 2018, 16:26
par Pierre8r
Je ne m'intéresse plus du tout à la question, mais si quelqu'un fait une recherche et tombe sur cette file, je suis tombé par hasard sur du code d'Alain Verleyen.
iBarShift - library for MetaTrader 5
https://www.mql5.com/en/code/1864

Re: [MQL5] Indice d'une barre a partir d'une datetime

Publié : 15 juin 2018, 17:15
par Jeff719
Bah oui c'est bien sur ces trucs que j'étais tombé quand j'avais fait des recherches.

C'est toujours le CopyTime de bourrin.

Verleyen est un garçon sympathique mais comment dire ? fatigué ? :wink:

iBarShift is back in MQL5 :lol:

Publié : 15 juil. 2018, 15:22
par Pierre8r
iBarShift is back in MQL5 :lol:
MQL5: New functions: iTime, iOpen, iHigh, iLow, iClose, iVolume, iBars, iBarShift, iLowest, iHighest, iRealVolume, iTickVolume, iSpread. These functions are similar to those used in MQL4. The functions provide for an easier transfer of code of trading applications to the fifth generation platform.
Source https://www.mql5.com/en/forum/53/page19#comment_7973400

Re: [MQL5] Indice d'une barre a partir d'une datetime

Publié : 18 juil. 2018, 16:55
par elYsYum
Pierre8r a écrit :je suis tombé par hasard sur du code d'Alain Verleyen."
Alain est mon codeur d'EA Favoris :) c'est un belge qui connait super bien mql4, mql5, c++
c'est une pointure.

tu peux le croiser souvent sur le site de mql5 ou il est modo et code freelance

https://www.mql5.com/en/users/angevoyageur