MetaTrader 5 ビルド1485:新しいテストモードと標準ライブラリのグラフィックス

MetaTrader 5の何が新しくなったのか

24 11月 2016

ターミナル

  1. ターミナルとMetaEditorジャーナルのエントリの順序が変更されました。更新前には最新のログエントリが最初に表示されましたが、最も古いエントリーがジャーナルの最初に表示されるようになりました。より一般的な昇順での並べ替えは、ジャーナルの読解を容易にします。




    さらに、ジャーナルのコンテキストメニューを使用して、「時間」および「ソース」列を非表示にすることも可能になりました。

  2. ヘッジモードで、取引履歴の注文と取引に関連して決済されたポジションのチケットが表示されるようになりました。これにより、関連する開閉操作を簡単に見つけることができます。




  3. SL/TPを既存のポジションから同じ製品の新しいポジションにコピーする際に発生したエラーを修正しました。このエラーは(チャートまたは気配値表示ウィンドウなどからの)ワンクリック取引機能をヘッジモードで使用すると発生することがありました。
  4. 超高精細画面(4K)での矢印オブジェクトの表示を修正しました。

MQL5

  1. 新しいArrayPrint 関数が追加され、単純な型と構造体が配列ログに出力されます。
    void  ArrayPrint(
       const void&   array[],             // 出力配列
       uint          digits=_Digits,      // 小数点以下の桁数
       const string  separator=NULL,      // 構造体フィールド間の区切り文字の値
       ulong         start=0,             // 初めに表示される要素のインデックス
       ulong         count=WHOLE_ARRAY,   // 表示される要素の数
       ulong         flags=ARRAYPRINT_HEADER|ARRAYPRINT_INDEX|ARRAYPRINT_LIMIT|ARRAYPRINT_ALIGN    
       );
    
    ArrayPrintは構造体配列のすべてのフィールドをログに出力するものではありません。オブジェクトの配列フィールドとポインタフィールドは抜かされます。すべての構造体のフィールドを出力する必要がある場合は、希望の書式を使用して独自のマス出力関数を記述する必要があります。
    //--- 最後の10バーの値を出力する
       MqlRates rates[];
       if(CopyRates(_Symbol,_Period,1,10,rates))
         {
          ArrayPrint(rates);
          Print("Проверка\n[time]\t[open]\t[high]\t[low]\t[close]\t[tick_volume]\t[spread]\t[real_volume]");
          for(int i=0;i<10;i++)
            {
             PrintFormat("[%d]\t%s\t%G\t%G\t%G\t%G\t%G\t%G\t%I64d\t",i,
             TimeToString(rates[i].time,TIME_DATE|TIME_MINUTES|TIME_SECONDS),
             rates[i].open,rates[i].high,rates[i].low,rates[i].close,
             rates[i].tick_volume,rates[i].spread,rates[i].real_volume);
            }
         }
       else
          PrintFormat("CopyRates failed, error code=%d",GetLastError());
    //--- ログの例
    /*
                        [time]  [open]  [high]   [low] [close] [tick_volume] [spread] [real_volume]
       [0] 2016.11.09 04:00:00 1.11242 1.12314 1.11187 1.12295         18110       10   17300175000
       [1] 2016.11.09 05:00:00 1.12296 1.12825 1.11930 1.12747         17829        9   15632176000
       [2] 2016.11.09 06:00:00 1.12747 1.12991 1.12586 1.12744         13458       10    9593492000
       [3] 2016.11.09 07:00:00 1.12743 1.12763 1.11988 1.12194         15362        9   12352245000
       [4] 2016.11.09 08:00:00 1.12194 1.12262 1.11058 1.11172         16833        9   12961333000
       [5] 2016.11.09 09:00:00 1.11173 1.11348 1.10803 1.11052         15933        8   10720384000
       [6] 2016.11.09 10:00:00 1.11052 1.11065 1.10289 1.10528         11888        9    8084811000
       [7] 2016.11.09 11:00:00 1.10512 1.11041 1.10472 1.10915          7284       10    5087113000
       [8] 2016.11.09 12:00:00 1.10915 1.11079 1.10892 1.10904          8710        9    6769629000
       [9] 2016.11.09 13:00:00 1.10904 1.10913 1.10223 1.10263          8956        7    7192138000
       Check
       [time] [open] [high] [low] [close] [tick_volume] [spread] [real_volume]
       [0] 2016.11.09 04:00:00 1.11242 1.12314 1.11187 1.12295 18110 10 17300175000 
       [1] 2016.11.09 05:00:00 1.12296 1.12825 1.1193 1.12747 17829 9 15632176000 
       [2] 2016.11.09 06:00:00 1.12747 1.12991 1.12586 1.12744 13458 10 9593492000 
       [3] 2016.11.09 07:00:00 1.12743 1.12763 1.11988 1.12194 15362 9 12352245000 
       [4] 2016.11.09 08:00:00 1.12194 1.12262 1.11058 1.11172 16833 9 12961333000 
       [5] 2016.11.09 09:00:00 1.11173 1.11348 1.10803 1.11052 15933 8 10720384000 
       [6] 2016.11.09 10:00:00 1.11052 1.11065 1.10289 1.10528 11888 9 8084811000 
       [7] 2016.11.09 11:00:00 1.10512 1.11041 1.10472 1.10915 7284 10 5087113000 
       [8] 2016.11.09 12:00:00 1.10915 1.11079 1.10892 1.10904 8710 9 6769629000 
       [9] 2016.11.09 13:00:00 1.10904 1.10913 1.10223 1.10263 8956 7 7192138000 
    */
    

  2. S1=S2+S1のように文字列の加算する際のエラーを修正しました。
  3. ArrayResize関数の動作が変更されました。reserve_sizeパラメータとして-1が渡された場合、この関数は配列サイズを増やさない場合にのみ未使用(予約済み)メモリを解放します。reserve_size=-1で新しい配列サイズを0に設定することはArrayFreeを呼び出すことと同じです。この新しい動作によってMQL5プログラムのメモリ使用量が最適化できます。
    void OnStart()
      {
       int arr[];
    //--- 最初に使用されるメモリの量 
       Print("Array size:",ArraySize(arr)," Memory used:",MQLInfoInteger(MQL_MEMORY_USED)," MB");
    //--- サイズ1の配列に使用されたメモリ量(リサーブ(予備)あり)
       ArrayResize(arr,1,1024*1024);
       Print("Array size:",ArraySize(arr)," Memory used:",MQLInfoInteger(MQL_MEMORY_USED)," MB");
    //--- 予備があるため、使用されたメモリの量は要素数の増加後には変更されない
       ArrayResize(arr,1024*512,1024*1024);
       Print("Array size:",ArraySize(arr)," Memory used:",MQLInfoInteger(MQL_MEMORY_USED)," MB");
    //--- メモリサイズは配列を縮小した後にも変更されない
       ArrayResize(arr,1);
       Print("Array size:",ArraySize(arr)," Memory used:",MQLInfoInteger(MQL_MEMORY_USED)," MB");
    //--- 未使用メモリは予備の削除後に解放される
       ArrayResize(arr,1,-1);
       Print("Array size:",ArraySize(arr)," Memory used:",MQLInfoInteger(MQL_MEMORY_USED)," MB");
      }
    

  4. チャート描画関数が標準ライブラリに追加されました。この新機能を使用するには、プロジェクトにMQL5\Include\Graphics\Graphic.mqhを含めます。

    下記はGraphPlotを使用して3つのデータ系列に基づいてチャートをプロットします。
    #include <Graphics/Graphic.mqh>
    
    double Func1(double x) { return MathPow(x,2); }
    double Func2(double x) { return MathPow(x,3); }
    double Func3(double x) { return MathPow(x,4); }
    
    void OnStart()
      {
       GraphPlot(Func1,Func2,Func3,-2,2,0.05,CURVE_LINES);
      }
    
    
    結果:


    下記はGraphPlotを使用してデータ配列に基づいてチャートをプロットします。
    #include <Math/Stat/Binomial.mqh>
    #include <Graphics/Graphic.mqh>
    
    void OnStart(void)
      {
       double    vars[101];
       double    results[101];
       const int N=2000;
    //---  
       MathSequence(0,N,20,vars);
       MathProbabilityDensityBinomial(vars,N,M_PI/10,true,results);
       ArrayPrint(results,4);
       GraphPlot(results);
    //---
      }
    
    結果:



  5. 標準ライブラリの数学統計を扱うための関数を更新しました。MQL5バージョンとソースR言語の両方で、すべての関数の品質と精度が完全に確認されました。精度とパフォーマンスの速度の制御を可能にするために、ユニットテストが静的ライブラリとともに配布されます。これらは\MQL5\Scripts\UnitTests\Statディレクトリにあります。

    • TestStat.mq5 - 計算結果を確認するためのメインテストスクリプト
    • TestPrecision.mq5 — 計算精度のテスト
    • TestBenchmark.mq5 — コンピューティングパフォーマンス測定のテスト

テスター

  1. この更新には、テスト中に実行遅延を設定するための高度な設定機能が加わりました。これで、遅延がない理想的なケースやカスタム遅延セットを含めたさまざまな取引条件でエキスパートアドバイザーをテストすることができます。



    以前のバージョンではランダム遅延モードのみが使用できました。

  2. 「M1ベースのOHLC」モードでのバーのティックボリュームの生成を修正しました。
  3. ヘッジモードで取引する際の注文とポジションの開始時間をミリ秒単位までで指定できるように修正しました。
  4. 「リアルチック」モードでの複数通貨または複数時間枠テストで表示される「古いチック」エラーを修正しました。
  5. 要求されたティックがディスク上にあるデータベースから読み取られる際のCopyTicksのパフォーマンス速度が向上されました。

MetaEditor

  1. ナビゲータとツールボックスのファイルコンテキストメニューに、バージョン管理された MQL5 Storage ソースコードリポジトリを操作するためのコマンドが追加されました。




  2. リポジトリ内で1024を超えるファイルを操作する際にローカルのMQL5ストレージデータベースの整合性を壊す可能性のあったエラーを修正しました。
  3. MQL5 Storageのファイルツリーの表示を修正しました。
  4. 大量のテキストを置換した後のファイルの表示を修正しました。

ドキュメントを更新しました。