投資のポートフォリオ管理ツールの自動化チャレンジ−その1

2021年2月18日

私はNISAの非課税枠をフル活用するために家族全員に協力してもらい、複数の証券口座で投資信託を保有しています。現在の評価額はMoneyFowardを見ればすぐにわかるのですが、それぞれの銘柄の損益状況や合算したときのアセットアロケーションを把握することができませんでしたので、一度ポートフォリオを整理してみました。こちらの記事がその結果です。

このツールでは入力するべき項目が4つあります。

  1. 保有銘柄
  2. 取得総額
  3. 保有数量
  4. 基準価額

このうち保有銘柄は1年のうち増えたり減ったりすることはあまりありません。基本的には毎月の積み立て購入ですから昨年は全く増減しませんでしたし、今年はリート銘柄が増えますがその後の増減は予定していません。一度投下した資金は長期保有と決めていますので、基本的に減ることはなくて増えたときに追加するのみですので、手動で管理する形で良いかなと思っています。取得総額と数量は積み立てが実行された時のみ更新すれば良いので月に1回程度更新しておけば良いのですが、できれば証券口座の状態を引っ張ってきたいです。基準価額は毎営業日更新されますので、真っ先に自動更新したい項目です。

そこでまずは基準価額の自動更新にチャレンジしてみます。基準価額をWebから取得してくる方法を検索してみたところ、スクレイピングという方法とAPIという方法があることがわかりました。スクレイピングはHTMLというテキスト形式の記述から、必要なデータを抜き出してくる方法です。抜き出してくる際にキーとなる投資信託番号や名称を使って必要な値をページ内でサーチして基準価額を引っ張ってくるようです。APIは取得したい銘柄の情報を指定して、Webのリクエストを投げると、その結果が返ってくるというもののようです。

プログラミング専門家でない私にとって、コマンドの結果の中から検索して値をとってくるというよりも、ドンピシャで値が返って来る方が楽ちんそうです。そこで[投資信託 API]で検索したところ、奇跡的にも三菱UFJ国際投信さんのページが見つかりました。

サンプルコードが掲載されていたので、見てみたのですが、さっぱりわからないです。

 var emaxis = emaxis || {};
 emaxis = (function($){
  var initEmaxisApi;
  initEmaxisApi = function() {
   $.getJSON("http://emaxis.muam.jp/web/api/v1.php?col=asset_default&html=4&callback=?", function(json) {
    var data = json;
    //CSS組込ID
    $('#target').append("<style>" + data.css +"</style>");
    //HTML部品組込ID
    $('#target_body').append(data.html);
   });
  };
  
  return { initEmaxisApi : initEmaxisApi };
  
 }($));
 emaxis.initEmaxisApi();

サンプルコードはこんな感じでした。

ちょっと意味不明すぎるので、同じく公開されていた仕様書を見てみました。そうしたところ、どうもブラウザでリクエストすると情報が取れそうということがわかってきました。

http://emaxis.muam.jp/web/api/v1.php?col=asset_default&fd=250888にアクセスすると以下の情報が取れそうです。


standard_priceのところが基準価額のようですので、早速リアルタイムの情報を確認するためにブラウザでアクセスしてみました。

若干見た目が違いますがstandard_priceのところは26345となっています。これが基準価額なのかどうかを確認するためにeMAXISのWebサイトにアクセスしてみます。

本日のeMAXIS TOPIXインデックスは確かに26,345円なのであってそうです。ただ、他の銘柄の基準価額を取得するには、fdのところを変更すればよさそうですが、この数字の正体がよくわかりません。この番号がわかれば簡単にデータをゲットすることができそうですので、仕様書のどこかに書いてあるんじゃないかと思い、流し読みでサラサラページをめっていたところ、最後の方にこのような表がありました。

どうも1番左の数字をfdのところに入れれば良いらしいです。試しに最も保有しているオールカントリーの253425で試して、eMAXISのWebサイトと付き合わせてみたところ間違いなさそうです。

情報の取得方法が分かりましたので、次は取得した情報をどうやってスプレッドシートのセルに入れるのかを調べていきたいと思います。