自身の投資スタンスの再構築のため、まずは株価情報の解析が出来る環境を構築するのに着手しました。
自分は一応IT業界のエンジニアなので、プログラムでインターネット経由で時系列株価情報の入手ができないものかと、ググっていたところ、Finance::YahooJPN::QuoteというPerlモジュールの存在が分かり、これを利用することにしました。
動作環境はWindows XPでActivePerl 5.8.1 Build 807です。
以前、自宅PCでMovable Typeを動かすためにインストールしてあったのを利用することにしました。
Perlモジュールのインストールは、ppmからinstall Finance::YahooJPN::QuoteでOKです。
サンプルプログラムは、SYNOPSISにある"histrical"を"historical"に直さなければいけないことに気がつけば、すぐに動かせます。
まずは、ファイルに時系列株価情報を出力する簡単なPerlプログラムを作成したところです。
これからPerlで、日々少しずつ売買銘柄抽出プログラムを開発して行くつもりです。
■2009/1/31 追記
Finance::YahooJPN::Quoteは、2008年11月に0.13から0.14へのバージョンアップが行なわれたようです。
Yahooが返すhtmlのフォーマットが変更になったらしく、今では0.14でないと正常に動作しないようです。
■2009/4/1 追記
作者の方にホームページ経由でメールを差し上げようとしたのですが、Script errorで送信に失敗しますので、この場にて、バク情報を公開します。(なお、正確には、Perlモジュールのバグではなく、Yahooが出力しているHTMLの問題です。)
これに該当するのは、株式分割が行なわれたケースで、分割後の株数に小数点が含まれているケースです。
具体的には「1株 -> 1.2株」といった分割のケースで、最近ですと、「1378 雪国マイタケ」が該当します。
HTMLに<tr bgcolor="#ffffff">と書かれるべきところが、ダブルクォートなしで<tr bgcolor=#ffffff>と書かれており、split dataとしての判断が正常に出来ず、そのHTMLページ内の以降のデータが取得されないという現象につながっています。分割数が半端な場合にのみ、TRタグのBGCOLOR属性の書き方が変わるのは、不思議です。
Quote.pmの256行目以降、「# this is a split data」の行までの、whileループとif文に、ダブルクォートなしのOR条件をそれぞれ2行ずつ追記することで、回避できるようになるようです。
hata
管理人様、今日は、初めまして。
偶然、こちらの記事を発見いたしまして、拙作モジュールの【極めて致命的な】バグの存在について今更知った次第です。orz
というのも、私が株投資から離れて10年経っていたりしますので、要するに自分では長い間実際に使っていなかったということになりますし、今だにモジュール名で Google で検索してもこちらの記事ぐらいしかまともな日本語のページがヒットしないということもあって、実際に使っている人はほとんどいなかったのだと思います。
最近、また株に手をつけようかなと思って(管理人さんと同様、システムトレードに興味を抱いたもので)、モジュールを更新したところです。新たに、日経平均、TOPIX、JASDAQ指数を取得できるようにしました。
今でもお使いかどうかわかりませんが、お使いいただいた方がいらっしゃって本当に有難いです。
最近、Yahoo! ファイナンスの時系列データの方もサイトがリニューアルされたようです(文字コードをeuc-jpからutf8に更新する等したみたいです)。現時点では古いサイトと並行して運用がされているようでこのモジュールはまだ使えますが、最終的には新しいサイト用に修正する必要が生じてくると思います。
ただ、私自身、メインの使用言語を Python に移行しようかと考えておりまして、Python で同機能のものを実現できたら、このモジュールは私自身による更新は終了しようかなとも考えております。
何はともあれ、貴重なバグ報告&フィックスをありがとうざいました。早速ですが、最新版に反映させていただきました。
管理人
畑様、コメントありがとうございます。
作者の方から直接コメントをいただけるとは、感激です。
お役に立てて、光栄です。
確かに、Googleで検索すると、日本語のページではこのページが一番上に表示されますね。
こちらのモジュール、今でも時々利用させていただいています。
「時々」と言いますのは、毎日の株価情報は実は自前のPerlスクリプトで取得するようにしていまして、稀に日々データの取得に失敗した時などに、後日過去の期間を指定して一括再取得する際に利用させていただいている次第です。
ただ、当方はシステムトレードの良いアルゴリズムを見つけることが出来ておらず、最近は仕事が忙しいこともあって、システムトレードはここ数ヶ月は休止中です。
良いアルゴリズムを見つけられたと思ってしばらく実際の取引に適用していたら、ある時大損することがあり、「バックテストではこんな大損をすることはなかったのに」と調べていたら、実はプログラムに不良があったと分かることもよくありました。
難しいものです。
多忙な本業が少し楽になったら、また、トレードアルゴリズムの見直しをしてみるつもりでいますが、システムトレードを再開することになるかどうかは、今は何とも言えない状況です。