オプションのバックテストをPythonでしよう!
オプション戦略は、多様すぎるし、やはりバックテストで、どのような市場でどのような挙動になるかを確認しておきたいですよね。有料サービスを使うとなかなか高価ですし、フレキシビリティが少なくて、なかなか難しいものです。
OptionsDXというサイトで、2010-2023年までのSPXやSPYなどの一日の最後のオプションの値段が無料で公開されていることが、わかりました。しかも多少の料金を払えば、分足や30分足のデータも買えるようです。今日は、これを使って、オプションのバックテストをするプログラムを作ってみましょう。
Free Historical Options Trading Data - optionsDX
まずは、ダウンロードしてください。1年ごとにデータを0ドルで購入していきます。ダウンロードしたファイルは、SPXやVIXなど、ティッカーの名前のついたフォルダにいれましょう。
次に、下のプログラムを動かすと、すべてのファイルを読み取って1つのファイルにしてセーブします。プログラムは、SPXのフォルダがおいてあるフォルダにおいてください。SPXのフォルダの中に入ったすべてのファイルを読み込んで、spx_filesというフォルダにテンポラリーファイルを作り、最後に、spx_all_data.csvというエクセルフォーマットにしてセーブします。特殊ライブラリとして、解凍用プログラムのpy7zrがいるので、pipを使ってインストールしてください。
pip install py7zr
以下がデータ解凍+成形プログラムです。SPXフォルダのあるフォルダに入れてください。このプログラムは、extract_spx_file.pyという名前にしておきます。最初のバージョンから改良してかなり早くなりました。
# -*- coding: utf-8 -*-
"""
Created on Sun Aug 25 08:20:20 2024
@author: Lune2121
options/extract_spx_file.py
"""
import pandas as pd
import os
import py7zr
ticker_name = 'SPX'
dir_name = f'./{ticker_name}/'
extracted_files_folder = f'./{ticker_name.lower()}_files/'
final_filename = f'./{ticker_name.lower()}_all_data.csv'
data_files = os.listdir(dir_name)
#%%
for data_file in data_files:
with py7zr.SevenZipFile(dir_name+data_file, mode='r') as archive:
file_list = archive.getnames()
print(file_list)
archive.extractall(path = extracted_files_folder)
#%%
dir_name = extracted_files_folder
files = os.listdir(dir_name)
all_text = ''
for i, file in enumerate(files):
file_name = dir_name + file
print(file_name)
with open(file_name, 'r') as f:
text1 = f.read()
n1 = text1.find('\n')
rest1 = text1[n1+1:]
if i == 0:
l1 = text1[:n1].replace('[', '').replace(']', '').replace(' ', '').lower()
with open(final_filename, 'w') as f2:
f2.write(l1 + '\n' + rest1)
else:
with open(final_filename, 'a') as f2:
f2.write(rest1)
プログラムの使い方
ファイルの置いてあるフォルダから、コマンドラインを立ち上げ、下のようにタイプすると、プログラムが走ります。
python extract_spx_file.py
同じフォルダに、spx_all_data.csvというファイルができているのを確認してください。
ちなみに、私はSpyderという無料のIDE(統合開発環境)が気に入っています。ファイルを開いて、グリーンの三角のボタンを押すと、プログラムが走ります。VS_Codeでも同じようにできると思います。
バックテストのプログラム
次に、バックテストのプログラムを書きます。プログラムでは、コールスプレッド戦略の例を出していますが、最初の設定を書き換えれば、基本的にはどんな戦略でもバックテストできると思います。いまのところ、ポジションを1セットのみをオープンし、クローズした段階で次のポジションをいれる”Sequential”な戦略のみとなっています。現実的にはほとんどの人はこの方法でいくのではないでしょうか。終日データだけですが、満期までの期間が30日などの戦略では、これで十分だと思います。
ヤフーファイナンスからもデータを取得しているので、インストールしてください。
pip install yfinance
バックテスト用Pythonコード
下のような出だしになっています。上で作ったプログラムと同じフォルダにいれてください。
すみませんけど、実際のプログラムは有料とさせていただきます。
ここから先は
¥ 4,900
この記事が気に入ったらチップで応援してみませんか?