MQL5: MetaTrader5における、分析と商品先物取引員会レポートの処理

5 10月 2015, 12:36
Aleksey Sergan
0
2 039

はじめに

MetaTrader5トレーディングターミナルは、オブジェクト指向に基づき、MQL5言語を含むトレーダー専用ツールの一つとして、MetaQuotesソフトウェア社により開発されました。一方で、MQL5は、旧バージョンのMQL4と互換性はありませんが、他方でオブジェクト指向 言語搭載による新しい様々な可能性を持っています。そのため、MQL4の使用に熟達したトレーダーはこの新言語を理解する必要があり、そのような方がこの記事の読者ターゲットであると考えています。

この記事では、以下の問題に対するソリューションを紹介いたします:商品先物取引委員会レポートという異なるデータの取得・分析を可能とするトレーダー用ツールの開発という問題についてです。このトピックは、すでにMeta COT Project - New Horizons for CFTC Report Analysis in MetaTrader 4という記事にて考察されています。従って、この記事の読者はすでにコンセプトにはある程度親しみがあるので、未だ詳しく紹介されていなかった点について説明していきたいと思います。

計画としては以下の通りです:中間処理・変換なしに公正取引委員会により提供されるファイルのデータの取得を可能にするインジケーターの開発です。さらに、その他の目的のために使用することができます:トレーディング戦略のエキスパートアドバイザーでの開発中に自動分析を実行するスクリプトにて、インジケーターのデータを図として描き、その他のインジケーターのデーターを作図するという目的です。


1. COTレポートの種類

3種類のレポートがあり、カレントレガシーレポート(COT)、サプリメンタルコモディティインデックス(CIT)、カレントディスアグリゲィテッドレポート(DCOT)の3つです。これらの違いは、図1に示されています。

概要 カレントレガシーレポート サプリメンタルコモディティインデックス カレントディスアグリゲィテッドレポート
ショートネーム COT CIT DCOT
Refrence title カレントレガシーレポート サプリメンタルコモディティインデックス カレントディスアグリゲィテッドレポート
Reference to the recent data file

deacot2010.zip

dea_cit_txt_2010.zip

fut_disagg_txt_2010.zip

レポートにおけるトレーダーグループ 非商業筋商業筋報告不要 非商業筋商業筋報告不要インデックストレーダー Producer/Merchant/Processor/User
スワップディーラー管理通貨その他の業者報告不要

図1建玉明細報告の種類

先物市場でのポジションの状態を報告するトレーダーや、分類の規則、レポートの周期についての情報は"Trade Stocks and Commodities With the Insiders: Secrets of the COT Report" という本や Meta COT Project - New Horizons for CFTC Report Analysis in MetaTrader 4という記事で得ることができます。

これらの文献に記載されていない二つのレポートの紹介をしたいと思います。

CITは、2007年から発行されており、現在のCITレポートのWebページは、http://cftc.gov/dea/options/deaviewcit.htmにて閲覧することができます。インデックストレーダーは、ヘッジャーや投機家とは異なるグループに属しています。

補足 報告書 http://www.cftc.gov/MarketReports/CommitmentsofTraders/AbouttheCOTReports/index.htmにて閲覧できます。これらのインデックストレーダーは市場にてロングポジションを設定することが多く、契約ごとにそれらを変更します。

2009年から、取引委員会は、 建玉報告レポートを発行しており、詳細はこちらで確認できます。explanatory notes.

非集計型COTレポートは、プロデューサー・商人・プロセッサ・ユーザー、スワップディーラー、統制通貨、その他の業者の4つのカテゴリに分けることで、レガシーCOTレポートよりも透明性を増しました。

  • プロデューサー・商人・プロセッサ・ユーザー 「プロデューサー・商人・プロセッサ・ユーザー」は主に、物質的商品を生産し、リスクの管理のために先物市場を用いる者を指します。
  • スワップディーラー 「スワップディーラー」は、主にスワップを行い、その取引においてリスクを管理するため先物市場を利用する者を指します。スワップディーラーのカウンターパートとなる者は、物質的商品の取引から生じるリスクを管理する、商業的なクライアントやヘッジファンドなどの投機トレーダーです。
  • 資産運用管理者 「資産運用管理者」は、登録済み商品投資顧問業者(CTA)、商品先物基金運用者(CPO)、CFTCに認識されていない非登録ファンドを指します。これらのトレーダーは、クライアントの代わりに先物取引を管理・実行に従事しています。
  • その他の業者 その他の全てのトレーダーは、カテゴリーに属さず、「その他の業者」というカテゴリーに属しています。

報告済みの金融商品リストはアペンディックス2にて見ることができます。CITやDCOTレポートの固有の金融商品を示すコラムもあります。


2. CSVファイルの外部データーを使用するCOTインジケーターの作成

COTインジケーターは以下の様に稼働します。(図1に載っている内の一つ)レポートの種類、データの種類、トレーダーグループは、インジケーターの入力パラメーターにて定義されます。

データの種類は以下:

  • 純ロング
  • 未決済建玉での純ロングレート
  • 純ロングから計算される、ウィリアムインデックス
  • 建玉

データの種類におけるリストは完全ではなく、使用する重要なデータを含むようさらに拡大することもあります。現シンボルにおいて、特定のデータがデータファイルからリクエストされます。(ダウンロードや展開方法は以下に記されています)データへのアクセスとダウンロード

のためのCCFTCReport クラスを使用します。

そのインジケーターは以下の構造を持ちます。


2.1. コンソナント

コンソナントを定義するためには、列挙型データ を使用します。インジケーターにより提供されるレポートの種類は以下です。

enum cot_type_report // type of report
{ 
  COT, DCOT, CIT
};

トレーダーグループ:

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 
};

インジケーターに使用できるデータの種類

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. クラス

一つの変数に異なるオブジェクトを格納するために、ストラクチャーとクラスを使用することができます。しかし、もしString型の動的配列や値を持っている場合、ストラクチャー型の二つの変数を割り当てることができません。そのため、COTレコードを保管するストラクチャーやデータの割り当て用メソッドを使用せず、クラスを用いました。

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;
     };
  };

読者は、Meta COT Project - New Horizons for CFTC Report Analysis in MetaTrader 4の記事にて、CSV形式のCOTレポートに精通していると想定します。このタイプのクラスインスタンスは、COTレポートを保管するために使用します。これらクラスインスタンスの配列は、COTレコードへの便利なアクセス、ストレージのために使用されます。CCFTCレポートクラスは、データストレージ・アクセスのために開発されました。

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 クラス のインスタンスは一つのシンボルに関する全レポートを所持しており、そのレポートの種類は、COT、CIT、DCOTなどです。列挙型やクラスは"cot.mqh" インクルード ファイル内に記載されています。


2.3. 入力パラメーター

入力パラメーターは、入力 変数により定義されています。これらのパラメーターは、トレーダーのグループ、データーの種類、COTレポートの種類を特定します

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 関数

インジケーターは OnInit関数を持ち、レポートファイルからのデータのダウンロードや、入力パラメーターのチェック、インジケーターバッファーの割り当てなどの目的のために使用されます。

INDICATOR_DATA プロパティにより初期化されたバッファーはチャート上に図示されているデーターを含みます。INDICATOR_CALCULATIONSプロパティにより初期化されるバッファーは、中間計算を含みます。

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


2.5. OnCalculate 関数

この関数は、必要なデータの選択や、要求されたデータの計算、そして図式化のために用いられます。

詳しく詳細を紹介します。呼び出しの二番目の形が用いられています。

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[]){

計算と作図のためのバーを決定しましょう。

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

要素は時系列にインデックス化されなけばならないことを明記しましょう。

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

インジケーターバッファーに関連する全ての配列における時系列順のインデックス化を使用する方が良いことが、いくつかの実験から明らかになりました。同様に、OnCalculate 関数にパラメーターとして渡される配列に便利です。最後の要素は0のインデックスが付けられています。

計算用のループは以下の通りです。

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 配列は、COTレポートから選択される主要なデータの保管に使用されます。

BufferData配列は、チャートに図化される準備ができているデータを保持します。(ロングレート、ウィリアムインデックスなど)算出値と同様に、(純ロング、未決済建玉など)レポートの値であることもあります。良いソリューションを見つけることができていない以下のポイントを概説したいと思います。 OnCalculate関数に渡される配列は 後のレベルが必要とされ、これらの呼び出しにより渡された場合にのみ、その配列にアクセスすることができます。そのため、コードが複雑になります。

The CalcData function call:

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

The CalcData function calls the CalcIndex function:

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関数内のTime配列にアクセスする必要があったため、呼び出し 階層に従って、データを渡さざるをえませんでした。 もし全ての8つの配列を使用する必要がある場合、コードがどのように動くかを想像してみてください。


3. データファイルをダウンロードする

全ファイルリンクは、図表1にて紹介されています。 各年ごとに個別のファイルがあり、年数がファイル名に記載されています。例えば、http://www.cftc.gov/files/dea/history/deacot2010.zipのファイルは2010年のレポートを含んでいます。 http://www.cftc.gov/files/dea/history/deacot2009.zip のファイルは2009年といった形です。

全てのファイルをダウンロードし、 クライアントターミナルインストールディレクトリの\MQL5\files\に展開する必要があります。それぞれの年ごとに、 XXXXが年に一致するようdeacotXXXX という名前を持つ個別ファイルを作成する必要があります。結果として、以下のフォルダーストラクチャーを所有するようになります。

図 1. レポートのフォルダー構造

図 1. レポートのフォルダー構造

データ準備のプロセスの単純化"Cotdownloader" スクリプトにより、(CFTCウェブサイトの更新情報のチェックやダウンロード、適切なフォルダーへの展開など)以下全ての処理が実行されます。(データダウンロードの)スクリプトカーネルは WININET_TEST スクリプトに基づきます。The Price Histogram (Market Profile) and its implementation in MQL5(MQL5における価格ヒストグラムとその実行) という記事にて記載されているCProgressBar クラスを使用しました。外部のアプリケーションはWindows APIを使用し実行され、Automated Optimization of a Trading Robot in Real Trading(トレーディングシステムの自動最適化) という記事

にて紹介されています。

スクリプトの使用を簡単に:チャートに貼り付けるだけにチャート上のプログレスバーに、また、Expertタブ上にテキストメッセージという形で、データのダウンロードに関しての情報を報告します。

図 2. データダウンロードプロセス

図 2. データダウンロードプロセス


4. 使用例

インジケーターを稼働するために、選択したシンボルのチャートに貼り付け、入力パラメーターを明記する必要があります。

図 3 COTインジケーターの入力パラメタ

図 3 COTインジケーターの入力パラメタ

変数名や列挙型変数の代わりにわかりやすい表示を使用するよう注意しましょう。以下のように実行されます:変数名の変更のために、入力パラメーターの宣言時にコメントを記載する必要があります。

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

変数値においても同様ですー列挙値を宣言する際、コメントにて詳細を記載する必要があります。

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

もし入力パラメーターが正しく明記され、ファイルがダウンロードされ、展開された場合、インジケーターが個別のウィンドウに表示されます。

図 4 COTインジケーター

図. 4 COTインジケーター

エラー時は、「Toolbox」ウィンドウの「Experts」タブに表示されます。

図 5 エラーメッセージ

図 5 エラーメッセージ


5. ノートの解放

インジケーターは、完全に完成した製品としては位置付けられていません。いかに結果を取得できるかを示し、簡単なコードをさらに使用する例です。例えば、特定の証言業者の提供するクライアントターミナルの設定に応じたCOTレポートのデータ種類をカスタマイズを行うモジュールを開発していません。この機能は、DefineIdSymbol 関数内にて実行されます。始めの二行はこちらです:

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

もしレポートのシンボルを、クライアントターミナルのシンボルに割り当てる必要がある場合、手動にてこのコードを変更する必要があります。BrocoTrader4ターミナルの設定を使用しました。この記事では、Metaquotes-Demo、Alpari-Demoサーバーにて開設されたdemo-accountsを使用しました。DCOTレポートでは、二つの金融商品のみ提供されています:XAUUSD(金)、XAGUSD(銀)の二つです。

現在、CITレポートは提供されていません。なぜなら、これらのサーバーには有価証券がないためです。これらが提供された際には、コメントを消し、コードを数行修正するのみで対応することができます。


6. iCustomによるCOTインジケーターの使用方法

図3に示される形式ではインジケーターを使用しません。MQL5言語は、 iCustom関数を使用し、カスタムインジケーターの再利用への可能性を秘めています。


6.1. 新規インジケーターの作成

様々なCOTレポートの視覚分析方法があります。様々なトレーダー グループ
のポジションを示すヒストグラムがその内の一つです。

以下のタスクを考えてみましょう。 (COTレポートの商業筋、飛商業筋など)異なるトレーダーグループのポジションを図示するCOTインジケーターの作成についてです。ユーザーは以下のデータ種類を選択する必要があります。: 純ロング、純ロングレート、ウィリアムインデックスなどです。

そのプロセスはMQL5ウィザードにより単純化されます。MQL5:あなたのインジケーターを作成しようという記事にて紹介されています。結果、インジケーターのコードは以下のようになります(描画方法はMQL5ウィザードにて作成されています。):

#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
入力変数、グローバル変数、クラスライブラリをインクルードする前処理プログラムは以下です。
#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 関数は以下です:

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);
}
それでは、(非商業筋のトレーダーの例にて)カスタムインジケーターの使用方法を紹介します。iCustom関数をはじめに呼び出したのち、(レポートに必要な)以下の変数が関数に渡されます。
  • NULL – クライアントターミナル内の現シンボル
  • 0 – 現タイムフレーム
  • 「cot」– カスタムインジケーターのファイル名(拡張子なしで明記されています。)
  • td = 商業筋(必要なトレーダーグループ)
  • type_data = インジケーターの種類、入力パラメタにて明記されています。
  • tr = COT – レポートの種類

結果、インジケーターのデータを取得するためにさらに使用できるハンドラを持つことができます。

インジケーターからのデータの取得は、 OnCalculate関数にて実行されます。:
  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);

少ない時間で、短いコードを記述し、結果を得ることができました。

図 6 コンテントインジケーター

図 6 コンテントインジケーター


6.2. iCustomはスクリプトにおいても使用できます。

以下のタスクを紹介いたします。 統計的予測を計算するcotsignals スクリプト の作成です。

COTレポートの異なるデーターを使用し得ることのできる統計による利点をチェックしましょう。最も簡単な方法は、ろうそく足の週ごとの色の正しい決定の可能性を予測することです。以下の仮説を見てみましょう:
  • 非商業筋のトレーダーの純ロングのサインは、ろうそく足の色と同じです。もしプラスであれば、週のトレンドは好調であり、もしマイナスであれば低調です。
  • (白/黒の)ろうそく足の色は、非商業筋トレーダーの純ロングが上昇するか、下降かに一致しています。
  • 非商業筋のロングから計算されるウィリアムインデックス値に応じて、ろうそく足が黒か白に決まります。もし(75%以上の)過剰買いの状態であれば、色は黒にあり、もし(25以下の)売り過ぎの状態であれば、色は白になります。

COTレポートのデータを使用します。これらの例を使用し、COTデータ解析のメソッドを作り、利用することができます。3年分に値する150週の履歴バーをチェックします。スクリプトを書く前に、必要なデータ型とクラスを定義する必要があります。

統計の種類の列挙型:

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
};

To get the statistics for the specified symbol, let's create special class:

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メソッドにより返されます。どのような仕組みか紹介いたしますまず、必要な配列にカスタムインジケーターを使用しデーターが格納されます。非商業筋のトレーダーの純ロング値とウィリアムインデックス値が必要です。:

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

(週のろうそく足の色の予測可能性という一つの変数のみの計算です)統計的計算のコードは以下です:

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関数は、インジケーターからのデータ取得のため複数のチェックを行う必要があるので、とても複雑です。そのため、詳しい内容を見ていきます。
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 );

最後の行では、バッファーからデータを取得するカスタムインジケーターのハンドラを取得します。

インジケーターの作成が成功されたか確認する必要があります。

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

必要な履歴データのチェック:

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

十分な履歴データがない場合はダウンロードしてください。

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と(履歴をダウンロードする)ChekLoadHistory関数は MQL5リファレンススクリプト コードに基づいています。

インジケーターバッファーのデータを使用する前に、データが準備されているかをチェックする必要があります。というのも、ハンドルの存在は、計算が完了したことを意味しないためです。

次の呼び出しは、その確認を行い、計算が終わるまで待ちます。

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

データの準備が完了しました、それらのコピーを行います。

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

次にデータのコピーが成功したかを確認します。

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

最後の作業:

return(true);

データを取得し、関数パラメタにより渡された配列に返します。

統計結果は、CSVファイルに記載され、CCOTOutFileクラスが開発されます。

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);    }
};

出力データを持つファイルを作成し、.csv形式で文字列を記述し、ヘッダーを作成後、クラスインスタンスの削除の間ファイルを閉じます。

このスクリプトのコードは、すべてに必要なライブ来が記述されているため、短くなります。

入力パラメーターと内蔵されるライブラリ:

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

分析のためのシンボルリスト:

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

オブジェクト初期化

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

計算のための統計リスト

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

Writing CSV file header:

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

メインループにて、個々のシンボル、シグナルの統計を取り、ファイルに結果を記述します;

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.");
}

スクリプトは、Alpari-Demoサーバーでテストされました。もしMetaQuotes-Demoサーバー上で稼働させる場合、「Error in statics calculation for XAUUSED symbol」というメッセージを出力します。というのも、未だシンボルが利用できないからです。

スクリプトの実行結果として、以下のようなファイルを取得します。

図 7 出力ファイル

より明確にするため、Excelを開け、平均値を計算し、確率のヒストグラムを作成してください。

図 8 確率の予想

図 8 確率の予想

予想結果は、すべてのシンボルにおいて同様です。異なるシンボルにおける正しい予想確率の平均値は:

  • 0.54 – 非商業筋トレーダーサイン
  • 0.50 – 非商業筋トレーダーの純ロングの取引高の変化
  • 0.48 – ウィリアムインデックスの過剰買い/過剰売りの領域

ご覧の通り、非商業筋トレーダーの純ロングにおける最高の予想結果を得ることができました。最悪な結果は、ウィリアムインデックス値内にあるものです。0.48の値が意味することは、たとえウィリアムインデックスが過剰買い状態であっても、白ろうそくの確率は、0.52に等しく、もし過剰売り状態であれば黒であるということです。なので、ウィリアムで示される形での使用は合理的ではありません。おそらく、結果は、より大きいタイムフレーム(一月、もしくはそれ以上)を使用することで向上させることができます。COTレポートとデモサーバーにて使用可能なシンボルをすべて使用しました。


結論

MQL5は、トレーディングシステムの開発に欠かせない一連のタスク群をプログラム可能にするツールです。

  • 外部データ取得に使用される、複雑なアルゴリズムを持つインジケータ:
  • その他のインジケータ、スクリプト、エキスパートアドバイザーでの再利用:
  • 統計的、量的分析のアルゴリズムの実行:

利点:

  • オブジェクト指向プログラミングはデバッギングにかかる時間を大いに省きます。
  • デバッガー
  • MQL4からMQL5への容易な移行が可能です。
  • 使用が容易であれば、オブジェクト指向モデルの実行が成功します。
  • ドキュメンテーションがうまくまとめられています。
  • Windows API との統合がプラットフォームを拡大し、例えば、インターネットページを扱うことができるようになります。

欠点:

主なトラブルは履歴データーへのアクセスです

  • (MQL4のTime[], Open[], Close[] などの)時系列へのアクセスのための関数がない点
  • データへアクセスする際、複数のチェックを行う必要があり、詳しい仕組みを理解する必要がある点

デバッガーがあるが、多くの便利な機能を持っておら図、インジケーターのデバッギングがなく、配列やクラスなど複雑なオブジェクトのチェックが不可能である点利点と欠点のリストは完全ではなく、この記事の執筆中に思いついたことのみを記載しています。


アペンディクス 1. ファイルリスト

すべてのファイルは、クライアントターミナルフォルダーに保管されています。sorces.zipからファイルをクライアントターミナルフォルダーに展開してください。

ファイル名 概要
1 MQL5\Files\unzip.exe .zipファイルの展開のためのWindowsアプリケーション
2 MQL5\Include\Cdownloader.mqh インターネットからCFTCアーカイブをダウンロードするクラス
3 MQL5\Include\ClassProgressBar.mqh チャート上にてダウンロード実行状況を示すCProgressBarクラス
4 MQL5\Include\common.mqh すべてのインジケーターやスクリプトで使用される共通の関数やコンソナント
5 MQL5\Include\cot.mqh COTレポートからデータを選択するCCFTCReportクラス
6 MQL5\Include\ErrorDescription.mqh エラー記述ライブラリ
7 MQL5\Indicators\cot.mq5 基盤インジケーターcot
8 MQL5\Indicators\cotnet.mq5 インジケーターcotnet、カスタムインジケーターのcot.mq5の使用例
9 MQL5\Scripts\cotdownloader.mq5 インターネットからアーカイブファイルをダウンロードする、cotdownloaderスクリプト
10 MQL5\Scripts\cotsignals.mq5 cotsignalsスクリプト、COTレポートの統計結果例

Table 2. ファイルリスト


アペンディクス 2 COTレポートのシンボルリスト

シンボル名 取引上のID クライアントターミナル上のID CITのプレゼント DCOTのプレゼント
1 WHEAT - CHICAGO BOARD OF TRADE 001602 ZW x x
2 WHEAT - KANSAS CITY BOARD OF TRADE 001612
x x
3 WHEAT - MINNEAPOLIS GRAIN EXCHANGE 001626

x
4 CORN - CHICAGO BOARD OF TRADE 002602 ZC x x
5 OATS - CHICAGO BOARD OF TRADE 004603 ZO
x
6 SOYBEANS - CHICAGO BOARD OF TRADE 005602 ZS x x
7 MINI SOYBEANS - CHICAGO BOARD OF TRADE 005603

x
8 SULFUR FINANCIAL INSTRUMENT - CHICAGO CLIMATE FUTURES EXCHANGE 006261

x
9 CARBON FINANCIAL INSTRUMENT - CHICAGO CLIMATE FUTURES EXCHANGE 006268

x
10 RGGI CO2 ALLOWANCE 2009 - CHICAGO CLIMATE FUTURES EXCHANGE 00626U

x
11 SOYBEAN OIL - CHICAGO BOARD OF TRADE 007601 ZL x x
12 U.S. TREASURY BONDS - CHICAGO BOARD OF TRADE 020601 ZB

13 LONG-TERM U.S. TREASURY BONDS - CHICAGO BOARD OF TRADE 020604


14 GULF # 6 FUEL 3.0% SULFUR SWAP - NEW YORK MERCANTILE EXCHANGE 02165A

x
15 NY RES FUEL 1.0% SULFUR SWAP - NEW YORK MERCANTILE EXCHANGE 02165B

x
16 EUR 1% FUEL OIL NWE CAL SWAP - NEW YORK MERCANTILE EXCHANGE 02165C

x
17 EUR 3.5% FUEL OIL RTD CAL SWAP - NEW YORK MERCANTILE EXCHANGE 02165E

x
18 SING FUEL OIL 180 CAL SWAP - NEW YORK MERCANTILE EXCHANGE 02165G

x
19 EAST WEST FUEL OIL SPR SWAP - NEW YORK MERCANTILE EXCHANGE 02165I

x
20 NY 1% V GULF 3% FUEL OIL SPR - NEW YORK MERCANTILE EXCHANGE 02165T

x
21 NO. 2 HEATING OIL 022651

x
22 SING GASOIL SWAP - NEW YORK MERCANTILE EXCHANGE 02265J

x
23 SING GASOIL/RDAM GASOIL SWAP - NEW YORK MERCANTILE EXCHANGE 02265T

x
24 NYMEX HEATING OIL/RDAM GASOIL - NEW YORK MERCANTILE EXCHANGE 02265U

x
25 GASOIL (ICE) SWAP - NEW YORK MERCANTILE EXCHANGE 02265V

x
26 UP DOWN GC ULSD VS HO SPR SWAP - NEW YORK MERCANTILE EXCHANGE 022A13

x
27 SING GASOIL BALMO SWAP - NEW YORK MERCANTILE EXCHANGE 022A22

x
28 NATURAL GAS ICE HENRY HUB - ICE OTC 023391

x
29 NATURAL GAS - NEW YORK MERCANTILE EXCHANGE 023651 QG
x
30 MICHCON BASIS SWAP - NEW YORK MERCANTILE EXCHANGE 02365A

x
31 M-3 BASIS SWAP - NEW YORK MERCANTILE EXCHANGE 02365C

x
32 TCO BASIS SWAP - NEW YORK MERCANTILE EXCHANGE 02365D


33 NGPL TEXOK BASIS SWAP - NEW YORK MERCANTILE EXCHANGE 02365G

x
34 NGPL MIDCON BASIS SWAP - NEW YORK MERCANTILE EXCHANGE 02365K

x
35 WAHA BASIS SWAP - NEW YORK MERCANTILE EXCHANGE 02365O

x
36 HOUSTON SHIP CH INDEX SWAP - NEW YORK MERCANTILE EXCHANGE 023A10

x
37 CBT ETHANOL - CHICAGO BOARD OF TRADE 025601

x
38 CHICAGO ETHANOL SWAP - NEW YORK MERCANTILE EXCHANGE 025651

x
39 SOYBEAN MEAL - CHICAGO BOARD OF TRADE 026603 ZM
x
40 JAPAN C&F NAPTHA SWAP - NEW YORK MERCANTILE EXCHANGE 03265C

x
41 COTTON NO. 2 - ICE FUTURES U.S. 033661 CT x x
42 HENRY HUB BASIS SWAP - NEW YORK MERCANTILE EXCHANGE 035652

x
43 HOUSTON SHIP CH BASIS SWAP - NEW YORK MERCANTILE EXCHANGE 035653

x
44 NW PIPE ROCKIES BASIS SWAP - NEW YORK MERCANTILE EXCHANGE 035654

x
45 PANHANDLE BASIS SWAP - NEW YORK MERCANTILE EXCHANGE 035655

x
46 HENRY HUB SWAP - NEW YORK MERCANTILE EXCHANGE 03565B


47 HENRY HUB PENULTIMATE GAS SWAP - NEW YORK MERCANTILE EXCHANGE 03565C

x
48 ROUGH RICE - CHICAGO BOARD OF TRADE 039601 ZR
x
49 FRZN CONCENTRATED ORANGE JUICE - ICE FUTURES U.S. 040701 JO
x
50 2-YEAR U.S. TREASURY NOTES - CHICAGO BOARD OF TRADE 042601


51 10-YEAR U.S. TREASURY NOTES - CHICAGO BOARD OF TRADE 043602 ZN

52 5-YEAR U.S. TREASURY NOTES - CHICAGO BOARD OF TRADE 044601


53 30-DAY FEDERAL FUNDS - CHICAGO BOARD OF TRADE 045601 ZQ

54 MILK Class III - CHICAGO MERCANTILE EXCHANGE 052641

x
55 LEAN HOGS - CHICAGO MERCANTILE EXCHANGE 054642 HE x x
56 LIVE CATTLE - CHICAGO MERCANTILE EXCHANGE 057642 LC x x
57 RANDOM LENGTH LUMBER - CHICAGO MERCANTILE EXCHANGE 058643 LB
x
58 FEEDER CATTLE - CHICAGO MERCANTILE EXCHANGE 061641 FC x x
59 PJM ELECTRICITY MONTHLY - NEW YORK MERCANTILE EXCHANGE 064657

x
60 ISO NEW ENGLAND LMP SWAP - NEW YORK MERCANTILE EXCHANGE 06465H

x
61 PJM CAL MONTH OFF PK LMP SWAP - NEW YORK MERCANTILE EXCHANGE 06465M

x
62 ISO NEW ENG OFF PK LMP SWAP - NEW YORK MERCANTILE EXCHANGE 06465S

x
63 CINERGY CAL MONTH LMP SWAP - NEW YORK MERCANTILE EXCHANGE 064A01

x
64 CINERGY OFF PEAK LMP SWAP - NEW YORK MERCANTILE EXCHANGE 064A02


65 PJM N ILL PEAK DAY AHEAD - NEW YORK MERCANTILE EXCHANGE 064A34

x
66 PJM JCPL PEAK DAY AHEAD - NEW YORK MERCANTILE EXCHANGE 064A48

x
67 PJM PEPCO PEAK DAY AHEAD - NEW YORK MERCANTILE EXCHANGE 064A50

x
68 PJM PSEG PEAK DAY AHEAD - NEW YORK MERCANTILE EXCHANGE 064A54

x
69 PJM WESTERN PEAK DAY AHEAD - NEW YORK MERCANTILE EXCHANGE 064A56


70 PJM WESTERN PEAK REAL TIME - NEW YORK MERCANTILE EXCHANGE 064A58

x
71 PJM WESTERN OFF PEAK REAL TIME - NEW YORK MERCANTILE EXCHANGE 064A59

x
72 ISO NEW ENG INT HUB PEAK SWAP - NEW YORK MERCANTILE EXCHANGE 064A60

x
73 MW IND TRANS PEAK SWAP - NEW YORK MERCANTILE EXCHANGE 064A62

x
74 NYISO ZONE 5 MW PEAK SWAP - NEW YORK MERCANTILE EXCHANGE 064A66


75 ISO NEW ENG HUB OFF PEAK SWAP - NEW YORK MERCANTILE EXCHANGE 064A78


76 MT BELVIEU PROPANE 5 DEC SWAP - NEW YORK MERCANTILE EXCHANGE 06665O


77 MT BELVIEU ETHANE 5 DEC SWAP - NEW YORK MERCANTILE EXCHANGE 06665P

x
78 MT BELV NORM BUTANE 5 DEC SWAP - NEW YORK MERCANTILE EXCHANGE 06665Q

x
79 MT BELV NAT GASOLINE 5 DEC SWP - NEW YORK MERCANTILE EXCHANGE 06665R

x
80 CRUDE OIL LIGHT SWEET - ICE FUTURES EUROPE LIGHT SWEET - ICE FUTURES EUROPE 067411

x
81 CRUDE OIL, LIGHT SWEET - NEW YORK MERCANTILE EXCHANGE 067651 QM
x
82 WTI CRUDE OIL CALENDAR SWAP - NEW YORK MERCANTILE EXCHANGE 06765A

x
83 DUBAI CRUDE OIL CALENDAR SWAP - NEW YORK MERCANTILE EXCHANGE 06765G

x
84 WTI CRUDE OIL FINANCIAL - NEW YORK MERCANTILE EXCHANGE 06765I

x
85 BRENT FINANCIAL - NEW YORK MERCANTILE EXCHANGE 06765J

x
86 BRENT (ICE) CALENDAR SWAP - NEW YORK MERCANTILE EXCHANGE 06765N

x
87 BRENT-DUBAI SWAP - NEW YORK MERCANTILE EXCHANGE 06765O

x
88 COCOA - ICE FUTURES U.S. 073732 CC x x
89 PALLADIUM - NEW YORK MERCANTILE EXCHANGE 075651 PA
x
90 PLATINUM - NEW YORK MERCANTILE EXCHANGE 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 MERCANTILE EXCHANGE 089741 USDRUB,USDRUR

97 CANADIAN DOLLAR - CHICAGO MERCANTILE EXCHANGE 090741 6C,USDCAD

98 SWISS FRANC - CHICAGO MERCANTILE EXCHANGE 092741 6S,USDCHF

99 MEXICAN PESO - CHICAGO MERCANTILE EXCHANGE 095741


100 BRITISH POUND STERLING - CHICAGO MERCANTILE EXCHANGE 096742 6B,GBPUSD

101 JAPANESE YEN - CHICAGO MERCANTILE EXCHANGE 097741 6J,USDJPY

102 U.S. DOLLAR INDEX - ICE FUTURES U.S. 098662 DX

103 EURO FX - CHICAGO MERCANTILE EXCHANGE 099741 6E,EURUSD

104 GASOLINE BLENDSTOCK (RBOB) - NEW YORK MERCANTILE EXCHANGE 111659 XRB
x
105 RBOB CALENDAR SWAP - NEW YORK MERCANTILE EXCHANGE 11165K

x
106 NEW ZEALAND DOLLAR - CHICAGO MERCANTILE EXCHANGE 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 MERCANTILE EXCHANGE 132741


110 S&P 500 STOCK INDEX - CHICAGO MERCANTILE EXCHANGE 138741


111 E-MINI S&P 500 STOCK INDEX - CHICAGO MERCANTILE EXCHANGE 13874A ES,SPX

112 NASDAQ-100 STOCK INDEX - CHICAGO MERCANTILE EXCHANGE 209741 NQ

113 NASDAQ-100 STOCK INDEX (MINI) - CHICAGO MERCANTILE EXCHANGE 209742


114 DOW JONES UBS EXCESS RETURN - CHICAGO BOARD OF TRADE 221602


115 AUSTRALIAN DOLLAR - CHICAGO MERCANTILE EXCHANGE 232741 6A,AUDUSD

116 RUSSELL 2000 MINI INDEX FUTURE - ICE FUTURES U.S. 23977A


117 NIKKEI STOCK AVERAGE - CHICAGO MERCANTILE EXCHANGE 240741


118 NIKKEI STOCK AVERAGE YEN DENOM - CHICAGO MERCANTILE EXCHANGE 240743


119 E-MINI MSCI EAFE - CHICAGO MERCANTILE EXCHANGE 244741


120 E-MINI MSCI EMERGING MARKETS - CHICAGO MERCANTILE EXCHANGE 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 MERCANTILE EXCHANGE 256741


124 SING JET KERO SWAP - NEW YORK MERCANTILE EXCHANGE 26265D


125 E-MINI S&P 400 STOCK INDEX - CHICAGO MERCANTILE EXCHANGE 33874A


126 GULF JET NY HEAT OIL SPR SWAP - NEW YORK MERCANTILE EXCHANGE 86465A

x
127 SING JET KERO GASOIL SPR SWAP - NEW YORK MERCANTILE EXCHANGE 86465C

x
128 JET CIF NWE/GASOIL FUT - NEW YORK MERCANTILE EXCHANGE 86465D

x
129 GULF # 6 FUEL OIL CRACK SWAP - NEW YORK MERCANTILE EXCHANGE 86565A

x
130 3.5% FUEL OIL RDAM CRACK SPR - NEW YORK MERCANTILE EXCHANGE 86565C

x
131 NAPTHA CRACK SPR SWAP - NEW YORK MERCANTILE EXCHANGE 86665A

x
132 GASOIL CRACK SPR SWAP - NEW YORK MERCANTILE EXCHANGE 86765C

x

Table 3. COTレポートにおけるシンボル一覧

MetaQuotes Software Corp.によりロシア語から翻訳された
元の記事: https://www.mql5.com/ru/articles/34

添付されたファイル |
sources.zip (211.23 KB)
初心者のためのMQL5におけるデジタルフィルタの実践的実装 初心者のためのMQL5におけるデジタルフィルタの実践的実装

トレーディングシステムを構築するトピックを扱うフォーラムではデジタルシグナルのフィルタリングに関する考え方が広く議論されてきています。MQL5においてデジタルフィルタの標準コードを作成しないことは思慮が足りないかもしれません。本稿では、『初心者のためのMQL5におけるカスタムインディケータ』よりシンプルなSMAのインディケータ コードをより複雑で汎用なデジタルフィルタに変換することについて述べます。本稿は前稿からのロジカルな続編です。また、コード内テキストの置き換え方法、プログラムエラーの修正方法についても述べます。

МetaTrader 5からWCFサービスを利用し.NETアプリケーションにクオートをエクスポートする方法 МetaTrader 5からWCFサービスを利用し.NETアプリケーションにクオートをエクスポートする方法

MetaTrader 5からご自身のアプリケーションにクオートをエクスポートしたくありませんか?MQL5-DLLジャンクションを使用するとそのソリューションの作成が可能です!本稿でMetaTrader 5から.NETに書かれたアプリケーションにクオートをエクスポートする方法の一つをお伝えします。私はまさにこのプラットフォームの使用により、クオートのエクスポート実装がおもしろく、根本的にやさしく行えました。残念ながらバージョン5はまだ.NETをサポートしていないので、かつてのように.NETサポート機能のあるwin32 dllを interlayerとして利用します。

MQL5におけるイベント操作: オンザフライのMA期間変更 MQL5におけるイベント操作: オンザフライのMA期間変更

期間13の単純なMA(移動平均)インディケータがチャートに適応されているとします。期間を20に変更したいと思いますが、インディケータ プロパティ ダイアログボックスに移動して数字を13から20に変更したくはありません。マウスとキーボードを使ってこのような操作をするのは飽き飽きです。それも特にインディケータコードを開いてそれを変更したくありません。ボタン、すなわちテンキーの隣にある『上矢印』を一度押すだけでやってしまいたいのです。本稿ではそのやり方について述べていきます。

グラフィックコントロールオプションを用いたインディケータ作成 グラフィックコントロールオプションを用いたインディケータ作成

マーケットの動きに通じた方はMACDインディケータ(移動平均収束拡散)をご存じでしょう。価格の変動を分析するのに力強いツールで、コンピュータ分析手法が登場したごく初期段階からトレーダーに利用されているものです。本稿では MACDの潜在的修正と修正間でグラフィカルに切り替える可能性のあるインディケータへの実装について考察していきます。