QuantConnect
SPYの満期日の一覧
code:python
qb = QuantBook()
qb.SetStartDate(datetime(2020, 1, 1))
SPY = qb.AddEquity('SPY', dataNormalizationMode=DataNormalizationMode.Raw).Symbol
contract_symbols = []
d = datetime(2020, 1, 1)
while len(contract_symbols) == 0:
contract_symbols = qb.OptionChainProvider.GetOptionContractList(SPY, d)
d = d - timedelta(days=1)
set( s.ID.Date for s in contract_symbols )
マンスリーだけにする(IsStandard()はたぶんバグってるけど)
code:python
set( s.ID.Date for s in contract_symbols if OptionSymbol.IsStandard(s) )
SPYの原資産価格とオプションひとつの過去データを読み込み
code:python
import pandas as pd
def load_data(date, expiry, right, strike, count, resolution):
qb = QuantBook()
qb.SetStartDate(min(date, datetime.now()))
SPY = qb.AddEquity("SPY", dataNormalizationMode=DataNormalizationMode.Raw).Symbol
contract_symbols = []
d = date
while len(contract_symbols) == 0:
contract_symbols = qb.OptionChainProvider.GetOptionContractList(SPY, d)
d = d - timedelta(days=1)
contract_symbols = [
s for s in contract_symbols
if s.ID.Date == expiry
if s.ID.StrikePrice == strike
if s.ID.OptionRight == right
]
sdf = qb.History(SPY, count, resolution).reset_index()
odf = qb.History(contract_symbols, count, resolution).reset_index()
# うんこなので1日ずれてるのを直す
sdf'time' = sdf'time' - timedelta(days=1)
odf'time' = odf'time' - timedelta(days=1)
return sdf, odf
SPXの満期日を取得した感じ
code:python
qb = QuantBook()
qb.SetStartDate(datetime(2020, 1, 1))
SPX = qb.AddIndex('SPX').Symbol
contract_symbols = []
d = datetime(2020, 1, 1)
while len(contract_symbols) == 0:
contract_symbols = qb.OptionChainProvider.GetOptionContractList(SPX, d)
d = d - timedelta(days=1)
set( s.ID.Date for s in contract_symbols )
SPXヒストリカルデータ
code:python
qb.History(SPX, 10, Resolution.Daily)
さらにプロット
code:python
qb.History(SPX, 100, Resolution.Daily).reset_index().plot(x='time', y='close')
オプションコントラクトの検索
code:python
def find_contract(exp, k, r):
for c in contract_symbols:
if (c.ID.Date == exp and
c.ID.StrikePrice == k and
c.ID.OptionRight == r):
return c
return None
find_contract(datetime(2023, 12, 15), 3300.0, OptionRight.Call)