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

PTrade量化回测:如何设置初始底仓模拟真实账户?

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

问题描述

PTrade中如何在回测时模拟实际账户持仓?

回测结果想包含账户已有持仓

解决方案

在PTrade量化平台进行回测时,如果希望模拟实际账户中已经存在的持仓(即设置底仓),可以使用 set_yesterday_position 函数。这在验证包含已有持仓的策略逻辑时非常有用。

1. 使用 set_yesterday_position 直接设置

该函数仅在回测模块可用,用于设置回测的初始底仓。它会使策略在初始化运行时就创建出持仓对象。

参数说明:

  • poslist:一个包含字典的列表(list[dict]),每个字典代表一只股票的持仓信息。

字典字段要求:

  • 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):
    # 策略运行第一天即可卖出底仓中的可用数量
    order(g.security, -100)

2. 从 CSV 文件导入底仓

如果底仓股票较多,手动编写字典比较繁琐,PTrade 提供了 convert_position_from_csv 函数,可以从 CSV 文件中读取持仓信息并转换为 set_yesterday_position 所需的格式。

CSV 文件格式要求:
表头必须包含:sid,enable_amount,amount,cost_basis

例如 Poslist.csv 内容如下:

sid,enable_amount,amount,cost_basis
600570.SS,10000,10000,45

代码示例:

def initialize(context):
    g.security = '600570.SS'
    set_universe(g.security)
    
    # 从上传到研究环境的 CSV 文件中读取底仓信息
    poslist = convert_position_from_csv("Poslist.csv")
    
    # 设置底仓
    set_yesterday_position(poslist)

def handle_data(context, data):
    order(g.security, -100)

注意事项:

  1. set_yesterday_position 只能在 initialize 函数中调用。
  2. 使用 CSV 导入时,需要先将 CSV 文件上传到 PTrade 的研究环境中。
  3. 设置底仓后,回测开始时的初始资金(capital_base)不会扣除底仓的市值,底仓是额外附加到账户中的资产。