EasyLanguageで移動平均線の値を計算する時などに利用するAverage関数ですが、
・通常版のAverage関数
・高速版のAverageFC関数
という2種類が存在します。
「FC系の方がメモリは多少食うが処理速度が早い」とマニュアルに記載されていたので、普段はAverageFC関数を使うようにしているのですが、実際どのくらい計算速度に差が出るのかな?とふと気になったので検証してみました。
以下のようテストコードでストラテジーを作成。
using elsystem; Vars: StopWatch varSw(NULL), varAvg(0); Once Begin ClearPrintLog; varSw = StopWatch.Create(); varSw.Start(); End; Once ( LastBarOnChartEx ) Begin For Value0 = 0 To 999999 Begin varAvg = Average( Close, 100 ); //varAvg = AverageFC( Close, 100 ); End; varSw.Stop(); print( (varSw.ElapsedMilliseconds/1000).ToString(), " 秒" ); End;
適用したチャートの最終足で、Average関数もしくはAverageFC関数を100万回計算して、掛かった時間を算出するコードです。
これを適当なチャートに適用して結果を測定。毎回測定値は微妙に変わりますが、だいたい結果は以下になりました。
Average関数 | 4.289秒 |
AverageFC関数 | 0.029秒 |
かなり結果に差が出ましたね。
TradeStation付属マニュアルを見ると、AverageFC関数の方がAverage関数に比べてわずかにメモリーを使用するとの事ですが、特に気にするレベルの話でもなさそうなので今後もFC付き関数の方を使っていきたいと思います。