问题描述
/
解决方案
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 的价格精度通常为三位小数。
注意事项
- 仅限回测模块:
set_yesterday_position函数仅在回测模块中可用,用于模拟初始账户状态。在实盘交易环境中,系统会自动读取您真实的账户持仓,无需也无法使用此函数设置。 - 价格精度:ETF 和 LOF 的价格精度是小数点后三位,在设置
cost_basis时建议保持精度一致。 - 批量设置:如果需要同时设置多只 ETF、LOF 或股票的底仓,只需在列表中添加多个字典元素,或者使用
convert_position_from_csv函数从 CSV 文件中批量导入底仓配置。