//--- Beschreibung #property description "Der Skript zieht Zeichen \"Schlecht\" (Daumen nach unten)." #property description "Koordinate des Bezugspunktes wird in Prozent von" #property description "der Größe des Chartfensters eingegeben." //--- Zeigen den Fenster von Eingabeparametern in der Skript-Startup #property script_show_inputs //--- Eingangsparameter von Skript input string InpName="ThumbDown"; // Name des Zeichens input int InpDate=25; // Datum des Bezugspunktes in % input int InpPrice=75; // Preis des Bezugspunktes in % input ENUM_ARROW_ANCHOR InpAnchor=ANCHOR_BOTTOM; // Bindungsmethode input color InpColor=clrRed; // Farbe des Zeichens input ENUM_LINE_STYLE InpStyle=STYLE_DOT; // Stil der Einfassungslinie input int InpWidth=5; // Größe des Zeichens input bool InpBack=false; // Das Zeichen im Hintergrund input bool InpSelection=true; // Wählen zu bewegen input bool InpHidden=true; // Ausblenden in der Liste der Objekten input long InpZOrder=0; // Priorität auf Mausklick //+------------------------------------------------------------------+ //| Erstellt Zeichen "Schlecht" | //+------------------------------------------------------------------+ bool ArrowThumbDownCreate(const long chart_ID=0, // ID des Chart const string name="ThumbDown", // Name des Zeichens const int sub_window=0, // Nummer des Unterfensters datetime time=0, // Zeit des Bezugspunkts double price=0, // Preis des Bezugspunkts const ENUM_ARROW_ANCHOR anchor=ANCHOR_BOTTOM, // Bezugsmethode const color clr=clrRed, // Farbe des Zeichens const ENUM_LINE_STYLE style=STYLE_SOLID, // Stil der Einfassungslinie const int width=3, // Größe des Zeichens const bool back=false, // Im Hintergrund const bool selection=true, // Wählen zu bewegen const bool hidden=true, // Verborgen in der Liste der Objekten const long z_order=0) // Priorität auf Mausklick { //--- Die Koordinaten des Bezugspunkts angeben, wenn sie nicht gesetzt sind ChangeArrowEmptyPoint(time,price); //--- Setzen den Wert des Fehlers zurück ResetLastError(); //--- Zeichen erstellen if(!ObjectCreate(chart_ID,name,OBJ_ARROW_THUMB_DOWN,sub_window,time,price)) { Print(__FUNCTION__, ": Kann nicht Zeichen \"Schlecht\ erstellen"! Fehlercode = ",GetLastError()); return(false); } //--- die Bindungsmethode setzen ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor); //--- Die Farbe des Zeichens setzen ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); //--- Stil der Einfassungslinie setzen ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style); //--- Die Größe des Zeichens setzen ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width); //--- Im Vordergrund (false) oder Hintergrund (true) anzeigen ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); //--- Aktivieren (true) oder deaktivieren (false) Mausbewegung Modus //--- Wenn Sie ein grafisches Objekt durch Funktion ObjectCreate erstellen, das Objekt //--- kann nicht ausgewählt und verschoben werden. Innerhalb dieser Methode ist der Standardwert des Parameters selection //--- true, was Sie das Objekt auswählen und verschieben erlaubt ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); //--- Verbergen (true) oder Anzeigen (false) den Namen des graphischen Objektes in der Objektliste ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); //--- setzen die Priorität für eine Mausklick-Ereignisse auf dem Chart ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); //--- die erfolgreiche Umsetzung return(true); } //+------------------------------------------------------------------+ //| Bewegt den Bezugspunkt | //+------------------------------------------------------------------+ bool ArrowThumbDownMove(const long chart_ID=0, // ID des Charts const string name="ThumbDown", // Name des Objekts datetime time=0, // Zeitkoordinate des Bezugspunkts double price=0) // Preiskoordinate des Bezugspunkts { //--- Wenn die Koordinaten des Punktes nicht angegeben sind, dann verschieben wir es an den aktuellen Bar mit dem Preis Bid if(!time) time=TimeCurrent(); if(!price) price=SymbolInfoDouble(Symbol(),SYMBOL_BID); //--- Setzen den Wert des Fehlers zurück ResetLastError(); //--- bewegen den Bezugspunkt if(!ObjectMove(chart_ID,name,0,time,price)) { Print(__FUNCTION__, ": der Bezugspunkt konnte nicht bewegt werden! Fehlercode = ",GetLastError()); return(false); } //--- die erfolgreiche Umsetzung return(true); } //+------------------------------------------------------------------+ //| Ändert die Weise der Bindung von "Schlecht" | //+------------------------------------------------------------------+ bool ArrowThumbDownAnchorChange(const long chart_ID=0, // ID des Charts const string name="ThumbDown", // Name des Objekts const ENUM_ARROW_ANCHOR anchor=ANCHOR_TOP) // Bindungsmethode { //--- Setzen den Wert des Fehlers zurück ResetLastError(); //--- Bindungsmethode ändern if(!ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor)) { Print(__FUNCTION__, ": Bindungsmethode konnte nicht geändert werden! Fehlercode = ",GetLastError()); return(false); } //--- die erfolgreiche Umsetzung return(true); } //+------------------------------------------------------------------+ //| Löscht Zeichen "Schlecht" | //+------------------------------------------------------------------+ bool ArrowThumbDownDelete(const long chart_ID=0, // ID des Charts const string name="ThumbDown") // Name des Zichens { //--- Setzen den Wert des Fehlers zurück ResetLastError(); //--- Zeichen löschen if(!ObjectDelete(chart_ID,name)) { Print(__FUNCTION__, ": Kann nicht Zeichen \"Schlecht\ löschen"! Fehlercode = ",GetLastError()); return(false); } //--- die erfolgreiche Umsetzung return(true); } //+------------------------------------------------------------------+ //| Überprüft den Wert des Bezugspunkts für lehre Werte | //| setzt Standardwerte | //+------------------------------------------------------------------+ void ChangeArrowEmptyPoint(datetime &time,double &price) { //--- Wenn Punktzeit nicht angegeben ist, wird es auf dem aktuellen Bar sein if(!time) time=TimeCurrent(); //--- Wenn der Preis des Punktes nicht angegeben wird, dann wird es einen Wert von Bid haben if(!price) price=SymbolInfoDouble(Symbol(),SYMBOL_BID); } //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- Überprüfen die Richtigkeit der Eingabeparameter if(InpDate<0 || InpDate>100 || InpPrice<0 || InpPrice>100) { Print("Fehler! Ungültige Eingabeparameter! "); return; } //--- Die Anzahl der sichtbaren Bars im Chart-Fenster int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS); //--- Größe des Arrays price int accuracy=1000; //--- Arrays für Werte von Daten und Preise, die für Setzung und Änderung //--- der Koordinaten von Ankerpunkte verwendet werden datetime date[]; double price[]; //--- Speicher reservieren ArrayResize(date,bars); ArrayResize(price,accuracy); //--- Füllen die Anordnung von Daten ResetLastError(); if(CopyTime(Symbol(),Period(),0,bars,date)==-1) { Print("Kann nicht den Wert der Zeit kopieren! Fehlercode = ",GetLastError()); return; } //--- Füllen den Array der Preise //--- den Minimal- und Maximalwert der Charts finden double max_price=ChartGetDouble(0,CHART_PRICE_MAX); double min_price=ChartGetDouble(0,CHART_PRICE_MIN); //--- Schritte der Preisänderung finden und das Array füllen double step=(max_price-min_price)/accuracy; for(int i=0;i<accuracy;i++) price[i]=min_price+i*step; //--- Punkte für das Zeichnen der Zeichen definieren int d=InpDate*(bars-1)/100; int p=InpPrice*(accuracy-1)/100; //--- erstellen das Zeichen "Schlecht" auf dem Chart if(!ArrowThumbDownCreate(0,InpName,0,date[d],price[p],InpAnchor,InpColor, InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder)) { return; } //--- den Chart neu zeichnen und 1 Sekunde warten ChartRedraw(); Sleep(1000); //--- Jetzt werden wir den Bezugspunkt bewegen und seine Position relativ zu dem Zeichen ändern //--- Schleifenzähler int h_steps=bars/4; //--- bewegen den Bezugspunkt for(int i=0;i<h_steps;i++) { //--- den nächsten Wert nehmen if(d<bars-1) d+=1; //--- den Punkt bewegen if(!ArrowThumbDownMove(0,InpName,date[d],price[p])) return; //--- Überprüfen die Fakten von Zwangsabschaltung der Skript if(IsStopped()) return; //--- den Chart neu zeichnen ChartRedraw(); // Verzögerung 0.05 Sekunden Sleep(50); } //--- 1 Sekunde Verzögerung Sleep(1000); //--- Schleifenzähler int v_steps=accuracy/4; //--- bewegen den Bezugspunkt for(int i=0;i<v_steps;i++) { //--- den nächsten Wert nehmen if(p>1) p-=1; //--- den Punkt bewegen if(!ArrowThumbDownMove(0,InpName,date[d],price[p])) return; //--- Überprüfen die Fakten von Zwangsabschaltung der Skript if(IsStopped()) return; //--- den Chart neu zeichnen ChartRedraw(); } //--- Die Position des Bezugspunktes relativ zum Zeichen ändern ArrowThumbDownAnchorChange(0,InpName,ANCHOR_TOP); //--- den Chart neu zeichnen ChartRedraw(); //--- 1 Sekunde Verzögerung Sleep(1000); //--- Zeichen aus dem Chart löschen ArrowThumbDownDelete(0,InpName); ChartRedraw(); //--- 1 Sekunde Verzögerung Sleep(1000); //--- } |