ChartSaveTemplate

Mevcut çizelge ayarlarını, belirtilen isimle bir şablona kaydeder.

bool  ChartSaveTemplate(
   long          chart_id,     // Çizelge tanımlayıcı
   const string  filename      // Şablonu kaydetmek için dosya ismi
   );

Parametreler

chart_id

[in]  Çizelge tanımlayıcısı. 0, mevcut çizelge anlamına gelir.

filename

[in]  Şablonun kaydedileceği dosya ismi. ".tpl" uzantısı, dosya ismine otomatik olarak eklenecektir, ayrıyeten belirtilmesine gerek yoktur. Şablon, terminal_dizini\Profiles\Templates\ konumuna kaydedilir ve terminaldeki manuel uygulamalar için kullanılabilir. Eğer aynı isimde bir şablon zaten mevcutsa, o zaman bu dosyanın içeriği üzerine yazılacaktır.

Dönüş değeri

Başarı durumunda 'true' değerine, aksi durumda 'false' değerine dönüş yapacaktır. Hata ile ilgili bilgi almak için, GetLastError() fonksiyonunu çağırın.

Not

Şablonları kullanarak, tüm göstergeler ve grafiksel nesnelerle birlikte tüm çizelge ayarlarını saklayabilir; sonra bunları başka bir çizelgeye uygulayabilirsiniz.

Örnek:

//+------------------------------------------------------------------+
//|                                       Test_ChartSaveTemplate.mq5 |
//|                         Copyright 2000-2024, MetaQuotes Ltd. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2000-2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
//--- giriş parametreleri
input string               symbol="GBPUSD";  // Yeni çizelgenin sembolü
input ENUM_TIMEFRAMES      period=PERIOD_H3// Yeni çizelgenin zaman aralığı
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- Önce göstergeleri çizelgeye ekle
   int handle;
//--- Göstergeyi kullanım için hazırla
   if(!PrepareZigzag(NULL,0,handle)) return// Başarısız, o yüzden çık
//--- Göstergeyi mevcut çizelgeye, ayrı pencerede tuttur.
   if(!ChartIndicatorAdd(0,1,handle))
     {
      PrintFormat("Çizelge %s/%s için %d tanıtıcı değere sahip göstergenin eklenmesi başarısız oldu. Hata kodu %d",
                  _Symbol,
                  EnumToString(_Period),
                  handle,
                  GetLastError());
      //--- Program işlemini sonlandır
      return;
     }
//--- Göstergeyi görmek için çizelgeyi yenile
   ChartRedraw();
//--- Zigzagın son iki kırığını bul 
   double two_values[];
   datetime two_times[];
   if(!GetLastTwoFractures(two_values,two_times,handle))
     {
      PrintFormat("Zigzagın son iki kırığı bulunamadı!");
      //--- Program işlemini sonlandır
      return;
     }
//--- Şimdi bir standart sapma kanalı ekle
   string channel="StdDeviation Channel";
   if(!ObjectCreate(0,channel,OBJ_STDDEVCHANNEL,0,two_times[1],0))
     {
      PrintFormat("%s nesnesinin oluşturulması başarısız. Hata kodu %d",
                  EnumToString(OBJ_STDDEVCHANNEL),GetLastError());
      return;
     }
   else
     {
      //--- Kanal oluşturuldu, ikinci noktayı tanımla
      ObjectSetInteger(0,channel,OBJPROP_TIME,1,two_times[0]);
      //--- Kanal için bir araç ipucu ayarla
      ObjectSetString(0,channel,OBJPROP_TOOLTIP,"Demo from MQL5 Help");
      //--- Çizelgeyi yenile
      ChartRedraw();
     }
//--- Sonucu bir şablona kaydet
   ChartSaveTemplate(0,"StdDevChannelOnZigzag");
//--- Yeni bir çizelge aç ve kaydedilen şablonu buna uygula
   long new_chart=ChartOpen(symbol,period);
   //--- Araç ipuçlarını, grafiksel nesneler için aktif hale getir
   ChartSetInteger(new_chart,CHART_SHOW_OBJECT_DESCR,true);
   if(new_chart!=0)
     {
      //--- Kaydedilen şablonu bir çizelgeye uygula
      ChartApplyTemplate(new_chart,"StdDevChannelOnZigzag");
     }
   Sleep(10000);
  }
//+----------------------------------------------------------------------+
//| Bir zigzag işleyicisi oluşturur ve verisinin hazır olduğunu temin eder |
//+----------------------------------------------------------------------+
bool PrepareZigzag(string sym,ENUM_TIMEFRAMES tf,int &h)
  {
   ResetLastError();
//--- Zigzag göstergesi terminal_veri_klasörü\MQL5\Examples konumuna yerleştirilmiş olmalıdır
   h=iCustom(sym,tf,"Examples\\Zigzag");
   if(h==INVALID_HANDLE)
     {
      PrintFormat("%s: Zigzag işleyicisinin oluşturulması başarısız oldu. Hata kodu %d",
                  __FUNCTION__,GetLastError());
      return false;
     }
//--- Bir gösterge tanıtıcı değeri oluşturulurken, verilerin hesaplanması zaman alacaktır
   int k=0; // Gösterge hesabı için bekleme denemelerinin sayısı
//--- Döngü hesabı için bekle, hesaplama hazır değilse 50 milisaniye dur 
   while(BarsCalculated(h)<=0)
     {
      k++;
      //--- Deneme sayısını göster
      PrintFormat("%s: k=%d",__FUNCTION__,k);
      //--- Gösterge hesaplanana kadar 50 milisaniye bekle
      Sleep(50);
      //--- yüzden fazla deneme varsa, o halde bir şeyler yanlış
      if(k>100)
        {
         //--- Bir problemi bildir
         PrintFormat("Göstergenin hesaplanması %d denemede başarısız oldu!");
         //--- Program işlemini durdur
         return false;
        }
     }
//--- Her şey hazır, gösterge oluşturuldı ve değerler hesaplandı
   return true;
  }
//+------------------------------------------------------------------+
//| Son iki zigzag kırığını arar ve dizilere yerleştirir             |
//+------------------------------------------------------------------+
bool GetLastTwoFractures(double &get_values[],datetime &get_times[],int handle)
  {
   double values[];         // Zigzag değerleri için bir dizi
   datetime times[];        // Zamanı almak için bir dizi
   int size=100;            // Dizi büyüklüğü
   ResetLastError();
//--- Göstergenin son 100 değerini kopyala
   int copied=CopyBuffer(handle,0,0,size,values);
//--- Kopyalanan değerlerin sayısını kontrol et
   if(copied<100)
     {
      PrintFormat("%s: %d tanıtıcı değerine sahip göstergenin %d değerinin alınması başarısız. Hata kodu %d",
                  __FUNCTION__,handle,size,GetLastError());
      return false;
     }
//--- Diziye erişimi zaman serilerindeki gibi tanımla
   ArraySetAsSeries(values,true);
//--- Kırılmaların bulunduğu çubukların numaralarını buraya yaz
   int positions[];
//--- Dizi büyüklüğünü ayarla
   ArrayResize(get_values,3); ArrayResize(get_times,3); ArrayResize(positions,3);
//--- Sayaçlar
   int i=0,k=0;
//--- Kırılmaları aramaya başla
   while(i<100)
     {
      double v=values[i];
      //--- Boş değerler ile ilgilenmiyoruz
      if(v!=0.0)
        {
         //--- Çubuk numarasını hatırla
         positions[k]=i;
         //--- Kırılma anındaki zigzag değerini hatırla
         get_values[k]=values[i];
         PrintFormat("%s: Zigzag[%d]=%G",__FUNCTION__,i,values[i]);
         //--- Sayacı artır
         k++;
         //--- Eğer iki kırık bulunduysa döngüyü sonlandır
         if(k>2) break;
        }
      i++;
     }
//--- Dizilere erişimi zaman serilerindeki gibi tanımla
   ArraySetAsSeries(times,true);   ArraySetAsSeries(get_times,true);
   if(CopyTime(_Symbol,_Period,0,size,times)<=0)
     {
      PrintFormat("%s: %d değeri CopyTime()'dan kopyalama başarısız. Hata kodu %d",
                  __FUNCTION__,size,GetLastError());
      return false;
     }
//--- Son iki kırığın gerçekleştiği çubukların açılış zamanını al
   get_times[0]=times[positions[1]];// Ilk kırılma olarak, son değer yazılacak
   get_times[1]=times[positions[2]];// Sondan üçüncü değer ikinci kırılma olacak
   PrintFormat("%s: first=%s,  second=%s",__FUNCTION__,TimeToString(get_times[1]),TimeToString(get_times[0]));
//--- Başarılı
   return true;
  }

Ayrıca Bakınız

ChartApplyTemplate(), Kaynaklar