ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

【聚宽 JoinQuant】聚宽如何实现每周自动调仓?run_weekly() 定时选股策略示例

【聚宽 JoinQuant】聚宽如何实现每周自动调仓?run_weekly() 定时选股策略示例 本方案由EasyQuant AI量化助手提供。问题背景许多量化策略不需要每天频繁交易而是每周固定选股、卖出不符合条件的股票再买入新的目标标的。聚宽可使用run_weekly()注册定时函数并通过get_index_stocks()获取指数成分股构建每周调仓策略。聚宽 API 文档实现思路本示例实现一个基础的每周调仓框架每周第一个交易日 09:35 执行调仓获取沪深 300 成分股过滤停牌和 ST 股票选取前 10 只作为目标持仓卖出不在目标池中的股票等权买入目标股票。完整示例代码def initialize(context): set_benchmark(000300.XSHG) g.index_code 000300.XSHG g.stock_num 10 # 每周第一个交易日09:35执行调仓 run_weekly(weekly_rebalance, 1, time09:35) def get_target_stocks(context): 获取并过滤候选股票。 stocks get_index_stocks( g.index_code, datecontext.current_dt ) current_data get_current_data() target_list [] for stock in stocks: # 过滤停牌 if current_data[stock].paused: continue # 过滤ST及名称含退市标记的股票 if current_data[stock].is_st: continue if ST in current_data[stock].name: continue if 退 in current_data[stock].name: continue target_list.append(stock) # 示例按代码顺序选择前10只 # 实际策略可替换为市值、ROE、动量等排序逻辑 return target_list[:g.stock_num] def sell_stocks_not_in_target(context, target_stocks): 卖出不在目标池中的持仓。 hold_stocks list(context.portfolio.positions.keys()) for stock in hold_stocks: position context.portfolio.positions[stock] if position.closeable_amount 0: continue if stock not in target_stocks: order_target(stock, 0) log.info(卖出非目标持仓%s % stock) def buy_target_stocks(context, target_stocks): 按等权方式买入目标股票。 if len(target_stocks) 0: log.info(目标股票池为空本周不买入) return target_value context.portfolio.total_value / len(target_stocks) for stock in target_stocks: position context.portfolio.positions[stock] # 已经接近目标仓位时跳过 if position.value target_value * 0.95: continue order_target_value(stock, target_value) log.info( 调仓买入%s目标市值%.2f % (stock, target_value) ) def weekly_rebalance(context): 每周调仓主函数。 target_stocks get_target_stocks(context) log.info(本周目标股票池%s % str(target_stocks)) sell_stocks_not_in_target(context, target_stocks) buy_target_stocks(context, target_stocks) def handle_data(context, data): # 每周调仓策略可不在此处执行交易逻辑 pass如何改成“每周最后一个交易日调仓”将run_weekly()的第二个参数改为-1def initialize(context): run_weekly( weekly_rebalance, -1, time14:50 )其中-1表示每周最后一个交易日。定时函数会按注册的频率和时间执行。聚宽策略运行频率说明如何避免未来函数获取指数成分股时建议传入context.current_dt让股票池与当前回测日期对应。聚宽对get_index_stocks()等数据接口有未来数据限制不能传入晚于当前策略时间的日期。聚宽避免未来数据说明注意事项每周调仓会降低交易频率但不代表风险更低。order_target_value()下单后不一定立即成交实盘应关注订单状态。调仓前应先卖出非目标持仓再买入新标的避免资金不足。示例仅演示策略框架股票排序规则需要按自己的策略补充。实盘前应完成回测、模拟交易并评估手续费、滑点和流动性影响。总结聚宽每周调仓策略的核心是run_weekly()、get_index_stocks()、order_target()和order_target_value()。通过固定频率更新股票池并调整持仓可以快速搭建低频轮动策略原型。
返回列表