问题描述
之前看到别人在回测结果的页面上,收益曲线下方,打印了一个自定义指标的曲线,比如 rsi 曲线,请问调用哪个接口可以实现呢
解决方案
在 JoinQuant(聚宽)量化平台上,要在回测结果页面的收益曲线下方绘制自定义指标的曲线(例如 RSI、均线等),你需要调用专门的画图函数:record()。
record() 函数详解
record() 是聚宽提供的回测环境/模拟专用 API,用于在图表上描画额外的自定义曲线。
调用格式:
record(**kwargs)
参数说明:
- 接受一个或多个
key=value形式的参数。 key:作为图表上显示的曲线名称(图例)。value:当前时间点该指标的具体数值。注意:值必须是标量(如整数、浮点数),不能是列表(list)。
代码示例
以下是一个简单的策略示例,展示了如何在 handle_data 中计算指标并使用 record() 绘制出来:
# 导入聚宽函数库
import jqdata
def initialize(context):
# 设定要操作的股票:平安银行
g.security = '000001.XSHE'
# 设定沪深300作为基准
set_benchmark('000300.XSHG')
# 开启动态复权模式(真实价格)
set_option('use_real_price', True)
def handle_data(context, data):
security = g.security
# 获取股票的收盘价数据
close_data = attribute_history(security, 5, '1d', ['close'])
# 计算自定义指标:例如过去五天的平均价格 (MA5)
MA5 = close_data['close'].mean()
# 获取当前价格
current_price = data[security].close
# ---------------------------------------------------------
# 核心步骤:使用 record 函数绘制曲线
# 这里我们同时绘制两条曲线:当前价格 和 5日均线
# ---------------------------------------------------------
record(Price=current_price, MA5=MA5)
# 也可以画一条固定值的参考线,例如 RSI 的超买超卖线
# record(Overbought=70, Oversold=30)
💡 使用 record() 的重要注意事项
- 调用时机:如需调用该函数,需要从回测开始时就调用,不支持在回测周期中间时段突然开始调用,否则可能会导致图表绘制异常。
- 数据频率展示:聚宽的图表是按天展现的。如果您使用的是“按分钟回测”,图表上画出的点是您当天最后一次调用
record传入的值(而不是每分钟都画一个点)。 - 时间界限:以 16:00 为界限,16:00 之后绘制的数据会归属于第二天。
- 数据类型:传入的
value必须是单个数值,如果你计算出的指标是一个 Pandas Series 或 List,请提取出当天的具体数值(例如rsi_value[-1])后再传入record()。
通过合理使用 record() 函数,你可以非常直观地在回测结果中观察你的自定义指标(如 RSI、MACD、布林带等)与策略收益、标的价格之间的关系,极大地提升策略分析的效率。