问题描述
在研究环境下,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,则会在原有文件末尾追加内容。
注意事项
- 性能问题:在
handle_data(每分钟或每天运行) 中频繁调用write_file可能会影响模拟盘的运行效率。建议在after_trading_end(收盘后) 等低频调用的函数中集中保存数据。 - 查看文件:保存成功后,你可以直接切换到聚宽的投资研究模块,在文件列表中就能看到并下载你刚刚保存的
my_sim_data.csv文件。 - 读取文件:如果你需要在策略中读取这个文件,可以使用对应的
read_file('my_sim_data.csv')API。