🚀 AI 一键生成 ptrade 策略代码

PTrade 回测教程:如何精确计算佣金、印花税和经手费?

ptrade | 发布时间: 2025/12/16
以下内容由 EasyQuant 生成。

问题描述

请解释一下量化回测中手续费、佣金和印花税是如何计算的

解决方案

在PTrade量化交易平台的回测环境中,交易成本主要由佣金(Commission)、**经手费(Transfer Fee)印花税(Stamp Duty)**三部分组成。

根据PTrade API文档说明,回测中的手续费计算逻辑如下:

1. 费用组成详解

A. 佣金 (Commission)

这是支付给券商的费用,双向收取(买入和卖出均收取)。

  • 计算公式佣金 = 交易金额 × 佣金费率
  • 最低收费:如果计算出的佣金低于设定的“最低佣金”,则按最低佣金收取。
  • 默认设置
    • 股票:默认为 万分之三 (0.0003)
    • ETF/LOF基金:默认为 万分之八 (0.0008)
    • 最低佣金:默认为 5元

B. 经手费 (Transfer Fee)

这是支付给交易所的费用,双向收取。

  • 计算公式经手费 = 交易金额 × 经手费率
  • 费率标准:PTrade文档中注明的费率为 万分之0.487 (0.0000487)
  • 注意:这部分费用通常由系统自动计算,叠加在总手续费中。

C. 印花税 (Stamp Duty)

这是国家税收,仅在卖出股票时收取(买入不收)。

  • 适用标的:仅限股票(ETF、LOF、可转债等通常免收印花税)。
  • 费率:按照当前A股市场规则执行(目前市场标准为卖出方单边征收0.05%,即万分之五,具体以回测环境配置为准)。

2. 如何在策略中设置

在PTrade策略的 initialize 函数中,可以使用 set_commission 接口来调整佣金费率和最低佣金限制。

接口说明:

set_commission(commission_ratio=0.0003, min_commission=5.0, type="STOCK")
  • commission_ratio (float): 佣金费率(如 0.0003 代表万三)。
  • min_commission (float): 最低佣金(如 5.0 代表不足5元按5元收)。
  • type (str): 交易类型,默认为 "STOCK"(支持 STOCK, ETF, LOF)。

代码示例:

def initialize(context):
    # 设置股票交易佣金为万分之二,最低5元
    set_commission(commission_ratio=0.0002, min_commission=5.0, type='STOCK')
    
    # 设置ETF交易佣金为万分之一,最低0元(部分券商ETF无最低5元限制)
    set_commission(commission_ratio=0.0001, min_commission=0.0, type='ETF')

3. 计算案例演示

假设我们设置:佣金率万分之三 (0.0003),最低佣金5元,经手费万分之0.487

场景一:小额交易(触发最低佣金)

操作:买入 100 股 某股票,价格 10 元/股。

  • 交易金额:100 * 10 = 1000 元。
  • 佣金计算:1000 * 0.0003 = 0.3 元。
    • 判定:0.3 元 < 5 元,因此佣金实收 5 元
  • 经手费计算:1000 * 0.0000487 = 0.0487 元。
  • 印花税:买入不收。
  • 总成本:5 + 0.0487 = 5.0487 元

场景二:大额交易(卖出)

操作:卖出 10,000 股 某股票,价格 20 元/股。

  • 交易金额:10,000 * 20 = 200,000 元。
  • 佣金计算:200,000 * 0.0003 = 60 元。
    • 判定:60 元 > 5 元,因此佣金实收 60 元
  • 经手费计算:200,000 * 0.0000487 = 9.74 元。
  • 印花税计算:200,000 * 0.0005 (假设税率为万五) = 100 元。
  • 总成本:60 + 9.74 + 100 = 169.74 元

总结

在PTrade回测中,总手续费 = Max(佣金, 最低佣金) + 经手费 + 印花税(仅卖出)。合理设置这些参数有助于使回测结果更接近真实交易环境。


Q&A

Q: PTrade回测中是否支持设置滑点?
A: 支持。可以使用 set_slippage(按百分比设置,如0.001代表0.1%)或 set_fixed_slippage(按固定金额设置,如0.02代表每股差价0.02元)来模拟交易滑点,这会增加买入成本或减少卖出收益。

Q: 为什么我的回测中ETF卖出没有扣印花税?
A: 这是符合市场规则的。目前国内证券市场中,ETF和LOF基金的交易免收印花税,PTrade回测引擎遵循这一规则。

Q: set_commission 只能在 initialize 中调用吗?
A: 是的,根据API文档,该函数仅在回测模块可用,且通常在 initialize 初始化阶段进行配置。