← 返回量化与 AI 投研概念库

手续费与印花税:为什么手一勤,赚的全被这几笔小钱吃光

最后更新 2026-08-18
R1 · 低风险

有件事你大概见过,但没往这个方向想过。

两个人,同一年,看的是同一批票,判断也差不多。年底一对账,一个赚了小几个点,另一个白忙一场甚至倒亏。翻记录一看,赚的那个全年动了不到十次手,白忙的那个几乎天天在换。两人每一笔的眼光其实半斤八两——差别不在看得准不准,在于动手的次数不一样,而每一次动手都要交钱

这笔钱单看每一次都小到你懒得算:几块、十几块,账单上一闪而过。可它有个很坏的性质——它不是概率,是确定的。你赚不赚要看市场给不给面子,这笔钱一分不少照收。把它乘上你一年动手的次数,那个总数常常大到让人不想承认。

先说人话:这不是一笔钱,是好几笔

想象你在机场换外币。你拿人民币换美元,柜台给你一个价;隔了十分钟你后悔了,把美元换回人民币,柜台给你另一个价。汇率一动没动,你手里的钱却少了一截。少掉的那截分成几块:柜台明码标价的手续费、买价和卖价之间的那道缝,可能还有一笔说不清名目的服务费。

股票交易是一模一样的结构,只不过名目更多、每一笔更小、藏得更深——它不用你另外掏钱转账,而是直接从成交里扣掉。

按上游那份 A 股回测引擎在模块头部列出的市场规则,一次买卖会碰到这么几笔(各自的费率数值都是可配置项,且是随政策与你的券商合同变动的东西,下面只讲结构,不当成现行标准):

  • 券商佣金:按成交金额的一个比例收,买和卖都收。关键在它通常还带一条「不低于某个固定金额」的门槛——小单子会被这条门槛狠狠咬一口,后面专门算这笔账。
  • 过户费:也是按成交金额的比例,该引擎按买卖双边处理。数额很小,但它是「每一笔都收」的那类。
  • 印花税只在卖出的时候收。这条「单边」的性质极其重要,它让你的买入成本和卖出成本天然不相等,也是很多人估算成本时漏掉一半的地方。
  • 还有一层不出现在费用清单里、却实实在在扣走你钱的东西:你成交的价格和你看到的价格之间那道缝。这部分叫滑点,是另一篇的话题,但算总账时不能不算——它和手续费是从同一块肉上割的。

请注意一个措辞:印花税的税率是政策变量。它历史上被调整过不止一次,未来还会不会动、往哪个方向动,不是你能预测的。所以任何把某个税率当成永恒常数刻进脑子或刻进代码的做法,都自带一个过期日。你能记住的应该是「卖出单边收、税率会变、以官方公告为准」这个结构,而不是某个具体的小数。

投资层:真正该看的单位是「一次往返」

多数人算成本时算的是「买的时候扣了多少」。这个口径从一开始就错了,因为你不可能只买不卖。有意义的最小单位是一次完整的往返:买进去,再卖出来。

一次往返你要付:买边的佣金 + 卖边的佣金 + 两次过户费 + 卖出时的那笔税 + 两次价差损耗。把它们加总,得到一个百分比,我们叫它往返成本。这个数才是你该记住的那个数,也是唯一能和「我这一笔打算赚几个点」直接比较的数。

一旦换成往返口径,有些事立刻变得刺眼。

那个乘法

年成本 = 往返成本 × 一年往返多少次。就这么朴素,但它的杀伤力全在这里。下面用几个假设值(不是任何现行费率,只为让你能自己按计算器核对)走一遍:

假设往返成本 年往返 2 次 年往返 12 次 年往返 50 次 年往返 250 次
0.2% 0.4% 2.4% 10% 50%
0.3% 0.6% 3.6% 15% 75%

盯着最后一列看三秒。同样一套判断,一年往返 250 次,光成本就要从你的本金里刮走一半上下——这还没算你判断错的那些次亏的钱。你要跑赢的不再是市场,是一个先扣掉你半条命的收费站。

这也是为什么,一套「一年调仓两次」的方法和一套「一周动两次」的方法,就算每一笔的眼光完全相同,长期结果也会天差地别。它们不在一个赛道上。想细看频率这个变量本身怎么影响一切,调仓频率那篇专门讲。

那个减法

再看单笔。假设你每做一笔,平均能赚 0.5%(这里说的是期望,也就是把赚的赔的都算进去以后每笔的平均值,不是每笔都赚 0.5%)。往返成本 0.2%,那你实际到手的是 0.3%。成本吃掉了你四成的期望。

要是你的方法单笔期望只有 0.3%——这在短周期的规则里非常常见——往返成本 0.3% 一压,净剩零。注意这时候你的判断力一点没变,胜率没降、眼光没退,你只是从赚钱变成了白干。

这就是短周期方法最残酷的地方:它的优势本来就薄,薄到和成本处在同一个数量级。成本稍微高一点,它就从「能赚」直接翻到「不能赚」,中间没有过渡带。而慢一点的方法为什么显得抗造?不是它更聪明,是它的单笔目标幅度比成本大一两个数量级,成本在它面前只是四舍五入。

小单子的隐藏惩罚

佣金那条「不低于某个固定金额」的门槛,值得单独算一次,因为它对小资金是实打实的伤害,而绝大多数人从没算过。

实际佣金率 = max(比例档, 最低收费 ÷ 成交金额)。

这个式子的意思是:金额大的时候按比例走;金额小到某条线以下,你交的就是那个固定的最低数,摊到成交额上,实际费率会往上飙。临界金额 = 最低收费 ÷ 比例。

拿上游那份引擎快照里的默认配置举个能核对的例子(这两个数是源码里的默认值、可配置,不是你账户的实际值,你的实际值以券商合同为准):最低收费 5 元、比例万分之二点五。临界金额 = 5 ÷ 0.00025 = 20000 元。

也就是说,单笔低于两万块,你就在为「最低收费」买单。真拿 5000 元买一笔,佣金 5 元,实际佣金率是 0.1%——是比例档的四倍。一次往返两头各一次,光佣金就 10 元,占 5000 元的千分之二,这还没算税和价差。

推论有点扎心:「把钱分成很多小份、每份买一点」这个听上去很稳健的做法,在费用结构上是要额外交学费的。 分散有它的道理,但代价不是零,你得知道自己在为它付多少。

成本是确定的,收益是概率的

这一条比前面所有算术都重要。

你买入的那一刻,赚多少是未知的,可能赚可能亏,是一个分布;而要交多少钱,当场就定死了。这两样东西根本不是一类。你在做的其实是一个不对称的交易:用一笔确定的支出,去换一个不确定的期望。

所以每多动一次手,你都在确定地付出一次,去博一个不确定的收益。手越勤,确定的那一侧累积得越快、越可靠;不确定的那一侧则完全看老天。这也是为什么「减少动手次数」几乎是散户最容易拿到、又最不需要任何本事的一次收益提升——它不要求你看得更准,只要求你少按几次确认键。

被吃掉的这部分还有个后遗症:它是从本金里扣的,扣掉的钱不参与后面的滚动。这一年少的那几个点,会在往后每一年继续少一点点,属于复利反过来啃你。这个滚动效应有多大,复利的时间数学那篇算得很细。

系统层:这几笔钱在真实系统里长什么样

概念讲完了,看一眼它在写代码的人手里被处理成什么形状——这能帮你确认自己是不是真的理解了它。

那份 A 股回测引擎把「一笔交易收多少钱」压缩成了几行,结构清楚得像一份说明书:

notional = size * price
# 佣金:按比例,但不低于门槛
comm = max(notional * self.commission_rate, self.commission_min)
# 过户费:双边
comm += notional * self.transfer_fee
# 印花税:仅卖出
if not is_open:
    comm += notional * self.stamp_tax
return comm

值得看的是最后那个 if not is_openis_open 是个真假值,表示这一笔是不是「开仓」(买进)。「印花税只在卖出时收」这句话,在工程上的全部形态,就是这一个布尔判断。 平仓走进这个分支,多加一笔;开仓不走,不加。买卖两头的成本从这一行开始分道扬镳。

反过来说,一个没有这个分支的成本模型——买和卖用同一个费率糊过去——它的每一次往返都在系统性地少算一头。少算的这一头恰恰是最贵的那一头,因为在这套结构里,税那一项的量级通常盖过佣金和过户费。

同样的意思在另一套系统里长成了另一副样子。qlib 的交易所模块把开仓费率和平仓费率做成两个独立参数,而不是一个。为什么要分成两个?答案就是上面那个 if:这两头本来就不一样。参数层面的这种不对称,还有它对最低收费的处理,回测里的交易成本假设那篇讲得更细,这里只点出它和印花税单边收这件事是同一个根。

还有一个细节我觉得挺有意思。freqtrade 在没被显式指定费率时,会去交易所拿费率,然后取其中最贵的那一档作为默认,日志里写明这是「最坏情况」。它的文档也强调,你手动指定的那个费率会在开仓和平仓各计一次。这两个设计传达的是同一种态度:不确定成本是多少的时候,往贵了假设。这个态度值得你从代码里搬到自己身上——估算成本时,宁可估高,别估低。估高了你顶多少做几笔,估低了你会兴致勃勃地做一堆本来不该做的交易。

想把自己的实际数字过一遍,站内有个交易费用计算器,把你的成交金额和费率填进去,看看一次往返到底掉多少肉,再乘上你去年真实的交易次数。这个乘法算出来的数字,比任何说教都有用。

失效边界与常见误用

只盯着佣金谈判。 佣金是这几笔钱里唯一能谈的,所以大家都盯着它。但把佣金从一档压到更低一档,省下的绝对值往往远小于「少做几次往返」省下的税与价差。谈佣金是对的,可它治不了手勤这个病。

把低佣金当成可以多做的理由。 这是前一条的反向陷阱:因为交易变便宜了,所以更敢频繁动手,结果总成本不降反升。费率是乘法里的一个因子,次数是另一个,把一个降了三成、另一个提了三倍,你是在往回走。

用单边口径估成本。 「我的费率才万分之几」这句话通常算的是买入那一边。往返是两边,加上单边收的税,实际数字会比你心里那个数大一截。任何和交易成本有关的比较,都必须换成往返口径再比。

以为不同工具的费用结构是同一套。 场内基金、可转债、期货、境外市场,收费的名目和口径各不相同,有的根本没有印花税这一项,有的另有持有期间按时间扣的费用。这里讲的结构只适用于它出自的那个市场,换个品种请以该产品的公告和交易所规则为准,不要平移。

把税率当常数记在心里。 前面说过了,这是政策变量。记结构,别记数;真要用具体数字的时候,去官方渠道现查。

忘了成本还有一位同伙。 手续费是显性的,写在账单上;价差和自己把价格买高这两件事是隐性的,从来不出现在任何账单上,但对一笔较大的单子而言,隐性的那部分经常比显性的更贵。把这几样一起算,才是真的往返成本

把「减少交易」误读成「买了就不能动」。止损的时候不止损、逻辑已经变了还硬拿着,这不是省成本,这是另一种错误。成本意识管的是「别为了没有优势的理由动手」,不是「任何情况都不动手」。什么时候该动,是期望值思维那一层的问题。

小结

  • 一次 A 股买卖不是一笔钱,是好几笔:券商佣金(双边、有最低门槛)、过户费(双边)、卖出时才收的印花税,再加上不出现在账单里的价差损耗。
  • 有意义的单位是一次往返,不是单边。用单边口径估成本,你会稳定地低估一半。
  • 核心是那个乘法:年成本 = 往返成本 × 年往返次数。往返 0.2% 配上一年 250 次往返,就是 50%——你要跑赢的不是市场,是一个先刮走你半条命的收费站。
  • 短周期方法之所以最先死,不是逻辑更差,是它的单笔期望和成本处在同一个数量级,成本一动它就从赚翻到不赚,中间没有缓冲。
  • 最低收费门槛让小单子的实际费率飙升:临界金额 = 最低收费 ÷ 比例;低于这条线,你交的是固定数不是比例数。
  • 成本是确定的,收益是概率的。多动一次手,就是拿一次确定的支出去博一个不确定的期望。
  • 换手率高不是勤奋的证据,它首先是一张账单。

一句话记住这篇:你交的每一笔钱都是真的,你想赚的那笔钱只是可能的;手越勤,真的那边攒得越快。

本文所引源码与文档均来自上述快照版本,是阅读代码得出的机制说明,不是运行结果;文中所有百分比与金额均为便于核对的假设演算,不代表任何现行费率或税率,请以你的券商合同、交易所规则与官方公告为准。回量化与 AI 投研概念库看其它概念各自在说什么,或顺着量化与 AI 投研卷成体系地读;回测这个词本身在术语库里也有一张卡。本站内容为投资教育,不构成任何投资建议,边界见免责声明

内容有错、看不懂、或想看下一篇?告诉我们 →

本文为投资教育整理,不构成任何投资建议;不荐个股/基金、不预测点位、不承诺收益。关键数据与结论请结合权威来源自行验证,并见风险免责声明