Fehler, Irrtümer, Fragen - Seite 2469

 

Ich werde es wissen) dann hacken

 

Ich übertrage ein Programm von MQL4 nach MQL5.

Ich habe diesen Fehler festgestellt.

Bei Zeitrahmen bis zu m30 ist der Period()-Wert korrekt.

2019.05.22 17:45:38.628 TestStat (GBPUSD,M15) 4854 Zeitraum()=15
2019.05.22 17:46:08.267 TestStat (GBPUSD,M30) 4854 Zeitraum()=30

Vom Zeitrahmen H1 erhalte ich unverständliche Werte.

2019.05.22 17:31:07.446 TestStat (GBPUSD,H1) 4854 Period()=16385
2019.05.22 17:46:39.362 TestStat (GBPUSD,H4) 4854 Period()=16388
2019.05.22 17:46:55.552 TestStat (GBPUSD,D1) 4854 Zeitraum()=16408

Terminalversion Build 2057 vom 21. Mai 2019.

 

Ich danke Ihnen.

In der Beschreibung:

Zeitraum

Gibt den Zeitrahmenwert des aktuellen Diagramms zurück.

ENUM_TIMEFRAMESZeitraum();

Zurückgegebener Wert

Inhalt der Variablen _Period , die den Zeitrahmenwert des aktuellen Diagramms enthält. Wert kann einer derAufzählungswerte ENUM_TIMEFRAMESsein .

Siehe auch

PeriodSeconds, Diagrammperioden, Datum und Uhrzeit, , Objektsichtbarkeit

=================

Das ist nicht sehr gut gemacht. Sie sollte in der Beschreibung korrekt angegeben werden. Sie sollten nicht im Forum nach der Ursache des Problems suchen.

Es stellt sich heraus, dass Period() den Wert des aktuellen Zeitrahmens nicht ausgibt, da es heißt:Der Wert kann einer der Werte der Aufzählung ENUM_TIMEFRAMESsein .

Aber etwas ganz anderes.

Bitte korrigieren Sie die Sprachbeschreibung für Entwickler.

 
Nochmals vielen Dank anTheXpert für die Bereitstellung des Codes.
Wir haben die folgenden Ergebnisse auf ArrayResize Kapazität MT5 (build 2057):

#import "msvcrt.dll"
  long memcpy(int &dst[], long &src, int cnt);
#import

#define  PRINT(x) ; Print(#x, ":", string(x))

template<typename T>
struct ArrayStore
{
   long offset;
   T x[];
   
   int capacity() 
   {
      int ints[sizeof(ArrayStore) / sizeof(int)];
      memcpy(ints, this.offset, sizeof(ArrayStore));
      return ints[8];
   }
   
   int size() 
   {
      int ints[sizeof(ArrayStore) / sizeof(int)];
      memcpy(ints, this.offset, sizeof(ArrayStore));
      return ints[4];
   }
};

template<typename T>
int TestArrayCapacity(ArrayStore<T> &store, int size, int reserved_size = 0){
   ArrayResize(store.x, size, reserved_size);
   return store.capacity(); 
}

template<typename T>
int TestArraySize(ArrayStore<T> &store, int size, int reserved_size = 0){
   ArrayResize(store.x, size, reserved_size);
   return store.size(); 
}


void OnStart()
{
   ArrayStore<int> store;
   
   PRINT("TEST_ArrayCapacity");
   
   PRINT(TestArrayCapacity(store, 100, 0)); 
   PRINT(TestArrayCapacity(store, 100, 100)); 
   PRINT(TestArrayCapacity(store, 101, 100)); 
   PRINT(TestArrayCapacity(store, 200, 100)); 
   PRINT(TestArrayCapacity(store, 201, 100)); 
   PRINT(TestArrayCapacity(store, 202, 100)); 
   PRINT(TestArrayCapacity(store, 100,   1)); 
   PRINT(TestArrayCapacity(store, 100, 400)); 
   PRINT(TestArrayCapacity(store, 300, 400)); 
   PRINT(TestArrayCapacity(store, 301, 600));
   PRINT(TestArrayCapacity(store, 302, 600));
   PRINT(TestArrayCapacity(store, 303, 600));
   PRINT(TestArrayCapacity(store, 100,   0)); 
   PRINT(TestArrayCapacity(store, 100, 100)); 
   PRINT(TestArrayCapacity(store, 100,  -1)); 
   PRINT(TestArrayCapacity(store, 100, 100)); 
   PRINT(TestArrayCapacity(store, 105, 100)); 
}

Ergebnis:
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TEST_ArrayCapacity:TEST_ArrayCapacity
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,0):100
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,100):100
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,101,100):201
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,200,100):201
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,201,100):201
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,202,100):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,1):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,400):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,300,400):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,301,600):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,302,600):302
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,303,600):903
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,0):903
2019.05.22 17:00:50.249 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,100):903
2019.05.22 17:00:50.250 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,-1):100
2019.05.22 17:00:50.250 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,100,100):100
2019.05.22 17:00:50.250 Test_array_resize (EURUSD,H1)   TestArrayCapacity(store,105,100):205
 
Eugeni Neumoin:

Beschreibung:

Inhalt der Variablen _Period , die den Zeitrahmenwert des aktuellen Diagramms speichert. Der Wert kann einer der Werte derAufzählung ENUM_TIMEFRAMESsein .

Das ist nicht gut gemacht. Sie sollte in der Beschreibung korrekt angegeben werden. Sie sollten nicht im Forum nach der Ursache des Problems suchen.

Es steht also nirgends geschrieben, dass dieser Wert der Dauer in Minuten entspricht (wie es bei Quad der Fall war).

https://www.mql5.com/ru/articles/81

Hier beginnt der verlinkte Artikel.

Переход с MQL4 на MQL5
Переход с MQL4 на MQL5
  • www.mql5.com
Данная статья, построенная в форме справочника по функциям MQL4, призвана помочь переходу с MQL4 на MQL5. Для каждой функции языка MQL4 приведено описание и представлен способ ее реализации на MQL5, что позволит вам значительно ускорить перевод своих программ с MQL4 на MQL5. Для удобства функции разбиты на группы, как в документации по MQL4.
 
Igor Zakharov:

Es wird also nirgends gesagt, dass dieser Wert gleich der Zeitspanne in Minuten ist (wie es bei den Vierern der Fall war).

https://www.mql5.com/ru/articles/81

An dieser Stelle beginnt der Artikel auf dem Link.

Es gibt eine Beschreibung der Sprache, die besagt: Wert kann einer der Werte der ENUM_TIMEFRAMES-Aufzählung sein .

Siehe die Sprachbeschreibung weiter unten:

Graphische Perioden

Alle vordefinierten Diagrammzeiträume haben eindeutige Bezeichner. Der Bezeichner PERIOD_CURRENT bezeichnet die aktuelle Periode des Diagramms, in der das Programm mql5 läuft.

ENUM_TIMEFRAMES

Kennung

Beschreibung

PERIOD_CURRENT

Aktueller Zeitraum

PERIOD_M1

1 Minute

PERIOD_M2

2 Minuten

PERIOD_M3

3 Minuten

PERIOD_M4

4 Minuten

PERIOD_M5

5 Minuten

PERIOD_M6

6 Minuten

PERIOD_M10

10 Minuten

PERIOD_M12

12 Minuten

PERIOD_M15

15 Minuten

PERIOD_M20

20 Minuten

PERIOD_M30

30 Minuten

PERIOD_H1

1 Stunde

PERIOD_H2

2 Stunden

PERIOD_H3

3 Stunden

PERIOD_H4

4 Stunden

PERIOD_H6

6 Stunden

PERIOD_H8

8 Stunden

PERIOD_H12

12 Stunden

PERIOD_D1

1 Tag

PERIOD_W1

1 Woche

PERIOD_MN1

1 Monat

======================

Und nirgendwo in der Beschreibung steht, dass dieser Wert in Sekunden angegeben ist.

Die Beschreibung sollte alles sagen.

Und wenn man dann noch andere Artikel nachschlagen muss, ist das schade.

 
Sergey Dzyublik:
Nochmals vielen Dank anTheXpert für die Bereitstellung des Codes.
Wir haben die folgenden Ergebnisse auf ArrayResize Kapazität MT5 (build 2057):
Also, Schlussfolgerungen zur ArrayResize Leistung und Auswirkung auf die reale Kapazität:

Die erste ArrayResize Funktion ist sehr wichtig, da sie den Speicher unter Berücksichtigung von size + reserved_size zuweist und die Kapazität festlegt.
2. Alle nachfolgenden ArrayResize-Ausführungen mit einem neuen Wert von reserved_size haben keine Auswirkung auf die Menge des zugewiesenen Speichers bzw. der Kapazität.
3 Eine neue Speicherzuweisung erfolgt nur, wenn die Kapazität überschritten wird. In diesem Fall wird erneut size + reserved_size verwendet, um die Menge des zugewiesenen Speichers zu bestimmen und eine neue Kapazität festzulegen.
4. Ein Wert von reserved_size < 0 gibt den reservierten Speicher auf size size frei.
 
Eugeni Neumoin:

Und nirgendwo in der Beschreibung steht, dass dieser Wert in Sekunden angegeben ist.

Es geht also nicht um Sekunden...

 
Eugeni Neumoin:

Es gibt eine Sprachbeschreibung, die besagt: Wert kann einer der ENUM_TIMEFRAMESAufzählungswerte sein .

Siehe weiter in der Sprachbeschreibung:

Graphische Perioden

Alle vordefinierten Diagrammzeiträume haben eindeutige Bezeichner. Die Kennung PERIOD_CURRENT bezeichnet die aktuelle Periode des Diagramms, in der das mql5-Programm läuft.

ENUM_TIMEFRAMES

======================

Und nirgendwo in der Beschreibung steht, dass dieser Wert in Sekunden angegeben ist.

Die Beschreibung sollte alles sagen.

Und wenn man sich durch andere Artikel durcharbeiten muss, ist es schade.

Wer hat Ihnen gesagt, dass dies Werte in Sekunden sind?

 
Eugeni Neumoin :

Es gibt eine Sprachbeschreibung, die besagt: Wert kann einer der Werte der Aufzählung ENUM_TIMEFRAMES sein .

Siehe weiter in der Sprachbeschreibung:

Graphische Perioden

Alle vordefinierten Diagrammzeiträume haben eindeutige Bezeichner. Die Kennung PERIOD_CURRENT bezeichnet die aktuelle Periode des Diagramms, in der das Programm mql5 läuft.

ENUM_TIMEFRAMES

Kennung

Beschreibung

PERIOD_CURRENT

Aktueller Zeitraum

PERIOD_M1

1 Minute

PERIOD_M2

2 Minuten

PERIOD_M3

3 Minuten

PERIOD_M4

4 Minuten

PERIOD_M5

5 Minuten

PERIOD_M6

6 Minuten

PERIOD_M10

10 Minuten

PERIOD_M12

12 Minuten

PERIOD_M15

15 Minuten

PERIOD_M20

20 Minuten

PERIOD_M30

30 Minuten

PERIOD_H1

1 Stunde

PERIOD_H2

2 Stunden

PERIOD_H3

3 Stunden

PERIOD_H4

4 Stunden

PERIOD_H6

6 Stunden

PERIOD_H8

8 Stunden

PERIOD_H12

12 Stunden

PERIOD_D1

1 Tag

PERIOD_W1

1 Woche

PERIOD_MN1

1 Monat

======================

Und nirgendwo in der Beschreibung steht, dass dieser Wert in Sekunden angegeben ist.

Die Beschreibung sollte alles sagen.

Und wenn man sich durch einige andere Artikel durcharbeiten muss, ist das schade.

Sie sollten sich niemals auf einen Aufzählungswert verlassen.

Verwenden Sie PeriodSeconds().