![見出し画像](https://assets.st-note.com/production/uploads/images/118379376/rectangle_large_type_2_1c21af00eaaab5a9ea75046484c0e9af.png?width=1200)
Photo by
inagakijunya
【中級編】WTI原油先物の時系列データを取得するPythonコード|イザナミ豆知識
Python使える環境の方向けです。
Pythonを使ってイザナミで使える原油先物データを取得する方法です。
原油先物価格を利用した戦略作成にご利用ください。
使い方
引数に出力先CSVファイルのフルパス指定します
python WTI原油先物取得.py WTI原油先物,csv
コード
WTI原油先物取得.py
# Yahoo FinanceからWTI原油先物のデータを取得します。
# 更新の必要があれば全期間DLして更新する
# 1銘柄故にそんない時間掛からないので
import os
import sys
from datetime import datetime
import pandas as pd
import yfinance as yf
# ファイルの存在確認
def file_exists(filepath):
return os.path.exists(filepath)
# メイン処理
def main():
try:
# 引数の数を確認
if len(sys.argv) < 2:
print("Usage: python WTI原油先物取得.py <出力csv フルパス>")
sys.exit(1)
argument = sys.argv[1]
print(f"Received argument: {argument}")
current_date = datetime.today().strftime('%Y-%m-%d')
updateFlag = True
if file_exists(argument):
print("File exists")
# CSVファイルを読み込む
read_data = pd.read_csv(argument)
# 最新の日付を取得する
latest_date = pd.to_datetime(read_data['Date']).max().strftime('%Y-%m-%d')
# yfから最新日だけデータを取得して、日付を取得する
data = yf.download("CL=F", start=latest_date, end=current_date)
dl_latest_date = pd.to_datetime(data.index).max().strftime('%Y-%m-%d')
# 最新日が同じなら更新不要
if latest_date == dl_latest_date:
print("更新は不要です")
updateFlag = False
else:
print("File does not exist")
if updateFlag == True:
print("更新を開始します.")
# yfからデータを取得します。startとendで取得する期間を指定します。
data = yf.download("CL=F", start="2000-01-01", end=current_date)
# 日付の形式を '2020/01/02' の形に変更します。
data.index = pd.to_datetime(data.index).strftime('%Y/%m/%d')
# データバグってる日があるので、暫定処理でLOW/HIGHを修正する
data.loc[data['Low'] > data[['Open', 'High', 'Close']].min(axis=1), 'Low'] = data[['Open', 'High', 'Close']].min(axis=1)
data.loc[data['High'] < data[['Open', 'Low', 'Close']].max(axis=1), 'High'] = data[['Open', 'Low', 'Close']].max(axis=1)
# まさかのマイナス価格に備え、data内の全ての数値が0.01以下の場合、0.01に設定します。
data[data <= 0.01] = 0.01
# あとなぜか価格は動いてるのにVolumeが0の日があるので、それも1に設定します。
data['Volume'] = data['Volume'].apply(lambda x: max(x, 1))
# データをCSVファイルとして保存します。エンコーディングはshift-jisを指定します。
csv_filename = argument # "WTI原油先物.csv"
data.to_csv(csv_filename, encoding='shift-jis', index=True)
print("更新が完了しました.")
except yf.YahooFinanceError as yfe:
print(f"Yahoo Financeからのデータ取得中にエラーが発生しました: {yfe}")
except pd.errors.EmptyDataError:
print("エラー: CSVファイルが空です。")
except pd.errors.ParserError:
print("エラー: CSVファイルの解析中にエラーが発生しました。")
except Exception as e:
print(f"予期しないエラーが発生しました: {e}")
# メイン処理呼び出し
if __name__ == "__main__":
main()
必要なライブラリ
pandas / yfinance
pip install pandas
pip install yfinance
解説
yfinanceライブラリを使ってWTI原油先物データを取得しています。
少し高値と安値がおかしい日があるので修正するようにしているのと
先物価格がマイナスになっていた時期があるもののイザナミでは現状0
01未満の株価は扱えないので0.01に変換する処理が入っています。
作成したCSVをインポートして使う方法
銘柄として読み込んで利用します。相場情報機能で扱うときに便利です。
![](https://assets.st-note.com/img/1696776475053-VXX1LbLjJ1.png?width=1200)
![](https://assets.st-note.com/img/1696776521131-YUwLY8VQL3.png?width=1200)
終値と出来高の間に ---(未使用)が入るようにしてください
作成したCSVを環境データで利用する方法
環境データとして読み込んで使う時、前日比や移動平均を使いたい場合はユーザー定義をご利用ください。
![](https://assets.st-note.com/img/1696776766684-D0hsEfGpVV.png?width=1200)
お問合せ先
有限会社 ツクヨミ
URL https://www.izanami.jp
Mail support@izanami.jp
🔎イザナミnote内検索
この記事が気に入ったらサポートをしてみませんか?