🚀 AI 一键生成 ptrade 策略代码

ptrade量化平台回测自定义实际持仓设置指南

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

问题描述

回测获取持仓问题。

客户想通过持仓获取到自己实际的持仓进行回测,需要如何处理?

解决方案

在ptrade量化平台的回测环境中,策略是运行在虚拟的沙盒环境中的,因此无法直接“获取”您实盘账户的实时持仓。但是,如果您希望基于自己当前的实际持仓来进行回测,可以通过**设置底仓(初始持仓)**的方式来实现。

ptrade 提供了两种设置回测底仓的方法:

方法一:在代码中直接定义底仓 (set_yesterday_position)

您可以使用 set_yesterday_position(poslist) 函数在 initialize 初始化阶段手动设置底仓。这适用于持仓股票数量较少的情况。

数据格式要求:
传入一个包含字典的列表,每个字典代表一只股票的持仓信息:

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

代码示例:

def initialize(context):
    g.security = '600570.SS'
    set_universe(g.security)
    
    # 设置底仓
    pos = {}
    pos['sid'] = "600570.SS"
    pos['amount'] = "1000"
    pos['enable_amount'] = "600"
    pos['cost_basis'] = "55"
    
    # 传入列表
    set_yesterday_position([pos])

def handle_data(context, data):
    # 此时 context.portfolio.positions 中已经包含了设置的底仓
    # 可以直接进行卖出操作
    order(g.security, -100)

方法二:通过 CSV 文件导入底仓 (convert_position_from_csv)

如果您的实际持仓股票较多,手动编写代码比较繁琐,可以将实际持仓导出为 CSV 文件,然后上传到 ptrade 的研究环境中,通过 convert_position_from_csv(path) 读取并设置。

CSV 文件格式要求:
表头必须包含:sid, enable_amount, amount, cost_basis
例如 (文件名为 Poslist.csv):

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

代码示例:

def initialize(context):
    # 假设您已经在研究环境中上传了 Poslist.csv 文件
    # 从 csv 文件中获取设置底仓的参数列表
    poslist = convert_position_from_csv("Poslist.csv")
    
    # 设置底仓
    set_yesterday_position(poslist)
    
    # 将底仓中的股票加入股票池
    sids = [pos['sid'] for pos in poslist]
    set_universe(sids)

def handle_data(context, data):
    pass

总结

通过以上两种方法,您可以将实盘的持仓数据“快照”导入到回测环境中,从而测试您的策略在现有持仓基础上的表现。请注意,这些设置仅在回测模块有效,实盘交易模块会自动获取您真实的账户持仓。