3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 QMT(迅投量化交易系统)中,为了更直观地复盘策略买卖点,可以使用 ContextInfo.draw_icon() 函数在主图 K 线对应的位置标记图标(矩形或椭圆)。
ContextInfo.draw_icon(cond, height, type)
bool): 触发绘制图标的条件。当为 True 时绘制图标。number): 图标绘制的高度位置(通常设为对应 K 线的收盘价 close、最高价 high 或最低价 low)。number): 图标类型:
0: 矩形图标1: 椭圆图标无返回值。
以下是一个简单的均线交叉策略示例:当短期均线上穿长期均线(金叉买入)时,在最低价下方绘制矩形图标;当短期均线下穿长期均线(死叉卖出)时,在最高价上方绘制椭圆图标。
#encoding:gbk
import numpy as np
def init(ContextInfo):
# 设置标的
ContextInfo.set_universe(['600000.SH'])
def handlebar(ContextInfo):
# 获取历史收盘价数据
close_data = ContextInfo.get_market_data(['close'], stock_code=ContextInfo.get_universe(), period='1d', count=30)
if close_data.empty or len(close_data) < 20:
return
# 计算 5 日与 20 日均线
ma5 = close_data['close'].tail(5).mean()
ma20 = close_data['close'].tail(20).mean()
# 获取前一根 Bar 的均线数据用于判断交叉
ma5_pre = close_data['close'].iloc[-6:-1].mean()
ma20_pre = close_data['close'].iloc[-21:-1].mean()
# 当前 K 线的最高价与最低价
high_price = ContextInfo.get_market_data(['high'], stock_code=ContextInfo.get_universe(), period='1d', count=1)['high'].iloc[-1]
low_price = ContextInfo.get_market_data(['low'], stock_code=ContextInfo.get_universe(), period='1d', count=1)['low'].iloc[-1]
# 买入条件:5日均线上穿20日均线(金叉)
buy_condition = (ma5_pre < ma20_pre) and (ma5 > ma20)
# 卖出条件:5日均线下穿20日均线(死叉)
sell_condition = (ma5_pre > ma20_pre) and (ma5 < ma20)
# 1. 触发买入条件时,在最低价下方绘制矩形图标 (type=0)
ContextInfo.draw_icon(buy_condition, low_price * 0.98, 0)
# 2. 触发卖出条件时,在最高价上方绘制椭圆图标 (type=1)
ContextInfo.draw_icon(sell_condition, high_price * 1.02, 1)
height 参数进行适当偏移(例如买入信号设为 low * 0.98,卖出信号设为 high * 1.02)。ContextInfo.draw_text() 与 ContextInfo.draw_number() 接口。