问题描述
PTrade客户端本地运行,但量化模块实际部署在券商云端服务器,策略文件加密存储且无法直接读取本地数据。
解决方案
PTrade 云端与本地运行机制解析
许多初学者在使用 PTrade 量化平台时,经常会遇到一个典型的报错:在策略中使用 Python 的 open() 函数尝试读取本地电脑(如 C:\\data.csv)的文件时,系统提示找不到文件或路径错误。这主要是因为混淆了 PTrade 客户端的本地运行 与 量化引擎的云端部署 机制。
1. 架构揭秘:本地 UI vs 云端大脑
- 本地客户端:你安装在个人电脑上的 PTrade 软件,本质上只是一个图形用户界面(UI)。它负责展示行情、接收你的代码输入、显示日志和交易结果。
- 云端量化引擎:当你点击“运行回测”或“启动交易”时,你的策略代码会被加密传输到券商的云端 Linux 服务器上。Python 解释器、数据获取接口(如
get_history)、交易撮合引擎等,全部都在云端服务器上执行。
结论:策略代码的实际执行环境在云端,因此它无法直接访问你个人电脑硬盘上的任何文件。
2. 为什么策略文件是加密存储的?
为了保护用户的知识产权和策略安全,PTrade 将策略文件加密存储在券商的云端数据库中。这意味着你无法在本地安装目录下找到明文的策略源码文件,也无法通过外部 IDE(如 PyCharm)直接挂载运行。
3. 如何在 PTrade 中正确读取外部数据?
既然策略在云端运行,如果我们需要加载自定义的股票池、机器学习模型权重或外部因子数据,应该怎么做呢?PTrade 提供了专门的**研究环境(Research)**作为数据中转站。
步骤一:将文件上传至研究环境
- 打开 PTrade 客户端,进入**“研究”**模块(Jupyter Notebook 环境)。
- 在研究环境的目录中,点击
Upload按钮,将你的本地文件(如my_data.csv或model.pkl)上传到云端服务器。
步骤二:在策略中使用 get_research_path() 获取路径
上传后,文件就已经存在于云端服务器上了。在策略代码中,你需要使用 PTrade 提供的 API get_research_path() 来获取研究环境的根目录路径,然后拼接文件名进行读取。
代码示例:读取上传的 CSV 文件
import pandas as pd
def initialize(context):
g.security = '600570.SS'
set_universe(g.security)
# 1. 获取研究环境的根目录路径
research_path = get_research_path()
# 2. 拼接你上传的文件名
file_path = research_path + 'my_data.csv'
# 3. 使用 pandas 读取云端文件
try:
g.my_custom_data = pd.read_csv(file_path)
log.info('成功读取外部数据!数据行数:%d' % len(g.my_custom_data))
except Exception as e:
log.error('读取文件失败,请检查文件是否已上传至研究环境。错误信息:%s' % e)
def handle_data(context, data):
pass
4. 总结与建议
- 思维转换:写策略时,请始终把自己当成在远程 Linux 服务器上写代码,不要使用任何 Windows 本地的绝对路径(如
D:\\...)。 - 持久化存储:如果策略运行过程中需要保存状态(如仓龄、自定义变量),请将数据序列化(如使用
pickle)并保存到get_research_path()目录下,这样即使服务器重启,数据也不会丢失。 - 底仓导入:如果是为了回测导入初始底仓,可以直接使用 PTrade 提供的
convert_position_from_csv('Poslist.csv')接口,前提同样是先将 CSV 文件上传至研究环境。