Wie lerne ich, grafische Objekte zu erstellen? MQL4. - Seite 2

 
barabashkakvn:
Wenn Sie die Zeit und das Datum Ihrer Punkte kennen, müssen Sie nurbool TrendCreate() aufrufen.

Danke für den Rat. Es stellte sich heraus, dass es einfacher war als das.

Ich habe es so gemacht:

#property strict
#property script_show_inputs

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
  long   chart_ID=0;        // ID графика
  string name="TrendLine";  // имя линии
  int    sub_window=0;      // номер подокна
//--- сбросим значение ошибки
   ResetLastError();
//--- создадим трендовую линию по заданным координатам
   if(!ObjectCreate(chart_ID,name,OBJ_TREND,sub_window,Time[41],1.0656,Time[65],1.0494))
     {
      Print(__FUNCTION__,
            ": не удалось создать линию тренда! Код ошибки = ",GetLastError());
      return;
     }
   
  }
//+------------------------------------------------------------------+

P.S. Eine Sache, die ich nicht verstehe, ist, warum die Zahlen in dem Beispiel so gewählt sind:

InpDate1=35;        
InpPrice1=60;        
InpDate2=65;        
InpPrice2=40; 

Von ihnen ausgehend verläuft die Trendlinie irgendwo in der Mitte des Bereichs.

 
Das nächste Problem, das es zu lösen gilt, ist, wie man die Linie nach rechts fortsetzt und den Wert der Linie im EA erhält.
 
forexman77:

...

Von ihnen wird die Trendlinie irgendwo in der Mitte der Spanne gesetzt.

Es handelt sich also nur um ein Skript, dessen Hauptaufgabe darin besteht, zu demonstrieren, wie man das Objekt OBJ_TREND erstellt und damit arbeitet. Die Zahlen wurden zur Veranschaulichung herangezogen.
 
forexman77:
Das nächste Problem, das es zu lösen gilt, ist, wie man die Linie nach rechts fortsetzt und den Wert der Linie im EA erhält.

Der Skriptcode enthält alles:

//+------------------------------------------------------------------+
//| Создает линию тренда по заданным координатам                     |
//+------------------------------------------------------------------+
bool TrendCreate(const long            chart_ID=0,        // ID графика
.
.
.
//--- включим (true) или отключим (false) режим продолжения отображения линии влево
   ObjectSetInteger(chart_ID,name,OBJPROP_RAY_LEFT,ray_left);
//--- включим (true) или отключим (false) режим продолжения отображения линии вправо
   ObjectSetInteger(chart_ID,name,OBJPROP_RAY_RIGHT,ray_right);
.
.
.
 
barabashkakvn:

Der Skriptcode enthält alles:

1. beim Aufruf durch den Prüfer werden Geschäfte eröffnet. Wenn ich eine Optimierung durchführe, gibt es überall Nullen. Wenn ich einen Optimierungslauf starte, sind die Angebote da. Was ist zu tun?

2) Wie kann ich erreichen, dass eine Zeile gespeichert wird, wenn ein Geschäft stattgefunden hat (bei jedem Geschäft), und wenn nicht, wird sie gelöscht?

  long   chart_ID=0;        // ID графика
  string name="TrendLine";  // имя линии
  int    sub_window=0;      // номер подокна
  ObjectDelete(chart_ID,name);
//--- сбросим значение ошибки
   ResetLastError();
//--- создадим трендовую линию по заданным координатам
   if(!ObjectCreate(chart_ID,name,OBJ_TREND,sub_window,Time[minbar],Low[minbar],Time[IPMIN],Low[IPMIN]))
     {
      Print(__FUNCTION__,
            ": не удалось создать линию тренда! Код ошибки = ",GetLastError());
      return(0);
     }
    ObjectSet("TrendLine",OBJPROP_TIME1,Time[minbar]);
    ObjectSet("TrendLine",OBJPROP_PRICE1,Low[minbar]);
    ObjectSet("TrendLine",OBJPROP_TIME2,Time[IPMIN]);
    ObjectSet("TrendLine",OBJPROP_PRICE2,Low[IPMIN]);

   if (IPMIN!=0){ double uroven= ObjectGetValueByTime(chart_ID,name,Time[1],sub_window);}
   
}
Print("uroven=",uroven);
if (Time[0] > b && Close[1] < uroven){Opn_B=true;}
 
Sie müssen die Geschäfte selbst kontrollieren. Damit aber jeder Handel seine eigene Zeile hat, müssen Sie jeder Zeile einen eindeutigen Namen geben, wenn Sie sie anlegen.
 
barabashkakvn:
Sie müssen die Geschäfte selbst kontrollieren. Damit aber jeder Handel seine eigene Zeile hat, müssen Sie jeder Zeile einen eindeutigen Namen geben, wenn Sie sie anlegen.
Wie? Können Sie ein Beispiel nennen?
 
forexman77:
Wie? Darf ich Ihnen ein Beispiel nennen?
Wer Beispiele hat, möge bitte helfen.
 

Grafische Objekte während der Prüfung

Während der Visualisierungstests interagiert der Expert Advisor mit dem realen Chart. Bei normalen Tests ohne Visualisierung arbeitet der Expert Advisor mit einem "virtuellen" Chart, der nicht gerendert wird; in diesem Fall sind einige Feinheiten möglich. Grafische Objekte werden nicht unterstützt, wenn sich das Prüfgerät im Optimierungsmodus befindet.

Zwei Tage Studium, und es stellt sich heraus, dass es unmöglich ist, eine Optimierung durchzuführen.

Ich frage mich, ob ich einen Indikator erstellen sollte. Kann ich dadurch den Linienwert in meinem Expert Advisor erhalten?

Wer hat was zu sagen? Wer hat sich vielleicht schon mit dieser Frage beschäftigt?

 
forexman77:

...

Ich frage mich, ob ich einen Indikator erstellen kann? Kann ich dadurch den Wert der Linie im EA erhalten?

...

Wenn der Indikator grafische Objekte erstellt und dann deren Parameter abruft, nein.

Aber es ist immer noch einfacher, alles durch die Verwendung eines Indikators zu lösen. Die Berechnungen werden im Indikator durchgeführt und ihre Ergebnisse werden über Indikatorpuffer angezeigt.

Es gibt noch eine weitere Alternative. Erstellen Sie globale Variablen mit Parametern der Zeile anstelle von Zeilen, aber dann die Funktion GetValueByShift() wird nicht funktionieren, müssen Sie seine analoge schreiben.