//--- Beschreibung
#property description "Das Skript erstellt ein graphisches Objekt \"Text\"."
//--- Zeigen den Fenster von Eingabeparametern in der Skript-Startup
#property script_show_inputs
//--- Eingangsparameter von Skript
input string InpFont="Arial"; // Schrift
input int InpFontSize=10; // Schriftgröße
input color InpColor=clrRed; // Farbe
input double InpAngle=90.0; // Der Winkel in Grad
input ENUM_ANCHOR_POINT InpAnchor=ANCHOR_LEFT; // Bindungsmethode
input bool InpBack=false; // Objekt im Hintergrund
input bool InpSelection=false; // Wählen zu bewegen
input bool InpHidden=true; // Ausblenden in der Liste der Objekten
input long InpZOrder=0; // Priorität auf Mausklick
//+------------------------------------------------------------------+
//| Erstellt das Objekt "Text" |
//+------------------------------------------------------------------+
bool TextCreate(const long chart_ID=0, // ID des Charts
const string name="Text", // Objektname
const int sub_window=0, // Nummer des Unterfensters
datetime time=0, // Zeit des Ankerpunktes
double price=0, // Preis des Ankerpunktes
const string text="Text", // Der Text
const string font="Arial", // Schrift
const int font_size=10, // Schriftgröße
const color clr=clrRed, // Farbe
const double angle=0.0, // Text Winkel
const ENUM_ANCHOR_POINT anchor=ANCHOR_LEFT_UPPER, // Bindungsmethode
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
{
//--- Die Koordinaten des Bezugspunkts angeben, wenn sie nicht gesetzt sind
ChangeTextEmptyPoint(time,price);
//--- Setzen den Wert des Fehlers zurück
ResetLastError();
//--- Erstellen wir das Objekt "Text"
if(!ObjectCreate(chart_ID,name,OBJ_TEXT,sub_window,time,price))
{
Print(__FUNCTION__,
": Objekt \"Text\" konnte nicht erstellt werden! Fehlercode = ",GetLastError());
return(false);
}
//--- den Text setzen
ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
//--- Textschrift setzen
ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
//--- Schriftgröße setzen
ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
//--- Text-Winkel angeben
ObjectSetDouble(chart_ID,name,OBJPROP_ANGLE,angle);
//--- die Bindungsmethode setzen
ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor);
//--- Farbe setzen
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
//--- Im Vordergrund (false) oder Hintergrund (true) anzeigen
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
//--- aktivieren (true) oder deaktivieren (false) Bewegung des Objekts 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);
}
//+------------------------------------------------------------------+
//| Bewegt den Bezugspunkt |
//+------------------------------------------------------------------+
bool TextMove(const long chart_ID=0, // ID des Charts
const string name="Text", // Objektname
datetime time=0, // Zeitkoordinate des Punktes
double price=0) // Preiskoordinate des Punktes
{
//--- 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 den Text des Objektes |
//+------------------------------------------------------------------+
bool TextChange(const long chart_ID=0, // ID des Charts
const string name="Text", // Objektname
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);
;}
//+------------------------------------------------------------------+
//| Löscht das Objekt "Text" |
//+------------------------------------------------------------------+
bool TextDelete(const long chart_ID=0, // ID des Charts
const string name="Text") // Objektname
{
//--- Setzen den Wert des Fehlers zurück
ResetLastError();
//--- das Objekt löschen
if(!ObjectDelete(chart_ID,name))
{
Print(__FUNCTION__,
": Objekt \"Text\" konnte nicht gelöscht werden! Fehlercode = ",GetLastError());
return(false);
}
//--- die erfolgreiche Umsetzung
return(true);
}
//+------------------------------------------------------------------+
//| Überprüft den Wert des Bezugspunkts für lehre Werte |
//| setzt Standardwerte |
//+------------------------------------------------------------------+
void ChangeTextEmptyPoint(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()
{
datetime date[]; // Array zu speichern Daten von sichtbaren Bars
double low[]; // Array zu speichern Low-Priese von sichtbaren Bars
double high[]; // Array zu speichern High-Preise von sichtbaren Bars
//--- Die Anzahl der sichtbaren Bars im Chart-Fenster
int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS);
//--- Speicher reservieren
ArrayResize(date,bars);
ArrayResize(low,bars);
ArrayResize(high,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;
}
//--- Füllen die Anordnung von Low-Preise
if(CopyLow(Symbol(),Period(),0,bars,low)==-1)
{
Print("Kann nicht den Wert der Low-Preise kopieren! Fehlercode = ",GetLastError());
return;
}
//--- Füllen die Anordnung von High-Preise
if(CopyHigh(Symbol(),Period(),0,bars,high)==-1)
{
Print("Kann nicht den Wert der High-Preise kopieren! Fehlercode = ",GetLastError());
return;
}
//--- Definieren wir, wie oft die Inschriften zu Tun
int scale=(int)ChartGetInteger(0,CHART_SCALE);
//--- Schritt definieren
int step=1;
switch(scale)
{
case 0:
step=12;
break;
case 1:
step=6;
break;
case 2:
step=4;
break;
case 3:
step=2;
break;
}
//--- Text für die Werte von High und Low der Baren erstellen (mit Zwischenräume)
for(int i=0;i<bars;i+=step)
{
//--- Texte erstellen
if(!TextCreate(0,"TextHigh_"+(string)i,0,date[i],high[i],DoubleToString(high[i],5),InpFont,InpFontSize,
InpColor,InpAngle,InpAnchor,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
if(!TextCreate(0,"TextLow_"+(string)i,0,date[i],low[i],DoubleToString(low[i],5),InpFont,InpFontSize,
InpColor,-InpAngle,InpAnchor,InpBack,InpSelection,InpHidden,InpZOrder))
{
return;
}
//--- Überprüfen die Fakten von Zwangsabschaltung der Skript
if(IsStopped())
return;
//--- den Chart neu zeichnen
ChartRedraw();
// Verzögerung 0.05 Sekunden
Sleep(50);
}
//--- Halb-Sekunden-Verzögerung
Sleep(500);
//--- Texte löschen
for(int i=0;i<bars;i+=step)
{
if(!TextDelete(0,"TextHigh_"+(string)i))
return;
if(!TextDelete(0,"TextLow_"+(string)i))
return;
//--- den Chart neu zeichnen
ChartRedraw();
// Verzögerung 0.05 Sekunden
Sleep(50);
}
//---
}
|