3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化交易中,长假期间(如春节、国庆节)由于休市时间长,市场容易积聚不确定性风险(如海外市场波动、政策突发等)。因此,在节前最后一个交易日主动进行减仓、空仓或暂停调仓是规避长假效应的常见风控手段。
在聚宽(JoinQuant)平台中,我们可以通过对比当前交易日与下一个交易日之间的日历天数差(Calendar Days Gap),来非常可靠地识别是否为节前最后一个交易日。
普通周末的日历天数差为 3 天(例如周五到下周一:$24 - 21 = 3$ 天)。如果下一个交易日与当前交易日的日历天数差大于 3 天,则说明中间夹杂了法定节假日,当前交易日即为节前最后一个交易日。
以下是一个完整的聚宽策略模板,展示了如何在开盘前判断是否为节前交易日,并在盘中执行一键清仓/避险逻辑:
# 导入聚宽函数库
from jqdata import *
import datetime
def initialize(context):
# 设定沪深300作为基准
set_benchmark('000300.XSHG')
# 开启动态复权模式(真实价格)
set_option('use_real_price', True)
# 定义要操作的股票池
g.security = '000001.XSHE' # 以平安银行为例
# 每天开盘前运行,判断是否为节前最后一个交易日
run_daily(before_market_open, time='09:00')
# 每天开盘运行交易逻辑
run_daily(market_open, time='09:30')
def before_market_open(context):
# 获取当前交易日日期
current_date = context.current_dt.date()
# 获取所有交易日列表
all_trade_days = get_all_trade_days()
all_trade_days_list = list(all_trade_days)
# 默认初始化节前标记为 False
g.is_pre_holiday = False
if current_date in all_trade_days_list:
idx = all_trade_days_list.index(current_date)
# 确保有下一个交易日数据
if idx + 1 < len(all_trade_days_list):
next_trade_day = all_trade_days_list[idx + 1]
# 计算日历天数差
gap_days = (next_trade_day - current_date).days
# 如果日历天数差大于 3 天,说明中间有法定节假日(如国庆、春节、五一等)
if gap_days > 3:
g.is_pre_holiday = True
log.info(f"【风控预警】今天 {current_date} 是节前最后一个交易日!下一个交易日为 {next_trade_day},休市天数:{gap_days-1}天。")
else:
g.is_pre_holiday = False
def market_open(context):
security = g.security
# 1. 节前风控逻辑:如果是节前最后一个交易日,执行空仓/减仓规避长假风险
if g.is_pre_holiday:
if context.portfolio.positions[security].closeable_amount > 0:
log.info(f"节前避险:清仓 {security}")
order_target(security, 0)
return # 结束今日交易,不进行新买入
# 2. 正常交易日逻辑(例如:简单的均线突破买入)
close_data = attribute_history(security, 5, '1d', ['close'])
MA5 = close_data['close'].mean()
current_price = close_data['close'][-1]
cash = context.portfolio.available_cash
if current_price > 1.01 * MA5 and context.portfolio.positions[security].closeable_amount == 0:
log.info(f"正常交易:买入 {security}")
order_value(security, cash)
elif current_price < MA5 and context.portfolio.positions[security].closeable_amount > 0:
log.info(f"正常交易:卖出 {security}")
order_target(security, 0)
g.is_pre_holiday == True 时,直接调用 order_target(security, 0) 卖出所有持仓,锁定收益,空仓过节。return 屏蔽该信号,避免在长假前夕建仓。