🚀 AI 一键生成 ptrade 策略代码

ptrade 平台如何通过读取文件(CSV/TXT)动态设置股票池?

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

问题描述

股票池设置能否通过读取文件实现,而不是人工或函数设置?

/

解决方案

完全可以实现。在 ptrade 量化平台中,虽然 set_universe 接口本身接收的是一个股票代码列表(list),但你可以利用 Python 强大的文件处理能力(如标准库或 pandas),结合 ptrade 提供的 get_research_path() 函数,从外部文件(如 CSV、TXT)中读取股票代码并动态生成该列表,从而实现股票池的文件化配置。

实现步骤与代码示例

假设你在 ptrade 的研究环境中上传了一个名为 my_stocks.csv 的文件,文件内容包含一列股票代码(例如表头为 code)。

1. 使用 pandas 读取 CSV 文件设置股票池

import pandas as pd
import os

def initialize(context):
    # 获取研究环境的根目录路径
    research_path = get_research_path()
    file_path = os.path.join(research_path, 'my_stocks.csv')
    
    try:
        # 使用 pandas 读取 CSV 文件
        df = pd.read_csv(file_path)
        # 假设 CSV 中有一列名为 'code',将其转换为 list
        stock_list = df['code'].tolist()
        
        # 将读取到的股票列表设置为策略股票池
        g.security = stock_list
        set_universe(g.security)
        log.info(f"成功从文件加载股票池,共 {len(g.security)} 只股票。")
        
    except Exception as e:
        log.error(f"读取股票池文件失败: {e}")
        # 失败时的降级处理,设置默认股票池
        g.security = ['600570.SS']
        set_universe(g.security)

def handle_data(context, data):
    # 策略逻辑处理
    pass

2. 使用标准 Python 文件操作读取 TXT 文件

如果你的股票代码保存在一个简单的文本文件 stocks.txt 中,每行一个代码:

import os

def initialize(context):
    research_path = get_research_path()
    file_path = os.path.join(research_path, 'stocks.txt')
    
    stock_list = []
    try:
        with open(file_path, 'r', encoding='utf-8') as f:
            for line in f:
                code = line.strip()
                if code:  # 过滤空行
                    stock_list.append(code)
                    
        g.security = stock_list
        set_universe(g.security)
        log.info(f"成功从 TXT 加载股票池: {g.security}")
    except Exception as e:
        log.error(f"读取 TXT 文件失败: {e}")

def handle_data(context, data):
    pass

注意事项

  1. 文件路径:务必使用 get_research_path() 获取基础路径,以确保在回测和交易环境中都能正确找到你上传的文件。
  2. 代码格式:确保文件中的股票代码带有正确的市场尾缀(如 600570.SS000001.SZ),以符合 ptrade 的 API 规范。
  3. 异常处理:在读取文件时,建议加入 try...except 异常处理逻辑(如上例所示),防止因文件丢失或格式错误导致策略直接崩溃。
  4. 动态更新:如果你希望在盘中或每天盘前动态更新股票池,可以将读取文件的逻辑放在 before_trading_start 或通过 run_daily 定时触发的函数中,然后再次调用 set_universe() 更新。