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

ptrade 平台如何通过 CSV 文件一键导入初始底仓?(附完整 Python 源码)

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

问题描述

ptrade 快速回测:通过 convert_position_from_csv 实现一键导入底仓
我想在回测开始时导入外部 CSV 文件作为初始股票持仓,ptrade 怎么实现?

解决方案

在 ptrade 量化交易平台中,如果您希望在回测开始时导入外部持仓数据作为初始底仓,可以通过结合使用 convert_position_from_csvset_yesterday_position 两个接口来实现。这一功能非常适合用于模拟真实账户已有持仓的后续回测场景。

一、实现步骤与核心接口

  1. 准备并上传 CSV 文件
    您需要先在 ptrade 的研究工作区上传您的持仓 CSV 文件。CSV 文件的格式必须严格遵守以下表头和字段要求:

    • sid:标的代码(如 600570.SS
    • enable_amount:可用数量
    • amount:总持仓数量
    • cost_basis:每股的持仓成本价格

    CSV 文件内容示例(例如命名为 Poslist.csv):

    sid,enable_amount,amount,cost_basis
    600570.SS,10000,10000,45.00
    000001.SZ,5000,5000,12.50
    
  2. 解析 CSV 文件
    使用 convert_position_from_csv(path) 接口读取并解析该 CSV 文件,它会返回一个符合底仓设置格式的字典列表(list[dict])。

  3. 设置初始底仓
    initialize 初始化函数中,调用 set_yesterday_position(poslist) 传入解析后的列表,即可在回测启动时自动创建对应的持仓对象。


二、完整策略源码示例

以下是一个完整的 ptrade 策略示例,展示了如何在初始化时导入底仓,并在盘中对导入的股票进行卖出操作:

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

def initialize(context):
    # 1. 设置我们要操作的股票池(需要包含您导入的底仓股票)
    g.security = '600570.SS'
    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):
    # 获取当前持仓信息
    position = get_position(g.security)
    
    # 如果当前持有该股票,且可用资金或持仓满足条件,尝试卖出 100 股底仓
    if position.enable_amount >= 100:
        order(g.security, -100)
        log.info("成功卖出底仓股票 %s 100股" % g.security)

三、注意事项

  1. 使用场景限制convert_position_from_csvset_yesterday_position 接口仅在回测模块可用,实盘交易中持仓数据由柜台实时推送,无需也无法手动设置底仓。
  2. 文件路径:CSV 文件必须上传至 ptrade 的研究(Notebook)根目录下。如果存放在子目录中,路径参数需写为如 "user_data/Poslist.csv"
  3. 代码尾缀:CSV 文件中的 sid 字段必须带上正确的市场尾缀(上海市场为 .SS.XSHG,深圳市场为 .SZ.XSHE)。