MetaTrader 4プラットフォームの新バージョン build 900:MQL4でのクラスパターンとメモリー動作の最適化 新しいコメント MetaQuotes 2015.10.20 07:05 MetaTrader 4プラットフォームの新バージョン build 900:MQL4でのクラスパターンとメモリー動作の最適化2015年10月22日木曜日、MetaTrader 4プラットフォームの更新が行われます。更新には以下の内容が含まれます。MetaTrader 4 Client Terminal build 900 ターミナル:非アクティブ(未接続)アカウントのパスワード変更に関する不具合の修正を行いました。ターミナル:大容量のヒストリー使用時のメモリーの使用と解放を最適化しました。ターミナル:大容量のニュースカテゴリー使用を修正、また最適化しました。シグナル:『ナビゲータ』ウィンドウのコンテクストメニューのシグナルからの回答を修正しました。MQL4:C++でのパラメータ化されたクラスを作成することを可能にするクラスパターンが追加されました。これは、より多く抽出したり、一様に異なるクラスのオブジェクト操作の為に同じコードを使用することを可能にするものです。使用例://+------------------------------------------------------------------+ //| 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のオブジェクトは削除しなくてもよい }実行結果:TemplTest EURUSD,M1: Ptr: 30 31 32 33 34 35 36 37 38 39TemplTest EURUSD,M1: Dbl: 20.0 21.0 22.0 23.0 24.0 25.0 26.0 27.0 28.0 29.0TemplTest EURUSD,M1: Int: 10 11 12 13 14 15 16 17 18 19MQL4: 時折MQL4-プログラムが落ちる原因となっていた、ArrayCopy機能でのメモリーの再分配を修正しました。テスター:インディケータテスト終了後にグローバルレベルにおいて指定された変数がリセットされる不具合を修正しました。テスター:取引サーバへの未接続下でのテストを修正しました。MetaEditor:В MetaAssistでの型引用時の機能名の定義を修正しました。MetaEditor: 大きなファイルを開く修正をしました。MetaEditor:ライブラリページからの検索呼出の為のホットキーFが追加されました。同様に、コードを使用するコマンドの為にステータスバーに多数のプロンプトが追加されました。:インデントの増大/減少、ナビゲーション、ケースシフトなど。クラッシュログで報告された不具合を修正しました。LiveUpdateシステムを介して更新されます。 New MetaTrader 4 Platform Build 900: Class Templates in MQL4 and Optimized Memory Use Any questions from newcomers on MQL4 and MQL5, help and discussion on algorithms and codes FIR filters 新しいコメント 理由: キャンセル 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
MetaQuotes 2015.10.20 07:05 MetaTrader 4プラットフォームの新バージョン build 900:MQL4でのクラスパターンとメモリー動作の最適化2015年10月22日木曜日、MetaTrader 4プラットフォームの更新が行われます。更新には以下の内容が含まれます。MetaTrader 4 Client Terminal build 900 ターミナル:非アクティブ(未接続)アカウントのパスワード変更に関する不具合の修正を行いました。ターミナル:大容量のヒストリー使用時のメモリーの使用と解放を最適化しました。ターミナル:大容量のニュースカテゴリー使用を修正、また最適化しました。シグナル:『ナビゲータ』ウィンドウのコンテクストメニューのシグナルからの回答を修正しました。MQL4:C++でのパラメータ化されたクラスを作成することを可能にするクラスパターンが追加されました。これは、より多く抽出したり、一様に異なるクラスのオブジェクト操作の為に同じコードを使用することを可能にするものです。使用例://+------------------------------------------------------------------+ //| 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のオブジェクトは削除しなくてもよい }実行結果:TemplTest EURUSD,M1: Ptr: 30 31 32 33 34 35 36 37 38 39TemplTest EURUSD,M1: Dbl: 20.0 21.0 22.0 23.0 24.0 25.0 26.0 27.0 28.0 29.0TemplTest EURUSD,M1: Int: 10 11 12 13 14 15 16 17 18 19MQL4: 時折MQL4-プログラムが落ちる原因となっていた、ArrayCopy機能でのメモリーの再分配を修正しました。テスター:インディケータテスト終了後にグローバルレベルにおいて指定された変数がリセットされる不具合を修正しました。テスター:取引サーバへの未接続下でのテストを修正しました。MetaEditor:В MetaAssistでの型引用時の機能名の定義を修正しました。MetaEditor: 大きなファイルを開く修正をしました。MetaEditor:ライブラリページからの検索呼出の為のホットキーFが追加されました。同様に、コードを使用するコマンドの為にステータスバーに多数のプロンプトが追加されました。:インデントの増大/減少、ナビゲーション、ケースシフトなど。クラッシュログで報告された不具合を修正しました。LiveUpdateシステムを介して更新されます。 New MetaTrader 4 Platform Build 900: Class Templates in MQL4 and Optimized Memory Use Any questions from newcomers on MQL4 and MQL5, help and discussion on algorithms and codes FIR filters
MetaTrader 4プラットフォームの新バージョン build 900:MQL4でのクラスパターンとメモリー動作の最適化
2015年10月22日木曜日、MetaTrader 4プラットフォームの更新が行われます。更新には以下の内容が含まれます。
MetaTrader 4 Client Terminal build 900
実行結果:
TemplTest EURUSD,M1: Dbl: 20.0 21.0 22.0 23.0 24.0 25.0 26.0 27.0 28.0 29.0
TemplTest EURUSD,M1: Int: 10 11 12 13 14 15 16 17 18 19
LiveUpdateシステムを介して更新されます。