Zum Inhalt springen
View in the app

A better way to browse. Learn more.

#T/N/X/T

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Programmierung von Linien in einem Chart

Geschrieben

Hallo,

 

ich schreibe gerade einen Indikator der Linien in ein Chart einzeichnet dazu benötige ich allerdings "begrenzte" Linien (also nur von Anfang bis Endpunkt). In einem kommerziellen Indikator habe ich das bereits gesehen.

 

Das Ganze funktioniert ja über den Aufruf z.B.:

 

check=ObjectCreate(sMarkName,OBJ_TREND,0, dtStart, dValueStart, dtEnd, dValueEnd);

 

Ich finde aber ausser den Trendlinien kein Objekt, das eine begrenzte Linie zeichnet. Und Trendlinien sind ja in eine Richtung "unbegrenzt"

. Muss ich da noch eine Property setzen oder muss ich ein anderes Objekt verwenden anstatt von "OBJ_TREND"???

 

für einen Tipp wäre ich sehr dankbar...

 

wingman

Featured Replies

Geschrieben

Ja du musst noch OBJPROP_RAY einstellen auf False.

 

ObjectSet(sMarkName, OBJPROP_RAY, FALSE);

 

Noch ein Tip,

mit OBJPROP_BACK kannst du bestimmen ob hinter oder vor dem Chart Bars gezeichnet werden soll.

  • 1 Monat später...
Geschrieben

Könntet Ihr bitte mal genauer ausführen, wie man eine Linie in einem EA programmiert? Wenn ich sage:

	  if(!ObjectCreate("runter", OBJ_TREND, 0, Start, Wert1,End,Wert2))
	{
	 Alert("error: can't create text_object! code #",GetLastError());
	 return(0);
	}

, wobei die Werte doubles und die punkte ints sind, bekomme ich nur die nichtssagende Meldung "error: ... #4200".

Geschrieben
  • Autor

einfach mal ein Beispiel:

zeichnet eine Grüne Linie vom aktuellen Bar bis zum vergangenen 10 Bar an der Y-Position 1.4232

 

 

int iCheck;

string sMarkName="Gruene Linie";

iCheck=ObjectCreate(sMarkName,OBJ_HLINE,0, Time[10], 1.4232, Time[0],1.4232);

iCheck=ObjectSet(sMarkName,OBJPROP_WIDTH,1);

iCheck=ObjectSet(sMarkName, OBJPROP_COLOR, LimeGreen);

 

if(!iCheck) {

Print("error: can't create object! code #",GetLastError());

}

Geschrieben

Eine Frage noch, die vlt. ganz gut zu dem Thema passt. Muss ich dann jetzt nur noch sagen:

 

if (aktBar => iCheck) { Aktion;}

 

?

Geschrieben
  • Autor
Eine Frage noch, die vlt. ganz gut zu dem Thema passt. Muss ich dann jetzt nur noch sagen:

 

if (aktBar => iCheck) { Aktion;}

 

?

 

 

Nein. Die Variable iCheck enthält 0 , wenn alle Befehle korrekt ausgeführt werden konnten, d.h. im Endeffekt:

- das Objekt wurde generiert iCheck=ObjectCreate(sMarkName,OBJ_HLINE,0, Time[10], 1.4232, Time[0],1.4232);

- Die "Dicke" der Linie wurde richtig gesetzt iCheck=ObjectSet(sMarkName,OBJPROP_WIDTH,1);

- Die Farbe der Linie wurde auf grün gesetzt iCheck=ObjectSet(sMarkName, OBJPROP_COLOR, LimeGreen);

 

iCheck ist in diesem Fall eine Integervariable über die Du abfragen kannst ob ein Fehler aufgetreten ist. Du kannst iCheck auch weglassen, dann hast Du kein Fehlermanagement in Deinem Code aber der Code funktioniert trotzdem.

Geschrieben

Ja ok, ne Fehlerverarbeitung ist natürlich sinnvoll.

Jetzt fehlt mir allerdings die Vorstellung, wie ich aus der berechneten Linie das Setzen oder Modifizieren einer Order ableiten kann.

Die beiden Punkte, welche zur Linie führen, liegen in der Vergangenheit. Zur Entscheidung brauch ich jedoch den entsprechenden Wert an Bar[0]. Ich dachte man könnte das irgendwie in Beziehung setzen. Oder muss ich, weil es ja ein linearer Prozess ist, einfach nur die Steigung berechnen und diese dann bis zum Bar[0] runterbrechen. Fände das irgendwie nicht so galant.

Geschrieben
  • Autor
...Zur Entscheidung brauch ich jedoch den entsprechenden Wert an Bar[0]. Ich dachte man könnte das irgendwie in Beziehung setzen. Oder muss ich, weil es ja ein linearer Prozess ist, einfach nur die Steigung berechnen und diese dann bis zum Bar[0] runterbrechen. Fände das irgendwie nicht so galant.

 

 

Dazu liefert Metatrader schon die passende Funktion

 

double dPrice=ObjectGetValueByShift("MyTrendLine#123", i);

i ist dein aktueller Bar

 

 

Damit bekommst du den Wert der Trendlinie an Bar 0 (wenn du i=0) setzt.

 

 

Anmerkung zu meinem vorigen Posting. Die Funktionen "ObjectCreate" und "ObjectSet" liefern einen bool-Wert zurück, also 0 und 1. Das heisst die Variable iCheck sollte besser vom Typ bool anstatt integer sein, wie in meinem Beispiel und demnach dann auch bCheck heissen.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

Account

Navigation

Suche

Suche

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.