Analogue à iBarShift - page 2

 
Voici deux variantes de l'analogue de iBarShift(): post #5 et post #7
 
Denis:

La fonction Bars renvoie le nombre de barres. Lorsque nous avons besoin d'obtenir l'indice d'une barre d'indice 9 (désolé pour la tautologie), il retournera 10, car l'indice de la première barre est 0.
Bien, merci. Dans l'ensemble, c'est un bon ajout - avis. C'est vrai, je ne m'en soucie pas vraiment, je sais juste que c'est le nombre de barres. Et si le programme a besoin d'un index, alors seulement je soustrais un.
 
Vasiliy Pushkaryov:
Voici deux variantes de l'analogue de iBarShift(): post #5 et post #7
Variante simple :
Bars(NULL, 0, t, 32000000000)-1;

la solution la plus courte et la plus rapide pour l'analogique iBarShift pour le symbole et le délai actuels et ne nécessite aucune fonction supplémentaire. Cependant, pour ceux qui ne sont pas courants également, il suffit de remplir les deux premiers paramètres au lieu des paramètres nuls.
 
Nikolai Semko:
Juste une variante :

est la solution la plus courte et la plus rapide de la contrepartie iBarShift pour le symbole actuel et le délai actuel et ne nécessite aucune fonction supplémentaire.

Seulement, cela ne fonctionnera pas correctement dans tous les cas. GetBarShift() de fxsaber est plus polyvalent.

Essayez de mettre TimeCurrent() à la place de t dans votre fonction, vous verrez le résultat.

 
Vasiliy Pushkaryov:

Seulement, cela ne fonctionnera pas correctement dans tous les cas. GetBarShift() de fxsaber est plus universel.

Essayez de mettre TimeCurrent() à la place de t dans votre fonction, vous verrez le résultat.

Le résultat sera le même.
 
Nikolai Semko:
Le résultat sera le même.
Vous n'avez même pas vérifié
 
Vasiliy Pushkaryov:
Vous n'avez même pas vérifié.
J'ai déjà vérifié plusieurs fois, alors je le sais. Mais vous n'avez même pas essayé vous-même.
 
Nikolai Semko:
Je l'ai testé de nombreuses fois auparavant, alors je le sais. Mais vous n'avez même pas essayé vous-même.

Voici le script.

void OnStart()
{
  int idShort = Bars(NULL, 0, TimeCurrent(), 32000000000)-1;
  int idUni = GetBarShift(_Symbol, 0, TimeCurrent());
  Print("idShort = ", idShort, " idUni=", idUni);
}


//+------------------------------------------------------------------------------------------------------------------+
//| 
//+------------------------------------------------------------------------------------------------------------------+
int GetBarShift(const string symbol_name, const ENUM_TIMEFRAMES timeframe, const datetime time) 
{
  int res=-1;
  datetime last_bar;
  
   // --- время открытия последнего бара по символу, периоду
  if(SeriesInfoInteger(symbol_name, timeframe, SERIES_LASTBAR_DATE, last_bar)) 
  {
    if(time > last_bar) res = 0;
    else 
    {
      const int shift = Bars(symbol_name, timeframe, time, last_bar);
      if(shift > 0) res = shift-1;
    }
  }
  return res;
}

Ça se bloque. En le retirant de force du tableau, on obtient le résultat.


J'ai donc essayé, c'est pourquoi je vous ai conseillé aussi. Mais puisque vous l'avez utilisé et qu'il vous convient, je ne vous ferai pas changer d'avis.

 

C'est bien aussi.

int iBarShift(string symbol, ENUM_TIMEFRAMES timeframe, datetime tm)
   {
        datetime tm0[1];      
        CopyTime(symbol,timeframe,0,1,tm0);
        int res=Bars(symbol,timeframe,tm0[0],tm)-1;
        return(res);
   }
 
iBarShift
iBarShift
  • votes : 42
  • 2013.10.25
  • Alain Verleyen
  • www.mql5.com
Многие ищут функцию iBarShift, которая была в языке MQL4. В языке MQL5 ее нет, но есть все возможности для ее реализации в виде библиотеки.