ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

做市策略核心:Avellaneda-Stoikov模型报价公式与实盘应用解析

做市策略核心:Avellaneda-Stoikov模型报价公式与实盘应用解析 做市策略这个词在量化交易圈里经常被当成一个高深概念聊但说白了它就是一个不断回答现在挂买价还是卖价、挂多少、挂多久的决策过程。Avellaneda和Stoikov在2008年发表的这篇论文之所以能成为限价订单簿策略里的经典是因为它第一次把做市商的两难困境——赚价差还是扛风险——用一个足够简洁又足够严谨的框架摊开来讲清楚了。这篇内容我打算用通俗的视角把AS模型的思路拆开不堆推导重点讲清楚它到底在解决什么问题、报价公式里的每一项为什么长这样、以及拿到真实行情数据后怎么用起来。适合刚接触限价订单簿策略、想做市又不知道从哪下手的同学也适合那些已经跑过简单挂单策略、但总觉得逻辑里有漏洞的人。第一篇文章先把模型的骨架和直觉讲透后面再聊参数估计和实盘改造。1. 做市商到底在赌什么看懂AS模型之前的问题背景1.1 赚的是价差亏的是方向我先用一个开便利店的例子来类比。你开了一家店进货价是10块你挂12块卖。每卖出去一瓶水你赚2块差价。这个生意看起来稳赚不赔前提是——你进的货真的能卖掉且进的货没有过期风险。交易所里的做市商干的事情一模一样。他们同时在买盘和卖盘两侧挂单买一价和卖一价之间那个差就是他们的毛利。但跟便利店老板不同的是做市商手里的货是股票、期货、加密货币这类价格每秒都在波动的资产。你刚在100块买了一手如果价格跌到99块你的库存就浮亏了。这个亏损可能远远超过你赚到的价差。所以做市商面对的核心矛盾就是价格波动带来库存风险库存风险限制了你想赚的价差收益。AS模型的所有公式其实都在围绕这个矛盾做权衡。它不是一套固定的挂单规则而是一套告诉你该在什么价位上承担多大的库存风险的决策框架。1.2 AS模型在量化策略里的位置Avellaneda-Stoikov模型发表于2008年的论文《High-frequency trading in a limit order book》从论文标题就能看出来它针对的是高频交易场景下的限价订单簿。它在量化体系里的位置可以说是库存风险管理的基石。后来大量关于做市策略的研究比如参考价调整、订单驱逐策略、多资产做市很大程度上都是在AS模型框架上做的改良和扩展。理解了这个模型你去看很多做市类的论文和开源项目会顺畅很多。但要注意的是AS模型解决的只是我应该报什么价格这个问题它不回答我是谁、我应该在哪交易、我应该持有多久。这些前置决策靠的是策略设计者的判断。模型是术策略是道先把这个边界搞清楚后面才不容易乱套。2. AS模型的报价规则用大白话拆开2.1 三个数决定一条报价参考价、库存偏移、半价差AS模型的报价逻辑可以浓缩成一个非常直观的公式结构你的买价和卖价分别是在某个参考价的基础上减去一个偏移量、加上一个偏移量。用数学语言写一下最优买价 参考价 - 库存偏移 - 半价差最优卖价 参考价 - 库存偏移 半价差这里的关键在于库存偏移。如果做市商手里没有任何库存也就是持仓为零那么最优买价和卖价应该对称地分布在参考价两侧。但一旦手里有了库存比如你持有1000股你就会比空仓状态更希望卖掉一部分减仓。怎么让市场帮你减仓答案是把卖价调低一点、把买价也调低一点——注意是两侧同时调低。为什么买价也要调低因为如果买价太高你会继续买入库存越来越大风险越扛越多。所以当你库存偏多时整个报价中枢要往下移相当于你向市场传递一个信号我更愿意卖不太愿意买。反之如果你库存为空或负值报价中枢往上移你更愿意买入回补。这个报价中枢随库存移动的直觉是整个AS模型最核心的思想。很多新手做市策略失败就是因为只会在参考价两侧对称挂单手里库存方向跟行情反了以后越亏越不敢挂最终跑出巨大回撤。2.2 库存偏移为什么是风险的影子在AS模型里库存偏移的精确表达式是库存偏移 (q / γ) × σ² × (T - t)我来逐项拆解不然这个公式对新手就是个咒语。q是当前库存量正数代表净多头负数代表净空头。这个好理解。γ是风险厌恶系数它代表你有多不喜欢库存风险。γ越大你越害怕库存压在手里于是同样的库存量会带来更大的报价偏移。你可以把它理解成做市商的胆子参数。σ²是标的资产的方差也就是波动率的平方。波动越大库存风险越大所以偏移越大。T - t是距离策略结束时刻的剩余时间。如果T和t的单位是天那么T - t就代表距离收盘还剩几天。随着时间推移剩余时间越来越短库存偏移也越来越小。这里的逻辑很有意思AS模型假设做市商在一个固定时间点T必须清空库存。离这个清算时刻越远你越有时间慢慢把库存出掉所以对偏离报价中枢不那么敏感离清算时刻越近你调整库存的机会越少反而要根据库存情况更加激进地调整报价。这里扯一句题外话。很多人在实盘里做市并没有一个明确的T时刻必须清仓的约束但模型告诉你你必须定义一个。哪怕你给自己定义的T是每个交易日的收盘前5分钟强制平掉所有库存这也是一个约束。没有这个约束整个模型的数学框架就失去了锚点参数也很难调。2.3 最优价差公式为什么带 γσ²(T-t)除了库存偏移AS模型还给出了最优价差的表达式。简化后的核心版本是最优半价差 γσ²(T - t) (1/γ) × ln(1 γ/α)这个公式看起来比库存偏移复杂但拆开看其实就两件事。第一项γσ²(T-t)是库存风险补偿。它说明你报出的价差至少要能覆盖持有库存期间承受的价格波动风险。如果波动率很大或者剩余持仓时间很长你就要把价差挂宽一点。否则你辛苦赚的价差还不够一波反向波动亏的。第二项(1/γ) × ln(1 γ/α)是对成交概率的平衡。α代表订单到达强度或者说市场上有多少人愿意跟你的挂单成交。如果α很大说明市场流动性好单子很快就能成交你不需要靠缩小价差来吸引对手方如果α很小市场冷清你就要适当缩小价差来增加成交概率。所以最优价差不是固定不变的它依赖于你对未来波动率的估计、你的风险偏好、以及市场的流动性状况。AS模型的精细之处就在于它把这些因素全部量化进了报价决策里。我个人的理解方式是第一项是风险预算第二项是成交补偿两者相加才是你在当前环境下愿意承担的最优风险暴露。很多实盘做市策略就是把这两项拆开单独调最后调出了扭曲的参数问题就出在没有同时考虑两边。3. 模型里的参数每个都代表一种做市商的性格3.1 风险厌恶系数γ敢不敢压货γ在AS模型里是最难拍脑袋定下来的参数。它是风险厌恶系数在数学上来源于做市商对一个指数效用函数的优化。通俗地说γ决定了你在赚价差和控风险之间的偏好。γ小代表你比较能扛愿意手里持有较大库存去博更多的价差收益γ大代表你比较谨慎稍微有一些库存就想办法减掉。实盘中的γ怎么定我见过的做法大致分三类一类是拍脑袋根据自己的资金量和心理承受力设定一个区间然后在回测里网格搜索。另一类是根据历史数据做估计看历史上做市商在类似市场环境下的报价行为反推出一个隐含的γ。还有一类是直接按固定风险预算算比如我最多能承受账户1%的浮亏反推γ。三种方法我实践下来最有效的还是先拍脑袋定范围再用实盘和回测数据去调。因为γ本质上是你的主观偏好它跟策略的绩效表现之间的关系不是单调的不存在一个最优γ可以直接解析地求出来。3.2 波动率σ和持仓时限T-t期限越短越敢做波动率参数在AS模型里的作用被很多人低估了。模型推导时用的是σ²也就是说它是平方项对报价的影响是高度非线性的。当波动率翻倍时库存偏移和风险补偿项都会变成原来的四倍这会让报价区间变得非常宽。所以实盘中AS模型的参数必须跟波动率的估计方式强绑定。如果你用的是30分钟级别的已实现波动率跟用日线收益率算的波动率得出的报价完全不同。持仓时限T-t在盘中是线性衰减的。这带来一个很有意思的行为模式在策略刚开始的时候库存偏移很大价差也相对宽越接近清算时间T报价越激进价差越收窄。这跟很多手工做市交易员盘中的体感是一致的——临近收盘必须收窄价差快速把库存打掉。3.3 订单到达强度λ市场里到底有没有人陪你玩订单到达强度α的估计比较微妙因为限价订单簿里的到达过程本质上是一个高频事件流。简单理解α是你的限价单在其他条件不变时每秒被成交的平均次数。这个值可以从历史盘口中估计也可以在线更新。但要注意到达强度不是稳定的盘中不同时段差异巨大。早盘和尾盘流动性好α大午间清淡α小。如果策略用一个固定的α跑全天效果一定好不到哪去。实际上应该用滚动窗口实时估计α或者至少分时段设置不同的α值。下面这张表可以快速对照三个参数变化对报价的影响参数增大时库存偏移增大时价差做市商性格变化γ风险厌恶缩小先增后减更怕库存σ波动率增大增大更谨慎α订单到达强度不变缩小更激进抢成交注意γ对价差的影响不是单调的公式第二项里有ln(1γ/α)再除以γ这个函数先增后减。实操中很多人在这个参数上一直调不对就是因为没搞明白它的非单调特性。4. 把模型接到真实行情上实操路径与经验教训4.1 从公式到代码第一步是定义参考价纸上谈兵讲完公式落地才是真问题。AS模型在实际跑策略时第一个绕不开的问题就是参考价用哪个论文里假定参考价是股票的真实价值但真实环境中没人知道真实价值是多少。实践中常用的参考价有三类最新成交价这个最简单但噪声大容易被单笔异常成交带偏。买一卖一中间价能反映当前盘口均衡位置也是论文在数值实验里常用的代理。成交量加权平均价格VWAP或时间加权平均价格TWAP相对平滑但滞后比较明显。我自己的经验是做高频做市用盘口中间价最合适因为它最能及时反映订单簿状态的变化。但如果盘口价差经常出现瞬间拉宽的情况建议加一层轻量级平滑比如用指数移动平均处理一下。否则报价中枢会来回跳导致频繁撤改单被交易所的撤单限制卡喉咙。参考价选完之后接下来按公式算出理论报买价、报卖价再结合订单簿档位规则做四舍五入。这里有个细节注意如果算出来的买价高于当前卖一价说明你实际上是在交叉报价下单会直接吃掉对手盘这在很多做市场景下是不允许的代码里要加保护逻辑。4.2 参数估计波动率、订单强度、风险偏好的落地做法参数估计这块我踩过的坑比较多这里分享一套相对靠谱的路径。波动率估计建议走两条路线对照。一条是低频路线用最近N根K线的对数收益率算标准差再按策略持仓周期折算另一条是高频率路线用已实现波动率把5分钟内的逐笔成交收益率平方累加。两种方法交叉验证如果差异很大说明行情结构不稳定这时候宁可保守一点取较大的值。订单到达强度α的估计建议用最大似然估计做一个简单泊松过程拟合。具体做法是在历史数据上统计限价单从挂出到成交之间的时间间隔然后求这些间隔的均值它的倒数就是到达强度的估计值。因为代码逻辑不复杂也可以用滑动窗口实时计算每隔30秒更新一次α。γ没有标准估计方法我的建议是不要试图从历史数据中反推一个最优点而是设定一个合理区间后做稳健性检验。具体做法是在回测中分别测试γ0.01、0.05、0.1三档看策略收益和最大回撤的变化。如果γ从0.01调到0.1策略表现发生剧烈波动说明策略逻辑本身对风险偏好太敏感问题可能不在γ而在参考价或者订单管理逻辑上。4.3 我踩过的三个坑做AS模型实盘过程中有三次教训记忆深刻。第一个坑是直接用年化波动率套进公式忘记做时间尺度换算。AS模型里的σ²必须跟持仓时限T-t的单位保持一致。策略持仓周期是分钟级波动率却用了年化的算出来的价差会大到离谱挂出去的单子永远成交不了。解决方案很简单先把年化波动率除以根号内的周期数折算成需要的频率再平方。第二个坑是忽略了撤单行为对到达强度的影响。我刚开始时直接用成交次数来估计α但回测和实盘差异巨大。原因是策略本身就在不断挂单撤单很多单子挂上去没几秒就被撤了根本没有机会被成交。更合适的做法是统计那些挂单持续时间超过几秒的单子的成交率这样估计出来的α才更贴近策略实际面对的成交环境。第三个坑是T时刻的选择。我在回测里假设T是收盘时间但盘中策略如果中途因为风控被暂停重启T的锚点就断了。后来我在代码里加了一个状态变量每次策略重启时重新初始化T为当前时间加上固定时长同时把库存偏移重置防止旧状态污染新周期。5. 常见误区与问题排查做AS模型最容易搞错的地方5.1 新手必看的四个理解误区误区一做市策略等于双向挂单。双向挂单只是表象真正起作用的是报价跟随库存和风险的动态调整。如果只会在中间价两侧对称挂单那不是做市是裸卖期权迟早被一波趋势行情打穿。误区二模型能预测方向。AS模型里没有任何价格预测成分。它做的一切决策都是在给定参考价的前提下优化报价。所以实盘跑AS模型时方向判断是另一个独立模块负责的不要把两者混为一谈。误区三价差越窄越好。价差窄成交多但单笔利润薄且库存建立速度快。如果行情波动一大库存风险瞬间就超过价差利润。AS模型的价值恰恰在于它告诉你价差不能无限窄窄到一定程度后风险补偿不够。误区四风险厌恶系数γ是风险控制参数。γ严格来说是效用函数里的曲率参数它控制和的是你愿意承受库存的意愿而不是账户止损线。账户止损靠的是资金风控模块跟报价模型的γ不是一回事。试着用γ去控制亏损很容易报出极端离谱的价格。5.2 实盘问题排查对照表运行AS模型时很多现象都能根据现象快速定位问题。整理一个速查表现象可能原因排查方向挂单长期不成交价差过宽或参考价偏离市场检查σ是否被高估、参考价计算逻辑成交频繁但账户亏损价差太窄库存风险失控检查γ是否过小、库存上限约束报价频繁跳动参考价噪声过大对参考价做平滑处理临近收盘库存仍巨大T-t衰减不够激进检查剩余时间是否已趋近零报价偏移是否还在起作用撤单率极高到达强度估计失真用持续时间更长的单子重新估计α回测很好实盘很差手续费/滑点未建模在回测中加入手续费和冲击成本这里面的每一个问题我在实盘里都遇到过不止一次。尤其是回测很好实盘很差通常不是策略模型本身的问题而是回测环境里没有把订单执行成本算清楚。AS模型对价差极其敏感手续费哪怕只差0.1个tick都可能导致策略从盈利变成亏损。5.3 边界与延伸AS模型管不了的事必须承认AS模型不是万能的。它的核心假设——订单到达过程是泊松的、市场冲击是线性的、价格过程是几何布朗运动——在真实市场里都不完全成立。泊松过程的到达强度假设意味着成交事件是独立且均匀分布的但真实盘口中的订单到达有明显的聚集效应大单会引发跟风单。线性冲击假设意味着你的单子对市场价格没有持续影响但如果你的单量足够大这个假设就不成立了。所以实盘中我一般把AS模型当作基准框架而不是终版答案。在这个框架上做三件事第一给库存加硬约束。AS模型通过报价偏移软性调节库存但遇到极端行情时软调节不够快必须设置库存硬上限越线直接停止挂单只做减仓。第二把泊松到达改成更丰富的点过程模型。有条件的团队会用Hawkes过程替代泊松过程能捕捉订单到达的聚集效应但算力开销大很多。单策略实盘阶段用泊松加α的动态调整其实也够用。第三把参考价从中间价升级成带方向的参考价。比如叠加一个短周期动量信号让参考价在中间价的基础上略微偏多或偏空。这样AS模型就从纯做市升级成了方向性做市收益来源更多元。这些延伸已经接近实盘策略改造的范畴了后面如果有机会我打算在系列第二篇里专门聊聊怎么用AS模型做参数估计和实盘改造。写在后面的一点体会Avellaneda-Stoikov模型我前前后后读了三遍每次理解都不一样。第一遍看公式觉得就是个加加减减的报价规则第二遍看懂了它背后的效用函数优化第三遍真正拿行情数据去拟合时才发现模型好不好用根本不在于推导多漂亮而在于你对参数的口味跟真实市场匹不匹配。我个人在做市策略里最深的体感是AS模型真正的价值不在于直接给你一套能赚钱的挂单规则而是逼着你想清楚每个决策背后的风险暴露。你手里库存多的时候敢不敢让价波动起来之后敢不敢收窄价差这些问题如果心里没有答案任何模型都救不了你。参数估计、参考价选择、订单管理这些看起来像脏活累活的细节才决定策略最终能不能跑赢手续费。
返回列表