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

Modérateur : Administrateurs

Répondre
Message
Auteur
Avatar de l’utilisateur
Pierre8r
Membre assidu
Messages : 276
Inscription : 28 sept. 2013, 07:54

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

#1 Message 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';

Avatar de l’utilisateur
Pierre8r
Membre assidu
Messages : 276
Inscription : 28 sept. 2013, 07:54

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

#2 Message 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));

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

Jeff719
VideoBourse family
Messages : 785
Inscription : 28 sept. 2015, 16:18

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

#3 Message 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:
Les informations présentées ne peuvent être considérées ni comme un conseil en investissement, ni comme une recommandation d'investissement. Il s'agit de commentaires généraux sur les marchés et de raisonnements que l'on peut tenir à leur sujet.

Avatar de l’utilisateur
Pierre8r
Membre assidu
Messages : 276
Inscription : 28 sept. 2013, 07:54

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

#4 Message 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.

Jeff719
VideoBourse family
Messages : 785
Inscription : 28 sept. 2015, 16:18

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

#5 Message 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+
Les informations présentées ne peuvent être considérées ni comme un conseil en investissement, ni comme une recommandation d'investissement. Il s'agit de commentaires généraux sur les marchés et de raisonnements que l'on peut tenir à leur sujet.

Avatar de l’utilisateur
Pierre8r
Membre assidu
Messages : 276
Inscription : 28 sept. 2013, 07:54

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

#6 Message 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));

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

neo-13
Professionnel certifié
Messages : 422
Inscription : 28 févr. 2015, 17:53

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

#7 Message 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.

Avatar de l’utilisateur
Pierre8r
Membre assidu
Messages : 276
Inscription : 28 sept. 2013, 07:54

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

#8 Message 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.

neo-13
Professionnel certifié
Messages : 422
Inscription : 28 févr. 2015, 17:53

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

#9 Message 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.

Jeff719
VideoBourse family
Messages : 785
Inscription : 28 sept. 2015, 16:18

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

#10 Message 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)
Les informations présentées ne peuvent être considérées ni comme un conseil en investissement, ni comme une recommandation d'investissement. Il s'agit de commentaires généraux sur les marchés et de raisonnements que l'on peut tenir à leur sujet.

Avatar de l’utilisateur
Pierre8r
Membre assidu
Messages : 276
Inscription : 28 sept. 2013, 07:54

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

#11 Message 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

Jeff719
VideoBourse family
Messages : 785
Inscription : 28 sept. 2015, 16:18

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

#12 Message 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:
Les informations présentées ne peuvent être considérées ni comme un conseil en investissement, ni comme une recommandation d'investissement. Il s'agit de commentaires généraux sur les marchés et de raisonnements que l'on peut tenir à leur sujet.

Avatar de l’utilisateur
Pierre8r
Membre assidu
Messages : 276
Inscription : 28 sept. 2013, 07:54

iBarShift is back in MQL5 :lol:

#13 Message 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

elYsYum
VideoBourse family
Messages : 665
Inscription : 17 sept. 2014, 18:36

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

#14 Message 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
ducunt volentem fata nolentem trahunt

Répondre