
株式のシステムトレードソフト「イザナミ」。このページではデフォルト仕様で利用できない「信用残データ」を作成・導入する方法を紹介します。スクリプトを利用して外部データを加工の上、イザナミにインポートします。2009年からの信用残データ(売り残・買い残)が利用可能になります。
信用残は信用取引の売りと買いの未決済建玉の量を示す指標です。空売りの可否や逆日歩の目安となるほか、売買比率を見て動きやすい銘柄をスクリーニングする等の利用方法があります。しかしながら、イザナミは標準状態で信用残データが利用できません。そもそも、データが同梱されていないのです。
そこで管理人は環境データを利用する方法を考案しました。簡単な話(簡単ではありませんでしたが)、csv形式の信用残データを用意すればイザナミに取り込むことができるのです。問題は、どうやって信用残のcsvファイルを用意するのか?という点でした。ここをRubyのスクリプトを組むことで解決しました。
- 環境データ作成の概要
- 信用残データの提供元
- 自前のデータを利用する場合
- Rubyのデータ変換スクリプト
- スクリプトの使い方
- 注意事項など
環境データ作成の概要
今回の記事は、株式の検証ソフト「イザナミ」に関する記載をしています。いわゆるシステムトレードネタですね。基本的にイザナミユーザーに向けて書いてはいます。が、システムトレードや株価データの処理に興味を持った方にも読んで頂ければ幸いです。スクリプトを使ったやり方は膨大なデータを処理する方法として大変便利です。
イザナミの詳細については、販売元のページを読んでみて下さい。
本題です。既にイザナミをご利用の方はご存知の通り、同ソフトの株価データには信用残の情報が含まれていません。一方では、環境データのインポート機能を利用すれば、信用残のデータを取り込むことができるはずだと気付かれているかと思います。しかしながら、この方法を具体化するには2点の課題があります。
- 信用残のデータをどのように入手するのか?
- どのように入手した膨大なデータをcsvファイルに変換するのか?
上記の課題に対して、管理人はいくつかの方法を検討しました。結論として、具体化することができた方法は以下の通りです。
- データゲット社が提供する信用残データ(テキストファイル)を利用する。
- テキスト形式のファイルをスクリプトを利用してcsv形式に変換する。
おそらく多くのイザナミユーザーがつまづいたであろう課題は、膨大なテキストデータをcsv形式に変換する方法でしょう。信用残データの扱いについてGoogleで色々と検索してみましたが、ヒントすら見つかりませんでした。この点、管理人はRubyでスクリプトを組み、約30万個あるデータ群を一気に変換する方法を形にしました。
スクリプトについては、後の段落で公開します。あと、継続的に利用するにはお金が少し掛かります。以下は必要なものです。。
- Windows環境のPC(スペック不問)
- ハードディスク空き容量(1GB程度)
- Rubyの開発環境パッケージ(後述)
- 変換スクリプト(後述)
- データゲット社の利用料(月額1,500円~)
信用残データの提供元
最初に信用残のデータを入手します。信用残のデータは無料・有料含めていくつかの提供元があるのですが、手っ取り早くダウンロードするために有料サイトを利用します。データゲット社です。
同サイトでは、毎週末の信用残データを翌週火曜日に更新しています。2009年からのデータが公開されています。まず、こちらを必要な分だけダウンロードしてください。1クリックでダウンロードできるので、全て用意しても時間は掛からないはずです。
ダウンロードしたデータはzip形式で圧縮されています。全て展開して、フォルダにまとめてください。ひとつひとつ展開するのは手間ですので、例えばこんなツールを使うと楽ですね。
展開したファイルは"data"と名前を付けたフォルダに入れておいて下さい。
自前のデータを利用する場合
前述のデータゲットは有料サイトです。最低でも月額1,500円、継続的に利用するなら年間14,400円掛かります。この点、例えば日経新聞社のHPでは無料でデータが公開されています。自前の信用残データを利用したい方もいるかも知れません。
後述のスクリプトを利用する場合、自前のデータはデータゲットの形式に合わせてやる必要があります。データゲットの信用残データは以下の形式(カンマ区切りのテキスト)で用意されています。自前のデータを利用する場合には、形式を合わせた上、テキストファイル(.txt)で保存してください。
公開日,コード,市場,(週末日),(ダミー),(ダミー),(ダミー),(ダミー),信用売残,信用買残 ⇒"Z(データ公開日).txt"の名前で保存。 (例)任天堂(7974)の場合 20161011,7974,t1,0,0,0,0,0,13200,54300 ⇒"Z20161011.txt"で保存。 (ダミー)と書かれている箇所には、本来は4本値が入っています。 ただ()内のデータは今回使わないので必要ありません。適当に0で埋めてください。 また、データ間の空白は厳禁です(未検証)。 市場コードは以下の通りです。 過去に大証やヘラクレスであった銘柄にも使えます。 面倒であれば、"t"と"q"だけで分類しても構いません。 t:東証1部、東証2部、東証マザーズ共通 t1(t2):東証1部(東証2部) m:東証マザーズ q:JASDAQ o:(旧)大証 j:(旧)ヘラクレス
Rubyのデータ変換スクリプト
次にキモとなる変換スクリプトを用意します。以下のテキストをコピーして、メモ帳等に貼り付けてください。管理人、がんばって書き上げました。
# coding: windows-31j require "csv" require "date" #csv格納用のフォルダを作成 Dir::mkdir("csv") unless FileTest.exist?("csv") #貸借データcsvを作成 CSV.open("./csv/taishakudata.csv", "w") do |header| header << ["コード", "市場", "日付", "日付", "信用買残", "信用売残"] end #dataフォルダ内にあるファイルを読み込む Dir.glob('./data/*').each do |f| if File::ftype("#{f}") == "file" filename = File.basename("#{f}") puts("#{filename}を変換中") i = File.open("./data/#{filename}", "r") #貸借データを抽出して書き込み intro_csv = CSV.generate do |csv| CSV.foreach("./csv/#{filename}.csv") do |item| market = item[1] unless market = "o" || market = "j" then sdate = Date.parse(item[0]).to_s edate = (Date.parse(item[0]) + 6).to_s wdata = [item[0], item[1], sdate, edate, item[9], item[10]] csv << wdata end end end File.open("./csv/taishakudata.csv", "a") do |taishakudata| taishakudata.write(intro_csv) end i.close end end
貼り付けたスクリプトはRubyのスクリプトファイルとして保存します。"○○○.rb"の名前で保存してください。".rb"はRubyスクリプトの拡張子です。
スクリプトの使い方
スクリプトはプログラム言語であるRubyで書かれています。実行するには、Rubyの開発環境が必要です。と言っても難しい話ではなく、インストーラーを利用すれば簡単にインストールすることができます。以下のサイトから最新のRubyインストーラーをダウンロードして実行してください。
注意点としては、インストールの際に「Rubyファイルを関連付ける」にチェックを入れることです。後でスクリプトを実行する際に1クリックで起動させることができます。
インストールが終わったら、先ほど保存したスクリプトと信用残データが入った"data"フォルダを一つのフォルダにまとめます。デスクトップにでも適当なフォルダを作って放り込んでください。以下画像の状態になるはずです。
あとはスクリプトを1クリックすれば実行開始されます。”○○を変換完了”というログが次々と流れ、変換終了と同時にコマンドプロンプトが閉じます。
エラーなく処理完了すれば、"csv"というフォルダが作られ、出来上がった信用残データ(csv形式)が"taishaku.csv"という名前で出力されます。このcsvファイルをイザナミに読み込ませれば良いわけです。
イザナミへのインポート手順は販売元のサイトを参照してください。
注意事項など
最後に注意点や便利な使い方を少々。まず、スクリプトの起動時間ですが、2009年からのデータを変換しても2、3分で終わるはずです。管理人のPCは、もう10年位前に組んだAthronX64のマシンです。この程度のPCでも上記の時間で終わります。
便利な使い方として、データの更新は再度スクリプトを回すことで組み込むことができます。新規に公開された信用残データを"data"フォルダに放り込んでスクリプトを実行。これで、追加分を含んだcsvファイルが出力されます(正しくは一から作り直しているんですけどね)。
その他の注意事項を以下にまとめます。
- "csv"フォルダ内にある同名のcsvファイルは上書き保存されます。必要ないとは思いますが、上書きされたくない場合は別フォルダに移してください。
- 最終データの日付は「最新データの公開日+7日」です。翌週火曜には信用残データが公開されるだろうとの推測に基づいてスクリプトはデータを作ります。更新データがない場合は、それ以降のデータが作成されません。
- 更新データが用意できない場合の回避策として、直近の公開日が入力されたダミーデータを用意すれば勝手に補完してくれます。
- 元データのファイルに抜け・漏れがある場合も勝手に補完されてしまいます。スクリプトはファイル名から更新日を導出しています。ファイルが抜けている分のデータは、直前のファイルに収録された内容が次のファイルの更新日まで続きます。
- 本記事および本記事記載のスクリプトについて、転載及び公用での再配布を禁じます。個人間の受け渡しは勝手にやって頂いて結構です。他のサイトで本内容を紹介したい場合は、リンクを貼ってください。
- このページで紹介したスクリプトの利用は自己責任にて願います。スクリプトの利用に伴う損害等、弊サイトでは責任を負いません。
質問等はコメント欄へどうぞ。ただし、あまり期待はしないでください。管理人、プログラムはそんなに詳しくありません。今回のスクリプトも1週間掛けて四苦八苦して仕上げたというシロモノです。多分、コードに詳しい方が見たら改善の余地があるでしょう。そうした指摘をして頂いても結構です。
コメント
この記事へのトラックバックはありません。
この記事へのコメントはありません。