3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
你好!在QMT(E海方舟量化版底层)中使用 ContextInfo.get_full_tick 获取数据时,如果返回的 timetag 为 00:00:00,且价格字段全部相同、成交量为 0、买卖五档皆为 0,这通常意味着策略没有获取到该合约的实时行情数据,返回的仅仅是系统初始化的静态昨收数据。
出现这种情况通常有以下几个原因及对应的解决方法:
QMT 平台为了节省资源,默认只会推送主图(当前图表)的行情。如果你在代码中直接使用 get_full_tick 去获取非主图合约的数据,且没有提前订阅,就会取到这种无效的空数据。
解决方法:
在 init 函数中使用 ContextInfo.subscribe_quote 显式订阅该合约的 tick 行情,或者使用更推荐的 get_market_data_ex 接口(自带订阅功能)。
推荐写法(使用 get_market_data_ex):
def handlebar(ContextInfo):
# 使用 get_market_data_ex 获取 tick 数据,subscribe=True 会自动订阅
tick_data = ContextInfo.get_market_data_ex(
[],
['IF2407.IF'],
period='tick',
subscribe=True
)
print(tick_data)
传统写法(先订阅,再获取):
def init(ContextInfo):
# 在初始化时订阅 IF2407.IF 的 tick 行情
ContextInfo.subscribe_quote('IF2407.IF', period='tick')
def handlebar(ContextInfo):
# 盘中获取最新 tick
data = ContextInfo.get_full_tick(['IF2407.IF'])
print(data)
如果你是在非交易时间(如周末、节假日或盘后)点击“运行”或“回测”,由于当前没有实时的 tick 数据推送,系统只能返回当天的初始状态数据(即昨收价,且成交量为0)。
解决方法:请在期货的实际交易时间段内(如上午 9:30-11:30,下午 13:00-15:00)运行实盘/模拟策略进行测试。
请检查 E海方舟 客户端右下角的行情连接状态。如果行情断开,或者你登录的账号权限没有开通中金所的实时行情(部分券商默认可能只提供延时或不提供股指期货行情),也会导致取不到数据。
解决方法:确认客户端行情连接正常,且能在软件的行情界面正常看到 IF2407.IF 的实时跳动。
总结:
建议你将代码改为使用 ContextInfo.get_market_data_ex 并设置 subscribe=True,同时确保在盘中交易时间运行,即可解决此问题。