#property description "Skript auf der RSI Indikator wird im Chart Fenster angezeigt"
#property description "die Daten wie oft der Markt in eine überkauft"
#property description "und überverkauft Zonen in den angegebenen Zeitraum war."
//--- Beim Starten des Skripts zeigen Sie den Fenster mit den Eingabeparametern an
#property script_show_inputs
//--- Eingabeparameters
input int InpMAPeriod=14; // Periode des gleitenden Durchschnitts
input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_CLOSE; // Preistyp
input double InpOversoldValue=30.0; // Überverkauft Ebene
input double InpOverboughtValue=70.0; // Überkauft Ebene
input datetime InpDateStart=D'2012.01.01 00:00'; // Das Anfangsdatum der Analyse
input datetime InpDateFinish=D'2013.01.01 00:00'; // das Abschlußdatum der Analyse
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
double rsi_buff[]; // das Array der Indikatorwerte
int size=0; // die Größe des Arrays
//--- erhalten Sie die Handle des RSI Indikators
ResetLastError();
int rsi_handle=iRSI(Symbol(),Period(),InpMAPeriod,InpAppliedPrice);
if(rsi_handle==INVALID_HANDLE)
{
//--- Es misslang, Handle des Indikators zu bekommen
PrintFormat("Fehler beim Erhalten die Handle des Indikators. Fehlercode = %d",GetLastError());
return;
}
//--- Wir befinden uns im Zyklus, bis der Indikator alle Werten berechnen wird
while(BarsCalculated(rsi_handle)==-1)
{
//--- Wir gehen hinaus, wenn der Benutzer die Arbeit des Skripts zwangsläufig beendet hat
if(IsStopped())
return;
//--- die Verzögerungszeit, damit der Indikator geschafft, seine Werte zu berechnen
Sleep(10);
}
//--- kopieren Sie die Indikatorwerte für eine angegebene Period
ResetLastError();
if(CopyBuffer(rsi_handle,0,InpDateStart,InpDateFinish,rsi_buff)==-1)
{
PrintFormat("Es misslang, die Indikatorwerte zu kopieren. Fehlercode = %d",GetLastError());
return;
}
//--- erhalten Sie die Größe des Arrays
size=ArraySize(rsi_buff);
//--- sortieren Sie das Array
ArraySort(rsi_buff);
//--- erkennen Sie welches Prozent der Zeit sich den Markt in der überverkauft Zone befand
double ovs=(double)ArrayBsearch(rsi_buff,InpOversoldValue)*100/(double)size;
//--- erkennen Sie welches Prozent der Zeit sich den Markt in der überkauft Zone befand
double ovb=(double)(size-ArrayBsearch(rsi_buff,InpOverboughtValue))*100/(double)size;
//--- bilden Sie die Zeilen für die Schlussfolgerung der Daten
string str="Seit "+TimeToString(InpDateStart,TIME_DATE)+" bis "
+TimeToString(InpDateFinish,TIME_DATE)+" der Markt ist in:";
string str_ovb="den überkauft Zone "+DoubleToString(ovb,2)+"% Zeit";
string str_ovs="den überverkauft Zone "+DoubleToString(ovs,2)+"% Zeit";
//--- zeigen Sie die Daten in der Chart
CreateLabel("top",5,60,str,clrDodgerBlue);
CreateLabel("overbought",5,35,str_ovb,clrDodgerBlue);
CreateLabel("oversold",5,10,str_ovs,clrDodgerBlue);
//--- zeichnen Sie die Chart
ChartRedraw(0);
//--- die Verzögerung
Sleep(10000);
}
//+------------------------------------------------------------------+
//| Zeigt den Kommentar in der unteren linken Ecke der Chart |
//+------------------------------------------------------------------+
void CreateLabel(const string name,const int x,const int y,
const string str,const color clr)
{
//--- Label erstellen
ObjectCreate(0,name,OBJ_LABEL,0,0,0);
//--- Bindung von Label zu dem linken unteren Ecke
ObjectSetInteger(0,name,OBJPROP_CORNER,CORNER_LEFT_LOWER);
//--- ändern Sie die Position der Ankerpunkt
ObjectSetInteger(0,name,OBJPROP_ANCHOR,ANCHOR_LEFT_LOWER);
//--- die Länge der X-Achse von der Ankerpunkt
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
//--- die Länge der Y-Achse von der Ankerpunkt
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- der Text-Label
ObjectSetString(0,name,OBJPROP_TEXT,str);
//--- die Textfarbe
ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- die Textgröße
ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12);
}
|