🚀 AI 一键生成 joinquant 策略代码

如何在聚宽(JoinQuant)模拟策略中将交易日志保存到文件?

joinquant | 发布时间: 2026/5/21
以下内容由 EasyQuant 生成。

问题描述

聚宽跑模拟策略的日志保存问题

请教聚宽跑模拟策略的时候,每天的交易日志保存到文件里,怎么保存?代码如何写?保存路径如何?

解决方案

在聚宽(JoinQuant)平台上运行模拟策略时,如果希望将每天的交易日志或自定义信息保存到文件中,可以使用聚宽提供的专用 API:write_file

1. 保存路径说明

使用 write_file(path, content, append=False) 保存的文件,默认路径位于您聚宽账号的「投资研究」模块的根目录下。也就是说,当策略执行写入操作后,您可以直接切换到聚宽的「投资研究」页面,在文件列表中找到并查看该文件。

2. 核心 API 介绍

write_file(path, content, append=False)
  • path: 相对路径,相对于您的私有空间(投资研究)的根目录的路径,例如 'my_log.txt'
  • content: 需要写入的文件内容,必须是字符串(str)格式。
  • append: 是否为追加模式。保存日志时务必将其设置为 True,否则每次写入都会清空之前的内容。

3. 代码示例

通常,我们会在每天收盘后的 after_trading_end 函数中,获取当天的成交记录,并将其格式化为字符串追加保存到日志文件中。以下是完整的代码示例:

# 导入聚宽函数库
import jqdata

def initialize(context):
    # 设定沪深300作为基准
    set_benchmark('000300.XSHG')
    # 开启动态复权模式(真实价格)
    set_option('use_real_price', True)
    
    # 每天买入一点平安银行作为测试交易
    run_daily(market_open, time='09:30')

def market_open(context):
    # 每天市价买入100股平安银行,用于产生交易记录
    order('000001.XSHE', 100)

# 收盘后运行函数,用于处理和保存日志
def after_trading_end(context):
    # 获取当天的所有成交记录
    trades = get_trades()
    
    # 获取当前日期字符串
    current_date = context.current_dt.strftime('%Y-%m-%d')
    
    # 初始化当天的日志内容
    log_content = f"\n========== {current_date} 交易日志 ==========\n"
    
    if not trades:
        log_content += "今日无成交记录。\n"
    else:
        # 遍历当天的成交记录并格式化
        for trade_id, trade in trades.items():
            log_line = f"时间: {trade.time}, 标的: {trade.security}, 价格: {trade.price}, 数量: {trade.amount}, 订单号: {trade.order_id}\n"
            log_content += log_line
            
    # 将日志内容追加写入到投资研究根目录下的 'sim_trade_log.txt' 文件中
    # 注意:append=True 表示追加写入,不会覆盖历史记录
    write_file('sim_trade_log.txt', log_content, append=True)
    
    # 在系统日志中也打印一条提示
    log.info(f"{current_date} 的交易日志已成功保存至投资研究目录下的 sim_trade_log.txt")

4. 注意事项

  1. 追加模式:一定要记得加上 append=True 参数,否则第二天写入时会把第一天的日志覆盖掉。
  2. 文件查看:策略运行后,前往聚宽导航栏的「投资研究」,即可看到 sim_trade_log.txt 文件,双击即可查看或下载。
  3. 数据格式write_filecontent 参数只接受字符串。如果是字典或列表等复杂数据结构,请先使用 json.dumps() 或字符串拼接将其转换为字符串后再保存。