//--- Beschreibung
#property description "Das Skript erstellt ein graphisches Objekt \"Ereignis\"."
#property description "Datum des Ankerpunkts wird als Prozentsatz"
#property description "des Breite des Chartfensters angegeben."
//--- Zeigen den Fenster von Eingabeparametern in der Skript-Startup
#property script_show_inputs
//--- Eingangsparameter von Skript
input string InpName="Event"; // Name des Ereignisses
input int InpDate=25; // Datum des Ereignisses in %
input string InpText="Text"; // Text des Ereignisses
input color InpColor=clrRed; // Farbe des Ereignisses
input int InpWidth=1; // Größe des Punktes für Bewegung
input bool InpBack=false; //Ereignis Im Hintergrund
input bool InpSelection=false; // Wählen um zu bewegen
input bool InpHidden=true; // Ausgeblendet in der Objektliste
input long InpZOrder=0; // Priorität auf Mausklick
//+------------------------------------------------------------------+
//| Erstellt das Objekt "Ereignis" auf dem Chart |
//+------------------------------------------------------------------+
bool EventCreate(const long chart_ID=0, // ID des Charts
const string name="Event", // Name des Ereignisses
const int sub_window=0, // Nummer des Unterfensters
const string text="Text", // Text des Ereignisses
datetime time=0, // Zeit
const color clr=clrRed, // Farbe
const int width=1, // Punktdicke bei Wählen
const bool back=false, // Im Hintergrund
const bool selection=false, // Wählen um zu bewegen
const bool hidden=true, // Ausgeblendet in der Objektliste
const long z_order=0) // Priorität auf Mausklick
{
//--- wenn die Zeit nicht angegeben ist, wird Objekt auf dem letzten Balken erstellt werden
if(!time)
time=TimeCurrent();
//--- Setzen den Wert des Fehlers zurück
ResetLastError();
//--- Erstellen wir das Objekt "Ereignis"
if(!ObjectCreate(chart_ID,name,OBJ_EVENT,sub_window,time,0))
{
Print(__FUNCTION__,
": Objekt \"Ereignis\" konnte nicht erstellt werden! Fehlercode = ",GetLastError());
return(false);
}
//--- den Text des Ereignisses setzen
ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
//--- Farbe setzen
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- Dicke des Ankerpunktes, wenn ein Objekt ausgewählt ist, 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) Bewegung des Ereignisses mit dem Maus
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);
}
//+------------------------------------------------------------------+
//| Ändert den Text des Objektes "Ereignis" |
//+------------------------------------------------------------------+
bool EventTextChange(const long chart_ID=0, // ID des Charts
const string name="Event", // Name des Ereignisses
const string text="Text") // Text
{
//--- Setzen den Wert des Fehlers zurück
ResetLastError();
//--- ändern wir den Text des Objektes
if(!ObjectSetString(chart_ID,name,OBJPROP_TEXT,text))
{
Print(__FUNCTION__,
": Konnte nicht den Text ändern! Fehlercode = ",GetLastError());
return(false);
}
//--- die erfolgreiche Umsetzung
return(true);
}
//+------------------------------------------------------------------+
//| Bewegung des Objekts "Ereignis" |
//+------------------------------------------------------------------+
bool EventMove(const long chart_ID=0, // ID des Charts
const string name="Event", // Name des Ereignisses
datetime time=0) // Zeit
{
//--- wenn die Zeit nicht angegeben ist, bewegen wir das Ereignis auf den letzten Balken
if(!time)
time=TimeCurrent();
//--- Setzen den Wert des Fehlers zurück
ResetLastError();
//--- Objekt bewegen
if(!ObjectMove(chart_ID,name,0,time,0))
{
Print(__FUNCTION__,
": Objekt \"Ereignis\" konnte nicht bewegt werden! Fehlercode = ",GetLastError());
return(false);
}
//--- die erfolgreiche Umsetzung
return(true);
}
//+------------------------------------------------------------------+
//| Löscht das Objekt "Ereignis" |
//+------------------------------------------------------------------+
bool EventDelete(const long chart_ID=0, // ID des Charts
const string name="Event") // Name des Ereignisses
{
//--- Setzen den Wert des Fehlers zurück
ResetLastError();
//--- das Objekt löschen
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": Objekt \"Ereignis\" konnte nicht gelöscht werden! Fehlercode = ",GetLastError());
return(false);
}
//--- die erfolgreiche Umsetzung
return(true);
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//--- Überprüfen die Richtigkeit der Eingabeparameter
if(InpDate<0 || InpDate>100)
{
Print("Fehler! Ungültige Eingabeparameter! ");
return;
}
//--- Die Anzahl der sichtbaren Bars im Chart-Fenster
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- Array speichert Datumswerte, die verwendet werden,
//--- um die Koordinaten der Ankerpunkten des Objekts "Ereignis" zu setzen und zu bewegen
datetime date[];
//--- Speicher reservieren
ArrayResize(date,bars);
//--- 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;
}
//--- Definieren die Punkte um das Objekt zu erstellen
int d=InpDate*(bars-1)/100;
//--- Erstellen wir das Objekt "Ereignis"
if(!EventCreate(0,InpName,0,InpText,date[d],InpColor,InpWidth,
InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- den Chart neu zeichnen und 1 Sekunde warten
ChartRedraw();
Sleep(1000);
//--- jetzt bewegen wir das Objekt
//--- Schleifenzähler
int h_steps=bars/2;
//--- Objekt bewegen
for(int i=0;i<h_steps;i++)
{
//--- den nächsten Wert nehmen
if(d<bars-1)
d+=1;
//--- den Punkt bewegen
if(!EventMove(0,InpName,date[d]))
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);
//--- den Kanal aus dem Chart löschen
EventDelete(0,InpName);
ChartRedraw();
//--- 1 Sekunde Verzögerung
Sleep(1000);
//---
}
|