Diskussion zum Artikel "Prinzipien der wirtschaftlichen Berechnung von Indikatoren"

 

Neuer Artikel Prinzipien der wirtschaftlichen Berechnung von Indikatoren :

Aufrufe von benutzerdefinierten und technischen Indikatoren nehmen im Programmcode von automatisierten Handelssystemen nur wenig Platz ein. Oft sind es nur ein paar Codezeilen. Doch oft sind es genau diese paar Codezeilen, die die meiste Zeit beim Testen des Expert Advisors benötigen. Deshalb muss alles, was mit der Berechnung von Daten in einem Indikator zusammenhängt, viel eingehender betrachtet werden, als es auf den ersten Blick als nötig erscheint. Genau das ist das Thema dieses Beitrags.

Abb. 11 Ergebnis des Testdurchlaufs mit dem Expert Advisor AMA_Ex_Test

Autor: Nikolay Kositsin

 

Ich danke Ihnen für den Artikel.

Ich habe eine Frage. Sie verwenden die erste Form des Indikators, um Indikator Berechnungen zu optimieren, gibt es beginnen. Aber wenn Sie es nicht verwenden können (für korrekte Berechnungen brauchen open[], high[], low[], close[] ...) wie zu sein? Es gibt keinen Anfang in der zweiten Form.

 
Prival:

Ich danke Ihnen für den Artikel.

Ich habe eine Frage. Sie verwenden die erste Form des Indikators, um Indikator Berechnungen zu optimieren, gibt es beginnen. Aber wenn Sie es nicht verwenden können (für korrekte Berechnungen benötigen Sie open[], high[], low[], close[] ...), wie soll das gehen? In der zweiten Form gibt es keinen begin.

Und es wird dort auch nicht benötigt, denn die Eingabeparameter sind immer Kursmerkmale - sie befinden sich in allen Elementen, es wird nicht ein "beliebiges" Array verwendet, das nur von begin gefüllt wird.
 

nicht alles wird berücksichtigt, aber im Allgemeinen ist es trotzdem interessant =)

und speziell so etwas wie die Optimierung des Aufrufs von technischen Indikatoren wird nicht berücksichtigt.

Ich denke, dieses Thema ist ziemlich relevant.

 

genauer gesagt, wie man den technischen Indikator besser initialisieren kann

im Allgemeinen wird die Funktion der Datenprüfung umgesetzt

aber das Beispiel der Initialisierung ist nicht genau berücksichtigt

soweit es aus der Hilfe bekannt ist

Нельзя обратиться к данным индикатора сразу после его создания, так как на расчет значений индикатора требуется некоторое время, и поэтому создавать хэндлы индикаторов лучше всего в OnInit(). Функция iCustom() создает соответствующий пользовательский индикатор и при успешном создании возвращает его хэндл. Пользовательские индикаторы могут содержать до 512 индикаторных буферов, содержимое которых также можно получать при помощи функции CopyBuffer(), используя полученный хэндл.

wie diese Funktion am besten umgangen werden kann....

 

Ich frage mich immer das Gleiche.

   if (Handle == INVALID_HANDLE)  Print("SMA-Indikator-Handle konnte nicht abgerufen werden.);

Wenn diese Bedingung funktioniert, was soll ich dann tun? Sagen wir, es ist die Meisterschaft, das war's... init wird nicht mehr antreten.

 
Prival:

Das habe ich mich auch schon die ganze Zeit gefragt.

Wenn diese Bedingung funktioniert, was soll ich dann tun? Nehmen wir an, es ist die Meisterschaft, das war's... dann läuft das Init nicht mehr.

Ja! Das ist eine undokumentierte Tatsache, das wusste ich auch nicht! Wir sollten uns das auf jeden Fall ansehen! Aber für mich ist es einfacher, ich packe alle Truthähne in den Expert Advisor selbst und das war's, damit der Expert Advisor wie ein Sprinter auf Marathonstrecken läuft und nirgends und niemals stolpert!

 
Prival:

Ich frage mich immer das Gleiche.

Wenn diese Bedingung funktioniert, was soll ich dann tun? Sagen wir, es ist eine Meisterschaft, das war's ... das Init wird nicht mehr laufen.

Als erstes den Fehlercode ermitteln und in das Protokoll ausgeben. Und versuchen Sie erneut, in OnTick() oder OnCalculate() darauf zuzugreifen. Wenn Sie den Indikator-Handle nicht erhalten können, gibt es höchstwahrscheinlich keinen solchen Indikator oder es ist nicht genug Speicher vorhanden. In diesem Fall hat der Expert Advisor kein Recht zu handeln.
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений - Документация по MQL5
 
Rosh:
Ermitteln Sie zunächst den Fehlercode und geben Sie ihn im Protokoll aus. Und versuchen Sie, in OnTick() oder OnCalculate() erneut darauf zuzugreifen. Wenn Sie das Handle des Indikators nicht erhalten können, gibt es höchstwahrscheinlich keinen solchen Indikator oder es fehlt ihm an Speicher. In diesem Fall hat der Expert Advisor kein Recht zu handeln.

Nun, wir können es selbst tun! In einer solchen Situation könnten wir die Funktion OnInit() dazu bringen, minus eins zurückzugeben, um OnInit() erneut aufzurufen und so weiter, bis das Handle erscheint! Aber jetzt ist es klar, dass es keinen Grund gibt, das Handle nicht zu bekommen, wenn man den Computer nicht überlastet. Aber ich habe das einmal beim Aktualisieren eines Builds gesehen, es kann durch Neukompilieren des Indikators geheilt werden!

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
Minus eins kann zurückgegeben werden, aber das ist kein gutes Zeichen für den EA/Indikator.
 
Glücklicherweise tritt der Fehler bei der Erstellung des Indikators aufgrund eines Fehlers des Terminals praktisch nicht auf.