3. 交易成本分析:显性成本与隐性成本
做量化交易,尤其是跑拆单算法,你最先要面对的问题就是——钱到底花在哪了?
很多人一开始只盯着佣金和印花税,觉得这就是全部成本。我刚开始做高频策略的时候也这么想,结果回测曲线漂亮得不行,实盘一跑,收益直接砍掉三分之一。后来我才意识到,交易成本远不止账面上那几块钱手续费。
说白了,交易成本分两类:显性成本和隐性成本。显性成本看得见摸得着,隐性成本才是真正的隐形杀手。
3.1 显性成本:佣金与税费
显性成本,就是交易所、券商、监管机构明码标价收你的钱。这部分没什么技术含量,但你必须算清楚。
| 成本类型 | 说明 | 典型费率(A股) |
|---|---|---|
| 佣金 | 券商收取的交易服务费 | 万1.5 ~ 万3 |
| 印花税 | 卖出时收取,国家税收 | 千1(卖出单边) |
| 过户费 | 中国结算收取的股权变更费 | 万0.2 |
| 证管费 | 证监会收取的监管费 | 万0.2 |
嗯,这里要注意一点:佣金是有谈判空间的。我见过很多个人交易者,佣金默认是万2.5甚至万3,但如果你资金量够大,或者交易频率够高,完全可以找券商谈到万1.2甚至更低。我曾经帮一个私募朋友谈过,月交易量10亿级别,佣金直接压到万0.8——这省下来的钱,就是纯利润。
3.2 隐性成本:真正的利润吞噬者
显性成本再高,也就千分之几。但隐性成本,搞不好能吃掉你几个百分点的收益。我见过太多策略,回测年化20%,实盘跑下来只有8%,问题就出在隐性成本上。
3.2.1 冲击成本
冲击成本,说白了就是「你买,价格就涨;你卖,价格就跌」。你下的单子越大,对市场的冲击就越明显。
举个例子:你想买10万股某只股票,当前卖一价是10.00元,但卖一到卖五加起来才2万股。你一口气全吃进去,价格可能直接被推到10.05甚至更高。这多出来的5分钱,就是冲击成本。
我在项目中遇到过最夸张的一次,是一个小市值股票,我们想买5%的流通盘。结果刚吃进去2%,价格就拉了3个点。那笔交易,冲击成本比佣金高了两个数量级。
拆单算法存在的意义,很大程度上就是为了降低冲击成本。把一个大单拆成几十上百个小单,分批进场,让市场慢慢消化。
3.2.2 延迟成本
延迟成本,就是「你看到的价格,和实际成交的价格之间的差距」。这个差距来自网络延迟、交易所处理延迟、撮合排队等等。
你想想看,你的策略在本地算好了价格,发出去到交易所,中间至少经过:网卡→交换机→光纤→交易所网关→撮合引擎。这一圈下来,少说几百微秒。在高频交易里,这几百微秒足够价格变动好几个tick了。
我记得有一次做期货策略,服务器托管在交易所机房隔壁,延迟大概50微秒。后来机房搬迁,延迟变成200微秒,策略收益直接腰斩。嗯,这就是延迟成本的威力。
3.2.3 机会成本
机会成本比较抽象,但同样致命。它指的是「因为没成交而错过的收益」。
比如你挂了一个限价单,想10.00元买入,结果价格最低只到10.01就反弹了。你没买到,后面涨到了10.50。这0.50元的涨幅,就是你的机会成本。
拆单算法里有个经典矛盾:挂得太保守,冲击成本低但机会成本高;挂得太激进,机会成本低但冲击成本高。怎么平衡?这就是算法的核心。
我个人习惯的做法是:动态调整报价偏移。市场流动性好的时候,挂保守点;流动性差的时候,挂激进点。说白了,就是看盘口深度来决定你的进攻节奏。
3.3 三种隐性成本的联动关系
这三种隐性成本不是孤立的,它们之间会互相影响。我画了一张图,帮你理清它们的关系:
从这张图你能看到,拆单算法本质上是在三个成本之间走钢丝。你压低了冲击成本,机会成本就会上升;你追求低延迟,可能反而增加了冲击成本。没有完美的方案,只有最适合当前市场环境的方案。
3.4 实战中的成本估算方法
光知道概念没用,你得能算出来。我分享一个我在项目中用的估算方法:
# 成本估算示例(Python伪代码)
def estimate_total_cost(order_size, market_depth, spread, latency_ms):
# 显性成本
commission = order_size * 0.00015 # 万1.5佣金
stamp_tax = order_size * 0.001 if is_sell else 0 # 千1印花税
# 隐性成本 - 冲击成本
impact_ratio = order_size / market_depth
impact_cost = impact_ratio * spread * 0.5 # 经验系数
# 隐性成本 - 延迟成本
# 假设每毫秒延迟导致0.1个tick滑点
latency_cost = latency_ms * 0.1 * tick_size * order_size
# 隐性成本 - 机会成本
# 基于历史统计,保守挂单未成交概率
miss_probability = 0.15 # 经验值
opportunity_cost = miss_probability * expected_price_move * order_size
total = commission + stamp_tax + impact_cost + latency_cost + opportunity_cost
return total
最后说一句:交易成本分析不是一次性的工作。市场环境在变,你的策略在变,成本结构也在变。定期复盘你的实际成交数据,看看隐性成本有没有悄悄变大,这是每个量化交易者的必修课。
公众号:蓝海资料掘金营,微信deep3321