C#, Python, Web開発

プログラミングやデータ分析のことなどを書いています。

Python yfinance 日次の収益率を計算する方法(株式, インデックス)

Python の yfinance を使って、日次の収益率を計算する方法を書いていきます。

注意事項

  • 配当は考慮していません。
  • 終値で収益率を計算しています。
  • 浮動小数点演算の誤差があります。

コード例

以下のコードは、S&P500(^SPX)の収益率を計算して、CSVに出力する例です。

import pandas as pd
import yfinance as yf

# 取得データ
ticker = '^SPX'
start = 2023
end = 2024

# 日次データを少し余分に取得(昇順)
yft = yf.Ticker(ticker)
df = yft.history(
  start=f'{start-1}-12-20',
  end=f'{end+1}-01-10',
  auto_adjust=False, actions=True
)

# 起点となる12月末のデータを抽出
idf = df[df.index.year == start-1]
idate = idf.index.max()
idf = idf.loc[[idate]]

# 算出対象のデータを抽出して結合
df = df.loc[f'{start}-01-01':f'{end}-12-31']
df = pd.concat([idf, df])

# 日付と終値の列だけ抽出
df = df[['Close']]

# 日次の収益率を算出
df['DTD'] = df['Close'].pct_change()

# CSVに出力
df.to_csv('spx-dtd.csv', date_format='%Y-%m-%d')

DTDの列が、日次の収益率になります。

実行

上のコードを実行すると、spx-dtd.csv というファイルが出力されます。ファイルの先頭5行は以下の通りです。

Date,Close,DTD
2022-12-30,3839.5,
2023-01-03,3824.139892578125,-0.004000548879248611
2023-01-04,3852.969970703125,0.007538970575044379
2023-01-05,3808.10009765625,-0.011645528874622113

下は、表計算ソフトで開いたイメージです。

データの1行目が不要な場合は、収益率の算出後に削除すると良さそうです。