最適化を最適化する・・・//MQL4の高速化(2) 速度測定

ごく一部の人たちが注目している企画に、1日で500万円を1億円にする( http://ameblo.jp/isobigboyjp/
)というのがあるそうです。20倍ということは、5万円が1日で100万ですか...。成功するか?しないか?にベットするとしたら、残念ながら後者かなぁ…と思います。(コラ
1日で実現するという時間制約が結構きつくて、大波が来るかどうか?が肝だと思うのですが、、興味のある人は見てみてください。




さて、本題です。
昨日紹介した実行速度測定法は、for ループを何千万回もまわすことで、関数呼び出しに掛かる時間を個別に計測するものでした。これによって、コードの書き方のわずかな違いによる実行速度の差を知ることができ、コーディング時の参考になります。


ただ、この方法だけでは、断片的な最適化(部分最適化)しか出来ず、EAの全体での実行速度の最適化には不十分なので、別の速度測定法を紹介します。








それは…バックテストに掛かる時間を測定すればよいのです。


100円ショップで買ったストップウォッチを片手に、普段どおりのバックテストを行って時間を計測しても構わないのですが、Optimization 機能を利用するのが楽です。

↑実行時間を計りたいので、チェックをいれません。
この状態で Optimization を行うと…

↑1度だけ実行されて、掛かった時間が表示されます。


たった4秒では、有意な比較が困難なので、EA側にループ用の外部変数を追加します。

extern int Loop = 10;


これで、Optimization のループ実行が実現できます。

↑ループ回数はEAによって適宜調整します。
↓ループ10回で測定した結果がこんな感じ。


わざわざ、ループ変数を用いなくても、もともとの外部変数のパラメータを利用しても構いません。
その場合、以下のチェックを外した方が無難です。このチェックがあると、意図した実行回数にならないのと、場合によっては無作為に選ばれたパラメータで実行されてしまうことがあるからです。


これで高速化のための準備ができました。次回は、知っておいて損は無い簡単なテクニックを紹介します。
(但し、コメント欄に希望者が居れば…ですが。笑。