新版tick数据,怎么采用contextinfo.paint画图
新版tick数据,怎么采用contextinfo.paint画图
问题描述
解决方案
在QMT(迅投QMT量化交易平台)中,想要使用新版Tick数据(分笔数据)并通过 ContextInfo.paint 函数在图表上画图,主要分为两个步骤:首先获取最新的Tick数据,然后提取需要的数值并调用画图接口。
核心API介绍
- 获取Tick数据:推荐使用
ContextInfo.get_full_tick(stock_code=[]),它会返回一个包含最新分笔数据的字典,包含lastPrice(最新价)、volume(成交量)等字段。 - 画图函数:
ContextInfo.paint(name, value, index, line_style, color, limit)。其中index填-1表示按主图当前索引显示。
完整Python策略示例
以下是一个完整的策略代码,演示如何在实时行情到来时,获取最新Tick的最新价,并将其绘制在图表上:
#coding:gbk
def init(ContextInfo):
# 初始化时可以设置股票池,或者直接依赖主图品种
pass
def handlebar(ContextInfo):
# 1. 确保只在最新的一根K线(实时行情)上进行Tick级别的处理
# 历史K线回测阶段不处理Tick画图
if not ContextInfo.is_last_bar():
return
# 2. 获取当前主图的股票代码
stock_code = ContextInfo.stockcode
if not stock_code:
return
# 3. 获取最新分笔数据 (Tick数据)
# 传入当前股票代码列表
tick_data = ContextInfo.get_full_tick([stock_code])
# 4. 解析数据并画图
if stock_code in tick_data:
# 提取最新价 (lastPrice)
last_price = tick_data[stock_code]['lastPrice']
# 如果价格有效,则进行绘制
if last_price > 0:
# 使用 paint 函数画图
# 参数说明:
# 'Tick_Price': 指标名称
# last_price: 需要绘制的数值
# -1: 显示索引位置,-1表示当前主图最新K线索引
# 0: 线型,0表示曲线
# 'red': 颜色
# 'noaxis': 画线控制,不影响坐标画线
ContextInfo.paint('Tick_Price', last_price, -1, 0, 'red', 'noaxis')
# 你也可以打印出来用于调试
# print(f"当前Tick最新价: {last_price}")
代码逻辑解析
ContextInfo.is_last_bar():在盘中,最后一根K线每变动一次(即每个Tick到来时),handlebar都会被执行一次。加上这个判断可以过滤掉历史K线的计算,只在实时Tick驱动时执行画图逻辑。ContextInfo.get_full_tick():传入主图代码,获取最新的盘口快照。返回的字典中lastPrice即为最新成交价。ContextInfo.paint():将提取到的last_price绘制到界面上。由于是在同一个K线(Bar)上不断接收Tick,paint函数会不断更新当前K线位置上的这个指标点。
注意事项
paint函数绘制的图形是依附于K线(Bar)的。如果你在日线周期下运行该策略,Tick数据的变动只会导致当前这根日线上的指标点上下跳动,而不会形成一条连续的Tick级别曲线。如果需要看连续的线,建议将主图周期切换为更小的周期(如1分钟线或Tick图)。- 确保策略运行模式为实盘/模拟运行模式,因为Tick驱动和
get_full_tick在实时行情下才有意义。