3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 ptrade 量化交易平台中,进行策略回测时,如果需要模拟已持有一定股票(即底仓)的场景,可以通过上传本地 CSV 文件并利用 convert_position_from_csv 接口一键导入。配合 set_yesterday_position 函数,即可在策略初始化时自动建立初始持仓。
首先,您需要在 ptrade 的“研究”模块中上传一个 CSV 文件(例如命名为 Poslist.csv)。该文件的表头和内容格式必须严格遵守以下规范:
sid,enable_amount,amount,cost_basis
600570.SS,10000,10000,45
000001.SZ,5000,5000,12.5
字段说明:
sid:标的代码(须带后缀,如 .SS 或 .SZ)。amount:总持仓数量(整数)。enable_amount:可用持仓数量(整数,通常等于或小于总持仓量)。cost_basis:每股的持仓成本价格(浮点数)。convert_position_from_csv(path)
list[dict])。set_yesterday_position(poslist)
以下是一个完整的 ptrade 策略示例。策略在 initialize 阶段导入 Poslist.csv 作为底仓,并在 handle_data 盘中交易时间对导入的底仓进行卖出操作。
# -*- coding: utf-8 -*-
def initialize(context):
# 1. 设置我们要操作的股票池(可以包含底仓股票)
g.security = '600570.SS'
set_universe(g.security)
# 2. 从研究根目录下的 CSV 文件中转换持仓参数
# 注意:请确保 Poslist.csv 已上传至您的 ptrade 研究工作区
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):
# 获取当前恒生电子(600570.SS)的持仓情况
position = get_position(g.security)
# 如果当前持有该股票,且可用资金或持仓满足条件,尝试卖出100股底仓
if position.enable_amount >= 100:
order(g.security, -100)
log.info("成功卖出 100 股 %s,剩余可用持仓: %d" % (g.security, position.enable_amount - 100))
convert_position_from_csv 默认读取的是 ptrade 研究根目录下的文件。如果您的文件在子文件夹中,请传入相对路径(例如 "user_data/Poslist.csv")。convert_position_from_csv 和 set_yesterday_position 均为回测专用函数。在实盘或模拟盘交易中,系统会自动获取您柜台的真实持仓,无需也无法手动设置底仓。