QMT的获取行情函数get_market_data与get_market_data_ex区别

文章讨论了在Python中使用get_market_data和get_market_data_ex两个函数从股票数据中获取信息时,内存占用的区别。get_market_data在获取大量数据如quoter时导致内存飙升,而get_market_data_ex针对单个指标如lastPrice则更节省内存。作者建议优先使用get_market_data_ex并质疑为何原始函数仍在文档中保留,可能造成用户困惑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#encoding:gbk

import pandas as pd
import numpy as np
import talib

def init(ContextInfo):
    stock_code_list=[] #股票代码列表
    stock_code_list=ContextInfo.get_stock_list_in_sector('沪深A股') #获取沪深所有A股
    
    #遍历A股所有股票,打印输出
    for i in stock_code_list:
        lastPrice_dict=ContextInfo.get_market_data_ex(['lastPrice'],[i],period='tick',count=1)
        #lastPrice_dict=ContextInfo.get_market_data(['quoter'],[i],period='tick',count=-1)
        print(lastPrice_dict)
    
def handlebar(ContextInfo):
    pass

当使用get_market_data函数时,可以看到内存占用直线飙升

猜测主要原因是get_market_data获取quoter时,quoter的数据量比较大

而用get_market_data_ex只是单独获取一个lastPrice,数据量相对小很多。

而使用get_market_data_ex这个第二版函数的时候,内存占用,其他方面都很正常。既然做了升级,不知道为什么QMT没有把get_market_data这个函数抛弃了,反而还在文档中,让使用者傻傻分不清楚,只有掉坑里折腾半天才爬上来。

### 迅投 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]) # 打印前几条记录供调试查看 ``` 通过执行上面这段脚本可以初步判断是否存在前述提到的各种潜在障碍因素影响最终效果呈现出来的情况发生否. ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值