3、算法交易基础:算法交易的定义、算法交易的优势、常见的算法交易类型

说到算法交易,很多人第一反应就是「高大上」——量化对冲基金、高频交易、每秒几万笔订单……其实没那么玄乎。

我个人习惯把算法交易理解成:让计算机按照预设规则,自动帮你拆单、择时、执行交易。说白了,就是把你脑子里那些「我想慢慢买,别把价格打上去」的想法,写成代码让机器去干。

3.1 算法交易的定义

官方定义我就不念了,说点实在的。

算法交易,英文叫 Algorithmic Trading,指的是用计算机程序来自动化执行交易指令的过程。它跟量化交易不一样——量化交易解决的是「买什么、什么时候买」,而算法交易解决的是「怎么买、怎么卖才能不亏」。

我记得刚入行那会儿,带我的老工程师跟我说过一句话,我一直记着:「策略再好,执行不好也是白搭。」算法交易就是那个「执行」的环节。

核心要点:算法交易 ≠ 量化交易。量化交易决定交易方向,算法交易决定执行方式。

3.2 算法交易的优势

为什么要用算法交易?手动下单不行吗?

行,当然行。但如果你一次要买几百万的可转债,手动下单的结果往往是——价格被你买上去了,成本变高了。这就是所谓的「冲击成本」。

3.2.1 降低冲击成本

冲击成本是什么?你想想看,市场就像一个水池。你扔一块小石头,水面只是微微波动;但你扔一块大石头,水花四溅,水位都变了。

交易也是一样。大单子一进去,买盘瞬间被吃掉,价格蹭蹭往上窜。你本来想买在100块,结果因为自己买得太猛,最后成交均价变成了100.5。这0.5就是冲击成本。

算法交易怎么解决?拆单。把一个大单拆成几十个、几百个小单,慢慢喂给市场。市场还没反应过来,你已经买完了。

我的经验:我曾经在做一个可转债的做市项目时,一开始手动下单,每次成交均价都比预期高0.3%左右。后来改成TWAP算法,冲击成本直接降到了0.05%以下。差距就是这么明显。

3.2.2 提高执行效率

效率这个词,在交易里有两层意思:

  • 速度效率:机器下单比人快。人看到行情、思考、点鼠标,至少几百毫秒。机器可以在微秒级别完成。
  • 人力效率:你不可能同时盯着几十只可转债,手动调整每个订单。但算法可以。一个算法可以同时管理上百个标的。

说白了,算法交易就是让你从「盯盘民工」变成「策略指挥官」。你只需要定好规则,剩下的交给机器。

3.3 常见的算法交易类型

市面上算法交易类型很多,但最基础、最常用的就三种:TWAP、VWAP、POV。我一个个说。

3.3.1 TWAP(时间加权平均价格)

TWAP,全称 Time-Weighted Average Price。翻译成人话就是:把订单均匀地分配到每个时间切片里

举个例子:你需要在1小时内买入1000张可转债。TWAP的做法是:把1小时分成60个1分钟切片,每个切片买入约16-17张。不管市场怎么波动,我就按时间均匀执行。

TWAP的优点是简单、透明、容易实现。缺点也很明显——它完全不考虑市场行情。如果某个时间点价格特别低,它不会多买;如果价格特别高,它也不会少买。

适用场景:流动性较好、波动不大的品种。或者你只是想「无脑执行」,不关心价格波动。

代码实现也很简单,我贴一个伪代码示例:

// TWAP 算法伪代码
function twap(totalQuantity, totalTime, sliceInterval):
    slices = totalTime / sliceInterval
    perSliceQty = totalQuantity / slices
    
    for each slice:
        placeOrder(perSliceQty)
        wait(sliceInterval)

3.3.2 VWAP(成交量加权平均价格)

VWAP,全称 Volume-Weighted Average Price。这个比TWAP聪明一点——它参考了市场的成交量分布。

逻辑是这样的:如果某个时间段市场成交量很大,说明这个时间段流动性好,我就多买一点;如果成交量很小,我就少买一点。最终目标是让我的成交均价尽量接近市场的VWAP。

我举个例子你就明白了:

时间段 市场成交量 TWAP分配 VWAP分配
9:30-10:00 5000张 250张 100张
10:00-10:30 20000张 250张 400张
10:30-11:00 5000张 250张 100张

你看,VWAP在成交量大的时间段分配了更多订单,这样对市场的冲击更小。

避坑指南:我曾经在实盘中使用VWAP时踩过一个坑——VWAP依赖历史成交量数据。如果当天市场成交量分布跟历史差异很大(比如突发利好导致早盘放量),VWAP的效果就会大打折扣。所以,VWAP更适合流动性稳定、成交模式可预测的品种

3.3.3 POV(成交量参与率)

POV,全称 Percentage of Volume。这个算法的思路跟前面两个完全不同——它不按时间分配,而是按市场成交量的比例来下单。

比如你设定参与率为10%。那么市场每成交100张,你的算法就下单10张。市场成交快,你就买得快;市场成交慢,你就买得慢。

这样做的好处是:你的订单始终跟市场保持同步,不会在市场流动性差的时候硬买,也不会在市场流动性好的时候买少了。

核心参数:参与率(Participation Rate)。一般建议设置在5%-15%之间。太高了容易暴露意图,太低了执行时间会拉长。

POV的代码实现稍微复杂一点,需要实时监控市场成交量:

// POV 算法伪代码
function pov(totalQuantity, participationRate):
    executed = 0
    while executed < totalQuantity:
        marketVolume = getMarketVolume()  // 获取当前市场成交量
        targetQty = marketVolume * participationRate
        actualQty = min(targetQty, totalQuantity - executed)
        placeOrder(actualQty)
        executed += actualQty
        wait(updateInterval)

3.4 三种算法的对比

嗯,到这里你可能有点晕——到底该用哪个?我整理了一张对比表:

算法 核心逻辑 优点 缺点 适用场景
TWAP 按时间均匀分配 简单、透明、可预测 不考虑市场行情 流动性好、波动小
VWAP 按成交量分布分配 冲击成本低、跟踪市场 依赖历史数据 流动性稳定、成交模式可预测
POV 按市场成交量比例下单 自适应市场、灵活 执行时间不确定 流动性变化大、需要隐蔽执行

3.5 知识体系结构图

为了让你更直观地理解这三者的关系,我画了一张图:

算法交易基础 - 知识体系 算法交易 TWAP VWAP POV 时间加权平均价格 按时间均匀分配订单 简单透明,不考虑行情 适合流动性好的品种 成交量加权平均价格 按成交量分布分配订单 冲击成本低,跟踪市场 依赖历史成交量数据 成交量参与率 按市场成交量比例下单 自适应市场,灵活隐蔽 执行时间不确定 核心目标:降低冲击成本 + 提高执行效率
重要提醒:这三种算法只是最基础的「执行算法」。在实际的可转债做市交易中,我们往往需要结合订单簿状态、市场微观结构、甚至对手方行为来动态调整参数。不要指望一个简单的TWAP就能解决所有问题。

好了,关于算法交易的基础就讲到这里。记住一句话:算法交易不是魔法,它只是帮你把交易执行得更聪明一点。选对算法、调好参数,你的交易成本就能降下来一大截。

专注资料整理