プロファイリングとは、実行中にプログラムパラメータを収集することを意味します。 プロファイリング中に、実行時間と個々の関数とプログラムコード行の呼び出し数が測定されます。 このツールを使用すると、プログラマは最も遅いコードセクションを見つけて最適化することができます。
プロファイルは、トレーディングプラットフォームの通常のチャートで実行することができます。 最初のケースでは、プログラムがリアルタイムで更新されたチャートで起動されます。 プログラムの動作は、実際の状態で確認できます。 2番目のケースでは、プログラムは、ビジュアルモードでストラテジーテスターで起動されます。 このメソッドの利点は、トレードサーバーからの実際のデータまたは特定のトレード条件の発生を待つ必要がないことです。
多くのプログラムは、特にインジケーターは、新しいティック (OnTick、OnCalculate) の到着時にのみ計算を実行します。 したがって、パフォーマンスを評価するためには、リアルタイムで新しいティックを待つ必要があります。 履歴データを使用してプロファイリングを行う場合は、相場が閉じている週末でもプログラムのパフォーマンスをテストできます。
プロファイリングには「サンプリング」方式が使用されます。プロファイラーは、MQLプログラムの操作を一時停止し(1秒あたり約10 000回)、特定のコード部分で一時停止が発生した回数に関する統計を収集します。これには、コールスタックを分析して、コードの合計実行時間に対する各関数の「貢献」を判断することが含まれます。プロファイリングの最後に、実行が一時停止された回数と、各関数が呼び出しスタックに表示された回数に関する情報を受け取ります。
サンプリングは軽量で正確な方法です。他の方法とは異なり、サンプリングは分析されたコードに変更を加えないため、実行速度に影響を与える可能性がありません。
デフォルトでは、プログラムはプロファイリングのために現在開いているチャートで実行されます。履歴データに対してプロファイリングを実行する場合は、ストラテジーテスターの現在の設定が使用されます。MetaEditorオプションを使用して、他のチャートを指定したり、テスター設定の一部を再定義したりできます。
同じ設定セクションでは、コンパイル中に関数のインライン化を有効または無効にできます。インライン化中には、関数コードが直接呼び出しの場所に追加され、場合によってはプログラムを大幅に高速化できます。ただし、インライン化された関数のプロファイリングは困難になります。インライン化を無効にして、「純粋」関数に関するレポートを取得できます。
このオプションは、明示的なインライン化のみを無効にします。コンパイラによって暗黙的に生成される関数は、引き続き使用されます。このような関数は、[inlined]プレフィックスで表示されます。
プロファイリングレポートに詳細を含めるために、コード最適化モードを無効にすることができます。最適化を行わない場合のコード速度は数倍遅くなる可能性がありますが、このモードではコードカバレッジが広くなります。コードのボトルネックは最適化なしでは不正確になる可能性があることに注意してください。
最適化管理オプションはプロジェクト設定でも使用できます。
プログラムのソースコード (MQ4 または MQ5) を開きます デバッグメニューまたは標準ツールバーを選択します。実際のデータでプロファイリングを開始する "または "履歴データのプロファイリングを開始する "
その後、プロファイリング用の特別なプログラムバージョンが自動的にコンパイルされます。 選択したプロファイルタイプに応じて、プログラムはトレーディングプラットフォームまたはストラテジーテスタ (ビジュアルモード) で通常のチャートで起動されます。
|
起動後、アプリケーションを使用して、すべての関数を最大にしようします。 プロファイラがすべてのプログラムの関数と行の実行時間を測定するために必要です。
次に、プロファイリングをストップ: チャートからプログラムを削除します。Debugメニューまたは標準ツールバー。でプロファイリングをストップします
より正確なプロファイリング結果を得るには、プログラムを使用する代わりに、チャートから手動で削除することをお勧めします。プロファイリングコマンドをストップ |
プロファイリングが終了すると、結果はツールボックスウィンドウのProfiler(プロファイラー)タブに表示されます。結果はさらにコードに直接表示され、該当する関数の行がハイライト表示されます。関数の完了にかかった時間が長いほど、ハイライトが明るくなります。この機能により、プログラムのボトルネックをすばやく視覚的に見つけることができます。
プロファイリングレポートは、関数またはプログラム行として表示され、それぞれに2つの指標があります。
値は絶対量および合計量の割合として表示されます。
デフォルトでは、リストにはトップレベルにある大きな関数が表示されます。より小さい関数に切り替えるには、行をダブルクリックします。
プロファイリングレポートは、呼び出しと行の2つのモードで表示できます。2番目のモードでは、コードを最大限に詳細に探索し、最も時間のかかる関数だけでなく、そのような関数で最も時間のかかる部分も特定できます。モードはコンテキストメニューを使用して切り替えます。
便宜上、MQL言語のさまざまな要素がレポートにアイコンとして表示されます。
これらのタイプの関数に加えて、プロファイラーでは以下が表示されます。
関数が配置されているファイルの行番号とパスを表示するには、レポートの該当する行にマウスカーソルを合わせます。ファイル内の関数を表示するには、その関数をダブルクリックします。
プロファイラは、すべての関数ではなく、プログラムの操作中に呼び出されたものだけを表示します。 |
コンテキストメニューでは、次のコマンドを使用できます。