MetaTrader 4プラットフォームの新バージョン ビルド970:デモ口座開設の簡素化およびMQL4の機能の拡張

 

MetaTrader 4プラットフォームの新バージョン ビルド970:デモ口座開設の簡素化およびMQL4の機能の拡張

2016年6月3日金曜日に、MetaTrader 4プラットフォームの更新が行われます。更新には以下の内容が含まれます。

2016年7月1日に、ビルド940以前のMetaTrader 4プラットフォームのサポートを終了します

2016年7月1日から、ビルド940以前のMetaTrader 4クライアントターミナルのサポートが終了します。これらのターミナルは、新しいバージョンのサーバに接続することができませんので、あなたのターミナルを更新することを、強くお勧め致します。


MetaTrader 4 build 970

  1. ターミナル:デモ口座の開設ダイアログが簡素化されました。これからは、長いアンケートを記入する必要はなく、基本的なデータを入力し、取引パラメータ(口座タイプ、証拠金、レバレッジ) を選択するだけで十分です。




  2. MQL4:MQL4言語における新機能追加に関連して、EX4実行ファイルの形式が変更されました。以前のビルドのMetaEditorでコンパイルされた全てのEX4プログラムは、更新後も正常に動作します。このようにして、上位互換性が完全に保たれます。

    同時に、970以降のビルドでコンパイルされたEX4プログラムは、以前のビルドのターミナルで動作することはなく、下位互換性はありません。

  3. MQL4:抽象クラスと純粋仮想関数のサポートが追加されました。

    抽象クラスは、将来におけるより具体的な派生クラスを作成する一般的なエンティティを作成する為に作られています。抽象クラスは、いくつかの他のクラスの為に基底クラスとして使用することができるだけなので、抽象クラスのオブジェクトタイプを作成することはできません。

    純粋仮想関数を一つでも含むクラスは、抽象クラスとなります。したがって、抽象クラスから派生したクラスは、その純粋仮想関数を実装する必要があり、そうしないと、これらは同様に抽象クラスになります。

    仮想関数は、純粋指定子構文を使用し、『純粋』として宣言されます。例として、共通機能を提供する為だけ型に作成されるCAnimalクラスを見てみましょう。CAnimalのオブジェクト自体は、実際の使用には一般的すぎます。したがって、CAnimalクラスは、抽象クラスの為の良い例となります。
    class CAnimal
      {
    public:
                          CAnimal();     // 構造体
       virtual void       Sound() = 0;   // 純粋仮想関数
    private:
       double             m_legs_count;  // 足数
      };
    ここでのSound()関数は、純粋仮想関数PURE(=0)の指定子で宣言されている為、純粋仮想となります。

    (=NULL)または(=0)と純粋指定子PUREが指定されている仮想関数のみが純粋仮想関数となります。抽象クラスの使用と宣言例:
    class CAnimal
      {
    public:
       virtual void       Sound()=NULL;   // PUREメソッドは派生クラスで―バーライドする必要があり、CAnimalクラス自体は抽象クラスになり、作成されません
      };
    //--- 抽象クラスからの子
    class CCat : public CAnimal
     {
    public:
      virtual void        Sound() { Print("Myau"); } // PUREはオーバーライドされ、CCatクラスは抽象クラスで、作成できます
     };
    
    //--- 誤用例
    new CAnimal;         // 'CAnimal'エラーーコンパイラはエラー"cannot instantiate abstract class"を出します
    CAnimal some_animal; // 'CAnimal'エラー - コンパイラはエラー"cannot instantiate abstract class"を出します
    
    //--- 正しい使用例
    new CCat;  // エラーなし - CCatは抽象暮らしではない
    CCat cat;  // エラーなし - CCatは抽象クラスではない
    抽象クラスの使用の制限
    純粋仮想関数(直接または間接)の抽象クラスのコンストラクタによる呼び出しの際、結果は未定義になります。
    //+------------------------------------------------------------------+
    //| 抽象基底クラス                                               |
    //+------------------------------------------------------------------+
    class CAnimal
      {
    public:
       //--- 純粋仮想関数
       virtual void      Sound(void)=NULL;
       //--- 関数
       void              CallSound(void) { Sound(); }
       //--- コンストラクタ
       CAnimal()
        {
         //--- 仮想メソッドの明示的呼び出し
         Sound();
         //--- 暗黙的呼び出し(第三の関数を介して)
         CallSound();
         //--- 仮想性や子孫における関数呼び出しの再定義に関わらず
         //--- コンストラクタまたはデストラクタでは常に自分の関数が呼び出されます
         //--- もし呼び出される関数が純粋仮想の場合
         //--- 呼び出しは重大な実行エラー"pure virtual function call"をもたらします
        }
      };
    しかしながら、抽象クラスのコンストラクタとデストラクタは、他のメンバー関数を呼び出すことができます。

  4. MQL4:イベントモデルの構成の簡素化の為に、関数へのポインターのサポートが追加されました。

    関数へのポインターを宣言する為には、『関数へのポインター』のタイプを明確にしてください。
    typedef int (*TFunc)(int,int);
    これで、TFuncがタイプとなり、変数の関数ポインターを宣言することができます。
    TFunc func_ptr;
    func_ptr変数に、以後の呼び出しの為に、関数へのポインタを保存することができます。
    int sub(int x,int y) { return(x-y); }
    int add(int x,int y) { return(x+y); }
    int neg(int x)       { return(~x);  }
    
    func_ptr=sub;
    Print(func_ptr(10,5));
    
    func_ptr=add;
    Print(func_ptr(10,5));
    
    func_ptr=neg;           // エラー: negはint 型(int,int)を持っていません
    Print(func_ptr(10));    // エラー: 二つのパラメータがある必要があります
    関数のポインターを保存し、パラメータとして引き渡すことができます。クラスの非静的メソッドにポインターを取得することはできません。

  5. MQL4:クライアントターミナルのプロパティENUM_TERMINAL_INFO_INTEGERにTERMINAL_SCREEN_DPI(画像の情報出力解像度は、DPIで測定される)が追加されました。このパラメータを知ることで、異なる解像度のモニターで同じように表示されるように、グラフィックオブジェクトのサイズを指定することができます。
  6. MQL4:クライアントターミナルのプロパティENUM_TERMINAL_INFO_INTEGERにTERMINAL_PING_LAST(マイクロ秒単位の取引サーバーまでのPingの最新の既知値)が追加されました。1秒は100万マイクロ秒です。
  7. MQL4: カスタムインディケータのDRAW_NONEバッファ(チャート構築なし)は、これからはチャートウィンドウの最大/最小値の計算に関与しません。
  8. MQL4: OBJ_LABELとOBJ_TEXTオブジェクト上でのマウスの動きやマウスのクリックに関連したイベントの作成が修正されました。以前は、これらが他のOBJ_RECTANGLE_LABELとOBJ_RECTANGLEオブジェクトの範囲内にあった場合に、イベントが正常に作成されませんでした。
  9. MQL4: カスタムインディケータの高さゼロのヒストグラムバーの描写が修正されました。以前はこれらのバーは描写されませんでしたが、これからはこれらのバーは1ピクセルの高さで描写されます。
  10. シグナル:利用可能なシグナルや購読者の取引商品の比較時の取引商品の検索エラーを修正しました。
  11. テスター:テスト設定で現在のスプレッドを使用している場合のfxtファイル内のスプレッド適用が修正されました。
  12. マーケット:マーケットのリスト表示のエラーを修正しました。
  13. MetaEditor:『完全なワードのみ』モードにおけるファイルごとのワード検索が修正されました。
  14. MetaEditor:対応するファイルのコンパイル結果の列をダブルクリックすることでファイルへ移動することができるようになりました。
  15. MetaEditor:Windows XPの幾つかのコントロールエレメントの表示が修正されました。
  16. クラッシュログで報告された不具合を修正しました。

LiveUpdateシステムを介して更新されます。

 

本日、急にインジケータが表示できなくなりました。

アップデートのせいですか?

 
お世話になります。

970へのバージョンアップ以降、OnChartEvent内で文字列のグローバル変数やクラスのメンバ変数が正しく機能していないようです。
Printで書き出すと文字化けをしております。


OnChartEvent内で下記を記述。
オブジェクトをクリックでオブジェクト名をグローバル変数に記憶。
Aを押してグローバル変数を表示すると文字化けをしております。
お手数ですが確認をして頂けないでしょうか。

よろしくお願いします。

//グローバル変数で定義
string line_name;

  if (id == CHARTEVENT_KEYDOWN) { 
    if (lparam==65) { //A
        Print(line_name);
    }
  }
  else if (id == CHARTEVENT_OBJECT_CLICK) {
    line_name = sparam;
    Print(line_name);
  }
理由: