以TXO17000V1(臺指選擇權10月 17000P)為例
TXO 17000 V 1
選擇權的代號由4個部分組成
1. 第1~3碼:商品代號(TXO)
2. 第4~8碼:履約價(17000)
3. 第9碼:月份(V:10月)
4. 第10碼:年份(1:2021年)
國內選擇權月份代號
Call:
A:01 B:02 C:03 D:04 E:05 F:06 G:07 H:08 I:09 J:10 K:11 L:12
Put:
M:01 N:02 O:03 P:04 Q:05 R:06 S:07 T:08 U:09 V:10 W:11 X:12
Example:
TXO17000V1,V即表示10月的Put
TXO13400C2,C即表示03月的Call
選擇權歷史資料範例 ticks
獲取ticks (2021/08/19~2021/09/15)
TXO 9月份(月份代號I1, U1)
履約價範圍14400~20400
代碼: 選擇全部
import shioaji as sj
import pandas as pd
import time
collector = {}
commodity_code = 'TXO'
year_code = '1'
start_date = pd.to_datetime('2021/08/19')
end_date = pd.to_datetime('2021/09/15')
# get ticks
while start_date <= end_date:
start_date_str = start_date.strftime('%Y-%m-%d')
for month_code in ['I', 'U']: # call/put
for strike_price in range(14400, 20400, 100):
code = commodity_code + f"{strike_price}{month_code}{year_code}"
contract = sj.contracts.BaseContract(
security_type=sj.constant.SecurityType.Option,
exchange=sj.constant.Exchange.TAIFEX,
code=code
)
ticks = api.ticks(
contract=contract,
date=start_date_str
)
df = pd.DataFrame({**ticks})
if not df.empty:
if code not in collector:
collector[code] = []
collector[code].append(df)
print(f"{start_date.date()} | {code} | {strike_price} | {df.shape[0]}")
time.sleep(0.25)
start_date += pd.offsets.BDay()
# concat dfs
dfs = {}
for code in collector.keys():
dfs[code] = pd.concat(collector[code], axis=0).reset_index(drop=True)
dfs[code].ts = pd.to_datetime(dfs[code].ts)
print(dfs['TXO17000I1'])
選擇權歷史資料範例 kbars
獲取kbars(2021/08/19~2021/09/15)
TXO 9月份(月份代號I1, U1)
履約價範圍14400~20400
代碼: 選擇全部
import shioaji as sj
import pandas as pd
import time
collector = {}
commodity_code = 'TXO'
year_code = '1'
start_date = '2021-08-19'
end_date = '2021-09-15'
for month_code in ['I', 'U']: # call/put
for strike_price in range(14400, 20400, 100):
code = commodity_code + f"{strike_price}{month_code}{year_code}"
contract = sj.contracts.BaseContract(
security_type=sj.constant.SecurityType.Option,
exchange=sj.constant.Exchange.TAIFEX,
code=code
)
kbars = api.kbars(
contract=contract,
start=start_date,
end=end_date
)
df = pd.DataFrame({**kbars})
if not df.empty:
if code not in collector:
collector[code] = []
collector[code].append(df)
print(f"{start_date} ~ {end_date} | {code} | {strike_price} | {df.shape[0]}")
time.sleep(0.25)
# concat dfs
dfs = {}
for code in collector.keys():
dfs[code] = pd.concat(collector[code], axis=0).reset_index(drop=True)
dfs[code].ts = pd.to_datetime(dfs[code].ts)
print(dfs['TXO17000I1'])
各合約結算價/日可參考期交所-指數選擇權-最後結算價