🚀 AI 一键生成 ptrade 策略代码
立即体验

ptrade 回测如何导入 CSV 文件作为初始底仓?(附完整 Python 源码)

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

问题描述

ptrade 快速回测:通过 CSV 文件一键导入初始底仓
ptrade回测时怎么把保存在本地电脑的持仓CSV文件导入作为策略的初始底仓?

解决方案

在 ptrade 量化交易平台中,如果您希望在回测开始时就拥有特定的历史持仓(即底仓),可以通过将持仓数据保存为 CSV 文件并上传至研究环境,然后利用平台提供的 API 进行一键导入。以下是具体的实现步骤和完整代码:

第一步:准备持仓 CSV 文件

首先,在您的本地电脑上创建一个 CSV 文件(例如命名为 Poslist.csv),其内容格式必须严格遵守以下表头和字段要求:

sid,enable_amount,amount,cost_basis
600570.SS,10000,10000,45.0
000001.SZ,5000,5000,12.5

字段说明:

  • sid:标的代码(须带后缀,如 .SS.SZ)。
  • enable_amount:可用持仓数量。
  • amount:总持仓数量。
  • cost_basis:每股的持仓成本价格。

第二步:上传 CSV 文件到 ptrade 研究环境

登录您的 ptrade 客户端,进入研究模块,将准备好的 Poslist.csv 文件上传到研究环境的根目录或指定文件夹中。

第三步:在策略中编写导入代码

在策略的 initialize 初始化函数中,使用 convert_position_from_csv 读取该 CSV 文件,并配合 set_yesterday_position 接口将其设置为初始底仓。

完整策略示例源码:

# -*- coding: utf-8 -*-

def initialize(context):
    # 1. 设置我们要操作的股票池
    g.security = ['600570.SS', '000001.SZ']
    set_universe(g.security)
    
    # 2. 从研究环境中读取 CSV 持仓文件,并转换为底仓参数列表
    # 注意:请确保 Poslist.csv 已上传至研究根目录
    try:
        poslist = convert_position_from_csv("Poslist.csv")
        
        # 3. 设置初始底仓
        set_yesterday_position(poslist)
        log.info("底仓导入成功,导入明细:%s" % str(poslist))
    except Exception as e:
        log.error("底仓导入失败,错误信息: %s" % str(e))

def handle_data(context, data):
    # 示例:在盘中尝试卖出导入的底仓股票
    for stock in g.security:
        position = get_position(stock)
        if position.enable_amount > 0:
            # 卖出100股
            order(stock, -100)
            log.info("触发卖出信号:%s 卖出 100 股" % stock)

注意事项

  1. 运行环境限制convert_position_from_csvset_yesterday_position 接口仅在回测模块可用,实盘交易中无法使用此方式初始化持仓(实盘持仓由柜台真实数据决定)。
  2. 文件路径规则:CSV 文件路径长度不能超过 256 个字符,且名称中不能包含特殊字符(如 :?,@#$&();"'<>~!%^*`)。
  3. 代码后缀:CSV 文件中的 sid 必须使用 ptrade 支持的代码尾缀(上海市场用 .SS.XSHG,深圳市场用 .SZ.XSHE)。