2016年6月8日水曜日

【EA高速化】バックテスト時間を短くしよう 関数は使用したほうが速いか?

関数を使用すると、関数を呼び出しに行く時間がかかる気がします。

ソースコードは関数を使用すると見やすくなります。
さて速度への影響はいかがでしょうか

//関数使用
int a,t;
void OnTick()
  {
  t=GetMicrosecondCount();
  for(int i=0;i<1000000;i++)
    {  
    A();
    A();
    }
  Comment(GetMicrosecondCount()-t);
  }
void A(){a++;}

//関数未使用
int a,t;
void OnTick()
  {
  t=GetMicrosecondCount();
  for(int i=0;i<1000000;i++)
    {  
    a++;
    a++;
    }
  Comment(GetMicrosecondCount()-t);
  }





関数を使わないほうが222マイクロ秒/二百万回早いという事ですね。


まとめ
①定義済み関数は複数回使う場合定数に入れたほうがわずかに速い。(どちらでもいいレベル)
②IF文の速度差は僅差のためソースコードの見やすいほうがいい。
③関数の速度差は気にするほどではない。ソースの見やすいほうがいい。

どうしても重たいEAの場合気にすると速くなりますが、普段からする必要はないと思います。

いままで、のもやもやがかいけつしてすっきりです!!










0 件のコメント:

コメントを投稿