GnuCashで日本の投資信託の基準価額を取得するPerlモジュールを書いた

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

GnuCashで日本の投資信託の基準価額を取得するPerlモジュールを書いた

一ヶ月以上前に作ったまま長いこと紹介せずに放置していたので、そろそろ公開しようと思う...

LiosK's Finance--Quote--YahooJapan at master - GitHub

A Perl module that enables GnuCash to get quotes of Japanese stocks and funds from Yahoo! JAPAN.

GNUプロジェクトの財務管理ソフトウェアであるGnuCashには、Web上のデータソースから株式や投資信託の価格を自動で取得する便利な機能がついています。

Features | GnuCash (投資ポートフォリオに関する機能を抜粋)

Stock/Mutual Fund Portfolios
Track stocks individually (one per account) or in portfolio of accounts (a group of accounts that can be displayed together).
Online Stock & Mutual Fund Quotes
Get Stock & Mutual Fund quotes from various web sites, update portfolio automatically. Additional pricing sources are added regularly.

この機能を使えばGnuCashで投資ポートフォリオを管理するのがだいぶ楽になるのですが、残念なことにデフォルトでは日本の株式や投資信託の価格を取得することができませんでした。おそらく、日本では株式等の価格をCSVのような再利用可能な形で簡単に手に入れることができないために、GnuCashの方で対応してもらえなかったのでしょう。金融後進国は不便ですね...

というわけで、Yahoo!ファイナンスの検索結果ページをスクレイプして、日本の株価や投資信託価格をGnuCashで取り込めるようにするPerlモジュールを作成したので、GitHubで公開しましたよ!というのがこの記事の本題です。使い方等の詳細は続きで。

概要

GnuCashの相場表自動取得機能は、Finance::QuoteっていうPerlモジュールを使って実装されています。Finance::Quoteに含まれるサブモジュールがWeb上のデータソースから情報を取得し、GnuCashが取り込める形式に変換して返すような仕組みになっています。Finance::Quoteにはあらかじめ複数のサブモジュールが含まれていて、各国のYahoo、証券会社、取引所などのWebサイトから相場情報を取得できるようになっていますが、日本の株式や投資信託の価格を取得できるサブモジュールは含まれていませんでした。

ということで、日本の株価や投資信託価格を取得できるように作ってみたサブモジュールが、冒頭で紹介したFinance::Quote::YahooJapanです。

相場情報はYahoo!ファイナンスの検索結果ページ (例1, 例2) をスクレイプして取得しています。従って、当然ながら取得された相場情報に関する権利はYahooに属しますし、Yahooの利用規約に従って相場情報を利用する必要があります。また、Finance::Quoteに含まれる他の多くのサブモジュールと違って、CSVやXMLを利用するのではなくHTMLをスクレイピングしているので、Yahoo側の仕様変更などに振り回されてしばしば使えなくなるということが予想されます。利用する場合はそこらへんを理解しておいてください。

使い方

1. Finance::Quoteのインストール

まずはGnuCashで相場表示自動取得機能を利用するためにFinance::Quoteをインストールします。GnuCashのヘルプにも詳しく書いてありますが、標準的なLinux環境であれば、ターミナルを立ち上げてGnuCashがインストールされているディレクトリに移動し、

./gnc-fq-update

と入力するだけで大丈夫なようです (未確認)。Windows環境であれば、Strawberry PerlOpenSSL (Win32版) をインストールして、

perl "C:\Program Files\gnucash\bin\gnc-fq-update"

とコマンドプロンプトから入力してあげるのが一番簡単かと思います。

GnuCash Help Manual (参考)

To install Finance::Quote;

  1. Close any GnuCash applications you have running.
  2. Locate the folder where GnuCash is installed by searching for “gnc-fq-update” (without the quotes).
  3. Change to that directory, open a root shell and run the command “gnc-fq-update” (without the quotation marks). This will launch a Perl CPAN update session that will go out onto the Internet and install the Finance::Quote module on your system. The gnc-fq-update program is interactive, however, with most systems you should be able to answer “no” to the first question: “Are you ready for manual configuration? [yes]” and the update will continue automatically from that point.

After installation is complete, you should run the “gnc-fq-dump” test program, in the same directory, distributed with GnuCash to test if Finance::Quote is installed and working properly.

2. Finance::Quote::YahooJapanのインストール

まず、Finance::Quote::YahooJapanレポジトリに含まれているYahooJapan.pmを、PerlモジュールディレクトリのFinance/Quoteディレクトリ直下に保存します。Windows環境のStrawberry Perlであれば、C:\strawberry\perl\site\lib\Finance\Quote\YahooJapan.pmに保存することになると思います。

続いて、Finance::Quote::YahooJapanをFinance::Quoteのサブモジュールとして登録するために、環境変数を編集します。Finance::Quoteは環境変数FQ_LOAD_QUOTELETで指定されたサブモジュールを自動的に読み込む仕様になっているので、FQ_LOAD_QUOTELETに↓の値をセットします。

-defaults YahooJapan

Windows環境だと↓の図のようになるでしょう。

Setting env var / Screenshot / Windows 7

UNIX系の環境では.profileに↓の一文を追加するなどの方法で環境変数を設定することになると思います。

FQ_LOAD_QUOTELET='-defaults YahooJapan'; export FQ_LOAD_QUOTELET

これでPerl側のセットアップは完了です。

※ より簡潔な方法が見つかったため、2010年6月14日にこの節は書き換えられました。書き換えられる前の内容を表示するためには、ここをクリックしてください。

3. GnuCash側のセットアップ

ここから先はGnuCashのヘルプを見ても進められます。っていうかそっちの方が詳しい...

GnuCashを起動したら、メニューバーの「ツール」→「証券エディタ」と進んで証券エディタを開き、「追加」ボタンもしくは「編集」ボタンを押して証券編集ダイアログを開きます。証券編集ダイアログを開いたら、↓の図のように値を入力していきます (例はSTAM 新興国株式インデックス・オープン)。

Editing Commodity / Screenshot / GnuCash

重要なのは赤枠でくくった4項目で、他は適当でも大丈夫です (たぶん)。

  • 「記号/略語」欄には株式・投信のコードを入力します。大文字小文字を区別するので、Yahoo!ファイナンスの検索結果ページに表示されるとおりに入力してください。株式の取引証券市場を表す「.t」などの接尾辞はつけないでください。
  • 「オンライン相場表を取得」チェックボックスをONにします。
  • 「相場情報源のタイプ」に「未知」を指定し、右のドロップダウンメニューで「yahoo_japan」を指定します。

「OK」ボタンを押して保存します。ちなみに、投資信託を扱う場合は「Fraction traded (取引の最小単位)」に「1/10000」を指定しておくのがおすすめだったりします。 (日本の投信は1万口を1単位として扱う機会が多いため)。

次に、メニューバーの「ツール」→「価格エディタ」とたどって価格エディタを開きます。

価格エディタを開いたら右下の「相場表を取得」ボタンを押します。ちょっと待った結果、↓の図のように最新の価格が取得できていれば成功です。これでGnuCashで日本の株式や投資信託の相場情報を自動取得できるようになりました。

Happy GnuCashing!

Price Editor / Screenshot / GnuCash

技術的ないくつかの補足 (と言い訳)

  • Finance::QuoteにはFinance::Quote::Yahoo::USAやFinance::Quote::Yahoo::Asiaなど、Finance::Quote::Yahoo::*という名前のサブモジュールがはじめからいくつか含まれていますが、あえてFinance::Quote::Yahoo::JapanではなくFinance::Quote::YahooJapanという名前にしたのは、Yahoo::*系のサブモジュールと大きくアルゴリズムが異なっているからです。Yahoo::*系のサブモジュールはFinance::Quote::Yahoo::Baseを使ってCSVからデータを取得しているだけですが、YahooJapanはHTMLをスクレイプしてデータを抽出しています。
  • スクレイピングのアルゴリズムは至っていい加減です。class=chartbgというキーワードを手がかりにtable要素を抽出して、タグをすべて半角スペースに変換した後に、半角スペースでsplitして各セルの値を取得しているだけです。
  • オブジェクト指向Perlはあまり経験がないので、お行儀のよい書き方がわかりません。直すべきところがあったら教えてください。とりあえず、_scrape_determine_dateの2つのサブルーチンは、プライベートメソッド的な思いで書きました。
  • 普段、投資信託の価格を取得するのにこのモジュールを使っていて、今のところ大きな問題はありませんが、あまりテストはされていません。バグ報告をしてくれたり、テストケースを作ってくれたりしたら感謝します。
  • 本当は、エラーチェックを充実させてちゃんとデータが取得できているかをチェックしようと思っていましたが、心が折れて挫折しました。「スクレイピングエンジンは変更が多くなるからシンプルな形にとどめておこう」と言い聞かせて放置しています。
スポンサーサイト

関連記事

トラックバック URL

http://liosk.blog103.fc2.com/tb.php/185-3e473426

トラックバック

Finance::Quote::YahooJapanを更新しました!
関連記事: GnuCashで日本の投資信託の基準価額を取得するPerlモジュールを書いた しばらく放置気味だったFinance::Quote::YahooJapanに不具合が見つかった...
  • 2010-10-24
  • 発信元: LiosK-free Blog

コメント

はじめまして。北側研究室(別棟)のCharlieです。

ご紹介いただきましたPerlモジュールを試してみました。株・投資信託ともに問題なくGnuCashに価格を取り込めています。
ありがとうございました。

私がしてきたYahooの情報をcsvファイルに落とし・・・という方法は無用になりそうです。

私はMS Money2007を使っていましたが、9月で相場価格自動更新ができなくなります。
本格的にGnuCashへ移行を考えていただけに、ありがたかったです。
  • 2009-08-22
  • by Charlie
  • id:SFo5/nok
  • 編集
ご丁寧にありがとうございます。
バグ等ありましたらご連絡ください。
  • 2009-08-27
  • by LiosK
  • id:-
はじめまして。namaraと申します。

4つの銘柄の投信についてやってみましたが、ちゃんと価格を取り込むことが出来ました。

これは私の方の問題ですが、今まで取引入力のところで、株式を10000で割らずに価格のほうを10000で割っていたものですから、それを修正する必要がありましたが(一瞬ものすごい金持ちになりました)、それ以外はすぐに使えるようになりました。

私もMS Moneyからの乗換え組みです。大変助かります。
  • 2009-10-16
  • by namara
  • id:-
現在のOpenSSL (Win32版)は寄付をしなくては使えないようですね・・・
  • 2010-06-13
  • by naoki
  • id:cWreTupc
  • 編集
> 現在のOpenSSL (Win32版)は寄付をしなくては使えないようですね・・・

そんなことどこかに書いてありました?
  • 2010-06-14
  • by LiosK
  • id:-
http://www.slproweb.com/products/Win32OpenSSL.html
ページの中ほどのところに「Donate to Shining Light Productions」という記載があって、実際にインストールするときに選択しなくてはいけなくなっています。(寄付をしないという選択肢はないのです・・・)
実際にお金を払っていないのでなんともいえないですが、払わない状態でインストールした場所を見ると、アンインストール用のプログラム以外に実行ファイルがありません。

http://homepage2.nifty.com/protocol/openssl/
ここに出ているものと明らかに異なっているので、インストールが完了していないのかな、と判断しました。
比較的最近に寄付を求めるようになったようですね。
  • 2010-06-14
  • by naoki
  • id:cWreTupc
  • 編集
にわかには信じがたいですね…
license agreementには確かに寄付をしてくれと書いていますが、「もし10ドルも払えないんだったら、せめてどこかに感謝の言葉を書いてくれ!」みたいなことが書かれているので、必須ではないような…
  • 2010-06-14
  • by LiosK
  • id:-
もう一度やり直してみたところ、「Donate to Shining Light Productions」では、全てのチェックをはずすことができました。インストールされた内容はチェックを入れていたときとは変わっていないようです。

ただ、Finance::Quoteのインストールがうまくいっていないようで、Test Summary Reportを見ると、うまく動作していない部分があるようです。
ここで聞くべき内容ではなくなってしまいましたね・・・
  • 2010-07-03
  • by naoki
  • id:cWreTupc
  • 編集
便利なモジュールを公開していただいてありがとうございます。
osx 10.6 gnucash2.4.0でも取得できました!
(私の環境ではPATHの設定がうまくいかなかったのでfinance::quoteの書き換えで動作させました。)
  • 2011-01-25
  • by TK
  • id:-

コメントの投稿

お名前
コメント
編集キー
 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。