あけましておめでとうございます。

本年も技術を使って豊かさを手に入れるための情報をまとめていきますので、引き続きよろしくお願いいたします。

さて2024年が始まりましたが、皆さん、もちろん新NISAは始めてますよね。(圧)

経済的な豊かさを手に入れるにあたって、新NISAiDeCoは必須の手段だと思います。

新NISA、iDeCoを知らないという方はリンクを貼っておきますので、ぜひご確認ください。

今回のブログでは新NISAに役立つツールを作っていきたいと思います。

新NISAには「成長投資枠」と「つみたて投資枠」の2種類が存在します。

「つみたて投資枠」については基本的には全世界かS&P500のインデックスファンドをひたすら買い続ける戦略で引き続き問題ありません。

今回のテーマは「成長投資枠」です。

「成長投資枠」はやれる人はやるのが良いですが、無理にやらなくてもいいものです。

私は「成長投資枠」を買うにあたって買いたい個別銘柄がいくつかあります。

その際、欲しいからという理由だけで買ってしまうと、気づいたら同じような銘柄ばかり買ってしまっているような状況にもなりかねません。

これは株式内におけるリスク分散という観点では健全とはいえません。

また株式を売買するうえでも、ポートフォリオをデータ分析できるとより良い判断や意思決定につながり納得感のある投資ができます。

これは株価がよくわからない理由であがって儲かることよりも、豊かさの上では欠かせない要素と考えます。

なので自分の「成長投資枠」を定量的に評価したり可視化したりできるようにしたいと思ったのが、本ブログの動機であり背景です。

ちなみにSBI証券にもポートフォリオを可視化する機能としては、「ポトフォる」(無料)が存在します。

SBI証券にログイン後、「口座管理」→「My資産」で以下のような画面になります。

※これはSBI証券の公式マニュアル画面であり、私の口座ではありません。

いくつか質問(円安か円高か、米国株が上昇するか下落するかなど中級者向け)に答えると、自身のポートフォリオのセクター状況から弱いセクター補強できそうなETFをおすすめしてくれる機能になります。

この質問答えなくてもセクター別に見れるようにしてほしいんだけどな・・・。

質問答えるのがめんどうくさいし、イマイチ使い勝手も悪いので、自分でいい感じに分析できるツールが欲しいと思いました。

前置きが長くなりましたが、そういうわけで自分で株式のポートフォリオを評価・可視化して分析できるツールを作ろうというのがゴールになります。

今回はその準備として、Pythonで作成できるJ-QuantsというAPIの導入のための準備と使い方についてご紹介します。

いわば今回はかなり導入的な内容になります。

それではよろしくお願いします。

J-Quantsとは?

日本取引所グループ公式で公開している、日本株の情報を簡単に取得できるAPIサービスです。

2023年の4月から始まったので、比較的新しいサービスです。

私も昔Pythonで株価のポートフォリオ分析みたいなのをやろうとしたことがあります

この時の欠点は、

  • 毎回手入力で株の情報を更新しなければならない(入力がめんどう)
  • セクター別に分析ができない(調べるのもめんどう)
  • 情報量が少ない(増やすのもめんどう)

ということで、要するにめんどうなためにツールとしては使いづらいものでした。

J-QuantsのAPIは無料でもそれなりに欲しい情報を取得できます。

基本、今現在のポートフォリオの診断がしたいので、「上場銘柄一覧」と「財務情報」が取得できれば良いかと思います。

では早速無料プランでやってみましょう。

J-Quantsアカウント登録

まずはアカウントをつくりましょう。

↑のリンク先のJ-Quantsページから、「サインアップ」をクリックしてください。

この時、メールアドレスとパスワードは必ず覚えておいてください。あとでソースコード内にも使います。

フリープランで登録してサインインまでできるようになればOKです。

開発環境構築

次に開発環境を構築します。

今回も仮想環境(miniconda)を使って開発環境を整えていきます。

Dockerでも動かせるように、Gitには用意しておきます。

詳しくはReadmeを参照ください。

またお急ぎの方はこちらのGitに後ほど紹介するコードも用意してますので、そちらを動かしてもらえればよいかと思います。

ではまずは仮想環境を用意しましょう。名前は「quants」とします。

仮想環境の作り方を忘れた方は以下を参照してください。

次にrequirements.txtを用意します。

requirements.txtの中身は以下のようにします。

pandas
requests
streamlit
matplotlib
plotly

作成したら、「pip install -r requirements.txt」と入力し、必要なライブラリのインストールが始まります。

これで開発環境の構築は完了です。

コードの作成

コードは2つ用意する必要があります。

まず以下のようにフォルダとファイルを作成しましょう。

それぞれ解説します。

user-api.toml

こちらがJ-QuantsのAPIを実行するために必要なキーとして、E-mailとパスワードを登録するファイルです。

このファイルの中身は以下のように記載してください。

[jquants-api-client]
mailaddress = "your-email-address"
password = "your-password"

「your-email-address」と「your-password」に、J-Quantsでアカウント作成したE-mailアドレスとパスワードを記入してください。

stock.py

こちらがAPIで実際に株の情報を取得するPythonコードになります。

以下のように記載ください。

import requests
import json
import tomllib

# =============================================================
# API情報取得
# =============================================================
config_path = "config/user-api.toml"

with open(config_path, mode="rb") as f:
    ret = tomllib.load(f)["jquants-api-client"]
# =============================================================
# API認証情報取得
# =============================================================
# refresh token取得
try:
    req_post = requests.post(
        "https://api.jquants.com/v1/token/auth_user", data=json.dumps(ret)
    )
    REFRESH_TOKEN = req_post.json()["refreshToken"]
except Exception:
    print("RefreshTokenの取得に失敗しました。")
# idToken取得
try:
    req_post = requests.post(
        f"https://api.jquants.com/v1/token/auth_refresh?refreshtoken={REFRESH_TOKEN}"
    )
    idToken = req_post.json()["idToken"]
except Exception:
    print("idTokenの取得に失敗しました。")
print("API使用の準備が完了しました。")
# ===============================================================
# 上場銘柄一覧
# ===============================================================
headers = {"Authorization": "Bearer {}".format(idToken)}
urlPath = "https://api.jquants.com/v1/listed/info"
req = requests.get(urlPath, headers=headers)

# 取得結果
result = req.json()

infos = result["info"]

print(infos[0])

このコードはほぼほぼ公式ドキュメントの「API仕様書」にあるクイックスタートガイドのgoogle colabのコードになります。

31行目まではE-mail、パスワード情報からAPIが使えるように認証作業をしております。

今回は上場銘柄一覧を取得してみます。

40行目のresult = req.json()により、resultに上場銘柄一覧がJSON形式で格納されます。

JSONの取得形式上、「info」の階層の中に各上場銘柄の情報が格納されています。

なのでinfos[0]とすることで、とりあえず先頭の上場銘柄の情報だけ表示してみましょう。

実行は以下のコマンドで実行できます。

python src/stock.py

これを実行すると以下のような結果がかえってきます。

極洋という会社の情報が取得できました。

冒頭でお話しした、セクター情報も確認できます。

このようにして、日本株の情報を取得できるので、ポートフォリオの分析ツールができそうな予感がしますね。

まとめ

今回はJ-Quantsの導入方法とその使い方についてご紹介しました。

次回は今回の使い方を踏まえて、ポートフォリオのセクター化について取り組んでみようと思います。

ここまでご覧いただきありがとうございました。