3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 JoinQuant(聚宽)量化交易平台中,on_event 是一个可选的事件回调函数。当策略账户中持仓的标的发生特定事件(如分红送股、强行平仓)时,系统会自动触发并调用 on_event 函数。
on_event 接口说明def on_event(context, event):
pass
Context 对象,存放有当前的账户、资金、标的持仓等信息。isinstance 函数对事件类型进行判断。当发生分红送股时,传入的 event 即为 DividendsEvent 实例,包含以下主要属性:
'Dividends'。0)。'000001.XSHE')。'long',空头为 'short'。date: 发生分红送股的日期。scale_factor: 配送股比例(针对股票、场内基金)。bonus_pre_tax: 税前分红金额(针对股票、场内基金)。bonus_post_tax: 税后分红金额(针对场内基金)。以下是一个简单的示例,展示如何在 JoinQuant 策略中使用 on_event 捕获分红事件,并输出详细的分红日志:
import jqdata
from jqdata import DividendsEvent
def initialize(context):
# 设置基准与真实价格模式
set_benchmark('000300.XSHG')
set_option('use_real_price', True)
# 设置要交易的股票
g.security = '000001.XSHE'
# 每天开盘交易
run_daily(market_open, time='9:30')
def market_open(context):
# 如果未持仓,买入1000股
if g.security not in context.portfolio.positions:
order(g.security, 1000)
def on_event(context, event):
"""
事件回调函数,当持仓标的发生分红送股等事件时自动被触发
"""
# 判断是否为分红送股事件
if isinstance(event, DividendsEvent):
security = event.security
pindex = event.pindex
side = event.side
log.info("====== 触发分红送股事件 ======")
log.info("标的代码: %s, 仓位: %s, 方向: %s" % (security, pindex, side))
# 遍历分红配送详情
for div in event.dividends:
div_date = div.get('date')
scale_factor = div.get('scale_factor', 0) # 送股比例
bonus_pre_tax = div.get('bonus_pre_tax', 0) # 税前分红
log.info("分红派息日: %s" % div_date)
log.info("配送股比例: %s, 税前每股派息: %s 元" % (scale_factor, bonus_pre_tax))
initialize 中设置 set_option('use_real_price', True),开启动态复权(真实价格)模式。此时系统会在分红配送发生时,自动调整持仓股票数量与账户现金,日志提示更清晰。isinstance 过滤事件:除 DividendsEvent 外,系统还可能触发 ForcedLiquidationEvent(强行平仓事件),因此在 on_event 内应务必先对 event 类型进行判断。on_event 只会在账户当前持有的标的发生对应事件时才会被回调触发。