Einzelnen Beitrag anzeigen
  #6 (permalink)  
Alt 24.02.17
traderdoc traderdoc ist offline
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.735
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.