2日ぶりの記事です
ちょっとしたアイディアがあって、ここ数日c言語ソースと格闘して実装してました
まだ、完全じゃないけど一応動作は確認できたところです
自分のシステムだと1000日分のバックテストに3分20秒くらいかかります
c言語なので、計算自体は爆速のはずで、株価データも配列に入っているので、データへのアクセスも爆速のはずです
実は3分20秒のうち、3分近くはHDD上の株価csvファイルからデータを読んで、配列に格納する処理にかかってます
もし、システムが、GUIのイベントドリブン方式の、終了ボタンを押すまでメモリ上に存在する方式なら、最初にHDDから株価データを読み込んでしまえば、以後はシステム内でストラテジーをとっかえひっかえしてバックテストを繰り返しても、3分近くのHDD上の株価csvファイルからデータを読む処理は発生しないので、バックテストがサクサクすすむはずですが・・・・
残念ながら、我が稚拙なスキルでは、GUIはTcl/Tkによる操作パネルのようなもので、そこから、script 経由でc言語で書かれた自作コマンドを起動するだけのナンチャッテGUIなので・・・
- 自作コマンド起動
- HDDから株価データを読み込む(3分かかる)
- 計算してデータファイル作成
- 自作コマンド終了
- グラフ描画script起動
- グラフ描画して終了
をバックテストのたびに繰り返すので、
- HDDから株価データを読み込む(3分かかる)
がどうしてもバックテスト毎に、毎回発生してしまいます
3分程度待てないことはないのですが・・・・
やはりどうしてもイライラするのです
そこで、ちょっとしたアイディアがひらめきました
HDDから株価データを読み込む(3分かかる)をなくせばいいと・・・w
でも、データ読まないとその後の計算意味ないじゃん
と思われるかもしれない
でも、閃いたアイディアだと、データを読み込まなくていいんですw
なんでかというと・・・・
最初から自作コマンドの中にデータを組み込んでおけばいいのですw
要は、c言語ソースの中にデータも入れてしまえばOKという話
データの読み込みは無くなって、ちょっと大きめの実行ファイルが起動するだけの話なので
- 3分20秒掛かっていた処理が
- 18秒にまで短縮!
という快挙を達成しました!
ただ・・・・
ちょっと落ちがあって・・・・
ソースにバカでかいデータが入っているので
- コンパイル時間が数秒から
- 2分以上かかるようになってしまったorz
現在はストラテジーのパラメタを弄るたびに再コンパイルする必要があるので、結局バックテストを繰り返すのに時間がかかる・・・・
でも、いずれ、ストラテジーパラメタの一部は再コンパイルなして書き換えられるようにするアイディアもあるので、それが完成すれば・・・・(期待が膨らむ)
でもまあ、それには手間とスキルが必要なので、とりあえず
という方式で、バックテスト時間25秒くらいのシステムにはすることができました
これだと、コンパイルは数秒で終わるので、現状のままでも大丈夫です
というわけで、新しいストは開発できてませんが、システムの開発はけっこう進んでいます
システムがGUIの立派なシステムではなく、ただのコマンドだと非常に面白いある可能性があって
- 複数のストラテジーデータを用意して
- scriptでforループでデータを切り替えながらコマンド起動して
- 期待値が一定以上あるストラテジーサマリーのみを残しておく
というスクリプトを作成し、十数時間かかってもいいので走らせるとか・・・
まああんまりやると過剰なカーブフィットになりそうですがw
大変ですけど、自作だとどんなアイディアでも、自分のスキルとやる気さえあれば何でもできます
それでうまくいくかは別ですがw