マイクロソフトは1ヶ月前Windows 10 Creators Update オペレーティングシステムのメジャーアップデート(バージョン1703)をリリースしました。一部のユーザーは、このアップデートをインストールした後に端末でMQL4プログラムを実行することができませんでした。この問題は、新しいMetaTrader 4プラットフォームビルド1080で修正されました。エキスパートアドバイザーと指標はチャートで正しく実行され、更新されたMetaEditorを使用した再コンパイルは必要ありません。
バージョン1065以前のMetaTrader 4クライアント端末のサポートは、2017年10月1日に廃止されます。サポートされていない端末のビルドは、新しいサーバーバージョンに接続することはできません。事前に端末を更新することを強くお勧めします。
この新バージョンでは、時間枠を切り替えた後のチャートでのエキスパートアドバイザーの再起動に関連したエラーが修正されました。エキスパートアドバイザーは停止せずに正しく再初期化されます。
MetaTrader 4プラットフォームの更新は、Windows 10 Insider Previewビルド15007のリリースに合して2017年2月3日にリリースされる予定です。Windows 10システムの新バージョンのセキュリティアップデートによって、MetaTrader 4クライアント端末の時折起動できないことがあります。
今回のWindows 10 updateアップデートに備えて、新しいプラットフォームバージョンをインストールしてください。
新バージョンには、トレーダーと他のMQL5.communityメンバーのチャットを可能にする無償のチャット機能が内蔵されています。メッセージ受信者のセクションに相手のユーザーのログインを指定し、そのモバイルデバイスに直接メッセージを送信します。
メッセージの外観が一新されました。これからはMQL5.communityでのメッセージのやり取りやデスクトッププラットフォームからの通知は、人気のモバイルメッセンジャーで見慣れたチャット仕様で表示されます。
プラットフォームは22か国語に切り替えることができます。取引で英語を選択する場合には、デバイスの言語は変えずに、『設定』ページ(iPad版では『詳細』ページ)で英語をオンにしてください。
class CFoo { }; class CBar { }; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { void *vptr[2]; vptr[0]=new CFoo(); vptr[1]=new CBar(); //--- for(int i=0;i<ArraySize(vptr);i++) { if(dynamic_cast<CFoo *>(vptr[i])!=NULL) Print("CFoo * object at index ",i); if(dynamic_cast<CBar *>(vptr[i])!=NULL) Print("CBar * object at index ",i); } CFoo *fptr=vptr[1]; // ポインタを与えるエラー、vptr[1]はCFooオブジェクトではありません } //+------------------------------------------------------------------+
string text="Hello"; ushort symb=text[0]; // シンボル'H'のコードを返します
クラッシュログで報告された不具合を修正しました。
class CAnimal { public: CAnimal(); // 構造体 virtual void Sound() = 0; // 純粋仮想関数 private: double m_legs_count; // 足数 };ここでのSound()関数は、純粋仮想関数PURE(=0)の指定子で宣言されている為、純粋仮想となります。
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"をもたらします } };しかしながら、抽象クラスのコンストラクタとデストラクタは、他のメンバー関数を呼び出すことができます。
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)); // エラー: 二つのパラメータがある必要があります関数のポインターを保存し、パラメータとして引き渡すことができます。クラスの非静的メソッドにポインターを取得することはできません。
クラッシュログで報告された不具合を修正しました。
これからはアプリケーションへのアクセスの為にPINコードを設定することができます。あなたのアカウントは、モバイルデバイスを無くした場合にもしっか りと守られます。アプリケーションの設定で『画面ロック』をオンにしてください。デフォルトではワンタイムパスワード生成器へのアクセスの為のものと同じ PINコードが使用されます。
新しいバージョンには、多くの改善と修正も含まれています。
MetaTrader 4ウェブプラットフォームの新バージョンに、テクニカル分析の為のフルセットが加わりました。これからは30出井の最も人気のテクニカルツールを、デスクトップ版MetaTrader 4と同様に利用することができます。
アクセラレータオシレーター |
DeMarker | 移動平均 |
Accumulation/Distribution | エンベロープ | オシレーターの移動平均 |
アリゲーター | フォースインデックス |
バランスボリューム |
平均方向性指数 | フラクタル | パラボリックSAR |
平均トゥルーレンジ |
ゲイターオシレーター | 相対力指数 |
オーサムオシレーター | 一目均衡表 | 相対的活力指数 |
ベアーズパワー |
MACD | 標準偏差 |
ボリンジャーバンド |
マーケットファシリテーションインデックス |
ストキャスティクスオシレーター |
ブルズパワー |
モメンタム | ボリューム |
コモディティチャンネル指標 |
マネーフローインデックス | ウィリアムズパーセントレンジ |
アプリケーションの現地化の作業が進められています:ウェブプラットフォームインターフェイスは世界38か国語で利用することができます。さらに14か国語が追加されました。
オランダ語 |
リトアニア語 | クロアチア語 |
ギリシャ語 | ルーマニア語 | チェコ語 |
ヘブライ語 | セルビア語 |
スウェーデン語 |
イタリア語 | スロベニア語 |
エストニア語 |
ラトビア語 |
フィンランド語 | |
今すぐウェブプラットフォームを開き、アプリケーションの更新をご評価ください!
MetaTrader 4ウェブプラットフォームの最新バージョンでは、最新技術のWebGLを採用することで、チャート動作が大幅にスピードアップし、これからは一度に沢山のインディケータを起動させても、ウェブプラットフォームのパフォーマンスに影響を与えません。
テクニカルインディケータの導入作業が始まりました。現時点で、ビル・ウィリアムスのインディケータがすでに利用できます。
MQL4マスターにチュートリアルビデオ『取引ロボットの作成方法』のリンクが追加されました。この3分程のビデオをご覧いただき、1つのコード配列も書くことなく、取引ロボットを作成してください。
クラッシュログで報告された不具合を修正しました。
//+------------------------------------------------------------------+ //| TemplTest.mq5 | //| Copyright 2015, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2015, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ //| クラスパターンを指定します。 | //+------------------------------------------------------------------+ template<typename T> class TArray { protected: T m_data[]; public: bool Append(T item) { int new_size=ArraySize(m_data)+1; int reserve =(new_size/2+15)&~15; //--- if(ArrayResize(m_data,new_size,reserve)!=new_size) return(false); //--- m_data[new_size-1]=item; return(true); } T operator[](int index) { static T invalid_index; //--- if(index<0 || index>=ArraySize(m_data)) return(invalid_index); //--- return(m_data[index]); } }; //+------------------------------------------------------------------+ //| ポインター配列のパターンクラスは | //| デストラクタに保存されたポインターオブジェクトを削除します。 | //| | //| TArrayクラスパターンからの継承にご注意ください。 | //+------------------------------------------------------------------+ template<typename T> class TArrayPtr : public TArray<T *> { public: void ~TArrayPtr() { for(int n=0,count=ArraySize(m_data);n<count;n++) if(CheckPointer(m_data[n])==POINTER_DYNAMIC) delete m_data[n]; } }; //+------------------------------------------------------------------+ //| クラスを指定し、それへのオブジェクトポインタを配列に保存します。 | //+------------------------------------------------------------------+ class CFoo { int m_x; public: CFoo(int x):m_x(x) { } int X(void) const { return(m_x); } }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ TArray<int> ExtIntArray; // TArrayのパターンをインスタンス化します(TArrayのパターンをint型に特殊化) TArray<double> ExtDblArray; // TArrayのパターンをインスタンス化します (TArrayのパターンをdouble型に特殊化します) TArrayPtr<CFoo> ExtPtrArray; // TArrayPtrのパターンをインスタンス化します (TArrayPtrのパターンをCFoo型に特殊化します) //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- 配列データを書き込みます。 for(int i=0;i<10;i++) { int integer=i+10; ExtIntArray.Append(integer); double dbl=i+20.0; ExtDblArray.Append(dbl); CFoo *ptr=new CFoo(i+30); ExtPtrArray.Append(ptr); } //--- 配列の内容を出力します。 string str="Int:"; for(i=0;i<10;i++) str+=" "+(string)ExtIntArray[i]; Print(str); str="Dbl:"; for(i=0;i<10;i++) str+=" "+DoubleToString(ExtDblArray[i],1); Print(str); str="Ptr:"; for(i=0;i<10;i++) str+=" "+(string)ExtPtrArray[i].X(); Print(str); //--- TArrayPtr<CFoo>のオブジェクトデストラクタで削除されるため、newを通して作成されたCFooのオブジェクトは削除しなくてもよい }実行結果: