株式データ分析&表示用のプログラムを作った。
Python for Financial Data Analysis with pandas
https://github.com/id774/finance
Sinatra based Dashboard for Finance Data
https://github.com/id774/finance-dashboard
動作環境
前者をインストールして動かすにはモダンな Python 環境 (Python 3, NumPy/SciPy, matplotlib, scikit-learn 等) と TA-Lib とその Python 用 Wrapper が必要になる。
後者はいわゆる一般的な Sinatra アプリケーションである。モダンな Ruby の環境があれば動く。ドキュメントでは収集したデータを /var/stock/data に置くことを前提としているが、アプリの data のシンボリックリンク先を任意の場所に置き換えて良い。
これは何
前者を使うとこのプログラムを利用すると大量の銘柄の日足データを収集、テクニカル指標を計算できる。また後者はそれを見やすく表示するためのダッシュボードである。
目的としては個別銘柄の四本値データを収集して表示、その後さまざまなテクニカル分析やスクリーニング、システムトレードに利用するためのデータ収集基盤を構築するためのものである。
このような matplotlib によるチャートを生成することもできる。上は日足チャート、下はオシレーター系指標を 0-100 の範囲に正規化して複合チャートにしたものである。デフォルトではほぼ一年間にあたる 240 営業日の範囲となっている。
どうやって使うのか
まず、個別銘柄を買い建てまたは売り建てて、数日からせいぜい数週間でポジションを解消する、いわゆるスイングトレードを想定しているので日足ベースである。専業投資家がおこなうデイトレードのようなものは想定していない。だいたいリアルタイムで株価を気にしていたら疲れるし、専業でも無い限り日足ベースのスイングトレードで十分である。
収集したデータは銘柄ごとの .csv ファイルに保存される。あとはこれを利用して買い / 売りのポイントを見つけ、注文すればよろしい。またデータ全体を走査して仕掛けるべき銘柄を発見するなどの用途にも活用できる。
利用例
優れた投資家はそれぞれ自分の勝ち技のようなものを持っている。そこで収集したデータの内容を機械学習などの方法を採用しつつ自動または手動で日毎に注文すれば、あとは戦略次第で市場平均を上回るリスクリターンレシオを実現することが可能であろう。
たとえば作者の場合は、主力の大型循環株に目を付けてファンダメンタルズ以上に売られすぎ / 買われすぎの状態を検知、その状態が解消される兆しが発見された時点で注文するという方法を採用している。もし意図通りでなかったら損失の額にかかわらず直ちにロスカットをすることでトータルでの利益を目指す。これは言ってみれば一般的な逆張り戦略ではあるが、作者が最も得意とする技である。
今年一年チマチマと開発してきたが、年末までにある程度の形になったのと、特に今年後半はこれを利用したトレードである程度の安定した成績を叩き出せるようになってきたのでそろそろここに書き記しておく。なおスクリーニングや売買注文の発注については上記に含まれておらずまた今後も公開する気もないので、各自がやっていってほしい。当然ながらこのプログラムを利用して生じた一切の損失等についても保証しないし、自己責任でどうぞ。