//--- açıklama #property description "Bu script \"Kontrol\" işaretini çizer." #property description "tutturma noktası koordinatları, çizelge penceresi" #property description "boyutunun yüzdesi şeklinde ayarlanır." //--- betiğin çalıştırılması sırasında giriş parametreleri penceresini göster #property script_show_inputs //--- betiğin giriş parametreleri input string InpName="ArrowCheck"; // İşaret ismi input int InpDate=10; // % şeklinde tutturma koordinatı tarihi input int InpPrice=50; // % şeklinde tutturma koordinatı fiyatı input ENUM_ARROW_ANCHOR InpAnchor=ANCHOR_TOP; // Tutturma noktası tipi input color InpColor=clrRed; // İşaret rengi input ENUM_LINE_STYLE InpStyle=STYLE_DOT; // Kenar çizgisi stili input int InpWidth=5; // İşaret boyutu input bool InpBack=false; // Arkaplan işareti input bool InpSelection=false; // taşıma için vurgula input bool InpHidden=true; // Nesne listesinde gizle input long InpZOrder=0; // Fare tıklaması için öncelik //+------------------------------------------------------------------+ //| Kontrol işareti oluştur | //+------------------------------------------------------------------+ bool ArrowCheckCreate(const long chart_ID=0, // çizelge tanımlayıcı const string name="ArrowCheck", // işaret ismi const int sub_window=0, // alt-pencere indisi datetime time=0, // tutturma noktası zamanı double price=0, // tutturma noktası fiyatı const ENUM_ARROW_ANCHOR anchor=ANCHOR_BOTTOM, // tutturma noktası tipi const color clr=clrRed, // işaret rengi const ENUM_LINE_STYLE style=STYLE_SOLID, // kenar çizgisi stili const int width=3, // işaret boyutu const bool back=false, // arka planda çiz const bool selection=true, // taşıma için vurgula const bool hidden=true, // nesne listesinde sakla const long z_order=0) // fare tıklaması için öncelik { //--- ayarlanmamışsa, tutturma noktası koordinatlarını ayarla ChangeArrowEmptyPoint(time,price); //--- hata değerini sıfırla ResetLastError(); //--- işareti oluştur if(!ObjectCreate(chart_ID,name,OBJ_ARROW_CHECK,sub_window,time,price)) { Print(__FUNCTION__, ": \"Kontrol\" işaretinin oluşturulması başarısız oldu! Hata kodu = ",GetLastError()); return(false); } //--- tutturma noktası tipini ayarla ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor); //--- bir işaret rengi ayarla ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr); //--- kenar çizgi stilini ayarla ObjectSetInteger(chart_ID,name,OBJPROP_STYLE,style); //--- işaret boyutunu ayarla ObjectSetInteger(chart_ID,name,OBJPROP_WIDTH,width); //--- ön-planda (false) veya arkaplanda (true) göster ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back); //--- işareti fare ile taşıma modunu etkinleştir (true) veya devre dışı bırak (false) //--- ObjectCreate fonksiyonu ile bir nesne oluşturulurken, //--- nesne ön tanımlı olarak vurgulanamaz veya taşınamaz. Bu yöntemin içinde, parametre için ön tanımlı olarak 'true' değerinin //--- seçilmesi, nesnenin vurgulanmasını ve taşınmasını mümkün kılar ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection); ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection); //--- nesne listesinde grafiksel nesnenin adını sakla (true) veya göster (false) ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden); //--- çizelge üzerinde fare tıklaması olayının alınması için özellik ayarla ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,z_order); //--- başarılı çalıştırma return(true); } //+------------------------------------------------------------------+ //| Tutturma noktasını taşı | //+------------------------------------------------------------------+ bool ArrowCheckMove(const long chart_ID=0, // çizelge kimliği const string name="ArrowCheck", // nesne ismi datetime time=0, // tutturma noktası zaman koordinatı double price=0) // tutturma noktası fiyat koordinatı { //--- noktanın pozisyonu belirlenmemişse, noktayı Bid (alış) fiyatı olan mevcut çubuğa taşı if(!time) time=TimeCurrent(); if(!price) price=SymbolInfoDouble(Symbol(),SYMBOL_BID); //--- hata değerini sıfırla ResetLastError(); //--- tutturma noktasını taşı if(!ObjectMove(chart_ID,name,0,time,price)) { Print(__FUNCTION__, ": tutturma noktasının taşınması başarısız! Hata kodu = ",GetLastError()); return(false); } //--- başarılı çalıştırma return(true); } //+------------------------------------------------------------------+ //| Kontrol tutturma noktası tipini değiştir | //+------------------------------------------------------------------+ bool ArrowCheckAnchorChange(const long chart_ID=0, // çizelge kimliği const string name="ArrowCheck", // nesne ismi const ENUM_ARROW_ANCHOR anchor=ANCHOR_TOP) // tutturma noktası tipi { //--- hata değerini sıfırla ResetLastError(); //--- tutturma noktası tipini değiştir if(!ObjectSetInteger(chart_ID,name,OBJPROP_ANCHOR,anchor)) { Print(__FUNCTION__, ": tutturma noktası tipinin değiştirilmesi başarısız oldu! Hata kodu = ",GetLastError()); return(false); } //--- başarılı çalıştırma return(true); } //+------------------------------------------------------------------+ //| Kontrol işaretini sil | //+------------------------------------------------------------------+ bool ArrowCheckDelete(const long chart_ID=0, // çizelge kimliği const string name="ArrowCheck") // işaret ismi { //--- hata değerini sıfırla ResetLastError(); //--- işareti sil if(!ObjectDelete(chart_ID,name)) { Print(__FUNCTION__, ": \"Kontrol\" işaretinin silinmesi başarısız! Hata kodu = ",GetLastError()); return(false); } //--- başarılı çalıştırma return(true); } //+------------------------------------------------------------------+ //| Tutturma noktası değerlerini kontrol et ve | //| boş olanlar için varsayılan değerleri ayarla | //+------------------------------------------------------------------+ void ChangeArrowEmptyPoint(datetime &time,double &price) { //--- noktanın zamanı ayarlanmamışsa, mevcut çubuk üzerinde olacak if(!time) time=TimeCurrent(); //--- noktanın fiyatı ayarlanmamışsa, Bid değerini alacak if(!price) price=SymbolInfoDouble(Symbol(),SYMBOL_BID); } //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- giriş parametrelerinin doğruluğunu kontrol et if(InpDate<0 || InpDate>100 || InpPrice<0 || InpPrice>100) { Print("Hata! Hatalı giriş parametresi değerleri!"); return; } //--- çizelge penceresindeki görünür çubukların sayısı int bars=(int)ChartGetInteger(0,CHART_VISIBLE_BARS); //--- fiyat dizisi büyüklüğü int accuracy=1000; //--- nesnenin tutturma noktası konumunu değiştirmek için kullanılacak //--- tarih ve fiyat değerlerinin saklanacağı diziler datetime date[]; double price[]; //--- bellek tahsisi ArrayResize(date,bars); ArrayResize(price,accuracy); //--- tarih dizisini doldur ResetLastError(); if(CopyTime(Symbol(),Period(),0,bars,date)==-1) { Print("Zaman değerlerinin kopyalanması başarısız oldu! Hata kodu = ",GetLastError()); return; } //--- fiyat dizisini değerlerle doldur //--- çizelgedeki en yüksek ve en düşük değerleri bul double max_price=ChartGetDouble(0,CHART_PRICE_MAX); double min_price=ChartGetDouble(0,CHART_PRICE_MIN); //--- fiyatlar için bir değişim birimini tanımla ve diziyi doldur double step=(max_price-min_price)/accuracy; for(int i=0;i<accuracy;i++) price[i]=min_price+i*step; //--- işaretin çizileceği noktaları tanımla int d=InpDate*(bars-1)/100; int p=InpPrice*(accuracy-1)/100; //--- Kontrol işaretini çizelge üzerinde oluştur if(!ArrowCheckCreate(0,InpName,0,date[d],price[p],InpAnchor,InpColor, InpStyle,InpWidth,InpBack,InpSelection,InpHidden,InpZOrder)) { return; } //--- çizelgeyi yenile ve 1 saniye bekle ChartRedraw(); Sleep(1000); //--- şimdi, tutturma noktasını taşı ve konumunu işarete göre değiştir //--- döngü sayacı int h_steps=bars*2/5; //--- tutturma noktasını taşı for(int i=0;i<h_steps;i++) { //--- bir sonraki değeri kullan if(d<bars-1) d+=1; //--- tutturma noktasını taşı if(!ArrowCheckMove(0,InpName,date[d],price[p])) return; //--- script işlemi devre dışı bırakıldı mı kontrol et if(IsStopped()) return; //--- çizelgeyi yenile ChartRedraw(); // 0.025 saniyelik gecikme Sleep(25); } //--- tutturma noktasının konumunu işarete göre değiştir ArrowCheckAnchorChange(0,InpName,ANCHOR_BOTTOM); //--- çizelgeyi yeniden çiz ChartRedraw(); //--- döngü sayacı h_steps=bars*2/5; //--- tutturma noktasını taşı for(int i=0;i<h_steps;i++) { //--- bir sonraki değeri kullan if(d<bars-1) d+=1; //--- tutturma noktasını taşı if(!ArrowCheckMove(0,InpName,date[d],price[p])) return; //--- script işlemi devre dışı bırakıldı mı kontrol et if(IsStopped()) return; //--- çizelgeyi yenile ChartRedraw(); // 0.025 saniyelik gecikme Sleep(25); } //--- 1 saniyelik gecikme Sleep(1000); //--- işareti çizelgeden sil ArrowCheckDelete(0,InpName); ChartRedraw(); //--- 1 saniyelik gecikme Sleep(1000); //--- } |