🚀 AI 一键生成 ptrade 策略代码

PTrade 策略如何读写文件?get_research_path 与文件操作实用指南

ptrade | 发布时间: 2025/11/28
以下内容由 EasyQuant 生成。

问题描述

我的策略需要读取一个我自己上传的 csv 文件,应该怎么做?

解决方案

在 PTrade 中读取自行上传的 CSV 文件,主要依赖于 get_research_path() 接口获取文件的存储路径,并配合 pandas 库进行读取。

以下是具体的操作步骤和代码示例:

核心步骤

  1. 上传文件:首先需要在 PTrade 客户端的“研究”模块中,将您的 CSV 文件上传到根目录(通常是 Notebook 的根目录)。
  2. 获取路径:在策略代码中使用 get_research_path() 获取研究目录的绝对路径。
  3. 拼接路径:由于 PTrade 限制了 os 模块的使用,需要通过字符串拼接的方式组合路径和文件名。
  4. 读取文件:使用 pandas.read_csv() 读取数据。

策略代码示例

import pandas as pd

def initialize(context):
    # 1. 获取研究目录的基础路径
    # 该函数通常返回 '/home/fly/notebook/'
    base_path = get_research_path()
    
    # 2. 定义您的文件名 (请确保文件已上传到研究根目录)
    file_name = "my_strategy_data.csv"
    
    # 3. 拼接完整路径 (注意:PTrade中禁用 import os,请直接使用字符串拼接)
    full_path = base_path + file_name
    
    # 4. 读取 CSV 文件
    try:
        # 读取文件,建议指定 encoding,防止中文乱码
        # 如果文件含有中文,通常尝试 'utf-8' 或 'gbk'
        df = pd.read_csv(full_path, encoding='utf-8')
        
        # 打印前几行数据以确认读取成功
        log.info("成功读取 CSV 文件,前 5 行数据如下:")
        log.info(df.head())
        
        # 将数据存储在全局变量 g 中,以便在 handle_data 中使用
        g.custom_data = df
        
    except Exception as e:
        log.error("读取 CSV 文件失败,请检查文件名或路径。错误信息: " + str(e))

def handle_data(context, data):
    # 示例:在盘中逻辑使用读取到的数据
    if hasattr(g, 'custom_data'):
        # 这里可以编写您的逻辑,例如获取某一行的数据
        pass

关键注意事项

  1. 禁用 os 模块
    PTrade 的安全沙箱环境禁止使用 import os。因此,不要尝试使用 os.path.join 来合并路径,直接使用字符串相加即可(get_research_path() 返回的路径末尾通常已经包含了 /)。

  2. 文件上传位置
    文件必须上传到“研究”模块的根目录下。如果您在研究目录下创建了子文件夹(例如 data 文件夹),拼接路径时需要写成 base_path + "data/" + file_name

  3. 编码格式
    如果您的 CSV 文件中包含中文字符(如股票名称),读取时可能会报错。请在 pd.read_csv 中尝试指定 encoding='utf-8'encoding='gbk'(取决于您保存文件时的格式)。

  4. 回测与实盘的区别
    get_research_path() 在回测和交易(实盘/模拟)模式下均可使用,但请确保在实盘环境中,文件也已经同步上传到了对应的服务器环境中。


Q&A

Q: 为什么我读取文件时提示 FileNotFoundError?
A: 请检查以下两点:1. 文件是否确实上传到了“研究”模块的根目录;2. 代码中的文件名(包括后缀名大小写)是否与上传的文件完全一致。

Q: 可以使用 Python 原生的 open() 函数读取吗?
A: 可以。如果您不需要 DataFrame 格式,可以使用 with open(full_path, 'r') as f: 的方式读取,但对于结构化数据,推荐使用 pandas

Q: get_research_path() 返回的具体路径是什么?
A: 通常返回 /home/fly/notebook/。但在代码中请务必使用函数调用,不要硬编码这个字符串,因为不同券商的部署环境可能存在差异。