Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1884

 
Alexey Viktorov #:

Ich diskutiere nicht. "Die grauen sind auf dem Bild in diesem Beitrag zu sehen.


Ohne das Quellenmaterial sind dies die, die


Nun, ich habe von "diesen" gesprochen. Als ich einen Überlauf hatte und die Indikatoren nicht angezeigt wurden, habe ich nicht darauf geachtet, was in dem Menü angezeigt wird, das auf dem Screenshot in dem von Ihnen erwähnten Beitrag zu sehen ist. Ich kann hier nichts mit Sicherheit sagen.

Wenn sich die Indikatoren jedoch nicht im Navigator, sondern im Ordner befinden, bedeutet dies, dass die neuen Indikatoren erst dann im Navigator angezeigt werden, wenn einige der alten Indikatoren aus dem Ordner entfernt wurden.

Das habe ich auch schon erlebt. Ich bin nicht der Einzige.

 

Ich wollte die Notwendigkeit, die Größe des dynamischen Arrays manuell zu ändern, umgehen, indem ich es einfach als Indikatorpuffer zugewiesen habe. Aber ich kann ArrayResize() nicht loswerden, als ob es sich um ein dynamisches Array des Indikatorpuffers handeln würde, dessen Größe vom Terminal selbst überwacht werden sollte und das nicht manuell in der Größe verändert werden sollte:

https://www.mql5.com/ru/docs/series/bufferdirection:

Индикаторный буфер представляет из себя динамический массив типа double, размером которого управляет клиентский терминал с тем, чтобы он всегда соответствовал количеству баров, на которых индикатор рассчитывается. Обычный динамический массив типа double назначается в качестве индикаторного буфера с помощью функции SetIndexBuffer(). Для индикаторных буферов не требуется задавать размер с помощью функции ArrayResize(), исполняющая система терминала сама позаботится об этом.

Wir gehen auf https://www.mql5.com/ru/docs/array/arrayisdynamic, führen den Code aus und stellen plötzlich fest, dass:

2022.01.24 21:25:27.543 t (NZDUSD,D1) 3. Prüfen des Indikatorpuffers:

2022.01.24 21:25:27.543 t (NZDUSD,D1) Größe vor Speicherfreigabe = 7278

2022.01.24 21:25:27.543 t (NZDUSD,D1) Dies ist ein dynamisches Array = Keine

2022.01.24 21:25:27.543 t (NZDUSD,D1) Größe nach Speicherfreigabe = 0

zur gleichen Zeit:

double ExtBuff[];      // индикаторный буфер
SetIndexBuffer(0,ExtBuff);

Ich schaue in das Buch - ich sehe eine Feige. Oder sind wir die ganze Zeit getäuscht worden?

Oder ist es vielleicht einmal dynamisch (bei der ersten Initialisierung) und das war's dann?

 
x572intraday #:

Ich kann ArrayResize() nicht loswerden, das angeblich ein dynamisches Array des Indikatorpuffers ist, dessen Größe vom Terminal selbst überwacht werden sollte und das angeblich nicht manuell in der Größe geändert werden muss:

https://www.mql5.com/ru/docs/series/bufferdirection:

Wir gehen auf https://www.mql5.com/ru/docs/array/arrayisdynamic, führen den Code aus und stellen plötzlich fest, dass:

Zugleich ist es:

Ich schaue in das Buch - ich sehe eine Feige. Oder sind wir die ganze Zeit getäuscht worden?

Oder ist sie vielleicht einmal dynamisch (bei der ersten Initialisierung) und das war's dann?

22:23:17.002 Dynamischer EURCAD,H1: +============================+

0 22:23:17.002 Dynamische EURCAD,H1: 1. Überprüfen eines dynamischen Arrays:

0 22:23:17.002 Dynamisches EURCAD,H1: Größe vor Speicherfreigabe = 100

0 22:23:17.002 Dynamisch EURCAD,H1: Dies ist ein dynamisches Array = Ja

0 22:23:17.002 Dynamisches EURCAD,H1: Größe nach Speicherfreigabe = 0

0 22:23:17.002 Dynamische EURCAD,H1: 2. Statische Array-Prüfung:

0 22:23:17.002 Dynamisches EURCAD,H1: Größe vor Speicherfreigabe = 100

0 22:23:17.002 Dynamisches EURCAD,H1: Dies ist ein dynamisches Array = Keine

0 22:23:17.002 Dynamisches EURCAD,H1: Größe nach Speicherfreigabe = 0

0 22:23:17.002 Dynamische EURCAD,H1: 3. Indikatorpuffer prüfen:

0 22:23:17.002 Dynamischer EURCAD,H1: Größe vor Speicherfreigabe = 2725

0 22:23:17.002 Dynamisches EURCAD,H1: Dies ist ein dynamisches Feld = Ja

0 22:23:17.002 Dynamisches EURCAD,H1: Größe nach Speicherfreigabe = 0

0 22:23:24.754 Dynamische EURCAD,H1: uninit Grund 1

0 22:23:24.758 Benutzerdefinierter Indikator Dynamic EURCAD,H1: entfernt

Dies ist bei 4.

 
x572intraday #:

Ich wollte die Notwendigkeit, die Größe des dynamischen Arrays manuell zu ändern, umgehen, indem ich es einfach als Indikatorpuffer zugewiesen habe. Aber ich kann ArrayResize() nicht loswerden, als ob es sich um ein dynamisches Array des Indikatorpuffers handeln würde, dessen Größe vom Terminal selbst überwacht werden sollte und das nicht manuell in der Größe verändert werden sollte:

https://www.mql5.com/ru/docs/series/bufferdirection:

Wir gehen auf https://www.mql5.com/ru/docs/array/arrayisdynamic, führen den Code aus und stellen plötzlich fest, dass:

Zugleich ist es:

Ich schaue in das Buch - ich sehe eine Feige. Oder sind wir die ganze Zeit getäuscht worden?

Oder vielleicht ist es einmalig dynamisch (bei der ersten Initialisierung) und das war's dann?

ja, das war's dann :-)

...nach SetIndexBuffer ist es unmöglich, ArrayResize zu verwenden und aus Sicht des Programms ist das Array statisch, mit einer vordefinierten (extern kontrollierten) Größe

 
Alekseu Fedotov #:

22:23:17.002 Dynamischer EURCAD,H1: +============================+

0 22:23:17.002 Dynamische EURCAD,H1: 1. Überprüfen eines dynamischen Arrays:

0 22:23:17.002 Dynamisches EURCAD,H1: Größe vor Speicherfreigabe = 100

0 22:23:17.002 Dynamisch EURCAD,H1: Dies ist ein dynamisches Array = Ja

0 22:23:17.002 Dynamisches EURCAD,H1: Größe nach Speicherfreigabe = 0

0 22:23:17.002 Dynamische EURCAD,H1: 2. Statische Array-Prüfung:

0 22:23:17.002 Dynamisches EURCAD,H1: Größe vor Speicherfreigabe = 100

0 22:23:17.002 Dynamisches EURCAD,H1: Dies ist ein dynamisches Array = Keine

0 22:23:17.002 Dynamisches EURCAD,H1: Größe nach Speicherfreigabe = 0

0 22:23:17.002 Dynamische EURCAD,H1: 3. Indikatorpuffer prüfen:

0 22:23:17.002 Dynamischer EURCAD,H1: Größe vor Speicherfreigabe = 2725

0 22:23:17.002 Dynamisches EURCAD,H1: Dies ist ein dynamisches Feld = Ja

0 22:23:17.002 Dynamisches EURCAD,H1: Größe nach Speicherfreigabe = 0

0 22:23:24.754 Dynamische EURCAD,H1: uninit Grund 1

0 22:23:24.758 Benutzerdefinierter Indikator Dynamic EURCAD,H1: entfernt

Dies ist bei 4.

Fantastisch! Was ist diese Magie? Ich habe soeben EURCAD,H1 überprüft - wieder nein.

Und was ist 4? In dem Beispiel gibt es nur drei Punkte.

 
x572intraday #:

Fantastisch! Was ist diese Magie? Gerade auf EURCAD,H1 geprüft - wieder "Nein".

Und was ist 4? In dem Beispiel gibt es nur drei Punkte.

MT4-Terminal

 
x572intraday #:

Fantastisch! Was ist diese Magie? Gerade auf EURCAD,H1 geprüft - wieder "Nein".

Und was ist 4? In dem Beispiel gibt es nur drei Punkte.

0 23:33:06.088 test (EURUSD,D1) +============================+

0 23:33:06.088 test (EURUSD,D1) 1. Überprüfung des dynamischen Arrays:

0 23:33:06.088 test (EURUSD,D1) Größe vor Speicherfreigabe = 100

0 23:33:06.088 test (EURUSD,D1) Dies ist ein dynamisches Feld = Ja

0 23:33:06.088 test (EURUSD,D1) Größe nach Speicherfreigabe = 0

0 23:33:06.088 test (EURUSD,D1) 2. Statischer Array-Test:

0 23:33:06.088 test (EURUSD,D1) Größe vor Speicherfreigabe = 100

0 23:33:06.088 test (EURUSD,D1) Dies ist ein dynamisches Array = Keine

0 23:33:06.088 test (EURUSD,D1) Größe nach Speicherfreigabe = 100

0 23:33:06.088 test (EURUSD,D1) 3. Indikatorpuffer prüfen:

0 23:33:06.088 test (EURUSD,D1) Größe vor Speicherfreigabe = 1054

0 23:33:06.088 test (EURUSD,D1) This is dynamic array = None

0 23:33:06.088 test (EURUSD,D1) Größe nach Speicherfreigabe = 0


Terminal MT5, keine Gedanken.

 
x572intraday #:

Ich wollte die Notwendigkeit, die Größe des dynamischen Arrays manuell zu ändern, umgehen, indem ich es einfach als Indikatorpuffer zugewiesen habe. Aber ich kann ArrayResize() nicht loswerden, als ob es sich um ein dynamisches Array des Indikatorpuffers handeln würde, dessen Größe vom Terminal selbst überwacht werden sollte und das nicht manuell in der Größe verändert werden sollte:

https://www.mql5.com/ru/docs/series/bufferdirection:

Wir gehen auf https://www.mql5.com/ru/docs/array/arrayisdynamic, führen den Code aus und stellen plötzlich fest, dass:

Zugleich ist es:

Ich schaue in das Buch - ich sehe eine Feige. Oder wurden wir die ganze Zeit über getäuscht?

Oder ist es vielleicht einmal dynamisch (bei der ersten Initialisierung) und das war's dann?

Das Pufferfeld ist dynamisch. In MQL haben dynamische Arrays Zeichen von Objekten, soweit ich es verstanden habe, während ich mit ihnen arbeitete (wie in Ultra-High-Level-Sprachen). Wenn Sie jedoch ein dynamisches Array als Puffer deklarieren (mit SetIndexBuffer), wird dieser Speicherbereich reserviert. Aus diesem Grund können die meisten Standardfunktionen die Größe nicht ändern. Ich verwende manchmal Objekt-Arrays als Indikatorpuffer. Und wenn ich das tue, wird der Speicher für solche Arrays im Destruktor des Objekts freigegeben. Somit ist die Freigabe des Indikatorpufferspeichers durch die Anwendung(oder das Objekt) selbst erlaubt. Das bedeutet aber nicht, dass das Array direkt während des Betriebs des Indikators wieder freigegeben werden kann. Alles sollte mit Bedacht gemacht werden.

 

Nachmittag

Können Sie mich beraten, ich versuche, einen Expert Advisor zu schreiben, und wenn ich ihn teste, passiert etwas Seltsames...

Ich habe eine Funktion

CalcAngleTrend(NormalizeDouble((a[0]-a[1]), MA_DIGITS));

double CalcAngleTrend(double d)
 {
  double a = (double) ((atan(d*pow(10,_Digits-2)))*(180/M_PI)*coefAngle);
Print("d: ", d);
  return(NormalizeDouble(a, ANGLE_DIGITS));
 }

Was ist die Situation, ich führe eine Instanz des EA auf einem Chart aus und führe die zweite im Debug-Modus auf dem gleichen Chart mit MT4
aus. Die Eingabedaten für die Funktion sind die gleichen, aber die Ausgabedaten sind unterschiedlich!!!? Ich verstehe einfach etwas nicht, wie es scheint...(

Это выдает запущеный вариант:

2022.01.25 15:01:12.880 USDJPY,M5: d: 0.0014887
2022.01.25 15:01:12.880 USDJPY,M5: d: -0.0060861
2022.01.25 15:01:12.880 USDJPY,M5: Angle Slow: +1.70580000
2022.01.25 15:01:12.880 USDJPY,M5: Angle Fast: -6.96560000

это в режиме отладки:

2022.01.25 15:01:14.330 USDJPY,M5: d: 0.0014887
2022.01.25 15:01:14.330 USDJPY,M5: d: -0.0060861
2022.01.25 15:01:14.330 USDJPY,M5: Angle Slow: +4.26450000
2022.01.25 15:01:14.330 USDJPY,M5: Angle Fast: -17.41390000

mich zu beraten, wo ich nach Informationen suchen soll!!!

PS: berechnet die Differenz von genau 2,5 mal die Leistung
 
Владимир Казаков einen Expert Advisor zu schreiben, und wenn ich ihn teste, passiert etwas Seltsames...

Ich habe eine Funktion

Was ist die Situation, ich starte eine Instanz des EA auf einem Chart laufen, und führen Sie die zweite im Debug-Modus auf dem gleichen Chart mit MT4
Die Eingangsdaten für die Funktion ist die gleiche, aber die Ausgangsdaten ist anders!!!? Ich verstehe einfach nicht etwas, es scheint...(

Können Sie mir sagen, wo ich nach Informationen suchen soll?!

PS: berechnet die Differenz von genau 2,5 mal die Leistung

Es geht um die Formel, mit der der Winkel berechnet wird. In dem Code kann man sehen, dass für seine Berechnung nur eine Koordinate und einige Koeffizienten, deren Zweck unklar ist, verwendet. Was ist das? Bitte erläutern Sie, welche Daten Sie zur Berechnung des Winkels verwenden.

Grund der Beschwerde: