3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 QMT (Quantitative Market Trading) 平台的 Python API 中,要在 K 线主图上显示自定义的文字或数字,主要使用 ContextInfo.draw_text() 和 ContextInfo.draw_number() 这两个函数。
这两个函数通常在 handlebar(ContextInfo) 循环中调用,用于在满足特定条件(condition)的 K 线位置上绘制标记。
ContextInfo.draw_text()用于在图表指定位置绘制字符串文本。
ContextInfo.draw_text(condition, position, text)condition (bool): 绘制条件。如果为 True,则在当前 K 线绘制;为 False 则不绘制。position (number): 文字显示的 Y 轴位置(通常是价格,如最高价、最低价等)。text (string): 要显示的文本内容。ContextInfo.draw_number()用于在图表指定位置绘制数值。
ContextInfo.draw_number(condition, position, number, precision)condition (bool): 绘制条件。position (number): 数字显示的 Y 轴位置。number (number): 要显示的具体数值。precision (int): 小数点保留位数(例如 2 代表保留两位小数)。以下策略代码展示了如何在 K 线图上标记:
您可以将此代码复制到 QMT 的策略编辑器中,并在模型研究或模型交易的图表上运行。
# -*- coding: gbk -*-
def init(ContextInfo):
# 初始化函数,这里不需要特殊设置
pass
def handlebar(ContextInfo):
# 获取当前主图品种的 K 线数据
# 获取当前 K 线索引
index = ContextInfo.barpos
# 获取当前 K 线的高、开、低、收数据
# 注意:get_market_data 默认返回的是 pandas Series 或 DataFrame
# 我们取当前 barpos 对应的值
# 获取收盘价序列
close_list = ContextInfo.get_market_data(['close'])
# 获取开盘价序列
open_list = ContextInfo.get_market_data(['open'])
# 获取最高价序列
high_list = ContextInfo.get_market_data(['high'])
# 确保数据长度足够
if len(close_list) <= index:
return
# 获取当前 K 线的具体数值
current_close = close_list[index]
current_open = open_list[index]
current_high = high_list[index]
# --- 设置绘制条件 ---
# 条件:收盘价 > 开盘价 (阳线)
is_up_candle = current_close > current_open
# --- 1. 绘制文字 ---
# 参数说明:(条件, Y轴位置, 文本内容)
# 这里设置位置为最高价 + 价格的0.5% (为了显示在K线顶端上方一点,避免重叠)
text_position = current_high * 1.005
ContextInfo.draw_text(is_up_candle, text_position, '涨')
# --- 2. 绘制数字 ---
# 参数说明:(条件, Y轴位置, 数值, 小数精度)
# 我们在文字上方一点显示具体的收盘价
number_position = current_high * 1.01
ContextInfo.draw_number(is_up_candle, number_position, current_close, 2)
# --- 3. 绘制图标 (可选补充) ---
# 参数说明:(条件, Y轴位置, 图标类型) 0:矩形 1:椭圆
# 在阳线最低价下方画一个小圆点
# ContextInfo.draw_icon(is_up_candle, current_low * 0.99, 1)
坐标轴位置 (position):
position 参数决定了文字/数字在 Y 轴(价格轴)上的高度。high(最高价)的基础上乘以一个系数(如 1.01)使其显示在上方,或在 low(最低价)基础上乘以系数(如 0.99)使其显示在下方。运行模式:
颜色控制:
draw_text 和 draw_number 目前不支持直接通过参数设置颜色,它们通常跟随系统默认配色或指标配色。ContextInfo.paint() 函数。性能:
handlebar 是逐根 K 线执行的。绘图函数会在每一根满足条件的 K 线上留下标记。Q: 如何在副图(指标窗口)而不是主图上显示?
A: draw_text 和 draw_number 默认绘制在策略运行的窗口。如果您将策略叠加在主图上(“主图叠加”),它就画在主图;如果您将策略作为副图指标运行,它就会画在副图区域。
Q: 可以显示中文吗?
A: 可以。如示例所示,只要文件头部声明了 # -*- coding: gbk -*-,即可正常显示中文字符。
Q: 如何画竖线来标记特定日期?
A: 可以使用 ContextInfo.draw_vertline(cond, price1, price2, color)。例如:ContextInfo.draw_vertline(is_up_candle, 0, 10000, 'red') 会在满足条件的 K 线处画一条红色的竖线。