qmt编程之获取期权数据
qmt更加详细的教程方法,会持续慢慢梳理。
也可找寻博主的历史文章,搜索关键词查看解决方案 !
注意
获取过期期权合约代码本质上是通过get_stock_list_in_sector()
获取到过期板块
内容,所以在使用前,请务必确保已经下载过历史合约信息
-
原生python:调用
xtdata.download_history_contracts()
进行下载 -
内置python:在界面端
数据管理 - 过期合约数据 - 过期合约列表
勾选下载,下载后需要重启客户端生效
原生Python
调用方法
python
# coding=utf-8
from xtquant import xtdata
xtdata.get_stock_list_in_sector(sector_name)
参数
字段 | 类型 | 说明 |
---|---|---|
sector_name | string | 板块名称 |
返回值
list
:内含成份股代码,代码形式为 'stockcode.market',如 '000002.SZ'
示例
示例
from xtquant import xtdata
import re
def get_option_code(market,data_type = 0):
'''
ToDo:取出指定market的期权合约
Args:
market: 目标市场,比如中金所填 IF
data_type: 返回数据范围,可返回已退市合约,默认仅返回当前
0: 仅当前
1: 仅历史
2: 历史 + 当前
'''
_history_sector_dict = {
"IF":"过期中金所",
"SF":"过期上期所",
"DF":"过期大商所",
"ZF":"过期郑商所",
"INE":"过期能源中心",
"SHO":"过期上证期权",
"SZO":"过期深证期权",
}
# _now_secotr_dict = {
# "IF":"中金所",
# "SF":"上期所",
# "DF":"大商所",
# "ZF":"郑商所",
# "INE":"能源中心",
# "SHO":"上证期权",
# "SZO":"深证期权",
# }
_sector = _history_sector_dict.get(market)
# _now_sector = _now_secotr_dict.get(market)
if _sector == None:
raise KeyError(f"不存在该市场:{market}")
_now_sector = _sector[2:]
# 过期上证和过期深证有专门的板块,不需要处理
if market == "SHO" or market == "SZO":
if data_type == 0:
_list = xtdata.get_stock_list_in_sector(_now_sector)
elif data_type == 1:
_list = xtdata.get_stock_list_in_sector(_sector)
elif data_type == 2:
_list = xtdata.get_stock_list_in_sector(_sector) + xtdata.get_stock_list_in_sector(_now_sector)
else:
raise KeyError(f"data_type参数错误:{data_type}")
return _list
# 期货期权需要额外处理
if data_type == 0:
all_list = xtdata.get_stock_list_in_sector(_now_sector)
elif data_type == 1:
all_list = xtdata.get_stock_list_in_sector(_sector)
elif data_type == 2:
all_list = xtdata.get_stock_list_in_sector(_sector) + xtdata.get_stock_list_in_sector(_now_sector)
else:
raise KeyError(f"data_type参数错误:{data_type}")
_list = []
pattern1 = r'^[A-Z]{2}\d{4}-[A-Z]-\d{4}\.[A-Z]+$'
pattern2 = r'^[a-zA-Z]+\d+[a-zA-Z]\d+\.[A-Z]+$'
pattern3 = r'^[a-zA-Z]+\d+-[a-zA-Z]-\d+\.[A-Z]+$'
for i in all_list:
if re.match(pattern1,i):
_list.append(i)
elif re.match(pattern2,i):
_list.append(i)
elif re.match(pattern3,i):
_list.append(i)
# _list =[i for i in all_list if re.match(pattern, i)]
return _list
if __name__ == "__main__":
xtdata.download_history_contracts() # 下载历史合约信息
option_code_list1 = get_option_code("IF",data_type = 0) # 获取中金所当前可交易期权合约
option_code_list2 = get_option_code("SHO",data_type = 1) # 获取上交所已退市可交易期权合约
option_code_list3 = get_option_code("IF",data_type = 2) # 获取 中金所 所有期权(包含历史)合约
print(option_code_list1[:5])
print("="*20)
print(option_code_list2[:5])
print("="*20)
print(option_code_list3[:5])
# 可通过xtdata.get_option_detail_data()查看合约具体信息
返回值
['HO2312-C-2100.IF', 'HO2312-C-2100.IF', 'HO2312-C-2125.IF', 'HO2312-C-2125.IF', 'HO2312-C-2150.IF']
====================
['10000001.SHO', '10000002.SHO', '10000003.SHO', '10000004.SHO', '10000005.SHO']
====================
['HO2301-C-2325.IF', 'HO2301-C-2325.IF', 'HO2301-C-2350.IF', 'HO2301-C-2350.IF', 'HO2301-C-2375.IF']