3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化交易中,最大回撤(Drawdown)是衡量策略风险的核心指标。除了回测结束时输出的静态绩效指标外,在回测过程中动态、直观地观察每日回撤的变化趋势,能帮助我们更好地理解策略在极端行情下的抗风险能力。
QMT 平台提供了强大的绘图接口 ContextInfo.paint()。通过将线型参数设置为 42(柱状线),我们可以在副图上绘制出类似于成交量柱子的“回撤柱”,直观呈现策略的每日动态回撤。
ContextInfo.get_net_value(index)ContextInfo.paint(name, value, index, line_style, color = 'white', limit = '')name (string):指标名称,如 'DynamicDrawdown'。value (number):要显示的数值(即计算出的回撤百分比)。index (number):显示索引位置,填 -1 表示按当前主图 K 线索引显示。line_style (number):线型。42 代表柱状线(0 代表普通曲线)。color (string):支持 'red'(红)、'green'(绿)、'blue'(蓝)、'yellow'(黄)等常用颜色。请在 QMT 策略编辑器中新建 Python 策略,并写入以下代码:
#coding:gbk
def init(ContextInfo):
# 设定基础股票池
ContextInfo.set_universe(['000300.SH'])
# 初始化历史最高净值
ContextInfo.max_net_value = 1.0
def handlebar(ContextInfo):
index = ContextInfo.barpos
if index < 0:
return
# 1. 获取当前回测净值
current_net_value = ContextInfo.get_net_value(index)
# 2. 更新历史最高净值
if current_net_value > ContextInfo.max_net_value:
ContextInfo.max_net_value = current_net_value
# 3. 计算当前动态回撤百分比 (例如: -5.2 表示回撤 5.2%)
if ContextInfo.max_net_value > 0:
drawdown = (current_net_value - ContextInfo.max_net_value) / ContextInfo.max_net_value * 100
else:
drawdown = 0.0
# 4. 设定柱状图颜色:无回撤时显示为绿色,有回撤时显示为红色
color = 'green' if drawdown == 0 else 'red'
# 5. 调用 paint 函数,使用 42 样式绘制副图柱状线
ContextInfo.paint('DailyDrawdown', drawdown, -1, 42, color, 'noaxis')
DailyDrawdown 的指标窗口。0,副图上会显示绿色的极短柱子或不显示。