🚀 AI 一键生成 ptrade 策略代码
立即体验

PTrade API 教程:如何在回测中精准设置佣金与滑点?

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

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: PTrade API 教程:如何在回测中精准设置佣金与滑点?

Question: PTrade 中如何使用 set_commission 和 set_slippage 模拟真实交易成本?

解决方案

PTrade 中使用 set_commission 和 set_slippage 模拟真实交易成本指南\n\n在量化策略回测中,忽略交易成本(佣金、印花税、经手费及市场冲击滑点)往往会导致“回测完美、实盘亏损”的假象。PTrade 平台提供了多个专门在 回测模块 使用的 API 接口,用于精准设定佣金与滑点。\n\n---\n\n## 一、设置佣金费率:set_commission\n\nset_commission 函数用于设置策略在回测时的佣金费率及最低佣金限制。\n\n### 1.1 接口定义\npython\nset_commission(commission_ratio=0.0003, min_commission=5.0, type="STOCK")\n\n\n### 1.2 参数说明\n* commission_ratio (float): 佣金费率。默认股票为万分之三 (0.0003),ETF/LOF 默认万分之八 (0.0008)。\n* min_commission (float): 最低单笔交易佣金。默认 5.0 元。\n* type (str): 交易类型,目前支持 "STOCK""ETF""LOF"。\n\n### 1.3 回测手续费计算公式\n在 PTrade 回测中,总手续费 = 佣金费 + 经手费:\n* 佣金费 = max(交易总金额 * commission_ratio, min_commission)\n* 经手费 = 交易总金额 * 0.0000487(万分之0.487)\n\n---\n\n## 二、设置滑点:set_slippageset_fixed_slippage\n\n滑点用于模拟委托下达后到实际撮合成交之间的价格偏差。PTrade 支持百分比滑点和固定金额滑点两种方式。\n\n### 2.1 百分比滑点:set_slippage\nset_slippage 根据订单委托价格的比例来计算最终成交价。\n\n* 接口定义set_slippage(slippage=0.1)\n* 参数slippage (float) - 滑点比例,默认 0.1(即千分之一冲击)。\n* 成交价公式:\n * 买入成交价 = 委托价格 * (1 + slippage / 2)\n * 卖出成交价 = 委托价格 * (1 - slippage / 2)\n\n### 2.2 固定滑点:set_fixed_slippage\nset_fixed_slippage 为每次交易设定固定的绝对价差。\n\n* 接口定义set_fixed_slippage(fixedslippage=0.0)\n* 参数fixedslippage (float) - 绝对价差,默认 0.0 元。\n* 成交价公式:\n * 买入成交价 = 委托价格 + fixedslippage / 2\n * 卖出成交价 = 委托价格 - fixedslippage / 2\n\n---\n\n## 三、完整策略代码示例\n\n以下示例展示了如何在 PTrade 策略的 initialize 函数中正确初始化佣金与滑点:\n\npython\ndef initialize(context):\n # 1. 设置标的股票\n g.security = '600570.SS'\n set_universe(g.security)\n \n # 2. 设置交易佣金:佣金费率万分之二.五,最低 5 元\n set_commission(commission_ratio=0.00025, min_commission=5.0, type="STOCK")\n \n # 3. 设置百分比滑点:滑点影响比例设置为 0.002(千分之二)\n set_slippage(slippage=0.002)\n \n # 若使用固定滑点,可替换为以下代码:\n # set_fixed_slippage(fixedslippage=0.02) # 买卖各偏差0.01元\n\ndef handle_data(context, data):\n # 简单交易逻辑示例\n position = get_position(g.security)\n if position.amount == 0:\n order(g.security, 1000)\n log.info("以设定滑点和佣金买入 1000 股 %s" % g.security)\n\n\n---\n## 四、使用注意事项\n\n1. 只能在 initialize 中设置set_commissionset_slippageset_fixed_slippage 必须且只能在策略初始化的 initialize(context) 函数中调用。\n2. 仅回测模块生效:此类设置属于回测撮合引擎参数,实盘交易中的佣金和滑点将直接以券商柜台实际成交和扣费为准。\n3. 二选一使用滑点设置:百分比滑点 (set_slippage) 与固定滑点 (set_fixed_slippage) 建议择一设置,后设置的配置会生效。