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

 
ijonhson:

Die Frage ist, ob ich den Indikatorcode 900 Mal pro Tick (3 Zeitrahmen mit 300 Balken zum Beispiel) oder 3 Mal berechnen sollte. Es ist klar, dass icustom weniger Aufwand ist, ich setze es in die Schleife und es ist fertig. Als Option sah ich eine Adresse eines Arrays von Indikatorwerten, die an einen EA mit dll übergeben werden, aber ich möchte den Indikator nicht in einem Satz nehmen


Auch hier liegt ein Fehler in der Problemstellung vor. Warum brauchen Sie 900 Balken in Ihrem Expert Advisor? Wenn Sie wirklich so viele Daten im Indikator benötigen, 900 Balken, dann arbeiten Sie mit ihnen im Indikator selbst, warum ziehen Sie sie in den Expert Advisor? Die richtige Aufgabe macht 50% des Erfolgs aus

 
Nikolay Ivanov:

Die Problemstellung ist wieder falsch... Warum brauchen Sie 900 Balken in Ihrem EA? Wenn Sie wirklich so viele Daten im Indikator benötigen, 900 davon, dann arbeiten Sie mit ihnen im Indikator selbst, warum ziehen Sie sie in den Expert Advisor? Die richtige Aufgabe ist 50% des Erfolgs


Ich brauche, um die minimalen und maximalen Spitzen des Indikators auf 3 Zeitrahmen zum Beispiel 5min 15min und 30min zu vergleichen, um die Trends zu bestimmen, werde ich nicht in der Lage sein, die Spitzen zu erraten, das heißt, zu haben, um sich über die gesamte Geschichte zu nehmen. Ich habe 300 Barren der Geschichte als Beispiel genommen.

Die Verwendung von icustom ist immer noch zu ressourcenintensiv.

 
ijonhson:

Ich brauche, um die minimale und maximale Spitzen Indikator für 3 Zeitrahmen zum Beispiel 5min 15min und 30min zu vergleichen, um die Trends zu bestimmen, werde ich nicht in der Lage sein, die Spitzen zu erraten, das ist zu haben, um durch die gesamte Geschichte aussehen. Ich habe 300 Barren der Geschichte als Beispiel genommen.

Es ist immer noch zu ressourcenintensiv, icustom zu verwenden.


Die Frage bleibt in ontick offen, die Funktion IndicatorCounted() in der ersten Berechnung ergibt -1, wie kann sie in einem Expert Advisor ersetzt werden?

 
ijonhson:

"You don't need to change it" - d.h. es funktioniert sowohl mit onTick im Expert Advisor als auch mit onCalculate im Indikator?

Nein, ich meinte, dass sie dort überhaupt nicht gebraucht wird.

 
Alexey Viktorov:

Nein, ich meinte, dass es dort überhaupt nicht nötig ist.


Ich habehttps://www.mql5.com/ru/articles/1456 ausgegrabenund werde es mir ansehen, aber ich dachte, es gäbe eine einfachere Möglichkeit.

Перенос кода индикатора в код эксперта. Строение индикатора.
Перенос кода индикатора в код эксперта. Строение индикатора.
  • 2007.02.16
  • Nikolay Kositsin
  • www.mql5.com
Прежде чем приступить к основной теме статьи, мне следовало бы вкратце коснуться общего строения индикатора под углом зрения программиста, которого этот индикатор интересует, как будущая часть кода эксперта: Вполне естественно, что у реального индикатора может быть другое количество отображаемых индикаторных значений, другое количество...
 
ijonhson:

Die Frage bleibt offen, in der ontick Funktion IndicatorCounted() bei der ersten Prüfung, wie es in der Expert Advisor ersetzen?

Sie müssen nicht bei jeder Zecke die Oberteile durchsehen, sie ändern sich nicht.

Überprüfen Sie im EA den Zyklus bei der Eröffnung der Bar und verlassen Sie den Zyklus, sobald das Top gefunden ist.

   int count=Bars(Symbol,Period);
   for(int i=0; i<count; i++) {
     // ищем и запоминаем в переменную, если нашли break;
   }
 
ijonhson: Die Frage bleibt in ontick offen, die Funktion IndicatorCounted() in der ersten Berechnung gibt -1, was wird sie im Expert Advisor ersetzen?

Die Funktion IndicatorCounted() wurde früher in Indikatoren mit der Funktion start() verwendet. Die neuen Indikatoren mit OnCalculate() verwenden stattdessen den zweiten Parameter prev_calculated. Ich habe sie speziell analysiert und festgestellt, dass sie sich um 1. Der Unterschied ist gering und sie zeigen an, wie viele Balken bereits berechnet wurden. Wenn er 0 (oder -1) ist, müssen alle Balken berechnet werden. Dies geschieht beim Start des Indikators, wenn er die gesamte Linie zeichnen und das Ergebnis in den Pufferfeldern speichern muss. Bei den nächsten Ticks sollten nur die Daten des letzten Balkens neu berechnet werden. Daher sollte das, was bei einem Wert von Null (oder -1) getan wird, in OnInit() des EAs platziert werden. Der Rest - sehr wenig - sollte in OnTick() untergebracht werden.

 
YarTrade:

Ich danke Ihnen. Ich werde daran arbeiten. Aus irgendeinem Grund habe ich in dem Lehrbuch nichts über lange Schrift gelesen.

Sie müssen den Cursor auf long int oder short (oder ein beliebiges anderes Sprachwort) setzen und F1 drücken.

 
ijonhson:

Vielen Dank, aber soweit ich aus der Beschreibung der Funktion zu verstehen, wird es den gesamten Code des Indikators ausführen, um einen Wert zu erhalten, an der Stelle, die ich angegeben habe, das heißt, um alle Tops zu erhalten, muss ich den Code des Indikators n-mal berechnen (schauen Sie durch alle Bars einer nach dem anderen), aber ich brauche, um die Reihenfolge der Tops dieses Indikators auf mehrere Zeitrahmen zu vergleichen.

Und dann muss man manuell nach Oberteilen suchen

Das ist absolut falsch! Alle Indikatorbalken, die vom Expert Advisor mit iCustom() aufgerufen werden, werden nur einmal neu berechnet! Alle folgenden Aufrufe des Indikators arbeiten mit den bereits berechneten Ergebnissen, nur die nicht berechneten Balken des vorherigen Aufrufs werden neu berechnet. Wenn zum Beispiel der M15-Periodenindikator im H1-Diagramm bei jedem neuen Balken aufgerufen wird, werden 4 15-Minuten-Balken nicht neu berechnet. Es werden also nur diese 4 Takte neu berechnet.

Selbst wenn wir eine Schleife durch die Abfolge der Balken von 0 bis xxx durchlaufen, wird der Indikator nur einmal beim ersten Aufruf neu errechnet. Bei allen folgenden Aufrufen wird keine Neuberechnung durchgeführt.

 
ijonhson:

Ich habehttps://www.mql5.com/ru/articles/1456 ausgegrabenund werde es mir ansehen, aber ich dachte, es gäbe einen einfacheren Weg.

Dies ist ein schlechtes Beispiel. Es ist bereits TEN Jahre alt!!! Die Sprache hat sich bereits zum Besseren gewandelt.