3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化交易策略的编写与实盘模拟中,交易日结束后的复盘至关重要。聚宽(JoinQuant)平台提供了专门的盘后回调函数 after_trading_end,用于在每日 15:30 股票交易结束后执行日志打印、数据导出及收益分析等操作。
在 after_trading_end 函数中,可通过以下 API 提取交易数据:
get_orders():获取当天的所有订单信息(返回字典,order_id 为 key,Order 对象为 value)。get_trades():获取当天的所有成交记录(返回字典,trade_id 为 key,Trade 对象为 value)。context.portfolio:访问账户总体持仓、可用资金、总权益及累计收益。write_file(path, content, append=True):将复盘汇总数据追加写入研究根目录的 csv 或 txt 文件中。以下为完整的 joinquant 示例代码,展示如何在每天收盘后自动记录订单、成交信息并导出至研究目录的文件中:
import jqdata
import pandas as pd
def initialize(context):
set_benchmark('000300.XSHG')
set_option('use_real_price', True)
# 设置买卖标的
g.security = '000001.XSHE'
# 注册每日定时交易任务
run_daily(market_open, time='every_bar')
# 注册每日收盘后运行函数
run_daily(after_market_close, time='15:30')
def market_open(context):
# 简单交易逻辑示范
if context.portfolio.available_cash > 10000:
order(g.security, 100)
def after_trading_end(context):
"""盘后运行函数"""
current_date = context.current_dt.strftime("%Y-%m-%d")
log.info("========== 开始 %s 盘后复盘汇总 ==========" % current_date)
# 1. 汇总账户资金与收益
total_value = context.portfolio.total_value
returns = context.portfolio.returns
available_cash = context.portfolio.available_cash
log.info("账户总价值: %.2f | 累计收益: %.2f%% | 可用资金: %.2f" % (total_value, returns * 100, available_cash))
# 2. 获取当日成交明细
trades = get_trades()
trade_logs = []
if trades:
log.info("--- 当日共成交 %d 笔 ---" % len(trades))
for trade in trades.values():
log.info("成交时间: %s | 标的: %s | 数量: %d | 价格: %.2f | 订单ID: %s" %
(trade.time, trade.security, trade.amount, trade.price, trade.order_id))
trade_logs.append({
'date': current_date,
'time': trade.time,
'security': trade.security,
'amount': trade.amount,
'price': trade.price,
'order_id': trade.order_id
})
else:
log.info("今日无成交记录。")
# 3. 将成交记录写入/追加到研究私有文件 csv 中
if trade_logs:
df_trades = pd.DataFrame(trade_logs)
# 如果是首日可以新建,后续append=True追加
content = df_trades.to_csv(index=False, header=False)
write_file("daily_trades_log.csv", content, append=True)
log.info("今日成交记录已成功追加至 daily_trades_log.csv")
log.info("========== 盘后复盘结束 ==========")
write_file 保存的数据可以在“研究”模块中随时通过 read_file 或 pd.read_csv 提取进行二次统计。get_fundamentals 查阅财报数据时,请注意收盘前只能获取以前的数据,盘后(15:00 后)方可获取当日最新的基础财务数据。