Analog zu iBarShift - Seite 2

 
Hier sind zwei Varianten der iBarShift()-Analogie: Beitrag #5 und Beitrag #7
 
Denis:

Die Funktion Balken gibt die Anzahl der Balken zurück. Wenn wir den Index eines Balkens mit dem Index 9 (entschuldigen Sie die Tautologie) abfragen wollen, wird 10 zurückgegeben, da der Index des ersten Balkens 0 ist.
Gut, danke. Alles in allem ist es ein guter Zusatzhinweis. Stimmt, ich kümmere mich nicht wirklich darum, ich weiß nur, dass es die Anzahl der Balken ist. Und wenn das Programm einen Index benötigt, ziehe ich nur dann einen ab.
 
Vasiliy Pushkaryov:
Hier sind zwei Varianten der iBarShift()-Analogie: Beitrag #5 und Beitrag #7
Einfache Variante:
Bars(NULL, 0, t, 32000000000)-1;

die kürzeste und schnellste Lösung für iBarShift analog für aktuelles Symbol und Zeitrahmen und erfordert keine zusätzlichen Funktionen. Aber auch für die nicht-aktuellen müssen Sie nur die ersten beiden Parameter anstelle der Null-Parameter eingeben.
 
Nikolai Semko:
Nur eine Variante:

ist die kürzeste und schnellste Lösung zum Gegenstück iBarShift für das aktuelle Symbol und den aktuellen Zeitrahmen und erfordert keine zusätzlichen Funktionen.

Nur wird es nicht in allen Fällen korrekt funktionieren. GetBarShift() von fxsaber ist vielseitiger.

Versuchen Sie, TimeCurrent() anstelle von t in Ihre Funktion einzufügen, und Sie werden das Ergebnis sehen.

 
Vasiliy Pushkaryov:

Nur wird es nicht in allen Fällen korrekt funktionieren. GetBarShift() von fxsaber ist universeller.

Versuchen Sie, TimeCurrent() anstelle von t in Ihre Funktion einzufügen, und Sie werden das Ergebnis sehen.

Das Ergebnis wird dasselbe sein.
 
Nikolai Semko:
Das Ergebnis wird dasselbe sein.
Sie haben nicht einmal überprüft
 
Vasiliy Pushkaryov:
Sie haben es nicht einmal überprüft.
Ich habe das schon oft überprüft, also weiß ich es einfach. Aber Sie haben es nicht einmal selbst ausprobiert.
 
Nikolai Semko:
Ich habe es schon viele Male getestet, also weiß ich es einfach. Aber Sie haben es nicht einmal selbst ausprobiert.

Hier ist das Drehbuch.

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;
}

Er bleibt einfach hängen. Das gewaltsame Entfernen aus dem Diagramm liefert das Ergebnis.


Also habe ich es ausprobiert, und deshalb habe ich Ihnen auch dazu geraten. Aber da du es benutzt hast und es dir passt, werde ich deine Meinung nicht ändern.

 

Das ist auch in Ordnung

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
  • Stimmen: 42
  • 2013.10.25
  • Alain Verleyen
  • www.mql5.com
Многие ищут функцию iBarShift, которая была в языке MQL4. В языке MQL5 ее нет, но есть все возможности для ее реализации в виде библиотеки.