複数PCで効率的にストラテジーの検証をする方法

たまにはIT技術的な記事を書きます。

今日は複数PC×複数プロセスで並列かつ効率的にストラテジーを検証する方法を紹介します。

システムトレードの検証は多いと数千~数万といったパターンの検証を行うことがあります。
数万をすべて1台の端末の1プロセスで実施するよりも複数のPCかつ複数プロセスで実施した方が素早く結果が得られます。

しかし、これがなかなか大変です。

①プログラムを各PCに配布したり、結果を1か所に集めるのが面倒

②PCごと、プロセスごとの分割をきっちりしないと、あるPC(プロセス)は早く終わって、あるPC(プロセス)はいつまでも終わらないといった非効率的なことになる。

③プロセス、PCごとの排他をしっかり検討しておかないと出力データが上書きされたり、壊れたりする恐れがある。一方で、どのプロセスにも割り当てられずに抜けが生じる恐れもある。

これらをすべて解決してくれるカギがあります。それは、Dropboxです。

以下、サンプルのプログラムを使って私なりの検証スタイルを紹介したいと思います。

1. コアプログラムとドライバプログラム

サンプルのプログラムとしてコナーズの555戦略を利用します。
これは「5日移動平均線から -5%乖離した株に対して、前日終値-5%の指値で仕掛ける」という戦略です。
(あらかじめお断りしておくと、このシステムはあまり良いパフォーマンスを発揮していませんし、私が運用したこともありません。あくまでサンプル用です)

この場合最適化は555の数字をそれぞれ可変にして検証することになります。ここではそれぞれの数字を1~9に変えて検証します。つまり、9の3乗=729パターンを検証することになります。

このとき、1パターンを検証するプログラムを「コアプログラム」、コアプログラムを729回呼び出すプログラムを「ドライバプログラム」と私は読んでいます。

ドライバプログラムは以下のようになります。

上の例では”555_core.pl”がコアプログラムで、このコアプログラムはSTART,ENDの日付と各パラメータを受け取り検証結果をファイルに出力します。
コアプログラムは非常に大きなプログラムになりますが、先頭部分は以下の通りです。

コアプログラム先頭でファイルの存在チェックをします。すでにファイルがある場合は何もせずに抜けます。これによって排他をかけています。

この時点で1台のパソコンならいくつでも並列に処理できます。複数個のコマンドプロンプトを立ち上げ、それぞれでドライバプログラムを立ち上げると、コマンドプロンプトの数だけ並行して処理することができます。

2.Dropboxで複数台PC並列処理をする

つづいて複数台PCで並列処理するために、各PCにDropboxをインストールします。
さらにドライバプログラム、コアプログラム及びコアプログラムの出力先をDropboxの管理領域に配置します。

これだけで準備完了です。各PCから好きなだけドライバプログラムを稼働させます。
各PCでそれぞれコアプログラムが動いた瞬間にファイルが(サイズ0で)出力され、Dropboxにより全PCに同期されます。
このおかげで重複すること(*)も抜けることもなく全パターンのテストが行えます。

当初に挙げた3つの問題点が見事に解決できるわけです。

しかし、注意点が二つあります。
1つはDropboxの同期が間に合わない場合、2台のPCで同じパラメータの検証をしてしまい、時間と資源が無駄になります。
しかし、Dropboxのようなファイル共有ソフトはたくさんありますが、Dropboxほど高速な同期を行ってくれるソフトはありません。ファイルサイズやPC、ネットワーク性能にもよりますが、1検証に数十秒ほどかかるのであればほぼ発生しません。

もう1つは入力データを漏れなく忘れずに同期しておくことです。プログラムはDropboxの下に置いて勝手に同期させればいいのですが、入力データは何十年という株価データやその他もろもろのデータがあり、中にはDroboxの環境下に置くには大きすぎることがあります。その場合、私はDropboxの環境外において手動で同期させています。

この同期を忘れていると、パソコンによって出力結果にずれが生じるという致命的な問題になり、すべてのデータを取り直す羽目になります(何度も経験あり)。
よろしければ応援クリックお願いします

にほんブログ村 株ブログ 株 自動売買へ
にほんブログ村

システムトレードランキング




シェアする

  • このエントリーをはてなブックマークに追加

フォローする