qmt量化交易策略小白学习笔记第62期【qmt编程之获取过期期权合约代码--get_stock_list_in_sector函数--内置Python】

qmt编程之获取期权数据

qmt更加详细的教程方法,会持续慢慢梳理。

也可找寻博主的历史文章,搜索关键词查看解决方案 !

获取过期期权合约代码

注意

获取过期期权合约代码本质上是通过get_stock_list_in_sector()获取到过期板块内容,所以在使用前,请务必确保已经下载过历史合约信息

  1. 原生python:调用xtdata.download_history_contracts()进行下载

  2. 内置python:在界面端数据管理 - 过期合约数据 - 过期合约列表勾选下载,下载后需要重启客户端生效

内置python
调用方法

内置python

C.get_stock_list_in_sector(sector_name)

参数

字段类型说明
sector_namestring板块名称
返回值
  • list:内含成份股代码,代码形式为 'stockcode.market',如 '000002.SZ'
示例
#encoding:gbk

import re

def init(C):

  option_code_list1 = get_option_code(C,"IF",data_type = 0) # 获取中金所当前可交易期权合约

  option_code_list2 = get_option_code(C,"SHO",data_type = 1) # 获取上交所已退市可交易期权合约
  option_code_list3 = get_option_code(C,"IF",data_type = 2) # 获取 中金所 所有期权(包含历史)合约

  print(option_code_list1[:5])
  print("="*20)
  print(option_code_list2[:5])
  print("="*20)
  print(option_code_list3[:5])

  # 可通过C.get_option_detail_data()查看合约具体信息

def hanldbar(C):
  return

def get_option_code(C,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 = C.get_stock_list_in_sector(_now_sector)
        elif data_type == 1:
            _list = C.get_stock_list_in_sector(_sector)
        elif data_type == 2:
            _list = C.get_stock_list_in_sector(_sector) + C.get_stock_list_in_sector(_now_sector)
        else:
            raise KeyError(f"data_type参数错误:{data_type}")
        return _list
        
    # 期货期权需要额外处理
    if data_type == 0:
        all_list = C.get_stock_list_in_sector(_now_sector)
    elif data_type == 1:
        all_list = C.get_stock_list_in_sector(_sector)
    elif data_type == 2:
        all_list = C.get_stock_list_in_sector(_sector) + C.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
返回值 
['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']

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值