English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Italiano
MetaTrader 5'te sürekli vadeli işlem sözleşmeleri

MetaTrader 5'te sürekli vadeli işlem sözleşmeleri

MetaTrader 5Göstergeler | 14 Ocak 2022, 10:44
89 0
Vladimir Karputov
Vladimir Karputov

Giriş

Yatırımcı, yalnızca komisyoncunun sembolleriyle oluşturulabileceğinden MetaTrader 5'te kendi çizelgelerini oluşturamaz. Yatırımcıya sentetik bir ürün gerekir: sürekli vadeli işlem sözleşmesi. Sorun şu ki, yalnızca bir komisyoncu sözleşmelerin birleştirilmesini gerçekleştirebilir ve vadeli işlemleri verilen sembole bağlayıp bağlayamayacağına yalnızca komisyoncu karar verir.

Neyse ki, kapalı vadeli işlemlerin geçmişi her zaman terminalde mevcuttur. Terminalde vadeli işlem sözleşmelerini birleştirmek için bu geçmişi kullanın.


Sözleşmeler:

  1. Makaledeki tüm veriler, çizimler ve ekran görüntüleri gerçek Ukrayna Borsa endeksi vadeli işlemlerine dayanmaktadır.
  2. Değiştirilen veya makaleye eklenen kod bölümleri renkle işaretlenecektir. Örneğin:
    //+------------------------------------------------------------------+
    //|                                               This is an example |
    //|                                               of the edited code |
    //+------------------------------------------------------------------+

İlk sorun: tarihler çakışıyor

Yakın vadeli işlemler çakışan tarihlerle işlem görüyor.

Bu, vadeli işlemlerin alım satıma konu olduğu ve diğer vadeli işlemlerin kapanması için daha iki ay olduğu anlamına gelir.

Şek. 1. Vadeli işlem sözleşmelerinde tarihler çakışıyor

Şek. 1. Vadeli işlem sözleşmelerinde tarihler çakışıyor

Şekil, UX-12.13 vadeli işlemleri hala açık olmasına rağmen, 2013.09.16'nın UX-3.14 vadeli işlem alım satımının başlangıç tarihi olduğunu göstermektedir.


İkinci sorun: birleştirme yolunun seçilmesi

İki birleştirme yöntemi vardır:

  • Basit ekleme – mevcut enstrümanın dolaşım tarihi sona erdiğinde ve bir sonraki enstrüman başka bir barda açıldığında. Basit ekleme sırasında, grafikteki fiyatlar geçmiş değerleriyle eşleşecek ancak aynı zamanda birleşim yerlerinde her zaman fiyat boşlukları olacak, yani grafik düzgün olmayacak. 

Şek. 2. Birleştirme. Basit ekleme.

Şek. 2. Birleştirme. Basit ekleme

  • kaydırmalı ekleme: mevcut enstrümanın kapanmasına 5-10 gün var ve bu 5-10 çubuğu bir sonraki enstrüman çubuklarıyla değiştirmeye başlıyoruz. 5-10 bar aralığına geçiş dönemi denir. Kaydırmalı ekleme sırasında fiyatlar yanlış değerler gösterecektir (mevcut enstrümana karşılık gelmeyecektir) ancak basit ekleme yöntemine göre grafik daha düzgün olacaktır.

Şek. 3. Birleştirme. Kaydırmalı ekleme

Şek. 3. Birleştirme. Kaydırmalı ekleme


Terminaldeki ayarlar

"Piyasa gözlemi" penceresinde vadeli işlemler azalan düzende yerleştirilmelidir:

Dib. 4. Observación del mercado

Şek. 4. Piyasa gözlemi


İndikatör oluşturma

Varsayılan gösterge, terminal_data_folder\\MQL5\\Indicators klasörüne yerleştirilmelidir. Göstergelerim içinde (\\Göstergeler içinde açacaksınız) Sentetikler klasörü oluşturun. Standart Kitaplıktaki \\Göstergeler klasöründeki alandan tasarruf etmenize olanak tanır ve göstergelerin MQL5 Depolama başlatma senkronizasyonunu kolaylaştırır. Klasörün son yolu şöyle görünür: terminal_data_folder\\MQL5\\Indicators\\MyIndicators\\Synthetics.

Sentetikler klasöründe yeni bir dosya oluşturun:

Şek. 5. Yeni gösterge dosyası oluşturuyoruz

Şek. 5. Yeni dosya oluşturma göstergesi

Yeni dosya türünü ayarlayın - "Özel gösterge":

 Şek. 6. Yeni dosyanın türü - "Özel gösterge"

Şek. 6. Yeni dosya türü - "Özel gösterge"

"İleri"ye basın ve "Özel göstergenin genel özellikleri" penceresini açın. "SYNT" göstergesinin adını girin, iki seçenek ekleyin. İlk seçenek olan "Birleştirme için vadeli işlem sayısı" bağlanacak enstrümanların sayısını belirler. 2'nin "Birleştirme için vadeli işlem sayısı"nın mümkün olan en minimum değeri olduğuna dikkat edin. İkinci seçenek "Yapıştırma türü", varsayılan göstergedeki birleştirme türünü belirler - "basit ekleme":

 Şek. 7. Özel göstergenin parametreleri

Şek. 7. Özel gösterge parametreleri

"Yapıştırma türü" seçeneğine dikkat edin: birleştirme, "basit ekleme" veya "kaydırma ile ekleme" olabilir. Bu aşamada, bu iki birleştirme türünün listesini ekleyemezsiniz. Bu nedenle varsayılan "basit ekleme"yi bırakın. "SYNT" gösterge kodu yazma sırasında, ekleme türlerini içeren açılır listeyi görmek için Sonra seçeneğini açın.

Bir sonraki pencerede gösterge olay işleyicilerini seçin:

Dib. 8. Operador informático de los eventos para el indicador

Şek. 8. Gösterge olay işleyicileri

OnTimer() işlevinin "SYNT" göstergesinde kullanılacağını unutmayın. Göstergenin ana işlevi OnTimer() içinde ayarlanır. Gösterge hem bitmiş alım satım işleminin bulunduğu sembol grafiğine (bu sembol OnCalculate olaylarını içermez) hem de aktif bir alım satım işleminin olduğu sembol grafiğine eklenebilir.

"İleri"ye basın ve "Özel gösterge programının genel özellikleri"nde "Ayrı pencerede gösterge"yi işaretleyin:

 Şek. 9. "Ayrı bir pencerede gösterge" seçeneğini seçin

Şek. 9. "Ayrı pencerede gösterge" seçeneği

"Bitti" düğmesine basın, "SYNT" gösterge şablonunu göreceksiniz.


Açılır listenin düzenlenmesi

Ekleme türleri listesini açılır liste olarak görmek için gösterge seçeneklerinde ENUM_GLUING_TYPE numaralandırmasını bildirmeniz gerekir.

Giriş parametreleri bloğunun başlangıcında global alanda numaralandırmayı bildirin:

#property indicator_separate_window
//+------------------------------------------------------------------+
//|  Splicing types enumeration                                      |
//+------------------------------------------------------------------+
enum ENUM_GLUING_TYPE
  {
   simple_addition,        // simple addition||simple addition
   addition_with_shift     // addition with shift||addition with shift
  };  
//--- input parameters || input parameters
input ENUM_GLUING_TYPE  gluing_type=simple_addition;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

Artık açılır listenin nasıl görüntülendiğini kontrol edebilirsiniz.

Gösterge (F7) dosyasını derlemelisiniz. Şimdi, göstergeyi ekledikten sonra, açılır listenin başlattığı seçeneklerde görebilirsiniz:

Şek. 10. Şimdi parametrelerde bir açılır listemiz var

Şek. 10. Artık parametrelerdeki
açılır listeye sahipsiniz
 

İlk kez grafiğe eklendiğinde veya özellikleri değiştirildiğinde "Genel" sekmesinde görüntülenecek olan göstergenin açıklamasını ekleyin:

#property version   "1.00"
//+------------------------------------------------------------------+
//| version   "1.00": The timer history swapping                     |
//+------------------------------------------------------------------+
#property description "Indicator for several futures splicing."
#property description "Is drawn in the latest futures window"
#property description "Uses N first symbols for drawing"
#property description "which were taken from the \"Market review\"."

#property indicator_separate_window 

Gösterge oluşturma yöntemi - DRAW_COLOR_CANDLES - renkli mum grafikler.

Renk indeksi deposu için 4 gösterge arabelleğine ve 1 arabelleğe ihtiyacınız var. Çizginin stili, gösterge - STYLE_SOLID - sürekli çizgi. Gösterge kodundaki her şeyi göster:

#property description "taken from the \"Market review\"."

//--- indicator settings || indicator settings
#property indicator_separate_window
#property indicator_buffers 5 
#property indicator_plots   1
//--- plot Bars || bars plotting
#property indicator_label1    "SYNT"
#property indicator_type1     DRAW_COLOR_CANDLES
#property indicator_style1    STYLE_SOLID
#property indicator_width1    1
//+------------------------------------------------------------------+
//|  enumeration of splicing methods                                 |
//+------------------------------------------------------------------+

"number_futures_gluing" giriş parametresini - oluşturma için gerekli enstrüman sayısını girin. Varsayılan "number_futures_gluing" değeri 2'ye eşittir:

//--- input parameters || input parameters
input int               numder_futures_gluing=2;
input ENUM_GLUING_TYPE  gluing_type=simple_addition;

Renk indeksi depolaması ve LoadHistory[] yardımcı dizisi için 4 gösterge arabelleği, 1 arabellek bildirin:

#property indicator_style1    STYLE_SOLID
#property indicator_width1    1
//--- indicator buffers || indicator buffers
double            OpenBuffer[];
double            HighBuffer[];
double            LowBuffer[];
double            CloseBuffer[];
double            ColorCandlesColors[];
double            LoadHistory[];
//+------------------------------------------------------------------+
//|  enumeration of splicing methods                                 |
//+------------------------------------------------------------------+

Tek boyutlu dinamik dizilere gösterge arabellekleri ekleyin, arabellek indekslemeyi zaman serisi gibi ayarlayın:

//--- indicator buffers mapping
//--- indicator buffers mapping
   SetIndexBuffer(0,OpenBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,HighBuffer,INDICATOR_DATA);
   SetIndexBuffer(2,LowBuffer,INDICATOR_DATA);
   SetIndexBuffer(3,CloseBuffer,INDICATOR_DATA);
   SetIndexBuffer(4,ColorCandlesColors,INDICATOR_COLOR_INDEX);
   SetIndexBuffer(5,LoadHistory,INDICATOR_CALCULATIONS);
//--- set buffer indexing as timeseries
//--- set buffer indexing as in timeseries
   ArraySetAsSeries(OpenBuffer,true);
   ArraySetAsSeries(HighBuffer,true);
   ArraySetAsSeries(LowBuffer,true);
   ArraySetAsSeries(CloseBuffer,true);
   ArraySetAsSeries(ColorCandlesColors,true);
//---
   return(INIT_SUCCEEDED);

"Veri penceresi"nde gösterge serisinin adını ("Açık", "Yüksek", "Düşük" ve "Kapat") görüntülemek için s_symbol değişkenine ihtiyacınız vardır:

input int               numder_futures_gluing=2;
input ENUM_GLUING_TYPE  gluing_type=simple_addition;
//--- symbol name
string s_symbol;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

Göstergeyi etkinleştirmek için shft_array değişkenine ve iki good_history ve indicator_rendered bayrağına ihtiyacınız var:

input ENUM_GLUING_TYPE  gluing_type=simple_addition;
//--- symbol name
string   s_symbol;
int      shift_array=0;
bool     good_history=false;        //history is not prepared||history not prepared
bool     indicator_rendered=false;  // indicator is not drawn
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+

Ardından göstergeyi ayarlayın ve arabellek renk indeksini seçilen renge bağlayın:

   ArraySetAsSeries(CloseBuffer,true);
   ArraySetAsSeries(ColorCandlesColors,true);
//--- set accuracy || accuracy of the indicator values 
   IndicatorSetInteger(INDICATOR_DIGITS,0);
//--- set drawing line empty value || empty value of the drawing line 
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0);
//--- set labels for the line || displayed name in the DataWindow
   PlotIndexSetString(0,PLOT_LABEL,s_symbol+" Open;"+s_symbol+" High;"+s_symbol+" Low;"+s_symbol+" Close");
   IndicatorSetString(INDICATOR_SHORTNAME,"SYNT");
//--- set number of colors in color buffer || number of colors in the buffer
   PlotIndexSetInteger(0,PLOT_COLOR_INDEXES,9);
//--- set line color || set the line color
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,0,clrBlue);
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,1,clrOrange);
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,2,clrRed);
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,3,clrGreen);
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,4,clrPink);
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,5,clrIndigo);
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,6,clrPaleVioletRed);
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,7,clrDarkViolet);
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,8,clrDimGray);
//---
   return(INIT_SUCCEEDED);

OnInit() işlevine 3 saniye aralıklarla zamanlayıcının başlatılmasını ve rasgele sayı üreteciyi ekleyin:

   PlotIndexSetInteger(0,PLOT_LINE_COLOR,7,clrDarkViolet);
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,8,clrDimGray);
//---
   EventSetTimer(3);
//--- random number generator initializor
   MathSrand(GetTickCount());
//---
   return(INIT_SUCCEEDED);

Birleştirmeyi işlemek için en az iki sembol gereklidir.

OnCalculate() işlevinde birleştirme için enstrüman sayısını kontrol edin:

                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//--- checking the number of instruments || checking the number of instruments
   if(numder_futures_gluing<=1)
     {
      //--- create the message line
      string comm=StringFormat("For the indicator choose not less than %d symbols",numder_futures_gluing);
      //--- display the message in comment in the chart main window
      Comment(comm);
      return(0);
     }
//--- return value of prev_calculated for next call
   return(rates_total);

Birleştirme için sembol sayısını kontrol ettikten sonra, göstergenin hali hazırda çizilip çizilmediğini kontrol edersiniz. Gösterge çizilmişse, OnCalculate() işlevinden çıkabilirsiniz:

      Comment(comm);
      return(0);
     }
   if(indicator_rendered==true) return(rates_total);
//--- return value of prev_calculated for next call
   return(rates_total);

"SYNT" göstergesi esas olarak gün çubukları geliştirme eğilimini analiz etmek için kullanıldığından, her bir fiyat adımında yeniden hesaplama yapmaya gerek olmadığını düşünüyorum. Her fiyat adımında, "SYNT" göstergesi hesaplaması yapılmayacaktır.

Dahası, göstergeyi yalnızca aşağıdaki durumlarda hesaplamanız gerekir:

  • gösterge ilk kez başlatıldıysa;
  • tarih değiştiyse (örneğin, eklemeler vardı).
   if(indicator_rendered==true) return(rates_total);
//--- if calculations were started the first time
//--- or if we need to calculate the indicator for two or more bars (changes in history)
//--- remember, that the "0" bar - is the left-most
   if(prev_calculated==0 || rates_total>prev_calculated+1)
     {
     }
//--- return value of prev_calculated for next call
   return(rates_total);


Zorunlu gösterge arabelleği başlatma

"SYNT" göstergesi arabellekleri bağlı dinamik dizilerdir.

Gösterge ilk kez başlatıldığında, arabellekler zorla başlatılır. OnCalculate() içindeki başlatma ile devam edin. Neden bunu OnInit'de değil de OnCalculate()'de gerçekleştirmeniz gerekiyor? Açıklama aşağıdaki resimde:

Şek. 11. OnCalculate() içindeki dizi başlatma

Şekil 11'de görebileceğiniz gibi, OnCalculate() olayı her durumda gerçekleşecektir, oysa grafik güncellemesini "Update" komutu aracılığıyla başlattığınızda OnInit() etkinleştirilir. Bu nedenle, dizilerin başlatılması OnCalculate() içinde gerçekleştirilecektir:

//--- remember, that the "0" bar - is the left-most
   if(prev_calculated==0 || rates_total>prev_calculated+1)
     {
      //--- arrays initialization
      ArrayInitialize(OpenBuffer,0);
      ArrayInitialize(HighBuffer,0);
      ArrayInitialize(LowBuffer,0);
      ArrayInitialize(CloseBuffer,0);
     }
//--- return value of prev_calculated for next call
   return(rates_total);

ArrayInitialize() işlevi, gösterge arabelleğini başlatır. Bu durumda başlatma sıfırları gösterir.

Arabellek göstergesini EMPTY_VALUE ile başlatmaya çalışırsanız "SYNT" üzerindeki göstergeleri birleştiremezsiniz.


Basit ekleme algoritması

Dib. 12. Algoritmo del añadido simple

Şek. 12. Basit Ekleme Algoritması

 

Resimdeki tarihler UX-9.13, UX-12.13 ve UX-3.14 vadeli işlem dolaşımlarının başlangıç ve bitiş tarihleridir. Bu veriler tabloda sunulmaktadır:

SembolDolaşım başlarDolaşım biter
UX-9.132013.03.152013.09.16
UX-12.132013.06.172013.12.16
UX-3.142013.09.162014.03.17

 

Şekil 10'da 2013.12.25 tarihi - gerçek bir takvim tarihidir. UX-3.14 sembolü hala geçerlidir.

SimpleAddition işlevinde "Basit ekleme" birleştirme yöntemi uygulanacaktır:

//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---
  }
//+------------------------------------------------------------------+
//| Simple addition                                                  |
//| Simple addition. Add in the indicator array                      |
//| sibmUP symbol                                                    |
//+------------------------------------------------------------------+
bool SimpleAddition(string simbUP,string simbDOWN,ENUM_TIMEFRAMES period,int Color)
  {
  }
//+------------------------------------------------------------------+

simbUP yukarı vadeli işlemlerdir, simbDOWN aşağı vadeli işlemlerdir, ikisi de "Piyasa incelemesi" penceresinde bulunur. Renk - vadeli işlemleri çizmek için kullanılan renk. 

SimpleAddition() işlevinin tam kodu aşağıda verilmiştir:

//+------------------------------------------------------------------+
//| Simple addition                                                  |
//| Simple addition. Add in the indicator array                      |
//| sibmUP symbol                                                    |
//+------------------------------------------------------------------+
bool SimpleAddition(string simbUP,string simbDOWN,ENUM_TIMEFRAMES period,int Color)//////
  {
   datetime expiration_time_UP;     // simbUP symbol expiration date
   datetime expiration_time_DOWN;   // simbDOWN expiration date

   expiration_time_UP=int(SymbolInfoInteger(simbUP,SYMBOL_EXPIRATION_TIME));
   if(expiration_time_UP>TimeLocal())
     {
      expiration_time_UP=TimeLocal();
     }
   if(simbDOWN!="")
     {
      expiration_time_DOWN=int(SymbolInfoInteger(simbDOWN,SYMBOL_EXPIRATION_TIME));
     }
   else
     {
      expiration_time_DOWN=int(SymbolInfoInteger(simbUP,SYMBOL_START_TIME));
     }
//--- Open, High, Low and Close prices will be copied in the rates[] array 
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=0;           //--- copied number
   copied=CopyRates(simbUP,period,expiration_time_DOWN,expiration_time_UP,rates);
   if(copied>0)
     {
      for(int j=shift_array;j<shift_array+copied;j++)
        {
         //--- write prices in buffers
         OpenBuffer[j]=rates[j-shift_array].open;
         HighBuffer[j]=rates[j-shift_array].high;
         LowBuffer[j]=rates[j-shift_array].low;
         CloseBuffer[j]=rates[j-shift_array].close;
         ColorCandlesColors[j]=Color;
        }
      shift_array=shift_array+copied;
      indicator_rendered=true;
      ChartRedraw();
     }
   else
     {
      Print("Unable to get the symbol history data",simbUP);
      indicator_rendered=false;
      return(false);
     }
//---  Simple addition end
   return(true);
  }
//+------------------------------------------------------------------+


Kaydırma algoritması ile ekleme


Dib. 13. Algoritmo de pegado - añadido con desplazamiento

Şek. 13. Kaydırma ekleme algoritması  ile ekleme

Bu algoritmada birleştirme, basit eklemeye kıyasla, sembol kapanmadan 10 gün önce başlar. "Kaydırma ile ekleme" birleştirme yöntemi AdditionWithShift() işlevinde işlenir:

//--- Simple addition end
   return(true);
  }
//+------------------------------------------------------------------+
//| Addition With Shift                                              |
//| Addition with Shift. Add in the indicator array only             |
//| sibmUP symbol                                                    |
//+------------------------------------------------------------------+
bool AdditionWithShift(string simbUP,string simbDOWN,ENUM_TIMEFRAMES period,int Color)
  {
//--- 
   return(true);
  }
//+------------------------------------------------------------------+

AdditionWithShift() ve SimpleAddition() işlevleri arasındaki fark iki satırdadır - tarihlerden 10 gün çıkarırsınız:

   .
   .
   .
   expiration_time_UP=int(SymbolInfoInteger(simbUP,SYMBOL_EXPIRATION_TIME))-86400*10;
   .
   .
   .
   expiration_time_DOWN=int(SymbolInfoInteger(simbDOWN,SYMBOL_EXPIRATION_TIME))-86400*10;
   .
   .
   .

Kodlardaki ufak farklılıktan dolayı AdditionWithShift() işlevinin tam kodunu göstermeyeceğim, kodu makalenin gösterge dosyasında bulabilirsiniz.

AdditionWithShift() ve SimpleAddition() işlevleri arasındaki bu kadar küçük farka rağmen, bunları tek bir evrensel işlev yapmak için birleştirmemeniz daha iyidir (algoritmada daha fazla değişiklik olması veya örneğin testlerin başlatılması durumunda).


Sembol geçmişi ön yüklemesi

CheckLoadHistory() işlevi, tüm sembol geçmişini yardımcı arabelleğe tmp_rates kopyalar.

Kopyalama işlemi başarılı olursa good_history bayrağına true değeri atanır; bu, göstergeyi çizmeye başlayabileceğiniz anlamına gelir:

//--- Addition With Shift end
   return(true);
  }
//+------------------------------------------------------------------+
//| Request to receive all history from a trade server               |
//| Request to recieve all history from a trade server               |
//+------------------------------------------------------------------+
bool CheckLoadHistory(string symbol,ENUM_TIMEFRAMES period)
  {
   MqlRates tmp_rates[];      // the Open, High, Low and Close prices will be copied in the rates[]array 
   datetime start_time;       // start time of the instrument trades
   datetime expiration_time;  // expiration time of the instrument trade
   start_time=int(SymbolInfoInteger(symbol,SYMBOL_START_TIME));
   expiration_time=int(SymbolInfoInteger(symbol,SYMBOL_EXPIRATION_TIME));
   if(CopyRates(symbol,period,start_time,expiration_time,tmp_rates)>0)
     {
      good_history=true;
     }
   else
     {
      good_history=false;
     }
//--- 
   return(true);
  }
//+------------------------------------------------------------------+

Tüm sembol geçmişini kopyalayabilirsiniz çünkü vadeli işlem ömrü çok kısadır ve tüm geçmiş kopyalama fazla yer kaplamaz.


OnTimer - göstergenin ana işlevi

Artık iki birleştirme yöntemi için koda ve geçmiş yükleme koduna sahipsiniz, böylece OnTimer() işlevini değiştirebilirsiniz:

//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   if(indicator_rendered==true) return;
   if(good_history==true)
     {
      int t=0;       // color || color
      int number;
      switch(gluing_type)
        {
         case simple_addition:
            for(int n=0;n<numder_futures_gluing;n++)
              {
               //--- get the random number
               number=MathRand();
               //--- get the color index as the modulo
               t=number%(PlotIndexGetInteger(0,PLOT_COLOR_INDEXES)-1);
               SimpleAddition(SymbolName(n,true),SymbolName(n+1,true),PERIOD_D1,t);
              }
            break;
         case addition_with_shift:
            for(int n=0;n<numder_futures_gluing;n++)
              {
               //--- get random number
               number=MathRand();
               //--- get the color index as the modulo
               t=number%(PlotIndexGetInteger(0,PLOT_COLOR_INDEXES)-1);
               AdditionWithShift(SymbolName(n,true),SymbolName(n+1,true),PERIOD_D1,t);
              }
            break;
        }
     }
   else
     {
      for(int n=0;n<numder_futures_gluing;n++)
        {
         CheckLoadHistory(SymbolName(n,true),PERIOD_D1);
        }
     }
  }
//+------------------------------------------------------------------+

Gösterge oluşturulur. Derleyip grafiğe ekleyebilirsiniz. Kapalı alım satım sembolünü seçmek ve H1 dönemini ayarlamak daha iyidir.


"SYNT" göstergesinin ilk çıkışı

Farklı birleştirme yöntemlerinin iki "SYNT" gösterge şablonunu grafiğe ekledikten sonra, şu yöntemleri karşılaştırabilirsiniz:

  Şek. 14. İki vadeli işlem birleştirme karşılaştırması yöntemi


Göstergeleri birleştirme imkanı (standart ve özel)

Özel göstergeler, OnCalculate ilk çağrı ve "SYNT" göstergesiyle birleştirilebilir:

int OnCalculate (const int rates_total,      // size of the array price[]
                 const int prev_calculated,  // calculated bars during the previous call
                 const int begin,            // tangible data starting point
                 const double& price[]       // calculation array
   );

"Gezgin" penceresinde "Özel göstergeler" listesini açın. Ardından "Örnekler" listesini açın, göstergeyi seçin ve "SYNT" içine yerleştirin. "Parameters" sekmesinde, açılır listeden "Önceki gösterge verileri" öğesini seçin. 

"SYNT" göstergesine ekleyebileceğiniz göstergelerin listesi aşağıdadır, bunlar "SYNT" üzerinde hatasız olarak başlatılır:

Ekli Özel Hareketli Ortalama göstergesiyle üç vadeli işlemi birleştiren "SYNT" göstergesi:

Şek. 15. Üç sembolü yapıştırma örneği

Şek. 15. Birleştirilmiş üç sembol örneği


Sonuç

Günlük zaman dilimlerinde açılan eski grafik sembollerinin davranışını analiz etmek daha kolaydır. Teknik göstergelerin sayısı sınırlı olsa da, bu yöntem sürekli vadeli işlemlerde fiyat davranışının izlenmesine yardımcı olur.


MetaQuotes Ltd tarafından Rusçadan çevrilmiştir.
Orijinal makale: https://www.mql5.com/ru/articles/802

Ekli dosyalar |
synt.mq5 (24.66 KB)
Gecikmesiz Dijital Filtreler Oluşturma Gecikmesiz Dijital Filtreler Oluşturma
Makale, akış verilerinde yararlı bir sinyal (eğilim) belirleme yaklaşımlarından birini açıklamaktadır. Piyasa kotasyonlarına uygulanan küçük filtreleme (düzgünleştirme) testleri, son çubuklarda yeniden çizilmeyen gecikmesiz dijital filtreler (göstergeler) oluşturma potansiyelini gösterir.
Bir MQL5 Expert Advisor'dan GSM Modem ile Çalışma Bir MQL5 Expert Advisor'dan GSM Modem ile Çalışma
Şu anda bir alım satım hesabının rahat bir şekilde uzaktan izlenmesi için makul sayıda araç var: mobil terminaller, push bildirimleri, ICQ ile çalışma. Ama hepsi internet bağlantısı gerektiriyor. Bu makale, mobil İnternet olmadığında bile çağrılar ve metin mesajları yoluyla alım satım terminalinizle iletişim halinde kalmanızı sağlayacak bir Expert Advisor oluşturma sürecini açıklamaktadır.
Öğretici video: MetaTrader Sinyalleri Hizmeti Öğretici video: MetaTrader Sinyalleri Hizmeti
Sadece 15 dakikada bu eğitim videosu MetaTrader Sinyalleri Hizmetinin ne olduğunu açıklar ve alım satım sinyallerine nasıl abone olunacağını ve hizmetimizde nasıl sinyal sağlayıcı olunacağını ayrıntılı olarak gösterir. Bu öğreticiyi izleyerek herhangi bir alım satım sinyaline abone olabilir veya hizmetimizde kendi sinyallerinizi yayınlayabilir ve tanıtabilirsiniz.
Renko grafiği için gösterge Renko grafiği için gösterge
Makale, Renko grafiğinin bir örneğini ve bunun bir gösterge olarak MQL5'teki uygulamasını açıklamaktadır. Bu göstergenin modifikasyonları, onu klasik bir grafikten ayırır. Hem gösterge penceresinde hem de ana grafikte oluşturulabilir. Üstelik ZigZag göstergesi var. Grafik uygulamasının birkaç örneğini bulabilirsiniz.