C#, Python, Web開発

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

Python yfinanceのCSVを作成する方法

Python の yfinance を使って、当日を除く最大期間の日次CSVを作成する方法を書いていきます。

※ 開場中は当日のデータが変化し続けるため、除外するようにしています。

コード例

以下は、サンプルのコード mk_yfcsv.pyです。

import sys
import yfinance as yf
from datetime import datetime
from zoneinfo import ZoneInfo

def main():
  ticker = sys.argv[1]
  mkcsv(ticker)

def mkcsv(ticker):
  # ダウンロード
  df = _history(ticker)
  # CSVに出力
  csv_name = _csv_name(ticker)
  df.to_csv(csv_name, date_format="%Y-%m-%d")

def _history(ticker):
  # 日次データを取得(昇順)
  now_ymd = _now_et_ymd()
  yt = yf.Ticker(ticker)
  df = yt.history(
    period="max", end=now_ymd, # Max, Excluding Today.
    auto_adjust=False, # Not Adjusted OHLC.
    actions=True  # + Dividend & Stock Splits Data.
  )
  # 調整後終値の列を削除
  df = df.drop("Adj Close", axis=1)
  # 念のためタイムゾーン情報を削除
  # サマータイムの誤差もあるため
  df.index = df.index.tz_localize(None)
  return df

def _now_et_ymd():
  # ETの現在日付を取得(東部時間)
  # EST,EDTは自動判別される(標準時,夏時間)
  ymd = datetime.now(
    ZoneInfo("America/New_York")
  ).strftime("%Y-%m-%d")
  return ymd

def _csv_name(ticker):
  # ハットとイコールを削除
  tk = ticker.replace("^", "").replace("=", "")
  tk = tk.lower() # 小文字に変換
  return f"yf-{tk}.csv"

if __name__ == "__main__":
  main()

実行例

Windowsのコマンドプロンプトで、以下のコマンドを実行します。

python mk_yfcsv.py ^^SOX

実行が完了すると、yf-sox.csv が出力されます。

補足

調整後価格を使いたい場合や、ティッカーの記号を削除したくない場合などもあると思います。そのため、上のスクリプトはあくまで例の1つになります。