English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Italiano
MQL5'te Gösterge Emisyonlarının Çizimi

MQL5'te Gösterge Emisyonlarının Çizimi

MetaTrader 5Örnekler | 10 Aralık 2021, 17:09
78 0
Sergey Pavlov
Sergey Pavlov

Giriş

Elbette, birçok yatırımcı ve alım satım stratejisi geliştiricisi şu sorularla ilgilenmektedir:

Bu soruların yanıtlarını bulmak beni piyasa araştırmasına yeni bir yaklaşım yaratmaya yöneltti: Gösterge emisyonlarının oluşturulması ve analizi. Konunun daha da netleşmesi için aşağıdaki şekillere göz atın:

Şek. 1 DCMV göstergesi emisyonu.

Şek. 2. iMA zarflarına dayalı gösterge emisyonu.

Farklı göstergelerdeki emisyonu gösterir, ancak oluşturulma prensipleri aynıdır. Her tick'ten sonra farklı renk ve şekle sahip daha fazla nokta belirir. Bulutsular, bulutlar, parçalar, çizgiler, kavisler vb. şekillerde çok sayıda küme oluştururlar. Bu şekiller, piyasa fiyatlarının hareketini etkileyen görünmez kavisleri ve güçleri tespit etmeye yardımcı olabilir. Bu emisyonların araştırılması ve analizi el falı gibi bir şeydir.

Emisyon ve Özellikleri

Emisyon, göstergenin belirli çizgilerinin kesişme noktalarında bulunan bir dizi noktadır.

Emisyonların özellikleri henüz netlik kazanmış değil; hala araştırmacıları bekliyor. Bilinen özelliklerin bir listesi şu şekildedir:

  • Aynı türdeki noktalar kümelenme eğilimindedir,
  • Emisyonun bir yönü vardır; şu andan geleceğe veya geçmişe doğru,
  • Kümeler önemlidir; yoğun kümeler fiyatı çekebilir veya tam tersine fiyatı itebilir.

Gösterge Emisyonunu Hesaplama

Bir örnekle emisyon hesaplamasının temellerini ele alalım. İki gösterge alalım - iBands ve iMA ve bunların çizgilerinin kesişimini bulalım. Bunları emisyon noktalarını çizmek için kullanacağız. Bunun için grafik nesnelerine ihtiyacımız olacak. Algoritma Expert Advisor'larda uygulanmaktadır ancak göstergelerde yapılabilmektedir.

İlk göstergeler Şek. 3'te sunulmuştur:

Şek. 3. iBands (yeşil) ve iMA (kırmızı) göstergeleri.

Emisyon noktaları oluşturmak için bir Expert Advisor'a ihtiyacımız var. Bir Expert Advisor şablonu oluşturmak için MQL5 Sihirbazını kullanmak daha iyidir.

Şek. 4. MQL5 Sihirbazını kullanarak Expert Advisor şablonu oluşturma.

//+------------------------------------------------------------------+
//|                                      Emission of Bands && MA.mq5 |
//|                                                 Copyright DC2008 |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "DC2008"
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+

İlk olarak, bazı yardımcı çizimlere ihtiyacımız var. Işınları kullanarak gösterge çizgilerine devam etmemiz gerekiyor (Şek. 5.). Bu, emisyon noktalarının hesaplanmasının ve görselleştirilmesinin doğruluğunu kontrol etmeyi sağlayacaktır. Daha sonra, bu satırları grafikten çıkaracağız.

Şek. 5. Yardımcı çizimler. Işınlar kullanarak gösterge çizgilerine devam etme.

Böylece, Grafik nesnelerini (yatay ve trend çizgileri) Expert Advisor'ın koduna ekleyelim.

input bool     H_line=true;   // flag to enable drawing of the horizontal lines
input bool     I_line=true;   // flag to enable drawing of the indicator's lines
//---
string         name;
//---- indicator buffers
double      MA[];    // array for iMA indicator 
double      BBH[];   // array for iBands indicator  - UPPER_BAND 
double      BBL[];   // array for iBands indicator - LOWER_BAND
double      BBM[];   // array for iBands indicator - BASE_LINE
datetime    T[];     // array for time coordinates
//---- handles for indicators
int         MAHandle;   // iMA indicator handle
int         BBHandle;   // iBands indicator handle
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   MAHandle=iMA(Symbol(),0,21,0,MODE_EMA,PRICE_CLOSE);
   BBHandle=iBands(Symbol(),0,144,0,2,PRICE_CLOSE);
//---
   if(H_line)     // Horizontal lines of iBands indicator
      {
         //--- iBands - UPPER_BAND
         name="Hi";
         ObjectCreate(0,name,OBJ_HLINE,0,0,0);           
         ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
         ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_DOT);
         ObjectSetInteger(0,name,OBJPROP_WIDTH,1);
         //--- iBands - LOWER_BAND
         name="Lo";
         ObjectCreate(0,name,OBJ_HLINE,0,0,0);           
         ObjectSetInteger(0,name,OBJPROP_COLOR,Blue);
         ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_DOT);
         ObjectSetInteger(0,name,OBJPROP_WIDTH,1);
         //--- iBands - BASE_LINE
         name="MIDI";
         ObjectCreate(0,name,OBJ_HLINE,0,0,0);           
         ObjectSetInteger(0,name,OBJPROP_COLOR,DarkOrange);
         ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_DOT);
         ObjectSetInteger(0,name,OBJPROP_WIDTH,1);
      }
//---
   if(I_line)     // Indicator lines
      {
         //--- iMA
         name="MA";
         ObjectCreate(0,name,OBJ_TREND,0,0,0,0);           
         ObjectSetInteger(0,name,OBJPROP_COLOR,Red);
         ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_SOLID);
         ObjectSetInteger(0,name,OBJPROP_WIDTH,2);
         ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,1);
         ObjectSetInteger(0,name,OBJPROP_RAY_LEFT,1);
         //--- iBands - UPPER_BAND
         name="BH";
         ObjectCreate(0,name,OBJ_TREND,0,0,0,0);           
         ObjectSetInteger(0,name,OBJPROP_COLOR,MediumSeaGreen);
         ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_SOLID);
         ObjectSetInteger(0,name,OBJPROP_WIDTH,1);
         ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,1);
         ObjectSetInteger(0,name,OBJPROP_RAY_LEFT,1);
         //--- iBands - LOWER_BAND
         name="BL";
         ObjectCreate(0,name,OBJ_TREND,0,0,0,0);           
         ObjectSetInteger(0,name,OBJPROP_COLOR,MediumSeaGreen);
         ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_SOLID);
         ObjectSetInteger(0,name,OBJPROP_WIDTH,1);
         ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,1);
         ObjectSetInteger(0,name,OBJPROP_RAY_LEFT,1);
         //--- iBands - BASE_LINE
         name="BM";
         ObjectCreate(0,name,OBJ_TREND,0,0,0,0);           
         ObjectSetInteger(0,name,OBJPROP_COLOR,MediumSeaGreen);
         ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_SOLID);
         ObjectSetInteger(0,name,OBJPROP_WIDTH,1);
         ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,1);
         ObjectSetInteger(0,name,OBJPROP_RAY_LEFT,1);
      }
   return(0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   //--- filling the arrays with current values
   CopyBuffer(MAHandle,0,0,2,MA);
   ArraySetAsSeries(MA,true);  
   CopyBuffer(BBHandle,0,0,2,BBM);
   ArraySetAsSeries(BBM,true);  
   CopyBuffer(BBHandle,1,0,2,BBH);
   ArraySetAsSeries(BBH,true);  
   CopyBuffer(BBHandle,2,0,2,BBL);
   ArraySetAsSeries(BBL,true);
   CopyTime(Symbol(),0,0,10,T);
   ArraySetAsSeries(T,true);
     
   //--- Horizontal lines of iBands indicator (correction)
   if(H_line)
      {
      name="Hi";
      ObjectSetDouble(0,name,OBJPROP_PRICE,BBH[0]);
      name="Lo";
      ObjectSetDouble(0,name,OBJPROP_PRICE,BBL[0]);
      name="MIDI";
      ObjectSetDouble(0,name,OBJPROP_PRICE,BBM[0]);
      }
   //--- Indicator's lines (correction)
   if(I_line)
      {
      name="MA";  //--- iMA
      ObjectSetInteger(0,name,OBJPROP_TIME,T[1]);
      ObjectSetDouble(0,name,OBJPROP_PRICE,MA[1]);
      ObjectSetInteger(0,name,OBJPROP_TIME,1,T[0]);
      ObjectSetDouble(0,name,OBJPROP_PRICE,1,MA[0]);
      name="BH";  //--- iBands - UPPER_BAND
      ObjectSetInteger(0,name,OBJPROP_TIME,T[1]);
      ObjectSetDouble(0,name,OBJPROP_PRICE,BBH[1]);
      ObjectSetInteger(0,name,OBJPROP_TIME,1,T[0]);
      ObjectSetDouble(0,name,OBJPROP_PRICE,1,BBH[0]);
      name="BL";  //--- iBands - LOWER_BAND
      ObjectSetInteger(0,name,OBJPROP_TIME,T[1]);
      ObjectSetDouble(0,name,OBJPROP_PRICE,BBL[1]);
      ObjectSetInteger(0,name,OBJPROP_TIME,1,T[0]);
      ObjectSetDouble(0,name,OBJPROP_PRICE,1,BBL[0]);
      name="BM";  //--- iBands - BASE_LINE
      ObjectSetInteger(0,name,OBJPROP_TIME,T[1]);
      ObjectSetDouble(0,name,OBJPROP_PRICE,BBM[1]);
      ObjectSetInteger(0,name,OBJPROP_TIME,1,T[0]);
      ObjectSetDouble(0,name,OBJPROP_PRICE,1,BBM[0]);
      }
  }
//+------------------------------------------------------------------+
Emisyon geçmişe ve geleceğe doğru devam ettiği için, trend çizgisi özellikleri şu şekilde olmalıdır:
  • OBJPROP_RAY_LEFT = 1,  (Işın sola gider),
  • OBJPROP_RAY_RIGHT = 1, (Işın sağa gider).

Sonuç olarak, ek çizgiler içeren grafik Şekil 6'da gösterildiği gibi görünecektir.

Hazırlık aşaması tamamlandı, şimdi emisyona geçelim. Aşağıdaki çizgilerin kesiştiği noktada ilk nokta dizisini oluşturacağız:

  • "MA" (iMA) çizgisi ile "BH" çizgisi arasında (iBands = UPPER_BAND),
  • "MA" (iMA) çizgisi ile "BL" çizgisi arasında (iBands = LOWER_BAND),
  • "MA" (iMA) çizgisi ile "BM" çizgisi arasında (iBands = BASE_BAND).

Şek. 6. Yardımcı çizimler. Düz çizgiler kullanarak gösterge çizgilerine devam etme.

Şimdi sıra kesişim koordinatlarını hesaplamaya ve emisyon noktalarını çizmeye geldi. İşlevi oluşturalım:

void Draw_Point(
                string   P_name,     // Object name (OBJ_ARROW)
                double   P_y1,       // Y-coordinate of the 1st line at the [1] bar
                double   P_y0,       // Y-coordinate of the 1st line at the [0] bar
                double   P_yy1,      // Y-coordinate of the 2nd line at the [1] bar 
                double   P_yy0,      // Y-coordinate of the 2nd line at the [0] bar
                char     P_code1,    // Char at the right side of the [0] bar
                char     P_code2,    // Char at the left side of the [0] bar
                color    P_color1,   // Color of point at the right side of the [0] bar
                color    P_color2    // color of point at the left side of the [0] bar
                )
  {
   double   P,X;
   datetime P_time;
   if(MathAbs((P_yy0-P_yy1)-(P_y0-P_y1))>0)
     {
      P=P_y1+(P_y0-P_y1)*(P_y1-P_yy1)/((P_yy0-P_yy1)-(P_y0-P_y1));
      X=(P_y1-P_yy1)/((P_yy0-P_yy1)-(P_y0-P_y1));
      if(X>draw_period)
        {
         P_time=T[0]+(int)(X*PeriodSeconds());
         ObjectCreate(0,P_name,OBJ_ARROW,0,0,0);
         ObjectSetDouble(0,P_name,OBJPROP_PRICE,P);
         ObjectSetInteger(0,P_name,OBJPROP_TIME,P_time);
         ObjectSetInteger(0,P_name,OBJPROP_WIDTH,0);
         ObjectSetInteger(0,P_name,OBJPROP_ARROWCODE,P_code1);
         ObjectSetInteger(0,P_name,OBJPROP_COLOR,P_color1);
         if(X<0)
           {
            ObjectSetInteger(0,P_name,OBJPROP_ARROWCODE,P_code2);
            ObjectSetInteger(0,P_name,OBJPROP_COLOR,P_color2);
           }
        }
     }
  }

OnTick işlevine aşağıdaki kod satırlarını ekleyin:

//+------------------------------------------------------------------+
   int GTC=GetTickCount();                                                    
//+------------------------------------------------------------------+
   name="H"+(string)GTC;
   Draw_Point(name,BBH[1],BBH[0],MA[1],MA[0],170,178,Red,Red);
   name="L"+(string)GTC;
   Draw_Point(name,BBL[1],BBL[0],MA[1],MA[0],170,178,Blue,Blue);
   name="M"+(string)GTC;
   Draw_Point(name,BBM[1],BBM[0],MA[1],MA[0],170,178,Green,Green);
//---
   ChartRedraw(0);

Şimdi Expert Advisor'ı çalıştıralım ve sonuca bakalım (Şekil 7.).

Bu iyi, ancak dikkate almadığımız başka kesişme durumları da var. Örneğin, iBands göstergesinin birbiriyle kesişen ve genel resmi tamamlayabilen üç çizgisi vardır.

Şek. 7. iMA ve iBands göstergelerinin emisyonu (3 kesişme noktası).

Şimdi, hesaplanan emisyona, aşağıdaki çizgiler arasındaki kesişme noktasına başka bir nokta serisi eklemeye çalışalım:
  • "BH" çizgisi (iBands = UPPER_BAND) ile "BL" çizgisi arasına (iBands = LOWER_BAND);
  • "BH" çizgisi (iBands = UPPER_BAND) ile "BM" çizgisi arasına (iBands = BASE_BAND);
  • "BL" çizgisi (iBands = LOWER_BAND) ile "BM" çizgisi arasına (iBands = BASE_BAND).

Bu kesişim noktalarından dolayı 3 puan alacağız, ancak hepsinin koordinatları aynı olacak. Bu nedenle, "BH" çizgisi ile "BL" çizgisi arasında tek bir kesişim noktası kullanmak yeterlidir.

Bu kod satırlarını Expert Advisor'a ekleyip sonuca bir göz atalım (Şek. 8.).

   name="B"+(string)GTC;
   Draw_Point(name,BBH[1],BBH[0],BBL[1],BBL[0],170,178,Magenta,Magenta);

Şek. 8. iMA ve iBands göstergelerinin emisyonu (4 kesişim noktası).

Emisyonu aldık, ancak içimde önemli bir şeyi atladığımıza dair bir his var. Peki neyi atladık?

Neden yalnızca bu tür giriş parametrelerini kullandık? Bunları değiştirirsek ne elde ederiz? Herhangi bir şekilde, bunların emisyonlardaki rolleri nedir?

Elimizdeki emisyon, göstergenin giriş parametrelerinden kaynaklanan tek bir frekansa karşılık geliyor. Tam çoklu frekans spektrumunu hesaplamak için aynı hesaplamaları diğer frekanslar için de yapmak gerekir. Örnek olarak, olası emisyon spektrumuna ilişkin bendeki sürümü ele alalım:

//---- handles for indicators
int         MAHandle[5];   // handles array of iMA indicators
int         BBHandle[7];   // handles array of iBands indicator
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   MAHandle[0]=iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE);
   MAHandle[1]=iMA(NULL,0,34,0,MODE_EMA,PRICE_CLOSE);
   MAHandle[2]=iMA(NULL,0,55,0,MODE_EMA,PRICE_CLOSE);
   MAHandle[3]=iMA(NULL,0,89,0,MODE_EMA,PRICE_CLOSE);
   MAHandle[4]=iMA(NULL,0,144,0,MODE_EMA,PRICE_CLOSE);
//---
   BBHandle[0]=iBands(NULL,0,55,0,2,PRICE_CLOSE);
   BBHandle[1]=iBands(NULL,0,89,0,2,PRICE_CLOSE);
   BBHandle[2]=iBands(NULL,0,144,0,2,PRICE_CLOSE);
   BBHandle[3]=iBands(NULL,0,233,0,2,PRICE_CLOSE);
   BBHandle[4]=iBands(NULL,0,377,0,2,PRICE_CLOSE);
   BBHandle[5]=iBands(NULL,0,610,0,2,PRICE_CLOSE);
   BBHandle[6]=iBands(NULL,0,987,0,2,PRICE_CLOSE);
//---
   return(0);
  }

Tüm olası kombinasyonları göz önünde bulundurmak için aşağıdaki kodu Expert Advisor'a ekleyelim:

//+------------------------------------------------------------------+
   CopyTime(NULL,0,0,10,T);
   ArraySetAsSeries(T,true);
   int GTC=GetTickCount();
//+------------------------------------------------------------------+
   int iMax=ArraySize(BBHandle)-1;
   int jMax=ArraySize(MAHandle)-1;
   for(int i=0; i<iMax; i++)
     {
      for(int j=0; j<jMax; j++)
        {
         //--- filling the arrays with current values
         CopyBuffer(MAHandle[j],0,0,2,MA);
         ArraySetAsSeries(MA,true);
         CopyBuffer(BBHandle[i],0,0,2,BBM);
         ArraySetAsSeries(BBM,true);
         CopyBuffer(BBHandle[i],1,0,2,BBH);
         ArraySetAsSeries(BBH,true);
         CopyBuffer(BBHandle[i],2,0,2,BBL);
         ArraySetAsSeries(BBL,true);

         name="H"+(string)GTC+(string)i+(string)j;
         Draw_Point(name,BBH[1],BBH[0],MA[1],MA[0],250,158,Aqua,Aqua);
         name="L"+(string)GTC+(string)i+(string)j;
         Draw_Point(name,BBL[1],BBL[0],MA[1],MA[0],250,158,Blue,Blue);
         name="M"+(string)GTC+(string)i+(string)j;
         Draw_Point(name,BBM[1],BBM[0],MA[1],MA[0],250,158,Green,Green);
         name="B"+(string)GTC+(string)i+(string)j;
         Draw_Point(name,BBH[1],BBH[0],BBL[1],BBL[0],250,158,Magenta,Magenta);
        }
     }
//---
   ChartRedraw(0);

Emisyon spektrumunda ne kadar çok frekans yer alırsa grafikteki resim o kadar iyi olacaktır, ancak bunu kötüye kullanmamalısınız; bu, bilgisayar kaynaklarını tüketmenin ve kaosu grafiğe almanın en basit yoludur. Frekans sayısı deneysel olarak belirlenebilir. Grafiklerin daha iyi algılanabilmesi için çizim stiline özellikle dikkat etmeliyiz.

Şek. 9. Çoklu frekans emisyon spektrumu.

Emisyonun Çizim Stilleri

MQL5 dili, emisyon çizimleri için çok çeşitli Web Renkleri ve Windings karakterleri sağlar. Bununla ilgili düşüncelerimi paylaşmak isterim:  
  1. Her kişinin kendi grafik görüntü algısı vardır; bu nedenle emisyonları özelleştirmek için biraz zamana ihtiyacınız olacak.
  2. Şek. 9'daki "kaos" görüntülerdeki herhangi bir düzenin veya kalıbın tanınmasına izin vermez. Bu, bir kötü çizim örneğidir.
  3. Gökkuşağı spektrumundaki komşu renkleri kullanmaya çalışın.
  4. Geçmiş ([0] çubuğunun sol tarafından) ve gelecek ([0] çubuğunun sağ tarafından) için karakter kodları farklı olmalıdır.
  5. Renklerin ve noktaların şekillerinin başarılı kombinasyonu, emisyonu şaheserlere dönüştürebilir; bu, yalnızca alım satım işleminde yardımcı olmayacak, aynı zamanda gözlerinizi de memnun edecektir.
Örnek olarak, emisyon için çizim stili sürümüm şu şekildedir (bkz. Şekil 10-17):
         name="H"+(string)GTC+(string)i+(string)j;
         Draw_Point(name,BBH[1],BBH[0],MA[1],MA[0],250,158,Aqua,Aqua);
         name="L"+(string)GTC+(string)i+(string)j;
         Draw_Point(name,BBL[1],BBL[0],MA[1],MA[0],250,158,Blue,Blue);
         name="M"+(string)GTC+(string)i+(string)j;
         Draw_Point(name,BBM[1],BBM[0],MA[1],MA[0],250,158,Magenta,Magenta);
         name="B"+(string)GTC+(string)i+(string)j;
         Draw_Point(name,BBH[1],BBH[0],BBL[1],BBL[0],250,158,DarkOrchid,DarkOrchid);

iMA ve iBands Emisyon Galerisi

Bu emisyonları içeren görüntüler bu bölümde sunulmaktadır.

 

Şek. 10.

 

Şek. 11

Şek. 12.

Şek. 13.

Şek. 14.

 

Şek. 15.

Şek. 16.

 

Şek. 17.

Emisyon Analizi

Emisyonların analizi ayrı bir görevdir. En yararlı şey dinamiklerine gerçek zamanlı olarak bakmaktır; birçok etkiyi ve kalıbı anlamanın en iyi yolu budur.

Fiyat düzenlemelerine dikkat edin; görünüşe göre emisyon hedef fiyatı "biliyor". Ayrıca destek, direnç ve denge fiyat düzeylerini de görebilirsiniz.

Sonuç

  1. Göstergelerin emisyonları, piyasa araştırması ve analizinde yeni yaklaşımlar arayan yatırımcılar ve alım satım sistemi geliştiricileri için ilginç olabilir.
  2. Bir tanıtıcı makale olarak bu, hazır çözümleri içermemektedir. Ancak, emisyon hesaplaması için sunulan teknoloji, diğer göstergelere veya bunların kombinasyonlarına uygulanabilir.
  3. Bu makaleyi hazırlarken, yanıtlara kıyasla daha fazla soru topladım. Bunlardan bazıları şu şekildedir: Emisyon çizimi algoritması nasıl optimize edilir? Emisyon yapısında emisyon spektrumu özelliklerinin rolü nedir? Otomatik alım satımda emisyonlar nasıl kullanılır?

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

WCF Hizmetlerini Kullanarak МetaTrader 5'ten .NET Uygulamalarına Fiyat Tekliflerini Dışa Aktarma WCF Hizmetlerini Kullanarak МetaTrader 5'ten .NET Uygulamalarına Fiyat Tekliflerini Dışa Aktarma
MetaTrader 5'ten kendi uygulamanıza fiyat tekliflerinin dışa aktarılmasını düzenlemek ister misiniz? MQL5-DLL birleşimi, bu tür çözümler oluşturmanıza olanak tanır! Bu makalede size fiyat tekliflerini MetaTrader 5'ten .NET'te yazılmış uygulamalara dışa aktarmanın yollarından biri gösterilecektir. Benim için bu platformu kullanarak fiyat tekliflerinin dışa aktarımını uygulamak daha ilginç, mantıklı ve kolaydı. Ne yazık ki, sürüm 5 hala .NET'i desteklemiyor; bu nedenle eski günlerde olduğu gibi .NET destekli win32 dll'yi ara katman olarak kullanacağız.
Göstergeler Arası Veri Değişimi: Bu Kolaydır Göstergeler Arası Veri Değişimi: Bu Kolaydır
Bir grafiğe eklenmiş göstergelerin verilerine erişim sağlayacak ve şu özelliklere sahip olacak şöyle bir ortam oluşturmak istiyoruz: Veri kopyalama olmaması, kullanmamız gerekirse mevcut yöntemlerin kodunun minimum düzeyde değiştirilmesi, MQL kodunun tercih edilebilir olması (elbette DLL kullanmak zorundayız, ancak yalnızca bir düzine C++ kodu dizesi kullanacağız). Makalede, MetaTrader terminali için diğer MQL programlarından gösterge arabelleklerine erişmek için araçlar sağlayacak bir program ortamı geliştirmek için kolay bir yöntem açıklanmaktadır.
Yeni Başlayanlar için MQL5'te Dijital Filtrelerin Pratik Uygulaması Yeni Başlayanlar için MQL5'te Dijital Filtrelerin Pratik Uygulaması
Dijital sinyal filtreleme fikri, alım satım sistemlerinin oluşturulmasıyla ilgili forum konularında kapsamlı olarak tartışıldı. Ve MQL5'te standart bir dijital filtre kodu oluşturmamak mantıksız olacaktır. Bu makalede yazar, "Yeni Başlayanlar için MQL5'te Özel Göstergeler" adlı makalesinden basit SMA gösterge kodunun daha karmaşık ve evrensel dijital filtre koduna dönüşümünü açıklamaktadır. Bu makale, mantıksal olarak önceki makalenin devamı niteliğindedir. Ayrıca koddaki metnin nasıl değiştirileceği ve programlama hatalarının nasıl düzeltileceği de anlatılmaktadır.
Veri Değişimi Nasıl Yapılır? 10 Dakikada MQL5 için bir DLL Veri Değişimi Nasıl Yapılır? 10 Dakikada MQL5 için bir DLL
Artık pek çok geliştirici basit bir DLL'nin nasıl yazılacağını ve farklı sistem bağlayıcılarının özel özelliklerinin neler olduğunu hatırlamıyor. Birkaç örnek kullanarak, basit DLL oluşturma işleminin tamamını 10 dakikada göstermeye çalışacağım ve ayrıca bağlayıcı uygulamamızın bazı teknik ayrıntılarını ele alacağım. Visual Studio'da DLL oluşturma işlemini adım adım farklı değişken türlerini (sayılar, diziler, dizeler vb.) değiştirme örnekleriyle göstereceğim. Ayrıca, istemci terminalinizi özel DLL'lerdeki çökmelerden nasıl koruyacağınızı açıklayacağım.