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

 
Integer:

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 in diesem Fall, die Funktion GetValueByShift() wird nicht funktionieren, müssen Sie seine analoge schreiben.

Ich verstehe. Aber wie zeichnet man eine Trendlinie in einem Indikator ohne grafische Darstellung?

Zwei Balkenindizes sind bekannt, sie sollen mit einer Linie verbunden und nach rechts gezeichnet werden.

 
forexman77:

Ich verstehe. Aber wie kann ich im Indikator eine Trendlinie ohne grafische Darstellung zeichnen?

Zwei Balkenindizes sind bekannt, sie sollen durch eine Linie verbunden und nach rechts gezeichnet werden.

Ich hatte einen solchen Indikator in meiner Codebasis. Ich habe es jetzt nicht.

Wir sollten Berechnungen anstellen. Wenn wir die Koordinaten von zwei Punkten kennen, können wir einfach die Koordinaten des dritten Punktes berechnen.

 
Integer:

Früher hatte ich einen solchen Indikator in meiner Codebasis. Jetzt ist es weg, weg.

Man muss für alles Berechnungen anstellen. Wenn Sie die Koordinaten von zwei Punkten kennen, können Sie einfach die Koordinaten des dritten Punktes berechnen.

Wo finde ich eine Formel für diese Berechnung?

Im Allgemeinen sieht es ein wenig nouveau aus. Das Terminal verfügt über alle Arten von Kanälen, Fibos und anderen geometrischen Indizes, aber sie sind im Tester nutzlos.

 
forexman77:

Wo kann ich die Formel für diese Berechnung finden?

Im Allgemeinen ist es eine Art Nouveau Riche. Es gibt eine Vielzahl von Kanälen, Fibos und anderen geometrischen Indikatoren im Terminal, aber sie sind im Tester nutzlos.

double y3(double x1,double y1,double x2,double y2,double x3){
   return(y1+(x3-x1)*(y2-y1)/(x2-x1));
}

x1, x2 - Taktnummern. y1, y2 - Preiswerte. x3 - Anzahl der Takte, für die die Berechnung durchgeführt wird.

 
Integer:

x1, x2 - Taktnummern. y1, y2 - Preiswerte. x3 - Anzahl der Takte, für die die Berechnung durchgeführt wird.

Gut. Ich danke Ihnen. Ich werde weiter graben.
 
Integer:

x1, x2 - Taktnummern. y1, y2 - Preiswerte. x3 - Anzahl der Takte, für die die Berechnung durchgeführt wird.

Gemachter Indikator auf der Grundlage der Berechnungen, die Ablesungen sind die gleichen wie für den Indikator auf den grafischen Objekten.

Die Optimierung ist im Gange. Das einzige Problem ist, dass die Geschäfte nicht korrekt eröffnet werden.

Wenn ich den Indikator auf das Diagramm anwende, ist die Linie zunächst flach, aber dann wird sie so, wie sie sein sollte, und bleibt so, wenn ich sie auf einen neuen Tick setze.

 
forexman77:

Es wurde ein Indikator auf der Grundlage der Berechnungen erstellt, die Messwerte sind die gleichen wie die Indikatoren auf den grafischen Objekten.

Die Optimierung ist im Gange. Das einzige Problem ist, dass die Geschäfte nicht korrekt eröffnet werden.

Wenn ich den Indikator auf das Diagramm anwende, ist die Linie zunächst flach, und dann, mit einem neuen Tick, wird sie so, wie sie sein sollte, und bleibt so.

Versuchen Sie, es im visuellen Modus zu testen. Achten Sie beim Drucken auf den Unterschied.
 
Integer:
Versuchen Sie, im visuellen Modus zu testen. Suchen Sie mit Hilfe von Druck und Kommentar nach dem Unterschied.

Der visuelle Modus wird nicht helfen. Ich konnte erreichen, dass der Indikator nur das aktuelle Muster anzeigt.

Der Indikator selbst druckt den Wert des ersten Index (MQL4), der erste Druck kommt mit einem falschen Wert heraus, und die anderen sind korrekt auf neue Ticks.

Ich habe Ihnen den Code in Ihrer persönlichen Nachricht geschickt.

 

Wie auch immer, ich habe alle Trendlinienberechnungen in den EA übertragen. Das scheint richtig zu sein.

Ich kann keinen Indikator erstellen, der den gesamten Bereich der Linie anzeigen würde. Ich habe nicht genug Erfahrung.

Ich brauche eigentlich einen Indikator, um visuell zu sehen, dass die Trades korrekt eröffnet werden.

Ich habe mich entschieden, grafische Objekte für die Visualisierung zu verwenden.

Das Problem ist der Fehler 4200 (das Objekt existiert bereits).

Ich habe versucht, dem Objekt jedes Mal einen neuen Namen zu geben. Derselbe Fehler.

Ist es möglich, mehrere Objekte aufzurufen? Wenn ja, wie kann ich unnötige Teile des Strahls abschneiden?

         long   chart_ID=0;        // ID графика
         string name=TimeToStr(Time[0]);
         int    sub_window=0;      // номер подокна
         //--- сбросим значение ошибки
         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]);

 
forexman77:

Wie auch immer, ich habe alle Trendlinienberechnungen in den EA übertragen. Das scheint richtig zu sein.

Ich kann keinen Indikator erstellen, der den gesamten Bereich der Linie anzeigen würde. Ich habe nicht genug Erfahrung.

Ich brauche eigentlich einen Indikator, um visuell zu sehen, dass die Trades korrekt eröffnet werden.

Ich habe mich entschieden, grafische Objekte für die Visualisierung zu verwenden.

Das Problem ist der Fehler 4200 (das Objekt existiert bereits).

Ich habe versucht, dem Objekt jedes Mal einen neuen Namen zu geben. Derselbe Fehler.

Ist es möglich, mehrere Objekte aufzurufen? Wenn ja, wie kann ich unnötige Teile eines Strahls abschneiden?

Vor der Erstellung können Sie mit der Funktion ObjectFind() prüfen, ob das Objekt existiert. Sie müssen nichts tun, es gibt ihn und er ist in Ordnung, es ist kein schlimmer Fehler.

Eine Gruppe von Objekten. Sie können die Taktzeit an den Objektnamen anhängen, dann erhält das Objekt einen eindeutigen Namen.

Trimmen Sie den Balken. Eigenschaft ObjectSet(Name,OBJPROP_RAY,false);