Raspberry Pi 2 で動かす日本株バリュー・スクリーナー
ターミナルで動かしていた日本株のスクリーナーを、ブラウザで見て絞り込める小さなサイトに しました。取得・スコアリング・バックテスト・配信まで、いまは全部 Raspberry Pi 2 で 動いています。家にある一番古い端末です。最初はMacで組みました。
ファイルがすべてをこなす
流れはシンプルです。最新の株価と財務を取得し、スコアを付けます。結果はただのJSONに
書き出し、静的サイトがそのJSONを読んで表とチャートを描きます。file://でそのまま
開けます。必要なものはすべてそのJSONファイルの中にあるので、裏で何かを動かしておく
必要がありません。(EDINETから自社株買いや大量保有報告も同じやり方で取ってきます。
取得して、ファイルに書くだけです。)
この「ファイルだけ」という割り切りが、古いPi 2一台で全部回せる理由の半分です。32bitで RAMは約1GBしかなく、ちゃんとしたDBを気持ちよく動かせる余裕はありません。(このブログも 同じ考え方で作っています。興味があればこのサイトの技術についてもどうぞ。)
同じデータを複数の戦略で見る
取得は一度きり。あとは各戦略が同じ数字をそれぞれの流儀で読みます:グレアム流の割安、 バフェット流の優良、高配当、GARP、ネットキャッシュ、東証の「PBR改革」、Piotroskiの Fスコア、EV/EBIT。サイト上ではワンタッチで切り替えられ、ユニバース・業種・検索で 絞り込めます。
効いているのか
誤魔化さないために、バックテストを入れています。実行ごとにスナップショットを保存し、 各時点以降のリターンを測ります。シグナルはその時点のもので固定し、比べる価格はその後の 実現値です。サイズやバリュー、モメンタムといった要因を剥がした上でエッジが残るか どうかも、ファクター調整で確認しています。データはあくまで近似PIT(ポイント・イン・タイム) で、その制約は承知の上で使っています。続けるほど精度が上がっていきます。(追記: 財務データ 側のこの問題はきちんと直しました。)
1GBの中でやりくりする
全部をPiに移すのは、多少の工夫が要りました。1GBはこれだけの銘柄を取得・計算するには 窮屈なので、GPUが確保しているメモリを解放して(ヘッドレスなら要りません)、処理に 回しました。バックテストの並列ワーカーも外しました。この小さな基板には荷が重すぎる 処理だったので、いまは1銘柄ずつ淡々と回します。
作業は時間で散らしています。スクリーニングとEDINETの取得は毎日、重いバックテストは 週1回です。公開まわりは一番シンプルで、静的ファイルをCloudflare Accessの後ろに置いて 自分専用にしています。ただの自分用メモを、誰にでも見られる状態にしておきたくないだけです。
あくまで自分用のリサーチツールです。株のヒントが欲しい人は、他を当たってください。 それでも、十数の戦略をバックテスト付きで、10年前の小さなボードからサッと眺められます。