3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在聚宽(JoinQuant)量化交易平台上,直观地在回测图表中观察策略的买卖点和持仓状态,对于验证策略逻辑、排查Bug至关重要。我们可以利用聚宽内置的 record 函数,将均线趋势、买入、卖出、持仓和空仓等条件转换为主图信号并进行绘制。
以下是完整的策略实现方案与 Python 源码:
context.portfolio.positions 判断当前是否持有该股票,并在图表上输出持仓状态值(如持仓为1,空仓为0)。# 导入聚宽函数库
import jqdata
# 初始化函数,设定要操作的股票、基准等等
def initialize(context):
# 定义一个全局变量, 保存要操作的股票(以平安银行为例)
g.security = '000001.XSHE'
# 设定沪深300作为基准
set_benchmark('000300.XSHG')
# 开启动态复权模式(真实价格)
set_option('use_real_price', True)
# 过滤掉比info级别低的log
log.set_level('order', 'info')
# 每个单位时间(按天回测则每天调用一次)
def handle_data(context, data):
security = g.security
# 获取股票的收盘价历史数据
close_data = attribute_history(security, 5, '1d', ['close'])
# 取得过去五天的平均价格
MA5 = close_data['close'].mean()
# 取得上一时间点价格
current_price = close_data['close'][-1]
# 取得当前的现金
cash = context.portfolio.available_cash
# 初始化信号标记
buy_signal = None
sell_signal = None
# 判断持仓状态
is_holding = context.portfolio.positions[security].closeable_amount > 0
position_status = 1 if is_holding else 0
# 1. 买入逻辑
if (current_price > 1.05 * MA5) and (cash > 0):
# 用所有 cash 买入股票
order_value(security, cash)
log.info("Buying %s" % (security))
buy_signal = current_price # 记录买入价格信号
# 2. 卖出逻辑
elif (current_price < 0.95 * MA5) and is_holding:
# 卖出所有股票,使这只股票的最终持有量为0
order_target(security, 0)
log.info("Selling %s" % (security))
sell_signal = current_price # 记录卖出价格信号
# 3. 使用 record 函数将信号绘制到主图/副图
# 注意:record 传入的参数会在回测结果页面的“自定义曲线”中展示
record(
stock_price=current_price,
ma5_line=MA5,
buy_tag=buy_signal,
sell_tag=sell_signal,
holding=position_status
)
stock_price(当前股价)与 ma5_line(5日均线)的实时走势对比。buy_tag 和 sell_tag 会在触发交易的当天显示具体的价格散点,直观呈现买卖点。holding 曲线则以 0 和 1 的折线形式,清晰展示策略在历史时间轴上的持仓与空仓区间。