MetaTrader 5プラットフォームビルド1930: 柔軟なウィンドウチャートとMQL5.NETライブラリ

取引ターミナルウィンドウから金融銘柄チャートを切り離すことができるようになりました。 この機能は、複数の画面を使用している場合に便利です。つまり、1つ目の画面にメインプラットフォームウィンドウを設定してアカウント状態を管理し、チャートは2番目の画面に移動して市場状況を観察することができます。

26 10月 2018

ターミナル

  1. 取引ターミナルウィンドウから金融銘柄チャートを切り離すことができるようになりました。

    この機能は、複数の画面を使用している場合に便利です。つまり、1つ目の画面にメインプラットフォームウィンドウを設定してアカウント状態を管理し、チャートは2番目の画面に移動して市場状況を観察することができます。ターミナルからチャートを取り外すには、コンテキストメニューの[Docked]オプションを無効にします。その後、グラフを目的の画面に移動します。





    切り離されたチャート上の別のツールバーを使用すると、画面を切り替えることなく分析オブジェクトと指標を適用できます。ツールバーのコンテキストメニューを使用すると、使用可能なコマンドのセットを管理したり非表示にできます。

  2. 内蔵チャットを完全に更新しました。グループダイアログとチャネルがサポートを追加しました。スレッド間で切り替えずに、統一された環境でグループとプライベートディスカッションを行い、興味や言語に応じてチャネルを作成できます。MQL5.communityウェブサイトに移動せずに同僚や友達とチャットできます。

    グループチャットとチャネルは公開することも非公開にすることもできます。チャットの作成者は、チャットを自由参加型にするか招待のみにするかを決定します。スレッドをさらに管理するために、チャネルとチャットにモデレータ-0を割り当てることもできます。




  3. 仮想通貨取引のボリューム精度の拡張のサポートを追加しました。取引操作の可能な最小量は0.00000001ロットです。板情報、時間と販売、その他のインターフェース要素は、ボリュームは小数点以下8桁の精度で表示する機能を備えています。

    最小ボリュームとその変更ステップは、ブローカー側の金融商品設定に依存します。




  4. ツールボックスウィンドウにMQL5.communityで公表された記事のタブを追加しました。これで、MQL5の取引戦略の開発に関する600以上の詳細資料が、ターミナルを離れることなく利用可能になりました。新しい記事は毎週公開されます。




  5. Wineで作業する際の証明書を使った拡張認証のサポートを追加しました。
  6. 1レベルに制限されたときの板情報の表示を修正しました。
  7. 標準ツールバーに[Save As Picture(画像として保存)]コマンドを追加しました。これで、チャートの写真を撮ってコミュニティで共有するのがはるかに簡単です。




  8. バーとティックをインポートする際のシフトの適用を修正しました。以前は、シフトが適用されないことがありました。




  9. 大量の経済指標カレンダーニュースを処理する場合のターミナルのフリーズを修正しました。

MQL5

  1. "smart"関数インポートで.NETライブラリのネイティブサポートを追加しました。これで、.NETライブラリは特別なラッパーを書かないで利用できます。MetaEditorが独自のラッパーを書きます。

    .NETライブラリ関数を使用するには、特定の関数を定義せずにDLL自体をインポートします。MetaEditorは自動的に使用される関数をインポートします。
    • 単純な構造体(POD、plain old data) — 単純なデータ型のみを含む構造体
    • 単純な型とPOD構造体またはその配列のみが使用されるパラメータを持つpublic static関数

    ライブラリからの関数を呼び出すには、単にインポートします。
    #import "TestLib.dll"
    
    //+------------------------------------------------------------------+
    //| スクリプトプログラム開始関数                                     |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       int x=41;
       TestClass::Inc(x);
       Print(x);
      }
    TestClassのInc関数のC#コードは下記のとおりです。
    public class TestClass
    {
       public static void Inc(ref int x)
       {
        x++;
       }
    }
    実行されると、スクリプトは42を返します。
    .NETライブラリのサポートに関する作業は続けられており、その機能は将来拡張される予定です。

  2. 標準ライブラリにWinAPI関数を使用するためのサポートを追加しました。これで、MQL5プログラムでオペレーティングシステム関数を使用するために、ライブラリを手動でインポートして関数シグネチャを記述する必要はありません。MQL5\Include\WinAPIディレクトリからヘッダファイルをインクルードするだけです。

    WinAPI関数は、目的によって別々のファイルにグループ化されます。

    • libloaderapi.mqh — リソースの使用
    • memoryapi.mqh — メモリーの使用
    • processenv.mqh — 環境の使用
    • processthreadsapi.mqh — プロセスの使用
    • securitybaseapi.mqh — OSセキュリティシステムの使用
    • sysinfoapi.mqh — システム情報の取得
    • winbase.mqh — 一般的関数
    • windef.mqh — 定数、構造体、列挙体
    • wingdi.mqh — グラフィックオブジェクトの使用
    • winnt.mqh — 例外の使用
    • winreg.mqh — レジストリの使用
    • winuser.mqh — ウィンドウとインターフェースの使用
    • errhandlingapi.mqh — エラー処理
    • fileapi.mqh — ファイルの使用
    • handleapi.mqh — ハンドルの使用
    • winapi.mqh — すべての関数を含む(WinAPIヘッダーファイル)

    バインドは64ビットアーキテクチャでのみ機能します。

  3. コードの解析にinline、__inline、__forceinline指定子のサポートを追加しました。コード中に指定子があると、エラーは発生せず、コンパイルには影響しません。現時点では、この機能により、С++コードをMQL5に簡単に転送することができます。
    指定子についての詳細は、MSDNをご覧ください。

  4. MQL5プログラムの実行を大幅に最適化しました。場合によっては、パフォーマンスの改善は10%に達する可能性があります。より高速な実行には、新しいMetaEditorバージョンでプログラムを再コンパイルします。
    残念ながら、この新しい最適化により、新しいプログラムは以前のターミナルバージョンとの互換性がありません。MetaEditorバージョン1910以降でコンパイルされたプログラムは、1880以下のターミナルバージョンでは起動できません。古いバージョンのMetaEditorでコンパイルされたプログラムは、新しいターミナルでも実行できます。

  5. 複数のMQL5関数を大幅に最適化しました。
  6. ターミナルのメインウィンドウからチャートを追加/削除し、そのポジションを管理するための新しいプロパティを追加しました。

    ENUM_CHART_PROPERTY_INTEGER列挙体に下記のプロパティを追加しました。

    • CHART_IS_DOCKED — チャートウィンドウがドックされている。'false'の場合、チャートはターミナル領域外までドラッグできます。
    • CHART_FLOAT_LEFT — 仮想スクリーンに相対したドッキングされていないチャートウィンドウの左座標
    • CHART_FLOAT_TOP — 仮想スクリーンに相対したドッキングされていないチャートウィンドウの上座標
    • CHART_FLOAT_RIGHT — 仮想スクリーンに相対したドッキングされていないチャートウィンドウの右座標
    • CHART_FLOAT_BOTTOM — 仮想スクリーンに相対したドッキングされていないチャートウィンドウの下座標

    ENUM_TERMINAL_INFO_INTEGER列挙体に下記の関数を追加しました。

    • TERMINAL_SCREEN_LEFT — 仮想スクリーンの左座標。仮想スクリーンは、画面全体をカバーする長方形です。システムが2つの画面を右から左に並べると、仮想スクリーンの左の座標は2つの画面の境界になる可能性があります。
    • TERMINAL_SCREEN_TOP — 仮想スクリーンの上座標
    • TERMINAL_SCREEN_WIDTH — ターミナルの幅
    • TERMINAL_SCREEN_HEIGHT — ターミナルの高さ
    • TERMINAL_LEFT — 仮想スクリーンに相対したターミナルの左座標
    • TERMINAL_TOP — 仮想スクリーンに相対したターミナルの上座標
    • TERMINAL_RIGHT — 仮想スクリーンに相対したターミナルの右座標
    • TERMINAL_BOTTOM — 仮想スクリーンに相対したターミナルの下座標

  7. MqlTick構造体とMqlBookInfo構造体にvolume_realフィードを追加しました。これは、拡張精度ボリュームで動作するように設計されています。volume_realは'volume'より優先順位が高いです。指定された場合、サーバーはこの値を使用します。

    struct MqlTick
      {
       datetime         time;          // 最後の価格更新時刻
       double           bid;           // 現在の売値
       double           ask;           // 現在の買値
       double           last;          // 現在の最終約定値
       ulong            volume;        // 現在の最終約定ボリューム
       long             time_msc;      // 最後の価格更新時刻(ミリ秒単位)
       uint             flags;         // ティックフラグ
       double           volume_real;   // 高精度の現在の最終約定ボリュー
      };

    struct MqlBookInfo
      {
       ENUM_BOOK_TYPE   type;            // ENUM_BOOK_TYPE列挙体からの注文タイプ
       double           price;           // 価格
       long             volume;          // ボリューム
       double           volume_real;     // 高精度ボリューム
      };

  8. ENUM_SYMBOL_INFO_DOUBLE列挙体に下記のプロパティを追加しました。

    • SYMBOL_VOLUME_REAL — 最後の約定実行のボリューム
    • SYMBOL_VOLUMEHIGH_REAL — 今日の最高約定ボリューム
    • SYMBOL_VOLUMELOW_REAL — 今日の最低約定ボリューム

    プロパティの取得にはSymbolInfoDouble関数を使用します。

  9. ENUM_MQL_INFO_INTEGER列挙体にMQL_FORWARDプロパティを追加しました(forward testモードフラグ)。
  10. 構造体にpack( integer_value )プロパティを追加しました。これにより、構造体内のフィールド配置のアラインメントを設定できます。これは、DLLを扱う際に必要となります。integer_valueには1、2、4、8、16の値を指定できます。
    プロパティが定義されていない場合は、デフォルトの1バイトのアラインメント(pack(1))が使用されます。

    使用例:
    //+------------------------------------------------------------------+
    //| デフォルトのパッキング                                           |
    //+------------------------------------------------------------------+
    struct A
      {
       char              a;
       int               b;
      };
    //+------------------------------------------------------------------+
    //| パッキングの指定                                                 |
    //+------------------------------------------------------------------+
    struct B pack(4)
      {
       char              a;
       int               b;
      };
    //+------------------------------------------------------------------+
    //| スクリプトプログラム開始関数                                     |
    //+------------------------------------------------------------------+
    void OnStart()
      {
       Print("sizeof(A)=",sizeof(A));
       Print("sizeof(B)=",sizeof(B));
      }
    //+------------------------------------------------------------------+
    結論:
    sizeof(A)=5
    sizeof(B)=8
    構造体内のアラインメントについての詳細は、MSDNをご覧ください。

  11. 列挙型キャストの要件を緩めました暗黙のキャストの場合、コンパイラは自動的に正しい列挙値を代入し、警告を表示します。

    下記のコードで
    enum Main
      {
       PRICE_CLOSE_,
       PRICE_OPEN_
      };
    
    input Main Inp=PRICE_CLOSE;
    //+------------------------------------------------------------------+
    //| 開始関数                                                         |
    //+------------------------------------------------------------------+
    void OnStart()
      {
      }
    コンパイラは下記の警告を表示します。
    implicit conversion from 'enum ENUM_APPLIED_PRICE' to 'enum Main'
    'Main::PRICE_OPEN_' instead of 'ENUM_APPLIED_PRICE::PRICE_CLOSE' will be used
    以前は、この場合、次のエラーが発生しました。
    'PRICE_CLOSE' - cannot convert enum
    関数のパラメータで列挙が不正に使用された場合、コンパイラは引き続きエラーを表示します。

  12. テンプレート関数のコンパイルを修正しました。Now, オーバーロードされたテンプレート関数を使用すると、既存のすべてのテンプレート関数ではなく、必要なオーバーロードのみがインスタンス化されるようになりました。
    class X {  };
    
    void f(int)  {  }
      
    template<typename T>
    void a(T*) { new T(2); }  // 以前はコンパイラがここでエラーを生成した
      
    template<typename T>
    void a()  { f(0); }
      
      
    void OnInit()  { a<X>(); }  

  13. CopyTicks* 関数によるティック履歴アクセスを部分的に最適化しました。
  14. テスト/最適化パスの早期完了を可能にする新しいTesterStop関数を追加しました。これを呼び出すと、通常のテスト/最適化の完了時と同様に、取引統計およびOnTesterの結果全体がクライアント端末に渡されます。
  15. 新しいカスタム指標プロパティ(#property tester_everytick_calculate)を追加しました。これはストラテジーテスターで使用され、各ティックで指標計算を強制することができます。

テスター

  1. 非視覚的なテスト/最適化の場合、すべての使用済み指標(標準およびカスタム指標)はデータ要求中にのみ計算されます。例外は、EventChartCustom関数呼び出しを含み、OnTimerハンドラを適用する指標です。以前は、すべての指標は、ティックが(他の商品からでも)出現するごとにストラテジーテスターで無条件に計算されていました。この新機能により、テストと最適化が大幅に加速されます。

    各ティックで指標計算を強制するには、プログラムの#property tester_everytick_calculateプロパティを追加します。
    以前のコンパイラーバージョンを使用してコンパイルされた指標は、引き続き各ティックで計算されます。

  2. 関連するレポートをテスト/最適化して生成する際の預金通貨の正確度の計算を修正しました。
  3. ストラテジーテスターの操作を最適化して加速しました。
  4. いくつかのテストと最適化のエラーを修正しました。

MetaEditor

  1. 単語全体の検索を修正しました。検索時にアンダースコアは単語区切りではなく通常の文字としてみなされます。

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