Pythonで株価を分析したいけど、信頼できる株価データーはどこから入手したら良いのだろう?
このように頭を悩ませているあなた!
2024年1月時点で、株価4本値を取得するならJ-QuantsAPIがコスパ最強だと思います。(個人評価)
無料プランだって過去2年分の株価データーが取得出来ちゃいます。
※ただし、直近12週間分の株価は取得出来ません。(分析の練習なら十分でしょう)
もちろん有料プランなら、長期の株価データーを取得する事が出来ます。
お手頃な価格設定
お手頃な価格設定です。
無料プラン: 無料/月 過去2年分の株価データー取得可能(12週遅延)
ライト:1,650円/月 過去5年分の株価データー取得可能
スタンダード:3,300円/月 過去10年分の株価データー取得可能
プレミアム::16,500円/月 提供期間全ての株価データー取得可能
個人使用ならライトプランで十分かも知れません。
私はオプションの価格も欲しいので、スタンダードプランで契約しています。
Pythonコード解説
初心者向けにPythonコードの解説をします。
出来るだけ、公式ページのサンプルコードに変更を加えずに、シンプルで実用的なコードにしました。
J-Quants APIから株価データーを取得するステップ
J-Quants APIから株価データーを取得するステップが次の3っです。
- J-Quants APIサービスへ登録(はじめの1回のみ)
- リフレッシュトークンを取得(1週間有効)
- IDトークンを取得(24時間有効)
- 取得したIDトークンを利用してデーターを取得
J-Quants APIサービスへ登録
このページから、J-Quants APIサービスへ登録出来ます。
画像の出所:https://jpx-jquants.com/?lang=ja
リフレッシュトークンを取得(1週間有効)
公式 J-Quants API解説ページ のサンプルコードを元に解説します。
https://jpx.gitbook.io/j-quants-ja/api-reference
リフレッシュトークンを取得するサンプルコードはこちら。
まず、J-Quants APIサービスへ登録時に設定したIDとパスワードを変数に代入します。
1 2 3 |
# ID と パスワード (J-Quants APIサービスへ登録時に設定したもの) JqMailaddress = 'aaaa@gmail.com' JQuontsPassword = 'abcdefg' |
J-Quants APIサービスへ登録時に設定した メールアドレスとパスワードを辞書型で data に代入。
リフレッシュトークンがjson形式で取得されます。
1 2 3 4 5 6 7 |
import requests import json # J-Quants APIサービスへ登録時に設定した メールアドレスとパスワードを辞書型で代入 data={"mailaddress":JqMailaddress, "password":JQuontsPassword} r_post = requests.post("https://api.jquants.com/v1/token/auth_user", data=json.dumps(data)) r_post.json() |
出力値(例)
{‘refreshToken’: ‘eyJjdHki・・・・・・・・}
実際はもっと長い文字列です。
出力値からリフレッシュトークンだけどを取り出しましょう。
3行目だけを変更しています。
refresh_token = r_post.json()[‘refreshToken’]
1 2 3 4 5 |
data={"mailaddress":JqMailaddress, "password":JQuontsPassword} r_post = requests.post("https://api.jquants.com/v1/token/auth_user", data=json.dumps(data)) refresh_token = r_post.json()['refreshToken'] refresh_token |
リフレッシュトークンは1週間使用できますので、テキストファイルに保存して繰り返し使用します。
もちろん、毎回あたらに取得しても問題ありません。
1 2 3 4 5 6 7 8 9 10 11 |
# リフレッシュトークンが記載されているtxtファイルを指定します REFRESH_TOKEN_FILE_PATH = "jquantsapi-key.txt" # リフレッシュトークンを読み込むための関数を定義します def get_refresh_token(refresh_token_file_path: str = REFRESH_TOKEN_FILE_PATH): with open(refresh_token_file_path, "r") as f: refresh_token = f.read() return refresh_token.rstrip().lstrip() # リフレッシュトークンをファイルから読み込みます refresh_token = get_refresh_token() |
IDトークンを取得(24時間有効)
IDトークンを取得します。
取得したIDトークンは24時間有効です。
1 2 3 4 5 6 7 |
import requests import json # 先に取得したリフレッシュトークンを変数に代入しています。 REFRESH_TOKEN = refresh_token r_post = requests.post(f"https://api.jquants.com/v1/token/auth_refresh?refreshtoken={REFRESH_TOKEN}") r_post.json() |
出力値(例)
{‘idToken’: ‘eyJraW・・・・・・・}
実際はもっと長い文字列です。
出力値からIDトークンだけどを取り出しましょう。
3行目だけを変更しています。
idToken = r_post.json()[“idToken”]
1 2 3 4 |
REFRESH_TOKEN = refresh_token r_post = requests.post(f"https://api.jquants.com/v1/token/auth_refresh?refreshtoken={REFRESH_TOKEN}") idToken = r_post.json()["idToken"] idToken |
取得したIDトークンを利用してデーターを取得
取得したIDトークンを利用して、いよいよ株価データー取得です。
株価コードと取得する期日を指定します。
書式はこちら。
r = requests.get(“https://株価4本値取得url?code=株価コード(5桁)&date=取得する期日”
r = requests.get(“https://api.jquants.com/v1/prices/daily_quotes?code=86970&date=20230324“, headers=headers)
※株価コードは近い将来5桁になるそうです。 4桁の株価コードの最後に”0”を付けてください。
1 2 3 4 5 6 7 8 |
import requests import json idToken = idToken headers = {'Authorization': 'Bearer {}'.format(idToken)} # r = requests.get("https://株価4本値取得url?code=株価コード(5桁)&date=取得する期日", r = requests.get("https://api.jquants.com/v1/prices/daily_quotes?code=86970&date=20230324", headers=headers) r.json() |
出力値(例)
{‘daily_quotes’: [{‘Date’: ‘2023-03-24’,
‘Code’: ‘86970’,
‘Open’: 2047.0,
‘High’: 2069.0,
‘Low’: 2035.0,
‘Close’: 2045.0,
‘UpperLimit’: ‘0’,
‘LowerLimit’: ‘0’,
‘Volume’: 2202500.0,
‘TurnoverValue’: 4507051850.0,
‘AdjustmentFactor’: 1.0,
‘AdjustmentOpen’: 2047.0,
‘AdjustmentHigh’: 2069.0,
‘AdjustmentLow’: 2035.0,
‘AdjustmentClose’: 2045.0,
‘AdjustmentVolume’: 2202500.0}]}
トヨタ自動車の株価を取得する
トヨタ自動車の株価をデーターフレーム取得しましょう。
書式はこちら。
r = requests.get(“https://株価4本値取得url?code=株価コード(5桁)&date=取得する期日“
株価コードと取得する期日をあらかじめ変数に格納しておきます。
1 2 3 4 5 |
API_URL = "https://api.jquants.com" code = "72030"# 5桁で入力 {type:"string"} date = "" # {type:"string"} from_ = "2014-10-29" # {type:"string"} to = "2022-12-31" # {type:"string"} |
書式を整えます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
query = "" if code != "": query += f'code={code}' if date != "": if code !="": query += "&" query += f'date={date}' if from_ != "": if query !="": query += "&" query += f'from={from_}' if to != "": if query !="": query += "&" query += f'to={to}' if query != "": query = "?"+query query |
出力値(例)
‘?code=72030&from=2014-10-29&to=2022-12-31‘
以下のコードで4本値の株価データーがデーターフレーム形式で取得されます。
1 2 3 4 5 6 7 8 9 |
headers = {'Authorization': f'Bearer {idToken}'} res = requests.get(f"{API_URL}/v1/prices/daily_quotes{query}", headers=headers) if res.status_code == 200: data = res.json()["daily_quotes"] df = pd.DataFrame(data) else: print(res.json()) df |
出力値はデーターフレーム。
※J-Quantsの規約により、取得したデーターそのものを公開する事は禁じられていますので、記載出来ません。
もっと学ぶなら
もっと学ぶなら、こちらのページがオススメです。
●株式分析チュートリアル | 日本取引所グループ
https://japanexchangegroup.github.io/J-Quants-Tutorial/
(株)日本取引所グループがデータサイエンスに興味のある個人向けに提供する、ITやデータ分析を活用した取引の学習を目的とした、ハンズオン形式のチュートリアルです。
●jquants-api-sample
https://github.com/AlpacaDB/jquants-api-sample
サンプルファイルが豊富で,実運用への近道かも知れません。
このページで紹介しているサンプルコードも一部抜粋させていただいています。