qmt量化交易策略小白学习笔记第61期【qmt编程之期权行情数据--get_market_data_ex函数】

qmt编程之获取期权数据

期权行情数据

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

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

获取期权行情数据

获取期权最新数据,首先需要进行数据订阅。完成合约订阅后,用get_market_data_ex函数即可提取相关信息。这个过程包含两大步骤:

第一,通过订阅操作确保能接收到你感兴趣的期权合约的更新;

第二,调用get_market_data_ex函数来实际获取并处理这些订阅到的数据,如果需要用到历史数据或过期合约数据,需要使用download_history_data进行下载。

这样,使用者就能获得最新和详细的期权数据,有助于做出更精准的投资决策。

调用方法
python
# coding=utf-8
from xtquant import xtdata
# 下载指定合约历史行情
xtdata.download_history_data(stock_code, period, start_time='', end_time='')
# 订阅指定合约行情
xtdata.subscribe_quote(stock_code, period='', start_time='', end_time='', count=0, callback=None)
# 等待订阅完成
time.sleep(1)  
# 获取指定合约行情
xtdata.get_market_data_ex(field_list = [], stock_list = [], period = '', start_time = '', end_time = '', count = -1, dividend_type = 'none', fill_data = True)
参数
  • xtdata.subscribe_quote
字段类型说明
stock_codestr股票代码
start_timestr开始时间格式YYYYMMDD/YYYYMMDDhhmmss
end_timestr结束时间
countint数量 -1全部/n: 从结束时间向前数n个
periodstr周期 分笔"tick" 分钟线"1m"/"5m" 日线"1d"
  • xtdata.get_market_data_ex
参数名称类型描述
field_listlist表示所有字段。不同的数据周期,取值范围有所不同。
stock_listlist合约代码列表
periodstr数据周期,默认是当前主图周期。可选值如下: 'tick' (分笔线), '1d' (日线), '1m' (1分钟线), '5m' (5分钟线), '15m' (15分钟线), 'l2quote' (Level2行情快照), 'l2quoteaux' (Level2行情快照补充), 'l2order' (Level2逐笔委托), 'l2transaction' (Level2逐笔成交),'l2transactioncount' (Level2大单统计), 'l2orderqueue' (Level2委买委卖队列)
start_timestr开始时间。为空时默认为最早时间。时间格式为'20201231'或'20201231093000'
end_timestr结束时间。为空时默认为最新时间。时间格式为'20201231'或'20201231235959'
countint数据最大个数。-1表示不做个数限制
dividend_typestr复权方式,默认是当前主图复权方式。可选值包括: 'none' (不复权), 'front'(前复权), 'back' (后复权), 'front_ratio' (等比前复权), 'back_ratio' (等比后复权)
fill_databool停牌填充方式
返回值
  • period为1m 5m 1dK线周期时
    • 返回dict { field1 : value1, field2 : value2, ... }
    • value1, value2, ... :pd.DataFrame 数据集,index为stock_list,columns为time_list
    • 各字段对应的DataFrame维度相同、索引相同
  • period为tick分笔周期时
    • 返回dict { stock1 : value1, stock2 : value2, ... }
    • stock1, stock2, ... :合约代码
    • value1, value2, ... :np.ndarray 数据集,按数据时间戳time增序排列
示例
# coding=utf-8
from xtquant import xtdata
# 订阅指定合约最新行情
xtdata.subscribe_quote('10005329.SHO', period='1d', start_time='', end_time='20231026150000', count=1, callback=None)
# 下载指定合约历史行情
xtdata.download_history_data('10005329.SHO',period = "1d") # ETF期权
xtdata.download_history_data('a2407-C-5200.DF',period = "1d") # 商品期货期权
xtdata.download_history_data('IO2312-C-3550.IF',period = "1d") # 股指期货期权
# 获取指定合约历史行情
day_data = xtdata.get_market_data_ex([], ['10005329.SHO'], period='1d', start_time='20230101', end_time='20231026', count=-1, dividend_type='front', fill_data=True)
print(day_data)
返回值 
{'10005329.SHO':                    time   open   high    low  close  volume     amount  \
 20231010  1696867200000  2.216  2.248  1.969  1.980     141   290131.0   
 20231011  1696953600000  2.065  2.152  2.000  2.005     389   801904.0   
 20231012  1697040000000  2.255  2.309  2.150  2.210     141   311402.0   
 20231013  1697126400000  2.053  2.075  1.980  2.012     275   560743.0   
 20231016  1697385600000  1.990  1.990  1.753  1.797     539   976868.0   
 20231017  1697472000000  1.818  1.900  1.766  1.866     519   946258.0   
 20231018  1697558400000  1.813  1.881  1.744  1.770     173   309998.0   
 20231019  1697644800000  1.632  1.632  1.244  1.244    1398  1967442.0   
 20231020  1697731200000  1.158  1.264  1.126  1.185    1580  1888661.0   
 20231023  1697990400000  1.230  1.241  0.980  1.057    2397  2597350.0   
 
           settelementPrice  openInterest  preClose  suspendFlag  
 20231010             1.980          3276     2.140            0  
 20231011             2.030          3122     1.980            0  
 20231012             2.210          3083     2.005            0  
 20231013             2.003          2994     2.210            0  
 20231016             1.797          3064     2.012            0  
 20231017             1.859          2969     1.797            0  
 20231018             1.757          2939     1.866            0  
 20231019             1.250          3065     1.770            0  
 20231020             1.185          3582     1.244            0  
 20231023             1.057          4191     1.185            0  }

 

### 迅投 QMT `get_full_tick` 函数无法获取期权实时行情的原因 在迅投 QMT 系统中,`get_full_tick` 函数用于获取逐笔成交数据或分时行情数据。然而,在某些情况下,该函数可能无法成功获取期权的实时行情。以下是可能导致这一现象的主要原因: #### 1. 权限不足 如果用户的账户未开通相应的权限,则即使调用了 `get_full_tick` 函数也无法正常返回期权的实时行情数据。这是因为 miniQMT 的运行依赖于券商提供的服务支持[^1]。若用户所在的券商未提供完整的期权交易权限或者未订阅相关市场数据,那么请求将会失败。 #### 2. 数据源限制 部分券商会对特定类型的金融产品施加数据访问限制。对于期权这种复杂的衍生品而言,其底层资产的价格波动频繁且复杂,因此并非所有券商都能无条件开放此类产品的全量 tick 数据流。当目标证券属于受限范围之内时,即便程序逻辑正确也可能因为缺乏必要的授权而被拒绝访问。 #### 3. 参数配置错误 `get_full_tick` 方法通常需要传入精确的目标合约代码作为参数之一。假如输入了不匹配或者是不存在的合约编号,则必然导致查询操作失败。此外还需要注意区分大小写以及特殊字符编码等问题以免引起误解读取不到预的结果集。 #### 示例代码验证 下面给出一段简单的 Python 脚本用来测试上述情况下的行为表现: ```python import xtquant as xq # 初始化并登录到miniQMT环境 client = xq.XtQuantTrader('your_broker_id') client.login('username', 'password') # 尝试抓取某个具体期权品种的tick级信息 contract_code = "OCXXXXXX" # 替换为实际存在的有效合约代号 ticks_data = client.get_full_tick(contract_code) if ticks_data is None or len(ticks_data) == 0: print(f"No data available for contract {contract_code}. Please check your subscription and permissions.") else: print("Successfully fetched tick-level data:") print(ticks_data[:5]) # 打印前几条记录供调试查看 ``` 通过执行上面这段脚本可以初步判断是否存在前述提到的各种潜在障碍因素影响最终效果呈现出来的情况发生与否. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值