🚀 AI 一键生成 joinquant 策略代码
立即体验
👉 AI 生成代码 👈

JoinQuant 模拟交易中保存 DataFrame 数据的完整指南

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

问题描述

模拟环境dataframe 保存的问题

在研究环境下,dataframe 可以 to_csv()保存。在模拟环境下怎么保存呢?

解决方案

在 JoinQuant(聚宽)的模拟交易或回测环境中,由于运行环境的隔离,你不能直接使用原生的 df.to_csv('filename.csv') 将文件保存到本地。但是,聚宽提供了一个专用的 API write_file,可以将数据直接写入到你的投资研究模块的目录中。

你可以将 DataFrame 的 to_csv() 方法生成的字符串内容,通过 write_file 函数保存下来。

具体实现方法

使用 write_file(path, content, append=False) 函数:

import pandas as pd

def handle_data(context, data):
    # 假设你获取了一些数据并生成了 DataFrame
    df = attribute_history('000001.XSHE', 5, '1d')
    
    # 将 DataFrame 转换为 csv 格式的字符串
    # 注意:这里不要填入文件名,直接让 to_csv 返回字符串
    csv_content = df.to_csv()
    
    # 使用 write_file 将字符串内容保存到研究环境中
    # 文件会保存在你研究环境的根目录下
    write_file('my_sim_data.csv', csv_content, append=False)
    
    log.info("DataFrame 已成功保存到研究环境的 my_sim_data.csv 文件中")

参数说明

  • path: 相对路径,相对于您的私有空间(研究模块)的根目录的路径,例如 'my_data.csv''data/my_data.csv'(前提是 data 文件夹已存在)。
  • content: 文件内容,必须是 str 或者 unicode(或者二进制内容)。df.to_csv() 默认返回的就是字符串格式的 CSV 内容。
  • append: 是否是追加模式。默认为 False(覆盖原有文件)。如果设为 True,则会在原有文件末尾追加内容。

注意事项

  1. 性能问题:在 handle_data (每分钟或每天运行) 中频繁调用 write_file 可能会影响模拟盘的运行效率。建议在 after_trading_end (收盘后) 等低频调用的函数中集中保存数据。
  2. 查看文件:保存成功后,你可以直接切换到聚宽的投资研究模块,在文件列表中就能看到并下载你刚刚保存的 my_sim_data.csv 文件。
  3. 读取文件:如果你需要在策略中读取这个文件,可以使用对应的 read_file('my_sim_data.csv') API。