![見出し画像](https://assets.st-note.com/production/uploads/images/120436727/rectangle_large_type_2_740b4daa82fe5c19ba93c8f2163ad1c8.png?width=1200)
Pythonとyahoo_finance_api2で分足を取る方法
こしかけです。
こちらのpythonで株価データを取る方法(https://note.com/koshikake0124/n/naa843d214eed)の記事が最近よく読まれているので、分足取得についても書いてみようかと思います。
Google Colabを使って書きますので、Google Colabって何?という方は下記を先に見た方がいいかもしれません。
※有料にしてありますが、無料で分足データ取得プログラムは公開しています。コーヒー飲んで頑張ってねという方いたら励みになります!
では、さっそく分足を取得から始めます!
まずプログラム全文公開
⇨「説明とかめんどくさい。いいからプログラムを・・くれ!!!」
という方はこちらのファイルをそのままお使いください。
では、プログラム説明していきます
今回分足を取得するために必要な「yahoo_finance_api2」をインストールします
先頭のこの部分です
!pip install yahoo_finance_api2 --quiet
今回分足の取得にはこのライブラリを使います。私のGoogle Colab記事を読まれている方はわかるかもしれませんが、ブラウザで動いて、マシンスペックも関係ない反面、Webサイト閉じたら再びインストールしなければならないことがGoogle Colabの面倒なところです。
毎回開くたびにここから実行してください。
ライブラリをインポート (おまじない)
株価取得のために、さきほどインストールしたyahoo_finance_api2をインポートします。また、その後csvデータの保存したり加工するためにpandasというライブラリもインポートします
どうように、ここで取得したデータは時間が日本時間ではなくタイムスタンプ形式で取得されてくるので、その変換のためにdatetimeもインポートしておきます
(pandas,datetimeはcolabに入ってるので、最初のインストールは要りません)
#株価データを取得し、計算などをするために必要なものたちです。
from yahoo_finance_api2 import share
from yahoo_finance_api2.exceptions import YahooFinanceError
import pandas as pd
#日本時間変更に使用します
import datetime
さっそくデータ取得
このあとのコードでyahoo_financeからデータを取得しています
# 指定した銘柄コードと期間でデータを取得をします。
# symbols → 個別株・指数のコード
symbols = "1379"
# _minRange_ → 取得期間 (5分足は60日まで、1分足は7日まで取得できます)
#取得期間を変えたい場合は 60 を変更してください
_minRange = 60
# _min → 分足の指定 5だと5分足 1だと1分足です
_min = 5
#指定した銘柄の分足データ取得します
#日本株の場合は 末尾に".T"が必要です
#現在は".T"入ってますので、日本株は気にせず使えます。
my_data = share.Share(str(symbols)+".T")
#指定した銘柄コードでデータを取得しにいきます。
symbol_data = None
symbol_data = my_data.get_historical(share.PERIOD_TYPE_DAY,_minRange,share.FREQUENCY_TYPE_MINUTE,_min)
データの取得のために必要な情報は3つです
・銘柄コード symbols で定義 (symbols="1379"の部分)
・取得期間 _minRange で定義 (_minRange = 60の部分)
・分足種別 _min で定義 (_min = 5 の部分)
取得期間の最大は5分足で60日。1分足で7日分です。
_minRangeと_minの「=」の後ろの数値を変更で変わります。
また下記コメントにも書いてありますが、
日本株取得の場合は末尾に".T"が必要です
今回は日本株の分足データ取得を前提にしているので、プログラム中でつけてます。米国株の場合は必要ないです。
これを決めたら最後の
symbol_data = my_data.get_historical(share.PERIOD_TYPE_DAY,_minRange,share.FREQUENCY_TYPE_MINUTE,_min)
これでデータを取得します。
まずここまでが前半です。このままだと加工もできないのでこの後先ほどインポートした「pandas」でDataFrameというものに変換します。
取得したデータをDataFrameへの変換
これは最初の一行で終わりますw
ただ、このままだと日本時間ではないため、DataFrameに変換した後日本時間に変換していきます。
#加工できる形にデータ形式を変更(dataframeに変更です。
df = pd.DataFrame(symbol_data)
#このままだと時間が使えないので、日本時間に変換します
#timestampを日本時間へ変換
df["datetime"] = pd.to_datetime(df.timestamp, unit="ms")
df["datetime_jst"] = df["datetime"] + datetime.timedelta(hours=9)
df["datetime"] = df["datetime"].astype(str)
#datetime_jst に格納されるデータが日本時間になります。
df["datetime_jst"] = df["datetime_jst"].astype(str)
#データ取得できてるか確認用に末尾五行を表示
print(df.tail(5))
最初の一行
#加工できる形にデータ形式を変更(dataframeに変更です。
df = pd.DataFrame(symbol_data)
ここで、DataFrameへの変換は終了
その後のこちらで日本時間に変更をしています。
#このままだと時間が使えないので、日本時間に変換します
#timestampを日本時間へ変換
df["datetime"] = pd.to_datetime(df.timestamp, unit="ms")
df["datetime_jst"] = df["datetime"] + datetime.timedelta(hours=9)
df["datetime"] = df["datetime"].astype(str)
#datetime_jst に格納されるデータが日本時間になります。
df["datetime_jst"] = df["datetime_jst"].astype(str)
CSVで保存
ここまでできたら一旦CSVファイルに保存します。
タイムスタンプが残ったままで、この後乖離率を出したりグラフを出すためには必要ないので削除して保存します。
#加工のために元データをコピーし、列名を変更し、データ抜けを削除した後、今回使うデータだけにしています
df_copy = df.copy()
df_copy.rename(columns={'datetime_jst': 'Date', 'open': 'Open',"high":"High","low":"Low",'close':'Close',"volume":"Volume"}, inplace=True)
df_copy=df_copy.dropna()
pdr=df_copy.reindex(columns=["Date","Open","High","Low","Close","Volume"])
#確認用
print(pdr.tail(5))
pdr.to_csv(str(symbols)+"_5min.csv",index=False)
保存したデータをGoogle Colabからダウンロードする方法は冒頭で紹介した、下記記事の「CSVをご自身のPCに保存する方法」で記載していますのでご確認ください
終わりに
一旦これで分足データを取得することができました。
このデータを使って分析など色々やってみてください。
ちなみに私は分足でも乖離率やエンベロープ見たりするのでプログラムで下記のようなチャート作ったり、理想乖離を見たりしています。
![](https://assets.st-note.com/img/1698752249390-oJ3fO5UFbB.png?width=1200)
![](https://assets.st-note.com/img/1698752462657-mvyjvb5FhA.png?width=1200)
もし反響があればこの辺も記事書いていこうかと思います。
まずは今回は取得までということで!
最後まで読んでいただきありがとうございました!
↓最後宣伝です。定期購読マガジンやってます。よかったら覗いてみてください。
ここから先は
¥ 500
いただいたサポートは今後のbotの運用や新規機能開発の励みにします!!もっとがんばります🍄