[機械学習・進化計算による株式取引最適化] No.04-01 株式データの取得

このプログラムの目的

get_stock_price.pyの目的はyfinanceからデータを取得し,ディレクトリへ格納することです.

前回のデータセットでは2018~2023年までを取得しましたが,今回は2010年1月1日~2023年3月1日までを取得します(実際に利用したのは2017~でした).

学習期間・検証期間を変更したい場合は,プログラム中のstartおよびendを変更してください.

work_share
├04_get_stock_price_ver2
  ├Dockerfile
  ├docker-compose.yml
  └src
    ├original_data_2010-01-01_2023-03-01_1d(自動生成)
    ├get_stock_price.py(これを作成)
    └stocks_code.xls(自動生成)

使用ライブラリ

import requests
import pandas as pd
import yfinance as yf
import os
import time

銘柄の証券コードの取得

証券コードはJPXのその他統計資料から確認できます.これはExcelデータになっているので,ダウンロードするコードを書きます.

def save_excel_data(url, save_name):
    ret = requests.get(url)
    with open(save_name, 'wb') as f:
        f.write(ret.content)

銘柄の価格の取得

銘柄の価格の推移はyfinanceから取得できます.アクセス頻度が高いとBANされる可能性があるので,time.sleepによって数秒間の遅延を入れます.

def save_stock_info(code, start, end, interval, save_dir):
    stock_price_data = yf.download(tickers=f'{code}.T', start=start, end=end, interval=interval)
    stock_price_data.to_csv(f'{save_dir}/stock_price/{code}.csv')
    time.sleep(2)

すべての銘柄のデータを取得

あとは,Excelをダウンロードして,すべての証券コードに対して価格を取得し,保存するだけです.

def save_all_stock(code_df):
    start = '2010-01-01'
    end = '2023-03-01'
    interval = '1d' 
    save_dir = f'original_data_{start}_{end}_{interval}'

    os.makedirs(f'{save_dir}', exist_ok=True)
    os.makedirs(f'{save_dir}/stock_price', exist_ok=True)
    for code in code_df['コード']:
        print(f'get and save :: {code}')
        save_stock_info(code, start, end, interval, save_dir)

if __name__ == '__main__':
    url = 'https://www.jpx.co.jp/markets/statistics-equities/misc/tvdivq0000001vg2-att/data_j.xls'
    save_name = 'stocks_code.xls'
    save_excel_data(url, save_name)
    df = pd.read_excel(save_name)
    save_all_stock(df)

データ取得には数時間~1日かかるので,それまで待ちます.

タイトルとURLをコピーしました