#property description "RSI göstergesinin verilerine dayanan bu script"
#property description "belirlenen zaman aralığında, piyasadaki"
#property description "aşırı alım ve aşırı satım alanlarını göstermektedir."
//--- script çalıştırıldığında giriş parametrelerinin penceresini göster
#property script_show_inputs
//--- giriş parametreleri
input int InpMAPeriod=14; // Hareketli ortalama periodu
input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_CLOSE; // Fiyat tipi
input double InpOversoldValue=30.0; // Aşırı satım seviyesi
input double InpOverboughtValue=70.0; // Aşırı alım seviyesi
input datetime InpDateStart=D'2012.01.01 00:00'; // Analiz başlangıç tarihi
input datetime InpDateFinish=D'2013.01.01 00:00'; // Analiz bitiş tarihi
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
double rsi_buff[]; // gösterge değerlerinin dizisi
int size=0; // dizi büyüklüğü
//--- RSI göstergesinin tanıtıcı değerini al
ResetLastError();
int rsi_handle=iRSI(Symbol(),Period(),InpMAPeriod,InpAppliedPrice);
if(rsi_handle==INVALID_HANDLE)
{
//--- gösterge tanıtıcı değeri alınamadı
PrintFormat("Gösterge tanıtıcı değerinin alınmasında hata. Hata kodu = %d",GetLastError());
return;
}
//--- gösterge, verileri hesaplayana kadar döngüde kalacak
while(BarsCalculated(rsi_handle)==-1)
{
//--- eğer gösterge, betiğin işlemini zoraki tamamlamışsa çık
if(IsStopped())
return;
//--- göstergenin değerlerini hesaplamasına izin vermek için kısa bir duraklama
Sleep(10);
}
//--- belli bir zaman aralığı için gösterge değerlerini kopyala
ResetLastError();
if(CopyBuffer(rsi_handle,0,InpDateStart,InpDateFinish,rsi_buff)==-1)
{
PrintFormat("Gösterge değerlerinin kopyalanması başarısız oldu. Hata kodu = %d",GetLastError());
return;
}
//--- dizi büyüklüğünü al
size=ArraySize(rsi_buff);
//--- diziyi sırala
ArraySort(rsi_buff);
//--- (yüzdelik terimlerle) piyasanın aşırı satım alanında olduğu zamanı bul
double ovs=(double)ArrayBsearch(rsi_buff,InpOversoldValue)*100/(double)size;
//--- (yüzdelik terimlerle) piyasanın aşırı alım alanında olduğu zamanı bul
double ovb=(double)(size-ArrayBsearch(rsi_buff,InpOverboughtValue))*100/(double)size;
//--- dizgilerden hareketle veriyi göstermek için
string str=""+TimeToString(InpDateStart,TIME_DATE)+" tarihinden "
+TimeToString(InpDateFinish,TIME_DATE)+" tarihine kadar piyasa:";
string str_ovb="zamanın "+DoubleToString(ovb,2)+"% kadarında aşırı alım alanında";
string str_ovs="zamanın "+DoubleToString(ovs,2)+"% kadarında aşırı satım alanında";
//--- veriyi çizelge üzerinde göster
CreateLabel("top",5,60,str,clrDodgerBlue);
CreateLabel("overbought",5,35,str_ovb,clrDodgerBlue);
CreateLabel("oversold",5,10,str_ovs,clrDodgerBlue);
//--- çizelgeyi yeniden çiz
ChartRedraw(0);
//--- durakla
Sleep(10000);
}
//+------------------------------------------------------------------+
//| Çizelgenin sol alt köşesinde yorumu göster |
//+------------------------------------------------------------------+
void CreateLabel(const string name,const int x,const int y,
const string str,const color clr)
{
//--- etiketi oluştur
ObjectCreate(0,name,OBJ_LABEL,0,0,0);
//--- etiketi sol alt köşeye bağla
ObjectSetInteger(0,name,OBJPROP_CORNER,CORNER_LEFT_LOWER);
//--- tutturma konumunu değiştir
ObjectSetInteger(0,name,OBJPROP_ANCHOR,ANCHOR_LEFT_LOWER);
//--- tutturma noktasının X yönünde uzaklığı
ObjectSetInteger(0,name,OBJPROP_XDISTANCE,x);
//--- tutturma noktasının Y yönünde uzaklığı
ObjectSetInteger(0,name,OBJPROP_YDISTANCE,y);
//--- etiket metni
ObjectSetString(0,name,OBJPROP_TEXT,str);
//--- metin rengi
ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- metin boyutu
ObjectSetInteger(0,name,OBJPROP_FONTSIZE,12);
}
|