🚀 AI 一键生成 ptrade 策略代码

ptrade 平台 set_yesterday_position 函数设置 ETF 与 LOF 底仓指南

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

问题描述

set_yesterday_position函数支持设置ETF、LOF类的底仓吗?

/

解决方案

ptrade 中 set_yesterday_position 是否支持 ETF 和 LOF?

是的,set_yesterday_position 函数完全支持设置 ETF 和 LOF 类的初始底仓。

在 ptrade 量化平台中,回测引擎支持的业务类型包括普通股票、可转债、融资融券担保品、期货、LOF基金以及ETF基金set_yesterday_position 函数通过传入包含标的代码(sid)的字典列表来初始化底仓,只要传入的是合法的 ETF 或 LOF 代码(带有正确的市场尾缀,如 .SS.SZ),系统就能正确识别并创建相应的持仓对象。

代码示例:设置 ETF 底仓

以下是一个在回测初始化阶段设置华夏上证50ETF(510050.SS)底仓的示例:

def initialize(context):
    # 设置操作的标的为 510050.SS (上证50ETF)
    g.security = '510050.SS'
    set_universe(g.security)
    
    # 构造底仓信息字典
    pos = {}
    pos['sid'] = '510050.SS'      # ETF标的代码
    pos['amount'] = '10000'       # 总持仓数量(份)
    pos['enable_amount'] = '10000'# 可用数量(份)
    pos['cost_basis'] = '2.500'   # 持仓成本价
    
    # 调用函数设置初始底仓
    set_yesterday_position([pos])

def handle_data(context, data):
    # 打印当前持仓信息,验证底仓是否设置成功
    position = get_position(g.security)
    log.info(f"当前 {g.security} 持仓数量: {position.amount}")

参数字段说明

传入 set_yesterday_position 的列表中,每个字典元素需要包含以下键值对(值通常为字符串格式):

  • sid: 标的代码,必须包含正确的市场尾缀(例如:510050.SS 代表上交所 ETF,159915.SZ 代表深交所 ETF)。
  • amount: 持仓总数量。
  • enable_amount: 可用数量(通常等于总数量,除非有冻结)。
  • cost_basis: 持仓成本价格。注意 ETF 和 LOF 的价格精度通常为三位小数。

注意事项

  1. 仅限回测模块set_yesterday_position 函数仅在回测模块中可用,用于模拟初始账户状态。在实盘交易环境中,系统会自动读取您真实的账户持仓,无需也无法使用此函数设置。
  2. 价格精度:ETF 和 LOF 的价格精度是小数点后三位,在设置 cost_basis 时建议保持精度一致。
  3. 批量设置:如果需要同时设置多只 ETF、LOF 或股票的底仓,只需在列表中添加多个字典元素,或者使用 convert_position_from_csv 函数从 CSV 文件中批量导入底仓配置。