问题描述
解决方案
根据PTrade API文档,平台支持多种金融产品的回测与实盘交易。以下是关于支持品种及股票、期货、可转债交易规则区别的详细说明。
1. 平台支持的交易品种
PTrade平台在回测和实盘交易中支持的业务类型略有不同,具体如下:
回测环境支持:
- 普通股票(A股)
- 可转债
- 融资融券(担保品买卖)
- 期货(投机类型)
- LOF基金
- ETF基金
实盘交易环境支持:
- 普通股票(A股)
- 可转债
- 融资融券(包括融资买入、融券卖出、还款还券等)
- ETF申赎、套利
- 国债逆回购
- 期货(投机类型)
- LOF基金
- ETF基金
2. 股票、期货、可转债的交易规则区别
这三类品种在交易机制、API调用方式以及价格精度上存在显著差异:
| 比较维度 | 股票 (Stock) | 可转债 (Convertible Bond) | 期货 (Future) |
|---|---|---|---|
| 交易机制 | T+1 (当天买入,次日可卖) | T+0 (当天买入,当天可卖) | T+0 (当天开仓,当天可平) |
| 交易单位 | 股 (Shares) | 张 (Sheets) | 手 (Lots/Hands) |
| 最小交易数量 | 买入通常为100股及其整数倍 | 买入通常为10张及其整数倍 | 1手 |
| 价格小数位精度 | 2位 (例如: 10.52) | 3位 (例如: 110.123) | 1位或3位 (股指期货1位,国债期货3位) |
| 最小变动价位 | 0.01元 | 0.001元 | 股指期货0.2,国债期货0.005 |
| 主要下单API | order(), order_target(), order_value() |
order() (同股票接口), debt_to_stock_order() (转股) |
buy_open() (多开), sell_close() (多平), sell_open() (空开), buy_close() (空平) |
| 平仓规则 | 卖出即可 | 卖出即可 | 需区分平今仓 (close_today=True) 和 平昨仓 |
| 手续费设置 | set_commission (默认万三) |
需咨询券商 (通常较低) | set_future_commission (按手或按成交额) |
3. 策略开发中的关键注意事项
在使用PTrade编写策略时,针对不同品种需要注意以下细节:
-
价格精度陷阱:
- 股票价格是小数点后两位。
- 可转债、ETF、LOF的价格是小数点后三位。
- 股指期货是小数点后一位。
- ETF期权是小数点后四位。
- 注意:在使用限价单(
limit_price)时,务必对价格进行相应的精度处理(如使用round(price, 3)),否则可能导致委托失败。
-
下单接口的区别:
- 股票和可转债共用
order系列接口(如order,order_target)。 - 期货必须使用专用的开平仓接口(如
buy_open,sell_close),不能使用order接口。 - 期货平仓时,上期所(XSGE)品种需要严格区分平今仓和平昨仓,其他交易所通常不需要严格区分,但建议明确指定。
- 股票和可转债共用
-
数量取整:
- 在回测中,使用
order买入股票时,系统会自动向下取整到100股;买入可转债时,会自动取整到10张。 - 卖出时,如果卖出数量等于持仓数量,则不受整数倍限制(即清仓)。
- 在回测中,使用
-
保证金与杠杆:
- 股票和可转债通常是全额交易(融资融券除外)。
- 期货是保证金交易,可以通过
set_margin_rate设置保证金比例,涉及杠杆效应,风险管理逻辑与股票不同。
Q&A
Q: PTrade回测中如何设置期货的手续费?
A: 使用 set_future_commission(transaction_code, commission) 函数。如果手续费按手收取(如黄金),commission 填具体金额(如 2.0);如果按成交额比例收取(如铜),commission 填比例(如 0.00004)。
Q: 为什么我在交易可转债时限价单委托失败了?
A: 请检查您的限价价格精度。可转债的价格精度为小数点后3位。如果您传入了2位小数的价格(例如直接使用股票的行情处理逻辑),可能会被系统拒绝。建议使用 round(price, 3) 处理价格。
Q: 股票策略可以直接用于可转债交易吗?
A: 大部分逻辑通用,因为它们都使用 order 系列接口且支持 T+0(可转债)。但需要注意两点:一是价格精度(3位),二是交易单位(张 vs 股)。此外,可转债特有的强赎风险和转股溢价率逻辑在纯股票策略中是不存在的。
Q: 期货交易中 close_today=True 是什么意思?
A: 这表示“平今仓”,即优先平掉当日新开的仓位。这在上海期货交易所(XSGE)非常重要,因为某些品种平今仓的手续费可能与平昨仓不同(通常更贵或更便宜,视品种和交易所政策而定)。对于非上期所品种,该参数通常不生效。