Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 16

 
Andrej Dik:
Können Sie dafür sorgen, dass der Befehl"Diagramm öffnen" auf der Registerkarte "Backtest" nach dem Testen automatisch alle Indikatoren, die im EA verwendet wurden, mit den entsprechenden Parametern zum geöffneten Diagramm hinzufügt?

Noch nicht.

Jetzt können Sie die Vorlage für die visuelle Prüfung speichern und auf dem Client-Terminal anwenden

 
Slawa:

Noch nicht.

Vorerst können Sie eine visuelle Testvorlage speichern und sie im Client-Terminal anwenden

Und wenn Sie im EA in OnDeinit Folgendes tun

ChartSaveTemplate ()


mit dem Namen tester.tpl und öffnen Sie dann das Diagramm mit dem Befehl"Open Chart", erhalten Sie dann das, was Sie brauchen?

 
Andrej Dik:

Und wenn im Expert Advisor in OnDeinit tun

ChartSaveTemplate ()


mit dem Namen tester.tpl, erhalten Sie das, was Sie brauchen, nachdem Sie das Diagramm mit dem Befehl"Open Chart" geöffnet haben?

Nein. ChartSaveTemplate speichert die Vorlage im lokalen Dateiordner des Prüfer-Agenten

Ich meinte das manuelle Speichern der Vorlage aus dem Renderer über das Hauptmenü.

Tester.tpl funktioniert nur in eine Richtung - vom Client-Terminal zum Visualizer

 
Slawa:

Nein. ChartSaveTemplate speichert die Vorlage im lokalen Dateiordner des Prüfer-Agenten

Ich meinte das manuelle Speichern der Vorlage im Visualizer über das Hauptmenü.

Tester.tpl funktioniert nur in eine Richtung - vom Client-Terminal zum Visualizer

Nein, es ist zu langsam, es ist zu viel Arbeit, und es ist oft zu teuer, jeden visuellen Test zu machen, nur um die Vorlage zu retten, vor allem, wenn man es oft machen muss...

Das bedeutet, dass es möglich sein sollte, ein Diagramm nach dem Testen mit Indikatoren zu öffnen.

SZY: Im Testgerät funktioniert das nicht:

//——————————————————————————————————————————————————————————————————————————————
void OnDeinit (const int reason)
{
  if(ChartSaveTemplate(0, "testersdfsdfsdfsdf"))
    Print (__FUNCTION__ + ": Шаблон сохранён");
  else
    Print (__FUNCTION__ + ": Шаблон НЕ сохранён");
    
  EventKillTimer ();
}
//——————————————————————————————————————————————————————————————————————————————

//——————————————————————————————————————————————————————————————————————————————
double OnTester ()
{
  if(ChartSaveTemplate(0, "testersdfsdfsdfsdf"))
    Print (__FUNCTION__ + ": Шаблон сохранён");
  else
    Print (__FUNCTION__ + ": Шаблон НЕ сохранён");
  return (-DBL_MAX);
}
//——————————————————————————————————————————————————————————————————————————————

Ergebnis:

2017.03.07 12:22:15.422 Core 1 2017.03.06 23:58:59 OnTester: Vorlage NICHT gespeichert
2017.03.07 12:22:15.422 Kern 1 Endsaldo 1129,18 USD
2017.03.07 12:22:15.422 Core 1 OnTester Ergebnis -1.797693134862316e+308
2017.03.07 12:22:15.422 Core 1 2017.03.06 23:58:59 OnDeinit: Vorlage NICHT gespeichert

 
void OnStart()
  {
   int indic = iCustom(Symbol(), Period(), "Examples\\ATR", 7, PRICE_CLOSE, clrGreen);
   ChartIndicatorAdd(0, 1, indic);  
   Sleep(10000);
  }

Die Farbe des Indikators kann auf diese Weise nicht eingestellt werden.

Warum sagen dann manche Leute: "Das ist kein Fehler, das ist eine Funktion"?

Die offizielle Antwort hat mich jedoch vollkommen zufrieden gestellt:

Wir werden darüber nachdenken, wie man die Farbe und den Stil des Indikators im MQL5-Programm ändern kann.

Verwenden Sie in der Zwischenzeit Eingabevariablen vom Typ Farbe, um die Farbe des Indikators festzulegen

 
Roffild:
void OnStart()
  {
   int indic = iCustom(Symbol(), Period(), "Examples\\ATR", 7, PRICE_CLOSE, clrGreen);
   ChartIndicatorAdd(0, 1, indic);  
   Sleep(10000);
  }

Die Farbe des Indikators kann auf diese Weise nicht eingestellt werden.

Warum sagen dann manche Leute: "Das ist kein Fehler, das ist eine Funktion"?

Die offizielle Antwort ist für mich jedoch völlig zufriedenstellend:

Denn Sie können die Eigenschaften der Anzeige (Zeichnungsteil) nicht über den Indikatorgriff (Berechnungsteil) einstellen. Ein Fehler liegt vor, wenn etwas auf eine bestimmte Weise geschrieben wurde und auf eine andere Weise funktioniert.

Hier ist ein anderer Ansatz erforderlich. Zugriff auf den Indikator über den Kurznamen, wie in der Funktionsgruppe ChartIndicatorXXX. Etwas wie ChartIndicatorSetInteger(chart_id,sub_window,indicator_name,PROP_COLOR,mod,value)

Wir haben schon darüber nachgedacht, sind aber noch nicht dazu gekommen.

 

Warum müssen Sie etwas über einen Griff einstellen? Die Farbe wird im Indikator selbst über die Eigenschaft PLOT_LINE_COLOR festgelegt.

Der indicator_colorN setzt nur die ursprüngliche Farbe, die durch PLOT_LINE_COLOR geändert wird.

indicator_colorN unterscheidet sich nicht von der Eingabe, wenn ein Indikator aufgerufen und dann durch PLOT_LINE_COLOR gesetzt wird.

Sie sollten nicht zulassen, dass solche Eigenschaften über Handle geändert werden.

Und es ist an der Zeit, die dynamische Einstellung von indicator_buffers zu ermöglichen.

 
Roffild:

Warum müssen Sie etwas über einen Griff einstellen? Die Farbe wird im Indikator selbst über die Eigenschaft PLOT_LINE_COLOR festgelegt.

Der indicator_colorN setzt nur die ursprüngliche Farbe, die durch PLOT_LINE_COLOR geändert wird.

indicator_colorN unterscheidet sich nicht von der Eingabe, wenn ein Indikator aufgerufen und dann durch PLOT_LINE_COLOR gesetzt wird.

Sie sollten es nicht zulassen, solche Eigenschaften über Handle zu ändern.

Und es ist an der Zeit, die dynamische Einstellung von indicator_buffers zu ermöglichen.

Erwähnen Sie den Griff nicht. Ich habe mir gesagt, dass der Griff nicht zum Festlegen von Zeicheneigenschaften verwendet werden kann. Und ich habe erklärt, warum.

Vergessen Sie nicht, dass es neben den benutzerdefinierten Indikatoren auch integrierte Indikatoren gibt, die nach dem Hinzufügen zum Diagramm ebenfalls ihre Farbe ändern müssen.

 

Ich schlage lediglich vor, die Funktionen des Indikatoraufrufs zu erweitern:

iCustom(... inputs, PRICE_CLOSE,
         [color color1, int width1, int style1]... );

iAlligator(... params, PRICE_CLOSE,
         [color color1, int width1, int style1]... );
Es muss nichts weiter hinzugefügt werden.
 
Roffild:

Ich schlage lediglich vor, die Funktionen des Indikatoraufrufs zu erweitern:

Äh, warum, wenn man es sowieso nicht sehen kann?