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つになります。