English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Italiano
MQL5: MetaTrader 5'te Emtia Vadeli İşlemler Ticaret Komisyonu (CFTC) Raporlarının Analizi ve İşlenmesi

MQL5: MetaTrader 5'te Emtia Vadeli İşlemler Ticaret Komisyonu (CFTC) Raporlarının Analizi ve İşlenmesi

MetaTrader 5Örnekler | 10 Aralık 2021, 17:13
87 0
Aleksey Sergan
Aleksey Sergan


Giriş

MetaQuotes Software Corp. tarafından yatırımcı araçlarından biri olarak geliştirilen MetaTrader 5 alım satım terminali, nesne yönelimli programlamayı destekleyen MQL5 programlama dilini içerir. Bir taraftan MQL5, önceki sürümü olan MQL4 ile uyumlu değildir; diğer taraftan, tam özellikli nesne yönelimli dilin birçok yeni olanağına sahiptir. Dolayısıyla, MQL4'te halihazırda becerilere sahip olan yatırımcılar, bu (aslında) yeni dili kavramak zorundadır; söz konusu yatırımcıları bu makalenin hedef kitlesi olarak görüyorum.

Bu makalede, şu sorunun çözümünü göstereceğim: Emtia Vadeli İşlemler Ticaret Komisyonu (CFTC) Raporlarının farklı verilerini alıp analiz etmeyi sağlayan yatırımcı aracının geliştirilmesi gereklidir. Bu konu Meta COT Projesi - MetaTrader 4'te CFTC Rapor Analizi için Yeni Ufuklar makalesinde zaten ele alınmıştır; bu nedenle okuyucunun kavramlara aşina olduğunu varsayacağım ve o makalede "açıklanmamış" ayrıntılara değineceğim.

Fikir şudur: Komisyon tarafından sağlanan dosyalardan ara işleme ve dönüştürme olmadan veri alınmasına olanak tanıyan tek bir gösterge geliştirmek. Ayrıca, bu, farklı amaçlar için kullanılabilir: Verileri bir gösterge olarak çizmek, diğer göstergelerde veri kaynağı olarak, otomatik analiz için script dosyalarında, Alım Satım stratejileri geliştirirken Expert Advisor'larda.


1. COT raporlarının türleri

Üç rapor türü vardır: Mevcut Eski Rapor (COT), Ek Emtia İndeksi (CIT), Mevcut Dağıtılmış Rapor (DCOT); bunların aralarındaki fark Tablo 1'de sunulmuştur.

Açıklama
Mevcut Eski Raporlar Ek Emtia İndeksi Mevcut Dağıtılmış Raporlar
Kısa adı COT CIT DCOT
 Referans başlığı
Mevcut Eski Raporlar
Ek Emtia İndeksi
Mevcut Dağıtılmış Raporlar
Son veri dosyasına referans:

deacot2010.zip

dea_cit_txt_2010.zip

fut_disagg_txt_2010.zip

Raporda sunulan yatırımcı grupları
Ticari olmayan
Ticari
Raporlanamayan
Ticari olmayan
Ticari
Raporlanamayan
İndeks Yatırımcıları
Üretici/Tüccar/İşleyici/Kullanıcı
Swap Yatırımcıları
Yönetilen Para
Diğer Raporlanabilirler
Raporlanamayan

Tablo 1. Yatırımcıların Taahhüt Raporları Türleri  

Vadeli işlem piyasalarında pozisyonlarını rapor etmesi gereken yatırımcılar, raporların sınıflandırılması ve dönemsellik prensipleri hakkında bilgiler "Trade Stocks and Commodities With the Insiders: Secrets of the COT Report" adlı kitapta ve Meta COT Projesi - MetaTrader 4'te CFTC Rapor Analizi için Yeni Ufuklar 4 başlıklı makalede bulunabilir.

Bu kaynaklarda açıklanmayan iki raporu ele alacağım. 

CIT kısaltması, İndeks Yatırımcılarının Taahhütleri anlamına gelir. Bu rapor, 2007'den itibaren yayınlanmaktadır. Mevcut CIT raporu web sayfasına  https://cftc.gov/dea/options/deaviewcit.htm adresinden ulaşılabilir. İndeks yatırımcıları, hedger'lardan ve spekülatörlerden ayrı bir gruptadır.

Ek Raporun açıklaması https://www.cftc.gov/MarketReports/CommitmentsofTraders/AbouttheCOTReports/index.htm adresinde bulunabilir. Tüm bu indeks yatırımcıları genellikle piyasalarda uzun pozisyonlar açar ve bunları sözleşmeden sözleşmeye aktarır.

2009 itibarıyla Komisyon tarafından yayınlanan Yatırımcı Raporlarının Dağıtılmış Taahhütleri'nin açıklaması açıklama notlarında bulunabilir.

Dağıtılmış COT raporu, yatırımcıları aşağıdaki dört yatırımcı kategorisine ayırarak eski COT raporlarındaki şeffaflığı artırır: Üretici/Tüccar/İşleyici/Kullanıcı, Swap Yatırımcıları, Yönetilen Para ve Diğer Raporlanabilirler.

  • Üretici/Tüccar/İşleyici/Kullanıcı. “Üretici/tüccar/işleyici/kullanıcı” ağırlıklı olarak fiziksel bir emtianın üretimi, işlenmesi, paketlenmesi veya taşınması ile uğraşan ve bu faaliyetlerle ilişkili riskleri yönetmek veya riskten korunmak için vadeli işlem piyasalarını kullanan tüzel kişidir.
  • Swap Yatırımcısı. "Swap yatırımcısı", esas olarak bir emtia için swap işlemlerini yapan ve bu swap işlemleriyle ilişkili riski yönetmek veya riskten korunmak için vadeli işlem piyasalarını kullanan tüzel kişidir. Swap yatırımcısının karşı tarafları, riskten korunma fonları gibi spekülatif yatırımcılar veya fiziksel emtiadaki işlemlerinden kaynaklanan riskleri yöneten geleneksel ticari müşteriler olabilir.
  • Yatırım Uzmanı. Bu raporun amacı doğrultusunda "yatırım uzmanı", kayıtlı emtia piyasası danışmanı (CTA), kayıtlı emtia havuzu operatörü (CPO) veya CFTC tarafından tanımlanan kayıtlı olmayan fondur. Bu yatırımcılar, müşteriler adına organize edilen vadeli işlemler alım satımını yönetmek ve yürütmekle ilgilenirler.
  • Diğer Raporlanabilirler. Diğer üç kategoriden birine girmeyen diğer her raporlanabilir yatırımcı, “diğer raporlanabilirler” kategorisine alınır.

Raporlanan enstrümanların tam listesi Ek 2'de sunulmaktadır. CIT ve DCOT raporlarında belirli bir enstrümanın varlığını yansıtan sütunlar da vardır.


2. CSV dosyalarından harici verileri kullanan bir COT göstergesi yazma

Gösterge aşağıdaki gibi çalışacaktır. Raporun türü (Tablo 1'de listelenenlerden biri), veri türü ve yatırımcı grubu, göstergenin giriş parametrelerinde tanımlanır.

Veri türü şu şekilde olabilir:

  • net uzun pozisyonlar
  • açık pozisyonda net uzun vadeli kur oranı
  • Net uzun pozisyonlar için hesaplanan Williams İndeksi
  • açık pozisyon

Olası veri türlerinin listesi tam değil; kullandığım en temel verileri içerecek şekilde kolaylıkla genişletilebilir. Mevcut sembol için, veri dosyalarından belirtilen veriler talep edilir (bunların indirilmesi ve paketlerinin açılması aşağıda açıklanmıştır). Veri erişimi ve bu dosyalardan indirmek için CCFTCReport sınıfını kullanacağız.

Gösterge aşağıdaki yapıya sahiptir:

2.1. Sabitler

Sabitleri tanımlamak için enum veri türü kullanılır. Gösterge tarafından desteklenen rapor türleri şunlardır:
enum cot_type_report // type of report
{ 
  COT, DCOT, CIT
};

Yatırımcı grupları:

enum cot_type_traders // types of traders
{
  noncommercial,      // Non-commercial 
  commercial,         // Commercial
  nonreportable,      // Non-reportable
  index,              // Index traders
  producer,           // Producers
  swapdealers,        // Swap dealers
  managedmoney,       // Managed money
  otherreportables    // Other reportable traders 
};

Göstergede kullanılabilecek veri türleri:

enum cot_type_data    // type of COT data
{   
  netlongs,           // net longs
  netlongsrate,       // net longs rate in the open interest
  willams_index,      // Williams index
  openinterest        // Open interest
}; 

2.2. Sınıflar

Farklı nesneleri tek bir değişken içinde saklamak için yapıları ve sınıfları kullanmak mümkündür. Ancak, bir dize türünde dinamik diziler veya değerler içeriyorlarsa, iki yapı türü değişkeni atamak mümkün değildir. Bu nedenle COT kaydını depolamak için yapı yerine sınıfı ve veri atama yöntemini kullandık.

class cot_record                                // class for data record of COT report
  {
public:
   datetime          COT_DATE;                  //date 
   double            COT_OPENINTEREST;          //open interest 
   double            COT_LONGNONCOM;            //longs of non-commercial traders
   double            COT_SHORTNONCOM;           //shorts of non-commercial traders 
   double            COT_LONGCOM;               //longs of commercial traders
   double            COT_SHORTCOM;              //shorts of commercial traders 
   double            COT_LONGNONREPORTABLE;     //longs of the other non-reportable traders
   double            COT_SHORTNONREPORTABLE;    //shorts of the other non-reportable traders
   double            COT_LONGINDEX;             //longs of index traders
   double            COT_SHORTINDEX;            //shorts of index traders
   double            COT_LONGPRODUCER;          //longs of Producer/Merchant/Processor/User
   double            COT_SHORTPRODUCER;         //shorts of Producer/Merchant/Processor/User
   double            COT_LONGSWAPDEALERS;       //longs of Swap Dealers
   double            COT_SHORTSWAPDEALERS;      //shorts of Swap Dealers
   double            COT_LONGMANAGEDMONEY;      //longs of Managed Money traders
   double            COT_SHORTMANAGEDMONEY;     //shorts of the Managed Money traders
   double            COT_LONGOTHERREPORTABLES;  //Other Reportables
   double            COT_SHORTOTHERREPORTABLES;
   string            COT_ID;                    //instrument identifier
   string            COT_NAME;                  //instrument (symbol) name 

   void copyvar(const cot_record &from)         // copying contents (values of variables) from one class to another
     {
      COT_ID                    = from.COT_ID;
      COT_NAME                  = from.COT_NAME;
      COT_DATE                  = from.COT_DATE;
      COT_OPENINTEREST          = from.COT_OPENINTEREST;
      COT_LONGNONCOM            = from.COT_LONGNONCOM;
      COT_SHORTNONCOM           = from.COT_SHORTNONCOM;
      COT_LONGCOM               = from.COT_LONGCOM;
      COT_SHORTCOM              = from.COT_SHORTCOM;
      COT_LONGNONREPORTABLE     = from.COT_LONGNONREPORTABLE;
      COT_SHORTNONREPORTABLE    = from.COT_SHORTNONREPORTABLE;
      COT_LONGINDEX             = from.COT_LONGINDEX;
      COT_SHORTINDEX            = from.COT_SHORTINDEX;
      COT_LONGPRODUCER          = from.COT_LONGPRODUCER;
      COT_SHORTPRODUCER         = from.COT_SHORTPRODUCER;
      COT_LONGSWAPDEALERS       = from.COT_LONGSWAPDEALERS;
      COT_SHORTSWAPDEALERS      = from.COT_SHORTSWAPDEALERS;
      COT_LONGMANAGEDMONEY      = from.COT_LONGMANAGEDMONEY;
      COT_SHORTMANAGEDMONEY     = from.COT_SHORTMANAGEDMONEY;
      COT_LONGOTHERREPORTABLES  = from.COT_LONGOTHERREPORTABLES;
      COT_SHORTOTHERREPORTABLES = from.COT_SHORTOTHERREPORTABLES;
     };
  };

Şu andan itibaren okuyucunun, Meta COT Projesi - MetaTrader 4'te CFTC Rapor Analizi için Yeni Ufuklar makalesinde ele alınan COT raporlarının CSV biçimine aşina olduğunu varsayacağım. Bu türün sınıf örneği, COT raporunun tek bir satırını depolamak için kullanılacaktır. Bu sınıf örneklerinin bir dizisi, COT kayıtlarının alanlarına depolama ve kolay erişim için bunların kullanılmasına izin verecektir. CCFTCReport sınıfı, veri depolama ve erişim için geliştirilmiştir:

class CCFTCReport                    // COT report
  {
private:
   cot_type_report   type;           //type of current report 
   cot_record        data[];         //cot report data
   int               sizedata;       //number of records in the current report
   string            idsymbol;       //symbol identifier in cot ("CFTC Contract Market Code" field)
   string            terminalsymbol; //symbol name in the client terminal
public:
   void ~CCFTCReport(){ sizedata=0; };  
   bool              Init( cot_type_report passedtype, string sym="" ); //initialization of class instance
   bool              LoadFile( string filename );                       //load data from file
   string            Name();                                            //returns short report name
   bool              Type(cot_type_report passedtype);                  //sets type of report
   cot_type_report Type(){return(type);};                               //returns report type
   bool              TestGroup( cot_type_traders type_trader );         //check for the presence of specified group of traders
   bool              DefineIdSymbol();                                  //definition of id in the cot report
   bool              GetString( int handle, cot_record& arr );          //gets line (record) from csv file   
   string            GetFieldCommaDelimited(string &str);               //gets field from csv string
   double            At(datetime time,cot_type_traders type_trader,cot_type_data typedata=netlongs); //gets data from the report
  };

CCFTCReport sınıf örneği tek bir sembol için tüm raporu içerir; rapor türü COT, CIT veya DCOT olabilir. Numaralandırmalar ve sınıflar "cot.mqh" içerme dosyasında listelenir.

2.3. Giriş parametreleri

Giriş parametreleri giriş değişkenleri tarafından tanımlanır. Bu parametreler, yatırımcılar grubunun, veri türünün ve gerekli COT rapor türünün belirlenmesine olanak tanır:

input cot_type_traders type_trader = noncommercial;  //type of traders
input cot_type_data    type_data   = netlongs;       //type of the indicator
input cot_type_report  type_report = COT;            //type of report

2.4. OnInit işlevi

Bir gösterge, şu amaçlar için kullanılan OnInit işlevine sahiptir: Rapor dosyasından veri indirmek, giriş parametrelerini kontrol etmek, göstergenin arabelleklerini atamak.

INDICATOR_DATA özelliğiyle başlatılan arabellek, grafikte çizilen verileri içerir. INDICATOR_CALCULATIONS özelliğiyle başlatılan arabellek, ara hesaplamaları içerir.

SetIndexBuffer( 0, BufferData, INDICATOR_DATA );
IndicatorSetString(INDICATOR_SHORTNAME,indname);
SetIndexBuffer( 1, BufferCalculations, INDICATOR_CALCULATIONS );

2.5. OnCalculate işlevi

Bu işlev, gerekli verilerin seçilmesi, istenen verilerin hesaplanması ve bunların çizilmesi için kullanılır.

Çalışmasını ayrıntılı olarak ele alalım. İkinci çağrı biçimi kullanılır:

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &Time[],
                const double &Open[],
                const double &High[],
                const double &Low[],
                const double &Close[],
                const long &TickVolume[],
                const long &Volume[],
                const int &Spread[]){

Hesaplama ve çizim için çubukları belirleyelim.

int pos=rates_total-prev_calculated-1;
if( pos >= rates_total-1 )pos--;

Öğelerin zaman serileri gibi indekslenmesi gerektiğini belirtelim.

ArraySetAsSeries(Time, true);
ArraySetAsSeries(BufferData, true);
ArraySetAsSeries(BufferCalculations, true);

Birtakım denemelerden sonra, göstergenin arabellekleriyle ilgili tüm diziler için zaman serileri indekslemesini kullanmanın daha iyi olduğunu buldum. Aynısı, OnCalculate işlevine parametreler olarak iletilen diziler için de uygundur, son (yeni) öğenin 0'a eşit bir indeksi vardır.

Hesaplama döngüsü aşağıdaki gibidir: 

for(int i=pos;i>=0;i--)
{
    cot_type_data passed = type_data;
    if(type_data==netlongs || type_data==netlongsrate || type_data==willams_index)
    {
      // For the types of the data (net longs, net longs rate, Williams Index) it returns net longs 
      // Further calculations are based on these data.
      passed = netlongs;
    }
    double res = Report.At(Time[i], type_trader, type_data ); //get report data
    BufferCalculations[i] = res;
    BufferData[i]         = CalcData( type_data, i, Time );
  }

BufferCalculations dizisi , COT raporundan seçilen birincil verileri depolamak için kullanılır.

BufferData dizisi, grafik üzerinde çizilmeye hazır verileri içerir. Rapordan alınan değerler (net uzun pozisyonlar, açık pozisyonlar) ve hesaplanan değerler (uzun vadeli kur oranı, Williams İndeksi) olabilir. Güzel bir çözüm bulamadığım şu noktayı özetlemek istiyorum. OnCalculate işlevine iletilen diziler sonraki düzeylerde gerekli olabilir ve onlara ancak bu çağrılarda iletilirse erişebiliriz; bu nedenle kodu karıştırdığını düşünüyorum.

CalcData işlevi çağrısı:

BufferData[i]         = CalcData( type_data, i, Time );

CalcData işlevi CalcIndex işlevini çağırır:

double CalcData( cot_type_data type_data, int i, const datetime& Time[] )
{
  // net longs rate in the open interest
  if( type_data == netlongsrate ) return( BufferCalculations[ i ] / Report.At( Time[i], type_trader, openinterest ));
  // Williams Index
  if( type_data == willams_index )return( CalcIndex( i, Time, BufferCalculations ) );

  return(BufferCalculations[i]);        
}

CalcIndex işlevi içindeki Zaman dizisine erişmem gerekiyordu; bu nedenle onu çağrılar hiyerarşisine göre iletmek zorunda kaldım. 8 diziyi de kullanmamız gerekirse, kodun nasıl görüneceğini hayal edin.


3. Veri Dosyalarını İndirme

Tüm dosya bağlantıları Tablo 1'de sunulmuştur. Her yıl için ayrı dosya vardır ve dosya adında yıl numarası mevcuttur. Örneğin https://www.cftc.gov/sites/default/files/files/dea/history/deacot2010.zip dosyası 2010 yılı raporunu içerir, https://www.cftc.gov/sites/default/files/files/dea/history/deacot2009.zip dosyası 2009 yılı raporunu içerir vb.

Tüm bu dosyaları indirmek ve İstemci Terminali yükleme dizininin \MQL5\files\ klasörüne açmak gereklidir. Her yıl için deacotXXXX adında kendi ayrı klasörünü oluşturmak gerekir; burada XXXX bir yıla karşılık gelir. Sonuç olarak, aşağıdaki klasör yapısını elde edeceğiz.

Şek.1. Raporlar için klasör yapısı.

Veri hazırlama süreci basitleştirilebilir. Aşağıdaki tüm işlemler (CFTC web sitesindeki güncellemeleri kontrol etme, uygun klasörlere indirme ve açma) "Cotdownloader" script dosyası tarafından gerçekleştirilir. Script dosyası çekirdeği (veri indirme), WININET_TEST script dosyasına dayanır. Fiyat Histogramında (Piyasa Profili) yayınlanan CProgressBar sınıfını ve MQL5 makalesindeki uygulamasını kullandım. Harici uygulamalar, Windows API kullanılarak yürütülür; bu, Gerçek Alım Satım İşleminde Bir Alım Satım Robotunun Otomatik Optimizasyonu makalesinde açıklanmıştır.

Bir script dosyasının kullanımı basittir: Herhangi bir grafiğe eklemeniz yeterlidir. Çalışırken, veri indirme ile ilgili bilgileri grafikte bir ilerleme çubuğu olarak ve Experts sekmesinde metin mesajları olarak bildirir.

Şek.2. Veri indirme işlemi.


4. Kullanım Örneği

Bir göstergeyi çalıştırmak için, onu seçilen sembolün grafiğine eklemek ve giriş parametrelerini belirtmek gerekir.


Şek. 3 Cot göstergesinin giriş parametreleri

Artık, numaralandırılmış veri türlerinin değişken adları ve değerleri yerine kullanıcı dostu gösterimi belirtebileceğinizi unutmayın. Bu, şu şekilde yapılır: Değişken adını değiştirmek için bir giriş değişkeni bildirirken bir açıklama belirtmelisiniz:

input cot_type_traders type_trader = noncommercial;  //Type of traders
input cot_type_data    type_data   = netlongs;       //Type of the indicator
input cot_type_report  type_report = COT;            //Type of report

Aynısı değerler için de geçerlidir - Numaralandırılmış değerleri bildirirken açıklamalarda açıklamanın belirtilmesi gerekir:

enum cot_type_data    // types of data
{   
  netlongs,           // Net longs
  netlongsrate,       // Net longs rate in open interest
  willams_index,      // Williams Index
  openinterest        // Open Interest
};

Giriş parametreleri doğru bir şekilde belirtilmişse ve dosyalar indirilip açılmışsa, gösterge ayrı bir pencerede görünecektir:


Şek. 4 COT göstergesi

Hata olması durumunda, "Araç Kutusu" penceresinin "Experts" sekmesinde yazdırılacaktır.

Şek. 5 Hata mesajı


5. Sürüm Notları

Gösterge, tam özellikli bir bitmiş ürün olarak konumlandırılmamıştır. Bu, basit bir kod yazarak daha fazla kullanılabilecek sonuçları nasıl elde edebileceğimizi gösteren bir örnektir.  Örneğin, belirli bir aracı tarafından sağlanan İstemci Terminali ayarlarıyla COT raporu verilerinin türünü özelleştirmeye olana tanıyan modülü geliştirmedik. Bu özellik, DefineIdSymbol işlevi içinde uygulanır. İlk birkaç satır şu şekildedir:

bool CCFTCReport::DefineIdSymbol()
  {
   idsymbol="";
   if(terminalsymbol=="USDLFX" || terminalsymbol=="DX_CONT" || StringFind(terminalsymbol,"DX")==0)idsymbol="098662";
   //U.S. DOLLAR INDEX - CE FUTURES U.S.
   if( terminalsymbol == "FC_CONT" || StringFind( terminalsymbol, "FC")== 0)idsymbol = "061641";  //FEEDER CATTLE 
   if( terminalsymbol == "LC_CONT" || StringFind( terminalsymbol, "LC")== 0)idsymbol = "057642";  //LIVE CATTLE 
   if( terminalsymbol == "QM_CONT" || StringFind( terminalsymbol, "QM")== 0)idsymbol = "067651";
   //CRUDE OIL, LIGHT SWEET - NEW YORK MERCANTILE EXCHANGE

İstemci terminalinin bir sembolüne rapordan bir sembol atamanız gerekiyorsa bu kodu değiştirerek manuel olarak yapmanız gerekir. BrocoTrader4 terminalinden ayarları kullandım. Bu makaledeki örnekler için Metaquotes-Demo ve Alpari-Demo sunucularında açılan demo hesapları kullandım. DCOT raporları için yalnızca 2 enstrüman mevcuttur: XAUUSD (altın), XAGUSD (gümüş). 

Şu anda CIT raporları desteklenmemektedir; zira bu sunucularda herhangi bir finansal enstrüman bulunmamaktadır. Görünecekleri zaman, yalnızca koddaki bazı satırların açıklamasını kaldırarak ve değiştirerek desteklerini dahil etmek kolaydır.


6. COT Göstergesi iCustom aracılığıyla Nasıl Kullanılır?

Göstergeyi Şek.3'te sunulan bir formda kullanmıyorum. MQL5 dili, iCustom işlevini kullanarak özel göstergeleri tekrar kullanma olanağına sahiptir.

6.1. Yeni gösterge oluşturma

COT raporlarının görsel analizlerinin birçok yolu vardır. Bunlardan biri, farklı yatırımcı gruplarının pozisyonlarını farklı renklerle gösteren bir histogramdır.

Şu görevi ele alalım: Farklı yatırımcı gruplarının (COT raporlarından ticari ve ticari olmayan) pozisyonlarını bir histogram olarak çizen bir COTnet göstergesi oluşturmak. Kullanıcı, veri türünü seçme olanağına sahip olmalıdır: net uzun pozisyonlar, net uzun vadeli kur oranı, Williams İndeksi.

İşlem, MQL5'te göz önünde bulundurulan MQL5 Sihirbazı ile basitleştirilebilir: Kendi Göstergenizi Oluşturun makalesi. Sonuç olarak, gösterge kodu (çizim stilleri MQL5 Sihirbazı tarafından oluşturulmuştur) aşağıdaki gibi görünür:

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   2
//---- plot Noncommercial
#property indicator_label1  "Noncommercial"
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_color1  Blue
#property indicator_style1  STYLE_SOLID
#property indicator_width1  5
//---- plot Commercial
#property indicator_label2  "Commercial"
#property indicator_type2   DRAW_HISTOGRAM
#property indicator_color2  Red
#property indicator_style2  STYLE_SOLID
#property indicator_width2  5
//--- indicator buffers
Kitaplığı sınıflarla dahil etmek için giriş değişkenleri, genel değişkenler ve önişlemci yönergesi aşağıdaki gibi görünür:
#include <cot.mqh>
input cot_type_data    type_data   = netlongs;  // Indicator's type
double         NoncommercialBuffer[];
double         CommercialBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int handlecomm, handlenoncomm;

OnInit işlevinin kodu aşağıdaki gibidir:

int OnInit()
{
   SetIndexBuffer(0,NoncommercialBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,CommercialBuffer,INDICATOR_DATA);
   cot_type_traders td = commercial;
   cot_type_report  tr = COT; 
   handlecomm = iCustom(NULL, 0, "cot", td, type_data, tr );
   td = noncommercial;
   handlenoncomm = iCustom(NULL, 0, "cot", td, type_data, tr );
   return(0);
}
Özel göstergelerin nasıl kullanılacağını ele alalım (ticari olmayan yatırımcılar örneğinde). iCustom işlevinin ilk çağrısından sonra, işleve şu parametreler (raporumuz için gerekli) iletilir:
  • NULL – İstemci terminalindeki geçerli sembol
  • 0 – Mevcut zaman dilimi
  • "cot" – Özel göstergemizin dosya adı (uzantı olmadan belirtildiğini unutmayın)
  •  td = ticari (ihtiyacımız olan yatırımcılar grubu)
  • type_data = Göstergenin türü, giriş parametrelerinde belirtilir
  •  tr = COT – Rapor türü

Sonuç olarak, göstergenin verilerini almak için daha sonra kullanılacak bir tanıtıcımız var.

Göstergeden verilerin alınması OnCalculate işlevinde gerçekleştirilir:
  if(BarsCalculated(handlecomm)<rates_total || BarsCalculated(handlenoncomm)<rates_total) return(0);
  int to_copy = clctocopy(rates_total, prev_calculated );
  if( !copycotbuf(handlecomm, CommercialBuffer, to_copy ) )
  {
    Print("Error in data of commercial traders");
    return( 0 );
  }

  if( !copycotbuf(handlenoncomm, NoncommercialBuffer, to_copy ) )
  {
    Print("Error in data of non-commercial traders");
    return( 0 );
  }
  return(rates_total);

Biraz zaman harcadık, kısa bir kod yazdık ve sonucu elde ettik:


Şek. 6 cotnet göstergesi

6.2. iCustom ayrıca script dosyalarında da kullanılabilir

Şu görevi ele alalım: İstatistiksel tahminleri hesaplamak için cotsignals script dosyasını oluşturmak.

COT raporlarından farklı verileri kullanarak hangi istatistiksel avantajı elde edeceğimizi kontrol edelim. En basit yol, haftalık mum renginin doğru belirlenme olasılığını tahmin etmektir. Aşağıdaki hipotezleri göz önünde bulundurun:
  • Ticari olmayan yatırımcıların net uzun pozisyonlarının işareti mum rengiyle aynıdır: Pozitifse, haftalık trend boğa, negatifse trend ayıdır.
  • Mum rengi (beyaz/siyah), ticari olmayan yatırımcıların net uzun pozisyonlarının artması/azalması ile doğrudan ilişkilidir.
  • Mum rengi, ticari olmayan yatırımcıların net uzun pozisyonlarında hesaplanan Williams İndeksi değerine bağlı olarak siyah veya beyazdır. Aşırı alım durumunda (% 75'ten fazla) renk siyahtır, aşırı satım durumunda (% 25'ten az) mum rengi beyazdır.

COT raporundaki verileri kullanacağız. Bu örnekleri kullanarak kendi COT veri yorumlama yöntemlerinizi geliştirebilir ve bundan yararlanabilirsiniz. Sizin durumunuzda, 3 yıllık bir döneme karşılık gelen 150 haftalık geçmiş çubuğu kontrol edeceğiz. Bir script dosyası yazmadan önce gerekli veri türlerini ve sınıflarını tanımlamamız gerekir:

Olası istatistik türleri için numaralandırma:

enum cot_type_statistics   //types of statistics, used for calculation 
{  
  speculantsign,           //Sign of non-commercial traders' net longs 
  speculantchange,         //Volume changes of non-commercial traders' longs 
  willamszones             //Overbought/oversold zones of Williams Index
};

Belirtilen sembolün istatistiklerini almak için özel sınıf oluşturalım:

class CCOTStatistic
{
  private:
    
    int bars ;                            // number of weekly bars in symbol history
    string symbol;                        // symbol name in Client Terminal
    double netlongsspeculantsdata[];      // data for speculators' net longs 
    double willamsindexspeculantsdata[];  // data for speculators' Williams index net longs   
    cot_type_statistics liststatistic[];  // list of statistics
  public:
    //initialization and initial setup
    void Init( string symbol_passed, cot_type_statistics& listpassed[] );
    //Get the forecast for the direction 
    int GetCotSignalDirection( int ibar, cot_type_statistics type_stat   );
    bool Get( double& probably[] );       // returns statistics
};

Get yöntemi ile istenen istatistikler döndürülür; bunun nasıl çalıştığını açıklayalım. İlk olarak, gerekli diziler özel gösterge kullanılarak verilerle doldurulur. Ticari olmayan (spekülatör) yatırımcıların net uzun pozisyonlarının değerlerine ve Williams İndeksi değerlerine ihtiyacımız var:

if (!LoadDataFromCOTIndicator(symbol, PERIOD_W1, noncommercial, netlongs, COT, netlongsspeculantsdata, bars))
   return(false);
  // we have got the data - speculators' net longs
if (!LoadDataFromCOTIndicator(symbol, PERIOD_W1, noncommercial, willams_index, COT, willamsindexspeculantsdata, bars))
   return(false);
  // we have got the data - speculators' Williams Index

İstatistik hesaplama kodu (hesaplanacak tek bir parametremiz var - bu, haftalık mum rengi için bir tahmin olasılığıdır) aşağıdaki gibi görünür:

for(int istat = 0; istat < ArraySize(liststatistic); istat++)
  {
   int cntsignals = 0;
   int cntsucsess = 0;
   for(int i=bars-1; i>=0; i--)
     {
      double colorcandle=iClose(symbol,PERIOD_W1,i)-iOpen(symbol,PERIOD_W1,i);
      if(symbol=="USDCHF" || symbol=="USDCAD" || symbol=="USDJPY") colorcandle=-colorcandle;
      double cotdirection=GetCotSignalDirection(i,liststatistic[istat]);
      if(cotdirection==0)continue;                 //no signal
      cntsignals++;
      if(cotdirection*colorcandle>0) cntsucsess++; //color and direction are same
     }

   if(cntsignals!=0) probably[istat]=1.*cntsucsess/cntsignals;

   Print("Calculation complete for ",symbol,GetStringTypeStatistic(liststatistic[istat]),
                 " the correct forecast probability=",DoubleToString(probably[istat],2));
   Print("Total signals:",cntsignals,"success:",cntsucsess);
  }
LoadDataFromCOTIndicator işlevi karmaşıktır; zira göstergeden veri almak için çok sayıda kontrol yapılması gerekir; bu nedenle bunu ayrıntılı olarak ele alalım:
bool LoadDataFromCOTIndicator( string           symbol,        //symbol name
                               ENUM_TIMEFRAMES  timeframe,     //timeframe
                               cot_type_traders type_trader,   //group of traders type
                               cot_type_data    type_data  ,   //indicator type 
                               cot_type_report  type_report,   //report type
                               double&          loadto[],      //output data array
                               int              nbars   )      //number of requested bars 
{     
  
  int cothandle;
  nbars+=10 ; //for reserve
  cothandle = iCustom( symbol , timeframe, "cot", type_trader, type_data, type_report );

Son satırda, arabelleklerden veri almak için kullanılabilecek özel göstergenin tanıtıcısını alıyoruz.

Göstergenin başarıyla oluşturulduğunu kontrol etmeliyiz:

  if( cothandle == INVALID_HANDLE ){
    Print("Error in indicator creation for symbol ", symbol );
    return(false);
  }

İhtiyacımız olan geçmiş verilerini kontrol etmek:

int n = BarsSinh( symbol, timeframe );
  if(  n < nbars    )
{ 

Yeterli geçmiş verisi yoksa yükleyelim:

Print("Loading history for ", symbol ); //, " start at ", loadtm  
    CheckLoadHistory( symbol ,timeframe,   loadtm );
    n = BarsSinh( symbol, timeframe );
    if( n < nbars )
    {
      Print("Not enough history for the "+symbol, " total ", n, "bars");
      return(false);
    }
  }

BarsSinh (belirtilen sembol ve zaman diliminde mevcut olan çubuk sayısını döndürür) ve CheckLoadHistory (geçmişin indirilmesi) işlevi, MQL5 Referans'taki script dosyası koduna dayalıdır.

Göstergenin ara belleğindeki verileri kullanmadan önce, verilerin hazırlanıp hazırlanmadığını kontrol etmeliyiz; zira yalnızca bir tanıtıcının varlığı hesaplamanın bittiğini garanti etmez.

Bir sonraki çağrı bu kontrolü gerçekleştirir ve hesaplamalar bittiğinde bekler:

if( !WaitForCalculcateIndicator( cothandle ) ){
    Print("Timeout for the COT indicator calculation");
    return(false);
  }

Veriler hazır, onları kopyalamamız gerekiyor:

int res = CopyBuffer(cothandle, 0, 0, nbars, loadto );

Ardından, verilerin başarıyla kopyalandığını kontrol ediyoruz:

if( res != nbars ){
    Print("Error in obtaining the data, ", MyErrorDescription(_LastError) );
    return(false);
  }

Ve son olarak:

return(true);

Verileri aldık, bunları işlev parametresiyle iletilen diziye döndürüyoruz.

Elde edilen istatistikler CSV dosyasına yazdırılacaktır; CCOTOutFile sınıfı bu amaç için geliştirilmiştir:

class CCOTOutFile
{
  private:
   string  filename;
   int     handle; 
  public:
    bool Init( string passedname );
    void PutString( string symbol, double& probably[] );
    void PutHeader( cot_type_statistics& arrheaders[] ) ;
    void ~CCOTOutFile(){       FileClose(handle);    }
};

Bu, çıktı verileriyle dosyayı oluşturur, dizeleri .csv biçiminde yazar, başlığı oluşturur ve sınıf örneğini yok ederken dosyayı kapatır.

Gerekli tüm kitaplıklar yazıldığı için script dosyasının kodu kısa olacaktır.

Giriş parametreleri ve dahil edilen kitaplıklar:

input int      NBars =150; //History depth W1
#include <common.mqh>
#include <cot.mqh>

Analiz için sembollerin listesi:

string listsymbols[] = {"EURUSD", "GBPUSD", "USDCHF", "USDCAD", "USDJPY", "AUDUSD", "XAUUSD"};

Nesne başlatma:

void OnStart()
{
  CCOTOutFile outfile;  //file with results
  if( !outfile.Init("cotw1signals.csv") )return;

Hesaplama için istatistik listesi:

  cot_type_statistics list_statistic[]= // statistic types list
  { speculantsign, speculantchange, willamszones };

CSV dosyası başlığını yazma:

outfile.PutHeader( list_statistic ); //writing CSV file header

Ana döngüde her sembol ve sinyal için istatistikler alırız ve sonuçları dosyaya yazarız:

  for( int i = 0; i < ArraySize(listsymbols); i++  ) //for all symbols in the list
 {  
    Print( "Analysis for "+listsymbols[i] );
    CCOTStatistic stat;
    stat.Init( listsymbols[i ], list_statistic );
    double probably[];                               //probability of a signal
    if( !stat.Get( probably ) )
    {
      Print( "Error in statistics calculation for the symbol ", listsymbols[i] );
      return;
    }  
    outfile.PutString( listsymbols[i], probably );   //write string to .csv file
  }
  Print("Calculation complete.");
}

Script dosyası Alpari-Demo sunucusunda test edilmiştir. MetaQuotes-Demo sunucusunda çalıştırırsanız, "XAUUSD sembolü için istatistik hesaplamasında hata oluştu" mesajını yazdıracaktır; zira bu sembol şu anda mevcut değildir.

Script dosyasının yürütülmesinin bir sonucu olarak dosyayı alacağız; bu aşağıdaki gibi görünür:


Daha açık hale getirmek için, Excel'i açalım, ortalama değerleri hesaplayalım ve bir olasılıklar histogramı oluşturalım:

Şek. 8 Tahmin olasılığı

Tahmin sonuçları tüm semboller için aynıdır. Farklı sinyal türleri için doğru tahmin olasılığının ortalama değerleri şunlardır:
  • 0,54 - ticari olmayan yatırımcılar işareti,
  • 0,50 – ticari olmayan yatırımcıların net uzun pozisyonlarındaki hacim değişiklikleri,
  • 0,48 – Williams İndeksi'nin aşırı alım/aşırı satım bölgeleri.

Gördüğümüz gibi, ticari olmayan yatırımcıların net uzun pozisyonları için en iyi tahmin sonuçlarını aldık. En kötü sonuç Williams İndeksi bölgeleri içindir. 0,48 değeri, Williams İndeksi'nin aşırı alım durumunda dahi beyaz mum olasılığının 0,52'ye ve aşırı satım durumunda durum için siyah renk olasılığının 0,52'ye eşit olduğu anlamına gelir. Yani Williams tarafından sunulan formdaki kullanımı rasyonel değildir. Belki sonuçlar daha büyük zaman dilimleri kullanılarak iyileştirilebilir: Ay veya belki daha büyük bir zaman dilimi. Demo sunucularında ve COT raporlarında bulunan tüm sembolleri kullandık.


Sonuç

MQL5, bir alım satım sistemi geliştirmek için gerekli olan tüm görev döngüsünü programlamanıza olanak tanıyan bir araçtır:
  • Harici veri kaynaklarına erişmek için kullanılan karmaşık algoritmalara sahip göstergeler,
  • Diğer göstergelerde, script dosyalarında ve Expert Advisor'larda yeniden kullanımı,
  • Kendi istatistiksel ve kantitatif analiz algoritmalarının uygulanması.
Avantajları:
  • Nesne yönelimli programlama, hata ayıklama için harcanan zamanı büyük ölçüde azaltır.
  • Hata ayıklayıcı.
  • MQL4'ten MQL5'e geçiş yapmak kolaydır.
  • Nesne yönelimli modelin uygulanması başarılı olup kullanımı kolaydır. 
  • Dokümantasyon iyi organize edilmiştir. 
  • Windows API ile entegrasyon, platformu genişletir; örneğin İnternet sayfalarıyla çalışmaya olanak tanır.

Dezavantajları:

Benim için asıl sorun geçmiş verilere erişimdi:  
  • Zaman serilerine erişmek için gerekli temel işlevlerin olmaması (MQL4'te Time[], Open[], Close[] ve diğerleri gibi)
  • Verilere erişirken, erişilebilirliklerine ilişkin çok sayıda kontrol yapmak, ayrıntılarını anlamak gerekir.

Bir hata ayıklayıcı mevcut, ancak pek çok kullanışlı özelliği içermiyor: Hata ayıklama göstergeleri yok, ayrıca diziler ve sınıflar gibi karmaşık nesnelerin kontrollerini yapmak imkansız. Avantajlarını ve dezavantajlarını içeren liste kapsamlı değildir; yalnızca bu makaleyi hazırlarken rastladıklarımı listeledim.


Ek 1. Dosyaların listesi

Tüm dosyalar İstemci Terminali klasöründe yer alır. Dosyaları sources.zip dosyasından İstemci Terminali klasörüne çıkarın.

 №Dosya adı
Açıklama
 1 MQL5\Files\unzip.exe
 .zip arşivlerini açmak için Windows uygulaması
 2 MQL5\Include\Cdownloader.mqh
 İnternetten CFTC arşivlerini indiren sınıf
 3 MQL5\Include\ClassProgressBar.mqh
 Grafik penceresinde indirme işlemini göstermek için kullanılan CProgressBar sınıfı
 4 MQL5\Include\common.mqh
 Tüm göstergelerde ve script dosyalarında kullanılan ortak işlevler ve sabitler
 5 MQL5\Include\cot.mqh
 Cot raporlarından verileri seçen CCFTCReport sınıfı
 6 MQL5\Include\ErrorDescription.mqh
 Hata Açıklama kitaplığı
 7 MQL5\Indicators\cot.mq5
 Temel gösterge cot'si
 8 MQL5\Indicators\cotnet.mq5
 cot.mq5'in özel kullanıcı göstergesi olarak kullanımına basit bir örnek olan cotnet göstergesi
 9 MQL5\Scripts\cotdownloader.mq5
 Cotdownloader script dosyası, arşiv dosyalarını internetten indirir
 10 MQL5\Scripts\cotsignals.mq5
 Cotsignals script dosyası, COT raporlarının istatistiksel analiz örneği


Tablo 2. Dosyaların listesi


Ek 2. COT raporlarında bulunan sembollerin listesi


Sembol adı
Değişimde kimlik İstemci Terminalinde Kimlik CIT'de mevcut DCOT'ta mevcut
 1 BUĞDAY - CHICAGO BOARD OF TRADE  001602 ZW x x
 2 BUĞDAY - KANSAS CITY BOARD OF TRADE  001612   x x
 3 BUĞDAY - MINNEAPOLIS GRAIN EXCHANGE  001626     x
 4 MISIR - CHICAGO BOARD OF TRADE  002602 ZC x x
 5 YULAF - CHICAGO BOARD OF TRADE 004603 ZO   x
 6 SOYA FASULYESİ - CHICAGO BOARD OF TRADE  005602 ZS x x
 7 KÜÇÜK SOYA FASULYESİ - CHICAGO BOARD OF TRADE  005603     x
 8 KÜKÜRT FİNANSAL ENSTRÜMAN - CHICAGO CLIMATE FUTURES EXCHANGE  006261     x
 9 KARBON FİNANSAL ENSTRÜMAN - CHICAGO CLIMATE FUTURES EXCHANGE  006268     x
 10 RGGI CO2 İZNİ 2009 - CHICAGO CLIMATE FUTURES EXCHANGE  00626U      x
 11 SOYA FASULYESİ YAĞI - CHICAGO BOARD OF TRADE  007601 ZL x x
 12 ABD HAZİNE BONOSU - CHICAGO BOARD OF TRADE  020601 ZB    
 13 ABD UZUN VADELİ HAZİNE BONOSU - CHICAGO BOARD OF TRADE  020604      
 14 GULF # 6 FUEL %3,0 SULFUR SWAP - NEW YORK TİCARET BORSASI  02165A      x
 15 NY RES FUEL %1,0 SULFUR SWAP - NEW YORK TİCARET BORSASI  02165B      x
 16 EUR %1 FUEL OIL NWE CAL SWAP - NEW YORK TİCARET BORSASI  02165C      x
 17 EUR %3,5 FUEL OIL RTD CAL SWAP - NEW YORK TİCARET BORSASI  02165E      x
 18 SING FUEL OIL 180 CAL SWAP - NEW YORK TİCARET BORSASI  02165G      x
 19 EAST WEST FUEL OIL SPR SWAP - NEW YORK TİCARET BORSASI  02165I      x
 20 NY %1 V GULF %3 FUEL OIL SPR - NEW YORK TİCARET BORSASI  02165T      x
 21 NO. 2 ISITMA YAĞI 022651     x
 22 SING GASOIL SWAP - NEW YORK TİCARET BORSASI  02265J      x
 23 SING GASOIL/RDAM GASOIL SWAP - NEW YORK TİCARET BORSASI  02265T      x
 24 NYMEX HEATING OIL/RDAM GASOIL - NEW YORK TİCARET BORSASI  02265U      x
 25 GASOIL (ICE) SWAP - NEW YORK TİCARET BORSASI  02265V      x
 26 UP DOWN GC ULSD VS HO SPR SWAP - NEW YORK TİCARET BORSASI  022A13      x
 27 SING GASOIL BALMO SWAP - NEW YORK TİCARET BORSASI  022A22      x
 28 NATURAL GAS ICE HENRY HUB - ICE OTC  023391     x
 29 NATURAL GAS - NEW YORK TİCARET BORSASI  023651 QG   x
 30 MICHCON BASIS SWAP - NEW YORK TİCARET BORSASI  02365A      x
 31 M-3 BASIS SWAP - NEW YORK TİCARET BORSASI  02365C      x
 32 TCO BASIS SWAP - NEW YORK TİCARET BORSASI  02365D       
 33 NGPL TEXOK BASIS SWAP - NEW YORK TİCARET BORSASI  02365G      x
 34 NGPL MIDCON BASIS SWAP - NEW YORK TİCARET BORSASI  02365K      x
 35 WAHA BASIS SWAP - NEW YORK TİCARET BORSASI  02365O      x
 36 HOUSTON SHIP CH INDEX SWAP - NEW YORK TİCARET BORSASI  023A10      x
 37 CBT ETHANOL - CHICAGO BOARD OF TRADE  025601     x
 38 CHICAGO ETHANOL SWAP - NEW YORK TİCARET BORSASI  025651     x
 39 SOYA KÜSPESİ - CHICAGO BOARD OF TRADE  026603 ZM   x
 40 JAPAN C&F NAPTHA SWAP - NEW YORK TİCARET BORSASI  03265C      x
 41 PAMUK NO. 2 - ICE FUTURES U.S.  033661 CT x x
 42 HENRY HUB BASIS SWAP - NEW YORK TİCARET BORSASI  035652     x
 43 HOUSTON SHIP CH BASIS SWAP - NEW YORK TİCARET BORSASI  035653     x
 44 NW PIPE ROCKIES BASIS SWAP - NEW YORK TİCARET BORSASI  035654     x
 45 PANHANDLE BASIS SWAP - NEW YORK TİCARET BORSASI  035655     x
 46 HENRY HUB SWAP - NEW YORK TİCARET BORSASI  03565B       
 47 HENRY HUB PENULTIMATE GAS SWAP - NEW YORK TİCARET BORSASI  03565C      x
 48 ÇELTİK - CHICAGO BOARD OF TRADE  039601 ZR   x
 49 FRZN KONSANTRE PORTAKAL SUYU - ICE FUTURES U.S.  040701 JO   x
 50 2-YILLIK ABD HAZİNE BONOLARI - CHICAGO BOARD OF TRADE  042601      
 51 10-YILLIK ABD HAZİNE BONOLARI - CHICAGO BOARD OF TRADE  043602 ZN    
 52 5-YILLIK ABS HAZİNE BONOLARI - CHICAGO BOARD OF TRADE  044601      
 53 30-GÜNLÜK FEDERAL FONLAR - CHICAGO BOARD OF TRADE  045601 ZQ    
 54 SÜT Sınıf III - CHICAGO TİCARET BORSASI  052641     x
 55 LEAN HOGS - CHICAGO TİCARET BORSASI  054642 HE x x
 56 CANLI SIĞIR - CHICAGO TİCARET BORSASI  057642 LC x x
 57 RANDOM UZUNLUK KERESTE - CHICAGO TİCARET BORSASI  058643 LB   x
 58 BESİ SIĞIRI - CHICAGO TİCARET BORSASI  061641 FC x x
 59 AYLIK PJM ELEKTRİK - NEW YORK TİCARET BORSASI  064657     x
 60 ISO NEW ENGLAND LMP SWAP - NEW YORK TİCARET BORSASI  06465H      x
 61 PJM CAL MONTH OFF PK LMP SWAP - NEW YORK TİCARET BORSASI  06465M      x
 62 ISO NEW ENG OFF PK LMP SWAP - NEW YORK TİCARET BORSASI  06465S      x
 63 CINERGY CAL MONTH LMP SWAP - NEW YORK TİCARET BORSASI  064A01      x
 64 CINERGY OFF PEAK LMP SWAP - NEW YORK TİCARET BORSASI  064A02       
 65 PJM N ILL PEAK DAY AHEAD - NEW YORK TİCARET BORSASI  064A34      x
 66 PJM JCPL PEAK DAY AHEAD - NEW YORK TİCARET BORSASI  064A48      x
 67 PJM PEPCO PEAK DAY AHEAD - NEW YORK TİCARET BORSASI  064A50      x
 68 PJM PSEG PEAK DAY AHEAD - NEW YORK TİCARET BORSASI  064A54      x
 69 PJM WESTERN PEAK DAY AHEAD - NEW YORK TİCARET BORSASI  064A56       
 70 PJM WESTERN PEAK REAL TIME - NEW YORK TİCARET BORSASI  064A58      x
 71 PJM WESTERN OFF PEAK REAL TIME - NEW YORK TİCARET BORSASI  064A59      x
 72 ISO NEW ENG INT HUB PEAK SWAP - NEW YORK TİCARET BORSASI  064A60      x
 73 MW IND TRANS PEAK SWAP - NEW YORK TİCARET BORSASI  064A62      x
 74 NYISO ZONE 5 MW PEAK SWAP - NEW YORK TİCARET BORSASI  064A66       
 75 ISO NEW ENG HUB OFF PEAK SWAP - NEW YORK TİCARET BORSASI  064A78       
 76 MT BELVIEU PROPANE 5 DEC SWAP - NEW YORK TİCARET BORSASI  06665O       
 77 MT BELVIEU ETHANE 5 DEC SWAP - NEW YORK TİCARET BORSASI  06665P      x
 78 MT BELV NORM BUTANE 5 DEC SWAP - NEW YORK TİCARET BORSASI  06665Q      x
 79 MT BELV NAT GASOLINE 5 DEC SWP - NEW YORK TİCARET BORSASI  06665R      x
 80 CRUDE OIL LIGHT SWEET - ICE FUTURES EUROPE   LIGHT SWEET - ICE FUTURES EUROPE  067411     x
 81 CRUDE OIL, LIGHT SWEET - NEW YORK TİCARET BORSASI 067651 QM   x
 82 WTI CRUDE OIL CALENDAR SWAP - NEW YORK TİCARET BORSASI  06765A      x
 83 DUBAI CRUDE OIL CALENDAR SWAP - NEW YORK TİCARET BORSASI  06765G      x
 84 WTI CRUDE OIL FINANCIAL - NEW YORK TİCARET BORSASI  06765I      x
 85 BRENT FINANCIAL - NEW YORK TİCARET BORSASI  06765J      x
 86 BRENT (ICE) CALENDAR SWAP - NEW YORK TİCARET BORSASI  06765N      x
 87 BRENT-DUBAI SWAP - NEW YORK TİCARET BORSASI  06765O      x
 88 COCOA - ICE FUTURES U.S.  073732 CC x x
 89 PALLADIUM - NEW YORK TİCARET BORSASI  075651 PA   x
 90 PLATINUM - NEW YORK TİCARET BORSASI  076651 PL   x
 91 SUGAR NO. 11 - ICE FUTURES U.S.  080732 SB x x
 92 COFFEE C - ICE FUTURES U.S.  083731 KC x x
 93 SILVER - COMMODITY EXCHANGE INC.  084691 SI,XAGUSD,ZI   x
 94 COPPER-GRADE #1 - COMMODITY EXCHANGE INC.  085692 HG   x
 95 GOLD - COMMODITY EXCHANGE INC.  088691 GC,GOLD,XAUUSD   x
 96 RUSSIAN RUBLE - CHICAGO TİCARET BORSASI  089741 USDRUB,USDRUR    
 97 CANADIAN DOLLAR - CHICAGO TİCARET BORSASI  090741 6C,USDCAD    
 98 SWISS FRANC - CHICAGO TİCARET BORSASI  092741 6S,USDCHF    
 99 MEXICAN PESO - CHICAGO TİCARET BORSASI  095741      
 100 BRITISH POUND STERLING - CHICAGO TİCARET BORSASI  096742 6B,GBPUSD    
 101 JAPANESE YEN - CHICAGO TİCARET BORSASI  097741 6J,USDJPY    
 102 ABD DOLLAR INDEX - ICE FUTURES U.S.  098662 DX    
 103 EURO FX - CHICAGO TİCARET BORSASI 099741 6E,EURUSD    
 104 GASOLINE BLENDSTOCK (RBOB) - NEW YORK TİCARET BORSASI  111659 XRB   x
 105 RBOB CALENDAR SWAP - NEW YORK TİCARET BORSASI  11165K      x
 106 NEW ZEALAND DOLLAR - CHICAGO TİCARET BORSASI  112741 6N,NZDUSD    
 107 VIX FUTURES - CBOE FUTURES EXCHANGE  011700      
 108 DOW JONES INDUSTRIAL AVERAGE - CHICAGO BOARD OF TRADE  124601      
 109 3-MONTH EURODOLLARS - CHICAGO TİCARET BORSASI  132741      
 110 S&P 500 STOCK INDEX - CHICAGO TİCARET BORSASI  138741      
 111 E-MINI S&P 500 STOCK INDEX - CHICAGO TİCARET BORSASI  13874A  ES,SPX    
 112 NASDAQ-100 STOCK INDEX - CHICAGO TİCARET BORSASI  209741 NQ    
 113 NASDAQ-100 STOCK INDEX (MINI) - CHICAGO TİCARET BORSASI  209742      
 114 DOW JONES UBS EXCESS RETURN - CHICAGO BOARD OF TRADE  221602      
 115 AUSTRALIAN DOLLAR - CHICAGO TİCARET BORSASI  232741 6A,AUDUSD    
 116 RUSSELL 2000 MINI INDEX FUTURE - ICE FUTURES U.S.  23977A       
 117 NIKKEI STOCK AVERAGE - CHICAGO TİCARET BORSASI  240741      
 118 NIKKEI STOCK AVERAGE YEN DENOM - CHICAGO TİCARET BORSASI  240743      
 119 E-MINI MSCI EAFE - CHICAGO TİCARET BORSASI  244741      
 120 E-MINI MSCI EMERGING MARKETS - CHICAGO TİCARET BORSASI  244742      
 121 INTEREST RATE SWAPS 10YR - CHICAGO BOARD OF TRADE  246602      
 122 INTEREST RATE SWAPS 5YR - CHICAGO BOARD OF TRADE  247602      
 123 S&P GSCI COMMODITY INDEX - CHICAGO TİCARET BORSASI  256741      
 124 SING JET KERO SWAP - NEW YORK TİCARET BORSASI  26265D       
 125 E-MINI S&P 400 STOCK INDEX - CHICAGO TİCARET BORSASI  33874A       
 126 GULF JET NY HEAT OIL SPR SWAP - NEW YORK TİCARET BORSASI  86465A      x
 127 SING JET KERO GASOIL SPR SWAP - NEW YORK TİCARET BORSASI  86465C      x
 128 JET CIF NWE/GASOIL FUT - NEW YORK TİCARET BORSASI  86465D      x
 129 GULF # 6 FUEL OIL CRACK SWAP - NEW YORK TİCARET BORSASI  86565A      x
 130 3.5% FUEL OIL RDAM CRACK SPR - NEW YORK TİCARET BORSASI  86565C      x
 131 NAPTHA CRACK SPR SWAP - NEW YORK TİCARET BORSASI  86665A      x
 132 GASOIL CRACK SPR SWAP - NEW YORK TİCARET BORSASI  86765C      x


Tablo 3. COT raporlarında bulunan sembollerin listesi


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

Ekli dosyalar |
sources.zip (211.23 KB)
MQL5'te olay işleme: MA dönemini anında değiştirme MQL5'te olay işleme: MA dönemini anında değiştirme
13. dönemli basit MA (Hareketli Ortalama) göstergesinin bir grafiğe uygulandığını varsayalım. Ve dönemi 20 olarak değiştirmek istiyoruz, ancak gösterge özellikleri iletişim kutusuna gidip 13 ila 20 sayısını düzenlemek istemiyoruz: Fare ve klavyeyi kullanarak bu sıkıcı işlemleri yapmaktan sıkıldık. Ve özellikle gösterge kodunu açıp değiştirmek istemiyoruz. Tüm bunları tek bir düğmeye basarak yapmak istiyoruz; sayısal tuş takımının yanındaki "yukarı oklara" basarak. Bu makalede bunun nasıl yapılacağını anlatacağım.
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.
Grafik Kontrol Seçenekleri ile Gösterge Oluşturma Grafik Kontrol Seçenekleri ile Gösterge Oluşturma
Piyasa duyarlılığına aşina olanlar MACD göstergesi hakkında bilgi sahibidir (tam adı Hareketli Ortalama Yakınsama/Iraksama'dır) - Bu, yatırımcılar tarafından bilgisayar analiz yöntemlerinin ortaya çıktığı ilk anlardan itibaren kullanılan fiyat hareketini analiz etmek için güçlü bir araçtır. Bu makalede, MACD'ye ilişkin olası değişiklikleri ele alacağız ve bunları, değişiklikler arasında grafiksel olarak geçiş yapma imkanıyla tek bir göstergede uygulayacağız.
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.