見出し画像

イザナミで使える米国株時系列データを取得するPythonコード【中級編】|イザナミ豆知識

Pythonを使ってイザナミで使える米国株データをCSV形式で取得する方法です。
米国株検証を行ってみたい場合にご利用ください。


使い方

引数に出力先フォルダのフルパス指定します

python 米国株データ取得.py c:\米国株データ

コード

米国株データ取得.py

import datetime
import os
import sys
import yfinance as yf

# ディレクトリを作成する関数
def create_directory(path):
    """指定されたパスにディレクトリを作成します。既に存在する場合は何もしません。"""
    if not os.path.exists(path):
        os.makedirs(path)
        print(f"フォルダ '{path}' を作成しました。")
    else:
        print(f"フォルダ '{path}' は既に存在します。")

# ティッカーデータを取得する関数
def fetch_and_save_ticker_data(tickers, output_path, start_date="2000-01-01"):
    """ティッカーデータを取得し、CSVファイルとして保存します。"""
    end_date = datetime.datetime.now().strftime('%Y-%m-%d')

    # yfinanceからデータをダウンロード
    try:
        print(f"{tickers}のデータをダウンロード中...")
        data = yf.download(tickers, start=start_date, end=end_date)
        print(f"{tickers}のデータをダウンロードしました。")
    except Exception as e:
        print(f"データのダウンロードエラー : {e}")
        return

    # 各ティッカーシンボルのデータをCSVファイルに保存
    for symbol in tickers:
        try:
            symbol_data = data.xs(symbol, axis=1, level=1).copy()
            # Dateを降順にソート
            symbol_data = symbol_data.sort_values(by="Date", ascending=True)
            # 列の順序を指定
            symbol_data = symbol_data[["Open", "High", "Low", "Close", "Volume", "Adj Close"]]
            # 列の値を小数点3位で四捨五入
            symbol_data = symbol_data.round(3)
            # "Volume"のデータを1000で割る
            symbol_data["Volume"] = (symbol_data["Volume"] / 1000).astype(int)
            # CSVファイルに保存(date_formatパラメータで書式を指定)
            symbol_data.to_csv(f"{output_path}/{symbol}.csv", date_format="%Y/%m/%d")
            print(f"{symbol}のデータを {symbol}.csv に保存しました。")
        except Exception as e:
            print(f"{symbol}のデータ保存エラー : {e}")

# メイン処理
if __name__ == '__main__':
    if len(sys.argv) < 2:
        print("使い方: python 米国株データ取得.py <出力ディレクトリのパス>")
        sys.exit(1)

    output_directory = sys.argv[1]
    print(f"出力ディレクトリ: {output_directory}")

    #ここに取得したい銘柄のティッカーシンボルを羅列してください。 
    tickers = ["AAPL", "SPY", "QQQ", "DIA", "IWM"]
    create_directory(output_directory)
    fetch_and_save_ticker_data(tickers, output_directory)

取得する銘柄のティッカーシンボルはコード内の
#ここに取得したい銘柄のティッカーシンボルを羅列してください。 
の下にあるtickersを書き換えてください。

必要なライブラリ

yfinance

pip install yfinance

解説

yfinanceライブラリを使って米国株データを2000/1/1から取得しています。
小数点以下けっこう細かいデータが取れるので、SBI証券等に合わせて小数点第2位までのデータに変換しています。

イザナミ的に出来高が大きすぎる銘柄があるので一律1000で割っています。

取得したい銘柄や開始日付を変更する場合はコードを変更してください。

作成したCSVをインポートして使う方法

銘柄として読み込んで利用します。
※10/15現在は、イザナミ先行版を利用した解説となってます。

単元株数=1
小数点以下の桁数=2
1Tickの値幅パターン=最小単位
日付のタイプ=適当に振り直す
データの開始行=2

イザナミのカレンダーが米国仕様ではないので、日付を適当に割り当てて検証します。
そのため実運用には使えませんが、データがきちんと連続された日付に読み込まれるので、日本のカレンダーが原因でデータが抜けるようなことなく、期待の検証ができるようになります。

検証方法

↓バックテストの検証対象を追加した銘柄のみにして検証を行います。

↓基本設定も以下のように意図しない制限がかからないように設定を行って下さい。

↓出来高を1000で割っているため、最適分散投資では出来高制限の%を大きくするか、"0"日間平均と指定して"制限なし"扱いにして検証してください。

より長い期間のデータを利用して検証する方法

裏技でイザナミの株価データのカレンダーを拡張することで読み込めるデータ件数を増やすことが可能です。詳細は以下を御覧ください

イザナミの裏技 - 株価データのカレンダーを拡張する

Youtube動画での解説

株システムトレードQ&Aセミナーで米国株の検証についてお話した動画です。

旧記事

手動で米国株データを収集して検証する方法です。

関連記事

お問合せ先

有限会社 ツクヨミ
URL https://www.izanami.jp
Mail support@izanami.jp
🔎イザナミnote内検索

この記事が気に入ったらサポートをしてみませんか?