Fragen von einem "Dummy" - Seite 52

 

Muss es denn irgendwo hin? ... Ich weiß es nicht...

Ich meine, auf dem EMA fliegt es, aber auf dem iCustom dauert es 10 Mal länger...

 

Sie sollten dies niemals tun:

void OnTick()
  {
   //--- безусловно создаем индикатор
   ma_handle = iMA(_Symbol,0, MA,0, MODE_EMA, PRICE_CLOSE);
  }

Lassen Sie sich nicht täuschen, indem Sie sagen: "Holen Sie sich den Indikator-Handle", wennSie in Wirklichkeit" einen neuen Indikatorerstellen ".

Außerdem gibt es eine undichte Stelle an den Griffen.

 
Karlson:

Muss es denn irgendwo hin? ... Ich weiß es nicht...

Ich meine, er fliegt auf der EMA, aber es dauert 10 Mal länger, den iCustom auszuführen...

Wohin mit einem Haufen veralteter Handles-Indikatoren? Ich weiß es nicht. Ich habe nicht auf diese Weise gearbeitet, aber es werden immer mehr.

Wenn ich eine solche Strategie implementieren müsste, würde ich es ablehnen, einen fertigen benutzerdefinierten Indikator über iCustom() aufzurufen und stattdessen den Körper des Indikators in OnTick() des Expert Advisors platzieren. Und die Berechnungen der Daten würde der Expert Advisor selbst durchführen.

Das Problem entsteht, wenn der Indikator im .ex5-Format vorliegt und kein Code vorhanden ist.

 

Ich erinnerte mich: " Die Funktion IndicatorRelease() wird verwendet, um einen unbenutzten Indikator aus dem Computerspeicher freizugeben, und das Handle dieses Indikators wird an sie übergeben" (ich verwende sie während der Deinitialisierung des Expert Advisors).

Aber trotzdem: Ein neuer Griff bei jedem Ticken ist lästig.

 

Was die Anhäufung von Griffen betrifft, so werde ich mich darum kümmern.

Das ist es, was ich vorhabe, den Truthahn in den Expert Advisor zu stecken.

 
Karlson:

Was die Anhäufung von Griffen betrifft, so werde ich mich darum kümmern.

Das ist es, was ich vorhabe, den Truthahn in den Expert Advisor zu stecken.

Sie können den Indikator so lassen, wie er ist, und eine Kopie davon im Timer oder per Ereignis erstellen.
 
Interesting:
Sie können den Indikator so lassen, wie er ist, und eine Kopie davon in einem Timer oder per Ereignis erstellen.

Worin besteht der Unterschied, wo eine Kopie des Indikators erstellt werden soll: in OnTick(), OnTimer() oder in OnChartEvent()? In jedem Fall wird bei jeder speziellen Aktivierung eine "Kopie des Indikators" erstellt, was den ohnehin schon großen Stapel noch vergrößert.

Oder vielleicht verstehe ich Ihre Logik nicht.

 
Yedelkin:

Worin besteht der Unterschied, wo eine Kopie des Indikators erstellt werden soll: in OnTick(), OnTimer() oder in OnChartEvent()? In jedem Fall wird bei jeder speziellen Aktivierung eine "Kopie des Indikators" erstellt, was den ohnehin schon großen Stapel noch vergrößert.

Oder vielleicht verstehe ich Ihre Logik nicht.

Hier ist der Trick: Wenn Sie die Parameter des Indikators nicht ändern müssen (keine neue Kopie des Indikators erstellen müssen), ist es logischer, den Indikator einmal im Initialisierungsblock zu erstellen.

Wenn jedoch während des Betriebs die Indikatorparameter automatisch geändert werden sollen, müssen wir dies so effektiv wie möglich tun.

Am effizientesten ist es, eine neue Kopie des Indikators im Timer zu erstellen (nicht unbedingt bei jedem Tick).

Am effektivsten wäre es, eine neue Kopie des Hinweises zu erstellen, wenn ein Ereignis (oder mehrere Ereignisse) eintreten.

PS

Es ist notwendig, den Zeitaufwand für die Berechnung des Indikators zu berücksichtigen und sicherzustellen, dass "unnötige" Kopien entfernt werden.

 

So eine Idee zum Nachdenken...Eine neue Tasche neu zu berechnen, kann ich einmal am Tag oder in der Woche machen...Einen Timer einstellen:

bool  EventSetTimer(
   int  seconds      // количество секунд
   );

Wirklich verwirrt von der Anzahl der Sekunden an einem Tag oder in einer Woche...))) Sie können dies auch in einer neuen Tagesleiste tun...

In der Funktion OnTimer() entferne ich zunächst den vorherigen Indikator mitIndicatorRelease() und erstelle dann einen neuen Indikator mit einer neuen Periode.

void OnTimer() 
{

IndicatorRelease( ma_handle );

ma_handle=iMA(Symbol(),0,newMA,0,MA_EMA,PRICE_CLOSE);

}

Das ist eine allgemeine Idee...

 
Renat:

Sie sollten dies niemals tun:

Lassen Sie sich nicht täuschen, indem Sie sagen: "Holen Sie sich den Indikator-Handle", wennSie in Wirklichkeit" einen neuen Indikatorerstellen ".

Hinzu kommt das Auslaufen von Griffen.

In den frühen Tagen von MQL5 wurden viele Fragen diskutiert, Sie haben einen wichtigen Teil der Entwicklungen für den automatischen Handel gestrichen, und als Ergebnis ersticken die Leute Ihr super-optimiertes OnCalculate() mit Leerraum und setzen Berechnungen in Ereignisse. Das ist zwar etwas langsam, aber immer noch schneller als die Erstellung eines eigenen Handles für jeden dynamischen Parameter.