Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1173

 

MQL5 iBarShift

Laut der mql5-Dokumentation gibt die Funktion iBarShift einen Wert vom Typ int zurück.

int#

Der Typ int hat eine Größe von 4 Byte (32 Bit). Der Minimalwert ist -2 147 483 648, der Maximalwert ist 2 147 483 647.


MeiniBarShift will keinen Wert größer als 99999 angeben

Ich zeichne eine Trendlinie in den Chart, das folgende Skript ermittelt den Startzeitpunkt der Linie und gibt die Taktnummer dieses Zeitpunkts aus.

Wenn die Zeile irgendwann in der Historie zurückgeschoben wird, bleibt der Ausgabewert bei 99999 stehen, und wenn

boolexact=false// Modus

auf true ändern, wird -1 gedruckt und GetLastError = 0

void OnStart()
  {
int total = ObjectsTotal(0, 0, -1);  // Общее кол-во объектов на: /текущий график/главное окно/все типы объектов
datetime time0 = 0; // Время соответствующее началу трендовой линии
string objname = ""; // Имя объекта (трендовой линии)
int shift = 0; // Номер бара, соответствующего времени начала трендовой линии time0

for(int i = total - 1; i >= 0; i--)
     {
     objname = (string)ObjectName(0, i, 0, OBJ_TREND);
     time0 = ObjectGetInteger(0, objname, OBJPROP_TIME, 0);
     shift = iBarShift(NULL, PERIOD_M1, time0, false);
     Comment("shift: ", shift, " Error: ", GetLastError());
     Sleep(2000);
     }
  }

Was ist los?

Ich habe versucht, verschiedene Charts von verschiedenen Brokern, die Zeit von der Linie ist richtig lesen, wenn ich PERIOD_M1 zu M5, zum Beispiel, dann muss ich weiter in der Geschichte zu erreichen 99999 bewegen

Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
Документация по MQL5: Основы языка / Типы данных / Целые типы / Типы char, short, int и long
  • www.mql5.com
Целый тип char занимает в памяти 1 байт (8 бит) и позволяет выразить в двоичной системе счисления 2^8 значений=256. Тип char может содержать как положительные, так и отрицательные значения. Диапазон изменения значений составляет от -128 до 127. uchar # Целый тип uchar также занимает в памяти 1 байт, как и тип char, но в отличие от него, uchar...
Dateien:
sc1.mq5  3 kb
 
Sunriser:

MQL5 iBarShift

Laut der mql5-Dokumentation gibt die Funktion iBarShift einen Wert vom Typ int zurück.

int#

Der Typ int hat eine Größe von 4 Byte (32 Bit). Der Minimalwert ist -2 147 483 648, der Maximalwert ist 2 147 483 647.


MeiniBarShift will keinen Wert größer als 99999 angeben

Ich zeichne eine Trendlinie in den Chart, das folgende Skript ermittelt den Startzeitpunkt der Linie und gibt die Taktnummer dieses Zeitpunkts aus.

Wenn die Zeile irgendwann in der Historie zurückgeschoben wird, bleibt der Ausgabewert bei 99999 stehen, und wenn

boolexact=false// Modus

auf true ändern, wird -1 gedruckt und GetLastError = 0

Was ist los?

Ich habe versucht, verschiedene Charts von verschiedenen Brokern, die Zeit von der Linie ist richtig zu lesen, wenn ich PERIOD_M1 zu M5, zum Beispiel, ich brauche, um weiter in der Geschichte zu erreichen 99999.

Überprüfen Sie zunächst die maximale Anzahl der Balken in den Terminaleinstellungen.

 
Uladzimir Izerski:

Überprüfen Sie zunächst die maximale Anzahl der Balken in den Terminaleinstellungen.

Ich danke Ihnen!

Es waren 10000, ich habe es auf unbegrenzt geändert und es hat funktioniert.

Das ist allerdings nicht so offensichtlich...

 

Hilfe bei der Erstellung von Griffen

Die Sache ist die

int OnInit()
  {
//-создадим хэндл индикатора
      handle=iAO(name,period);
//-если не удалось создать хэндл
   if(handle==INVALID_HANDLE)
     {
      ...
      return(INIT_FAILED);
     }

Frage: Aus welchen Parametern wird die Nummer (Ziffern) eines Griffs ermittelt?
Kann es nach einem Neustart des Terminals anders sein?
Kann es nach einer Neuinitialisierung des Diagramms anders sein?
In welchen Fällen kann sie sich ändern?

 
Vitaly Muzichenko:

Hilfe bei der Erstellung von Griffen

Die Sache ist die

Frage: Aus welchen Parametern wird die Nummer (Ziffern) eines Griffs ermittelt?
Kann es nach einem Neustart des Terminals anders sein?
Kann es nach einer Neuinitialisierung des Diagramms anders sein?
In welchen Fällen kann sie sich ändern?

Wenn es nur einen Indikator gibt, hat dieser immer einen Griff von 10. Jede aufeinanderfolgende ist gleich der vorhergehenden+1, und es hängt alles von der Reihenfolge ab, in der die Griffe erstellt wurden. Sie kann sich nur ändern, wenn bei einer der vorherigen ein Fehler auftritt.

 
Alexey Viktorov:

Wenn Sie einen Indikator haben, hat dieser immer einen Griff von 10. Jeder nächste ist gleich dem vorherigen+1 und es hängt alles von der Reihenfolge ab, in der die Griffe erstellt wurden. Sie kann sich nur ändern, wenn bei einer der vorherigen ein Fehler auftritt.

Ich verstehe, das ist mehr oder weniger klar. Ich danke Ihnen!

 
Vitaly Muzichenko:

Hilfe bei der Erstellung von Griffen

Es gibt so etwas wie das hier

Frage: Aus welchen Parametern wird die Nummer (Ziffern) eines Griffs ermittelt?
Kann es nach einem Neustart des Terminals anders sein?
Kann es nach einer Neuinitialisierung der Karte anders sein?
In welchen Fällen kann sie sich ändern?

Gefundene Antworten

Сравниваем скорость самокэширующихся индикаторов
Сравниваем скорость самокэширующихся индикаторов
  • www.mql5.com
Предположим, что нам вдруг наскучил классический MQL5-доступ к индикаторам и захотелось сравнить скорость доступа в сравнении с альтернативными вариантами. Например, сравним его с доступом к индикаторам в стиле MQL4 без кэширования и с кэшированием. Идеи с доступом в MQL4-стиле были взяты из статьи LifeHack для трейдера: готовим фастфуд из...
 
Wo ist es möglich, eine Datei so einzufügen, dass sie über Vererbung für alle Dateien in der Standardbibliothek sichtbar ist?
Документация по MQL5: Стандартная библиотека
Документация по MQL5: Стандартная библиотека
  • www.mql5.com
Стандартная библиотека MQL5 написана на языке MQL5 и предназначена для облегчения написания программ (индикаторов, скриптов, экспертов) конечным пользователям. Библиотека обеспечивает удобный доступ к большинству внутренних функций MQL5.
 

Bitte teilen Sie mir mit, wie ich ein mehrdimensionales Array korrekt an eine Funktion übergeben kann.

Wenn ich einfach MyFun( &Mas[][] ) in der Kopfzeile angebe, erzeugt der Compiler einen Fehler beim Zugriff auf ein Array-Element Mas[j][k] im Funktionskörper... Aber wie?

Es scheint kein Problem mit eindimensionalen zu geben.

 
User_mt5:

Bitte teilen Sie mir mit, wie ich ein mehrdimensionales Array korrekt an eine Funktion übergeben kann.

Wenn ich einfach MyFun( &Mas[][] ) in der Kopfzeile angebe, erzeugt der Compiler einen Fehler beim Zugriff auf ein Array-Element Mas[j][k] im Funktionskörper... Aber wie?

Bei eindimensionalen Arrays scheint es keine Probleme zu geben.

Die Dimensionen des zweiten und des nächsten Arrays können nicht dynamisch sein. Folglich muss MyFun(int &Mas[][7]) als Array deklariert werden, z. B. int Mas[][7]; so sollte es empfangen werden.

Grund der Beschwerde: