2023.12
林貴晴/AMSER Inc.
今回は一般に動作速度が遅いとされる表示系の機能に焦点を当て表示方法の速度を検証します。さらに、表示時の注意点や高速化を促進するテクニックについて、具体的なコード例を交えながら詳しく解説していきます。
MQL5には主だった表示方法として’Print()’,’Comment()’,’Alert()’,’MessageBox()’,およびオブジェクト関数群があります。
‘Alert()’、’MessageBox()’はポップアップの為、速度測定には適していないと判断しこれらを除外した残りの3つを比較します。
計測用サンプルコード
ulong Start,Time_Comment,Time_Print,Time_OBJ; void OnInit() { Start = GetMicrosecondCount(); for (int i = 0; i < 100000; i++ ) { Comment(i); } Time_Comment=GetMicrosecondCount() - Start; Start = GetMicrosecondCount(); for (int i = 0; i < 100000; i++ ) { Print(i); } Time_Print=GetMicrosecondCount() - Start; Start = GetMicrosecondCount(); for (int i = 0; i < 100000; i++ ) { ObjectCreate(0,"OBJ_1",OBJ_LABEL,0,0,0); ObjectSetString(0,"OBJ_1",OBJPROP_TEXT,(string)i); } Time_OBJ=GetMicrosecondCount() - Start; ObjectDelete(0,"OBJ_1");//オブジェクトの削除 Print("Comment: ",Time_Comment); Print("Print: ",Time_Print); Print("OBJ: ",Time_OBJ); ExpertRemove(); }
各表示方法を100,000回繰り返し、それぞれに必要な時間を計測します。
計測開始前に’GetMicrosecondCount()’の時間をStartに代入し、それぞれの表示方法を繰り返した後、再び時間を取得してその差を計測時間として記録します。
最後に’Print()’でそれぞれに必要な時間をログに出力します。
結果)
Comment: 606,005
Print:60,747
OBJ:206,583
一番高速なのはPrint()であり、次いでオブジェクト表示が続きます。一番遅かった’Comment()’は’Print()’の約10倍、オブジェクト表示の約3倍の時間がかかりました。
‘Print()’は出力先が異なりますが、代替できるときは’Print()’の使用を、’Print()’で代替不可能な場合はオブジェクト表示の使用を推奨します。
高速化を意識した注意点
表示機能は、人間とのコミュニケーションにおいて非常に役立ちます。しかし、表示処理は多くの計算リソースを消費し、その結果、システム全体の速度が遅くなる可能性があります。このため、効率的な表示方法の選択、適切な表示回数の制限、必要な情報量の把握、そしてプログラム内での最適な表示タイミングの選定は、高速で効率的なエキスパートアドバイザー(EA)を開発する上で不可欠です。
表示方法については、さまざまなオプションがありますが、それぞれが異なる速度とリソース消費を伴います。たとえば、Print()関数は迅速に動作する一方で、Comment()関数は比較的遅い処理時間を要します。適切な方法を選択することで、システムのパフォーマンスを向上させることが可能です。
また、表示する情報の量を最小限に抑えることも重要です。不要な情報は省略し、必要な情報のみを簡潔かつ明瞭に表示することで、システムの速度を保ちつつ、ユーザーに必要な情報を効果的に提供することができます。
最後に、コード内での表示タイミングを考慮することも重要です。例えば、処理の最後に表示を行うことで、システムの主要な処理に影響を与えずに、必要な情報を提供できます。
以上の点を考慮し、表示方法、表示頻度、表示量、および表示タイミングを適切に管理することで、より高速で効率的なEAの開発が可能となります。
林 貴晴(AMSER株式会社代表取締役)
内資系薬品会社で約10年勤務の後、
外資系製薬会社(現IQVIA及びGSK)で合計約10年を勤務
その後EA AMSERを開発し、その成績を評価され、株式会社ゴゴジャンの部長として抜擢。
現在はAMSER株式会社代表取締役、株式会社トリロジー他で役員を兼任。