Ja, das ist nicht so einfach zu lösen.
Nehmen wir mal die senkrechte Linie mit den drei Haltepunkten in Deinem Bild und nehmen wir z.B. an, dass sich diese Trendlinie!! über der Kerze 3, also Time[3], befindet.
Soll die Trendlinie mittels
ObjectCreate("Test", OBJ_TREND, 0, Time[3], 1.0576, Time[3], 1.0556);
gezeichnet worden sein.
Würde man nun z.B. am unteren Haltepunktdie Linie statt senkrecht nach unten, diagonal nach unten ziehen, dann geht das nur in der Waagerechten in Schritten der Kerzen. Um die Linie, die nun z.B. unten über der Kerze 1 steht, wieder in die Senkrechte zu bringen, gibt es zwei Möglichkeiten:
1. Die permanente Setzung der Trendlinie auf die Zeit Time [3]
ObjectSet("Test", OBJPROP_TIME1, Time[3]);
ObjectSet("Test", OBJPROP_TIME2, Time[3]);
oder nach Abfage, ob sich die Trendlinie in der Senkrechten verändert hat:
if (ObjectGet("Test", OBJPROP_TIME1) != Time[3]) ObjectSet("Test", OBJPROP_TIME1, Time[3]);
if (ObjectGet("Test", OBJPROP_TIME2) != Time[3]) ObjectSet("Test", OBJPROP_TIME2, Time[3]);
Nachteil ist, dass die Linie nur dann wieder in die Senkrechte gebracht wird, wenn der nächste Tick kam.
Vorteil ist, die einfache Programmierung.
2. Man geht über die Funktion OnChartEvent() und lässt den EA auf das Ereignis
CHARTEVENT_OBJECT_DRAG sofort reagieren:
Code:
void OnChartEvent(const int id, // Event ID
const long& lparam, // Parameter of type long event
const double& dparam, // Parameter of type double event
const string& sparam) { // Parameter of type string events
if (id == CHARTEVENT_OBJECT_DRAG) {
if (sparam == "Test") {
ObjectSet("Test", OBJPROP_TIME1, Time[3]);
ObjectSet("Test", OBJPROP_TIME2, Time[3]);
}
}
}
D.h. zieht man nun mit der Mouse an einem oberen oder unteren Haltepunkt nach rechts oder links und lässt die Mouse los, dann springt die Trendlinie
sofort wieder in die Senkrechte.
traderdoc