ヘビに睨まれたカエル

Pythonとオプショントレードで市場の恐怖に立ち向かっていきます。

Pythonで東証時系列データを自動取得

1. できるようになったこと

  • 東証に毎日upされるオプション価格データ(終値)のcsvファイルを取得する。
  • その際、ローカルにある最新データの日付を確認して、それ以降の日付ファイルを自動で取得する。

2. 学んだこと

2.1. request, zipfileモジュールの使い方

ネット上のzipファイルをDLして解凍する

2.2. globモジュールの使い方

ローカルフォルダに既にDL済みのファイル一覧を取得して、その中の最新日付ファイル名を取得。

2.3. datetimeモジュールの使い方

フォルダ内にあるファイルが"201902xx"の形式で日付を含むファイル名だったので、この形式のまま日付を扱っていたところ、8桁の数字として認識されてしまったため、繰り返し処理で2/28, 2/29, 2/30, 2/31 ...のデータを取得しようとしてErrorが出ていた。

対策としてdatetime形式に変換して扱うことにした。

2.4. try except構文

データがない日(休日)のデータを探しに行ったときのErrorで止まっていた。 try except構文を使ってError時は次の日付に移る仕様にした。

3. 完成形

datas = glob.glob("*.csv")
newest_date = datetime(int(datas[-1][3:7]),int(datas[-1][7:9]),int(datas[-1][9:11]))

today = datetime.today()

while today > newest_date:

    newest_date = newest_date + timedelta(days=1)
    newest_date_str = newest_date.strftime("%Y%m%d")
    
    try:
        # オプション理論価格等情報
        #    利用ガイド:http://www.jpx.co.jp/markets/derivatives/option-price/01.html
        #    一覧: http://www.jpx.co.jp/markets/derivatives/option-price/index.html
        url = "http://www.jpx.co.jp/markets/derivatives/option-price/data/%s.zip"
        file = "ose%stp"%newest_date_str

        r = requests.get(url%file)
        z = zipfile.ZipFile(io.BytesIO(r.content))
        z.extractall()
        colName = ("CODE","TYPE","MATURITY","STRIKE", "RSV", 
              "PUT_CODE", "PUT_PRICE", "PUT_RSV", "PUT_TPRICE", "PUT_VOLATILITY",
              "CALL_CODE","CALL_PRICE","CALL_RSV","CALL_TPRICE","CALL_VOLATILITY",
              "F225_PRICE", "Base_VOL")
        df_raw = pd.read_csv(file+".csv", names=colName,
                    converters = {'CODE' : strip,
                                  'TYPE' : strip})    
    except:
        continue
        
print("Finish!!")