Analog zu iBarShift

Alexander  

Ich vermisse die Funktionalität ähnlich wie bei iBarShift für MT4. Können Sie mir sagen, wie man das macht?

Und soweit ich weiß, sollten Sie CopyTime anstelle von Time[10] verwenden?

Aleksey Sergan  
GarF1eld писал(а)  :

Ich vermisse die Funktionalität ähnlich wie bei iBarShift für MT4. Können Sie mir sagen, wie man das macht?

Und soweit ich weiß, sollten Sie CopyTime anstelle von Time[10] verwenden?

Das Analogon von ibarshift:

int iBarOnTime( string symbol, ENUM_TIMEFRAMES timeframe, datetime time, bool exact=false )

analog zu Time[]:

Time( int i )

Es gibt noch viel mehr, das sich als nützlich erweisen wird:

double iHigh(string symbol,int tf,int ind)
double High( int i )
double iLow(string symbol,int tf,int ind)
double Low( int i )
double iClose(string symbol,int tf,int ind)
double Close( int i )
double iOpen(string symbol,int tf,int ind)
double Open( int i )
double HighOnTime( string symbol, ENUM_TIMEFRAMES timeframe, datetime time, bool exact=false )
double LowOnTime( string symbol, ENUM_TIMEFRAMES timeframe, datetime time, bool exact=false )
double CloseOnTime( string symbol, ENUM_TIMEFRAMES timeframe, datetime time, bool exact=false )
double OpenOnTime( string symbol, ENUM_TIMEFRAMES timeframe, datetime time, bool exact=false )
string SPeriod(ENUM_TIMEFRAMES tf)  //символьное представление периода
datetime iTime( const string symbol, int tf, int ind  )

//+------------------------------------------------------------------+
//| Аналог Bars(), не требует предварительной синхронизации истории  |
//| Вход  : symbol - символ в терминале                              |
//|         timeframe - таймфрейм                                    |
//| Выход : нет                                                      |
//| Прим. : нет                                                      |
//+------------------------------------------------------------------+
int BarsSinh( string symbol,ENUM_TIMEFRAMES  timeframe )

//+------------------------------------------------------------------+
//| Произвести синхронизацию таймсерии с историей                    |
//| Вход  : symbol - символ в терминале                              |
//|         tf     - таймфрейм                                       |
//| Выход : нет                                                      |
//| Прим. : нет                                                      |
//+------------------------------------------------------------------+
void SynhronizeSeries( string symbol, ENUM_TIMEFRAMES tf )

//+------------------------------------------------------------------+
//| Проверить наличие истории на дату start_date, если остуствует,   |
//| то произвести попытку загрузки                                   |
//| Вход  : symbol - символ в терминале                              |
//|         period - таймфрейм                                       |
//|         start_date - дата проверки истории                       |
//| Выход : код результата выполнения операции подробнее             |
//|         см. https://www.mql5.com/ru/docs/series/timeseries_access |
//| Прим. : нет                                                      |
//+------------------------------------------------------------------+
int CheckLoadHistory(string symbol,ENUM_TIMEFRAMES period,datetime start_date)
//+------------------------------------------------------------------+
//| возвращает строкое значение периода                              |
//+------------------------------------------------------------------+
string GetPeriodName(ENUM_TIMEFRAMES period)
Dateien:
common.mqh  22 kb
Alexander  
gdtt:

ibarshift analog :

Zeit[] analog:

Es gibt noch viel mehr, das sich als nützlich erweisen wird:

Danke! Nützliche Sache

Wenn es nichts Vernünftigeres aus der Norm gibt, werde ich Algorithmen aus der Bibliothek verwenden

Stanislav Korotky  
Kann jemand ein schnelleres Gegenstück zu iBarShift vorschlagen? Die vorhandenen Optionen mit CopyTime erweisen sich dem Profiler nach zu urteilen als furchtbar langsam. Ich brauche eine Taktsynchronisation. Ich zähle einen Indikator auf jedem Balken einmal, aber leider muss ich Ticks verarbeiten, bis der Balken synchronisiert ist. Ich habe auch eine Zeitschaltuhr eingebaut, aber ich kann keinen Produktivitätsgewinn feststellen.
Stanislav Korotky  

Falls jemand daran interessiert ist, habe ich eine Alternative gefunden.

int iBarShiftFast(string symbol, ENUM_TIMEFRAMES timeframe, datetime time)
{
  datetime lastBar;
  SeriesInfoInteger(symbol, timeframe, SERIES_LASTBAR_DATE, lastBar);
  return(Bars(symbol, timeframe, time, lastBar) - 1);
}

Nach meinen Messungen beträgt die Beschleunigung im Vergleich zur CopyTime-Variante das 2- bis 7-fache (je nach Eingabedaten). Wenn Sie Kommentare oder Fehler haben, schreiben Sie uns bitte.

Roman Shiredchenko  
marketeer:

Falls jemand daran interessiert ist, habe ich eine Alternative gefunden.

Nach meinen Messungen beträgt die Beschleunigung im Vergleich zur CopyTime-Variante das 2- bis 7-fache (je nach Eingabedaten). Wenn Sie Kommentare oder Fehler haben, schreiben Sie uns bitte.

Ich danke Ihnen. Ich werde es versuchen.

Roffild  

Oder vielleicht ist dies der richtige Weg, es jetzt zu tun:

int bar = Bars(0, 0, barTime_last, TimeCurrent());
Nikolai Semko  
Roffild:

Oder vielleicht ist das jetzt eher richtig:

int bar = Bars(0, 0, barTime_last, TimeCurrent());

Und noch schneller und korrekter (der erste Parameter muss NULL sein, mit Null funktioniert es nicht)

 int bar = Bars(NULL, 0, t, 32000000000);

Da die FunktionTimeCurrent() nicht unnötig ausgeführt werden muss

32000000000 ist nicht aus dem aktuellen Moment, sondern fast aus dem Moment von 3000

Denis Kanapis  
Nikolai Semko:

Und noch schneller und korrekter (der erste Parameter muss NULL sein, mit Null funktioniert es nicht)

Da die FunktionTimeCurrent() nicht unnötig ausgeführt werden muss

32000000000 ist nicht aus dem aktuellen Moment, sondern fast aus dem Moment von 3000


Und was ist mit -1? Dies ist ein wichtiger Moment...
Nikolai Semko  
Denis:

Was ist mit -1? Das ist ein wichtiger Punkt...
Ich weiß nicht, wovon Sie sprechen?
Erklären Sie das.
Denis Kanapis  
Nikolai Semko:
Ich bin mir nicht sicher, worum es hier geht?
Erklären Sie das.

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.
Grund der Beschwerde: