Init() und DeInit() Ausführungsreihenfolge - Seite 18

 
Alexey Kozitsyn:
D.h. mit Krücken? Darf ich Ihnen ein Beispiel nennen?

Sie können einen Indikator nicht über ChartIndicatorAdd() zu einem Diagramm hinzufügen, das ein anderes Symbol oder TF hat. Es wird eine Fehlermeldung angezeigt.

https://www.mql5.com/ru/docs/chart_operations/chartindicatoradd

ChartIndicatorAdd

Fügt einen Indikator mit dem angegebenen Handle zum angegebenen Chart-Fenster hinzu.Der Indikator und der Chart müssen auf demselben Symbol und Zeitrahmen gezeichnet sein.

Dies ist jetzt die Einschränkung. Sie wird nicht unter Dienstleistungen zu finden sein.
Документация по MQL5: Операции с графиками / ChartIndicatorAdd
Документация по MQL5: Операции с графиками / ChartIndicatorAdd
  • www.mql5.com
Операции с графиками / ChartIndicatorAdd - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Ein kleiner Hinweis, fast zum Thema subj.

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Wanzen, Wanzen, Fragen

fxsaber, 2016.09.23 10:48

  1. Wir setzen den Indikator auf ein NONE-Chart
    #property indicator_separate_window
    #property indicator_buffers 1
    #property indicator_plots   1
    
    double Buffer[];
    
    int handle = INVALID_HANDLE;
    
    void OnInit()
    {
      ::SetIndexBuffer(0, Buffer, INDICATOR_DATA);
      
      handle = ChartIndicatorGet(0, 1, ChartIndicatorName(0, 1, 0));  
    }
    
    #define  TOSTRING(A) #A + " = " + (string)A + "\n"
    
    int OnCalculate( const int rates_total,
                     const int prev_calculated,
                     const datetime &time[],
                     const double &open[],
                     const double &high[],
                     const double &low[],
                     const double &close[],
                     const long &tick_volume[],
                     const long &volume[],
                     const int &spread[] )
    {
      if (handle != INVALID_HANDLE)
      {
        Buffer[rates_total - 1] = MathRand();
        
        double BufferCopy[];
        
        if (CopyBuffer(handle, 0, 0, 1, BufferCopy) > 0)
          Print(TOSTRING(BufferCopy[0]) + TOSTRING(Buffer[rates_total - 1]));
      }
      
      return(rates_total);
    }
  2. Entfernen des Indikators aus der Karte von Hand.
  3. Im Protokoll sehen wir, dass der Indikator weiterläuft. Sie können alle Diagramme im Terminal schließen, aber der Vorgang wird trotzdem ausgeführt. Und es wird natürlich nicht helfen,
    void OnDeinit( const int Reason )
    {
      if (handle != INVALID_HANDLE)  
        IndicatorRelease(handle);
      
      return;
    }
  4. Ein Neustart des Terminals stoppt die Ausführung des Indikators.
  5. Wie viele Indikatoren können auf diese Weise im Leerlauf ausgeführt werden, und wir wissen nichts über sie! Es gibt überhaupt keine Kontrolle.
Ohne eine Beschwerde bei den Entwicklern.
 
fxsaber:
Dies ist jetzt eine Einschränkung. Sie wird nicht unter Dienstleistungen zu finden sein.

Das ist nicht das, was ich gemeint habe. Nicht das Hinzufügen eines Indikators aus einem Expert Advisor, sondern das Erstellen eines Indikators mit Hilfe eines Expert Advisors.

Diesbezüglich:

Als Dienste oder die Möglichkeit, mehrere EAs auf einem einzigen Diagramm laufen zu lassen, können die diskutierten Trabs nicht vollständig abgedeckt werden?

Wenn es keine Möglichkeit gibt, Indikatoren mit Hilfe von Diensten zu erstellen, wird das Problem der Erstellung eines Indikators mit Daten aus einer Datei nicht gelöst. Wenn die Reihenfolge OnDeinit() -> OnInit() nicht kontrolliert wird. Der Wechsel der TF ist eine Benutzeraktion, und die Reaktion auf diese Aktion (OnDeit()) erfolgt, wenn dies nicht erforderlich ist (nach OnInit() oder vielleicht sogar nach OnCalculate()?

Das heißt, wenn der Indikator Daten in eine Datei aufzeichnet und eine auf diesen Daten basierende Diagrammreihe erstellt, und die Daten nicht "fortlaufend" geschrieben werden, werden nicht alle Daten korrekt angezeigt.

Aber wenn der Dienst ein globales Programm wäre (wie GPT, aber das ganze Programm) und es könnte Indikatorpuffer erstellen, und die Berechnungen würden nicht durch Benutzeraktionen wie TFs ändern / Chart schließen unterbrochen - dann würde das Problem nicht existieren. Aber in der Zwischenzeit werden die Indikatoren wie üblich kastriert.

 
Alexey Kozitsyn:

Das ist nicht das, was ich gemeint habe. Nicht das Hinzufügen eines Indikators aus einem EA, sondern das Erstellen eines Indikators mit einem EA.

Ich verstehe die Terminologie nicht.

 
fxsaber:

Ich verstehe die Terminologie nicht.

Berechnen und Anzeigen von Daten mit Schreiben in Indikatorpuffer, nicht nur Anzeigen der Daten.
 
Slawa:

Noch keine Lösung für OnChartEvent

Was meinen Sie damit, dass es keine Lösung gibt? Was wäre das für ein Dienst ohne die Möglichkeit, auf die Maus zuzugreifen? Und ich möchte auch Benutzerereignisse verarbeiten.
 
Alexey Kozitsyn:
Berechnung und Anzeige von Daten mit Schreiben in Indikatorpuffern, nicht nur Anzeige der Daten.

Sie beklagen, dass die durch den Indikator berechneten Daten bei einem Wechsel der TF nicht zuverlässig und logisch auf eine andere Kopie dieses Indikators übertragen werden können.

Dies lässt sich leicht über Dienste bewerkstelligen, wenn der Dienst den Berechnungsteil übernimmt und der Indikator ihn anzeigt.

In allen anderen Fällen, die nicht unter die fett markierten fallen, können Sie die Indikatoren weiterhin wie die klassischen schreiben.

 
fxsaber:

Sie beklagen, dass die durch den Indikator berechneten Daten bei einem Wechsel der TF nicht zuverlässig und logisch auf eine andere Kopie dieses Indikators übertragen werden können.

Dies lässt sich leicht über Dienste bewerkstelligen, wenn der Dienst den Berechnungsteil übernimmt und der Indikator ihn anzeigt.

In allen anderen Fällen, die nicht unter die fett hervorgehobenen fallen, können Sie die Indikatoren weiterhin auf die klassische Weise schreiben.

Okay, wir werden sehen, was wir bekommen. Wann findet die Beta statt?
 
Alexey Kozitsyn:
Nun gut, wir werden sehen, was passiert. Wann ist die Beta-Phase?
Wenn ich grünes Licht gebe, wird es heute Abend sein.
 
Nikolai Semko:
Was meinen Sie mit "keine Lösung"? Was wäre das für ein Dienst ohne die Möglichkeit, auf die Maus zuzugreifen? Und ich möchte auch mit Benutzerereignissen umgehen.

Keine Lösung bedeutet, dass man noch nicht weiß, wie man es lösen kann", nicht, dass man es nicht tun wird".

Und es gibt überhaupt kein Problem mit benutzerdefinierten Ereignissen