想要做一个量化策略,是远远比大家想象中要复杂的许多。很多AI交易项目会给大家撮策略,其实那大多是非常不完善的一个基于 rule-based 的下单系统。 完完整整的量化交易系统,从如何保护 API 密钥安全开始,到用 Rust 写订单的执行代码。并接受反馈。 这里之间包含了一个大千世界
最开始的接入数据,整理数据,监督数据源有没有错误,(我们是真的在交易所上遇到过返回错误数据的情况), 第一步数据搞完了,第二步才开始搭建模型。模型里的模型选择,调参,优化。 这一步相当艰难。对于成熟的量化团队来说,真正分高下的就是写模型的能力,是非常考验数学、物理、计算机,甚至金融知识的。
模型做完,还有回测、实盘,再拿真实订单流里的问题回来修改,同时把风控、止损和异常处理补齐
每一步短短几个字,实则要花费大量的心血。光是回测这两个轻飘飘的字,里面的复杂程度都足以写论文了。(Eric最近就在做一个高频回测框架的项目,后面会开源)
所以做一个量化不是大家印象中用Python写几段代码,给 AI 说一个策略思路就可以完成的,这是一个非常复杂的工程, 我和我的伙伴决定用很严肃的态度对待这个任务,所以要以很严谨的工程思维来对待系统搭建。
到这里就是结束了吗?除了代码之外,还有一片看不见的领域,(其实也是我在任务中主要做的事情)
作为小团队,更不要说个人了。在激烈的交易所环境下面对专业机构,劣势不只在模型。手续费、成交速度、交易条件,每一项都可能吃掉本来就不多的优势。所以,和交易所沟通、争取支持,并不是技术之外的杂事,而是系统能不能成立的一部分。
同样重要的,是找到值得做的市场和标的。资源有限,就不能只想着正面拼算力、拼速度,还需要一点交易员的直觉,找到能发挥优势的机会。当然还有不断地和同行进行沟通, 队内进行任务安排和分工, 对外寻求支持(如融资、交易活动等等)
需要相当多的努力,技术上的,业务上的,组织管理上的,才能把这一件小事情做好
讲到这里,我希望给大家留下一个量化的专业印象,AI 发达后,路边摊量化确实有点泛滥了。想要做好一件事,要以最认真的态度去对待它。同时大家应该也理解我过去一个月在推特上沉默寡言的原因了。
我在 review 了我们三周的成果之后,让他写了一篇总结, 因为无论成败,做一个事情还是需要有闭环,有交付。
【预测未来】
“
策略为什么会盈利
这段时间我们一直在研究高频策略,用AS模型也好,GLFT模型也好,都没能取得比较稳健的收益。随后我尝试拓展高频策略的行为,比如不再连续报价,而是挑选市场状态报价,比如不在固定的双边maker,而是将动作拓展到单侧maker,亦或者是taker一些订单。叠加的规则越来越多,可调节的参数越来越多,策略的复杂度不断提高,而复杂度本身并不能带来收益。于是我开始反思,我们的策略里究竟缺少了什么?或者说,不局限于高频策略,一个真正能盈利的策略,必须需要什么?
我发现,我们优化止盈/退出逻辑也好,改善仓位控制也罢。本质上都是在“根据自己的状态做决策”,而非“根据市场状态做决策”,更确切的说,是没有专注于“根据未来做决策”。
这样一来,无论如何我们都是在被市场牵着鼻子走。那么什么是“根据未来做决策”?很简单,你认为未来价格会涨,所以买入,这就是根据未来做决策。你的盈利,全部来源于你能够对市场的走势作出正确的判断。为什么很多人看上去都是先从中低频的主观交易赚到钱,而不是一开始就通过高频交易获利呢?因为决策频率低。当交易的次数越来越多,越来越频繁,就越是会暴露出我们对未来的真实预测能力到底有多强。
所谓预测未来的能力,就是alpha。
而仓位控制本身不产生alpha,它只是一个让我们控制风险的工具,它的目的只有一个,就是让我们在市场上活下来,不被一次失误决策干死,仅此而已。因此,在没有找出真正的alpha之前就大量设计仓位控制的行为,是毫无意义的,它只会让策略从暴死变成慢性死亡。
一切风险控制、仓位控制之类的设计,都应当在发掘出了真正有效的alpha后进行。
描述市场的维度不止价格
很多决策的本质都是预测未来,比如我之前给dave说的,大单冲击后买一卖一大幅移动,希望在较高位置做空,恢复后做多,实现盈利。这个策略是规定了一个入场条件,预测入场条件触发后,有可能形成一个有盈利空间的事件。本质上来说,和金叉买入没什么区别,都是在预测未来存在一个有盈利机会的事件,仅此而已。
预测不止是预测涨跌这样的盈利性事件,还可以是其他的市场信息,比如波动率,比如成交活动,比如买卖价差等等。
这些市场信息对策略的构建是非常重要且有价值的,比如当我们预测到成交活动后面一段时间会很弱,那我们便停止被动做市,逐步将仓位平掉;比如当我们预测到市场的波动率会显著扩大,那么便可以适当减小杠杆,亦或者根据策略的类型选择避开这段时间还是积极参与进去。
这样的风险控制或者仓位控制,是真正带着对市场判断的仓位控制,才是合理的控制,而这一切都是基于有效的预测。
那么具体如何预测未来,就是一个很深刻的话题了。我做了这样的研究
我希望回答一个问题,行情里究竟有哪些信息,对未来有帮助?只看当前够不够?不同市场能不能用同一种描述?我每隔五秒整理一次当时已经收到的盘口和成交信息,然后观察未来五秒、三十秒、一百二十秒等时段里,五件事怎样变化:
1:价格变化。最后涨了还是跌了,变化多少。
2:路径波动。中间经历了多大起伏。最后回到原价,也可能经历了很大波动。
3:成交活动。接下来会发生多少笔成交。
4:买卖价差。最优买价与卖价之间的距离会扩大还是缩小。
5:盘口深度。可见挂单会变厚还是变薄。
这个就是我描述未来市场的五个维度。即便我们很难判断接下来市场到底会涨还是跌,但也可能比较容易判断接下来会不会更加活跃。
历史信息中有多少对未来有价值的东西
假如两个时刻,当前价格、买卖价差、盘口厚度,甚至最近五秒的成交情况都很接近。但其中一个时刻,过去两分钟一直很平静;另一个时刻,过去两分钟刚经历了一连串剧烈变化。
只看眼前他妈是很像的,但接下来的30秒,他们的表现是否也应该一样呢?
我们让两种模型预测完全相同的一批未来,一种只看当前最近一格的行情信息,另一种还可以看过去三十秒、两分钟的历史。结果就是加入历史后,30秒的五目标总和误差下降了大约14.01%。如果再补上10分钟前的历史,预测误差还能进一步下降2.38%。
但进一步拆开看,历史主要帮助判断的是波动、成交活动和部分流动性变化。价格变化的改善弱得多。不过后来单独针对价格目标选择参数,也找到了一点预测改善,所以不能说价格完全不可预测也。
接着我还需要判断这些历史与未来关系,能否在不同标的之间通用。因为这些标的的短期关系很可能是不一样的。同样是“最近成交变得密集”,它对不同市场未来波动、价差和深度的含义,可能旧不太一样。
因此我比较了几种做法,分贝是所有市场共用模型、按大类区分、和进一步让每个市场拥有自己的模型。
结果表明共用和继续让每个市场有自己的模型,并不能改善预测。所以说类别差异是有价值的,但过细的拆分则没有什么价值,这也在意料之中。然后我还尝试将行情信息压缩,用PCA,保留数据里变化最大的那些方向。结果是强行压到很少的维度预测很容易变差,还是高纬度预测效果比较好。还有就是把市场硬切分成两三种区域再分别预测也没有稳定赢过连续的模型。
还有一点是更高频的预测,比如毫秒级别的,在流动性差或者成交不活跃的市场里,是很难产生有意义的结果的。这里不是说不准,反而是有时候能预测的非常准,尤其是方向。
但比如你深入到订单簿一看,中价十分显著的负自相关性居然是因为卖一规律的下跳而买一不动所导致的,这样是没法盈利的。非正常交易时段的这种现象的时间尺度会放大到分钟级别。
所以,我现在更关注两件事:我们究竟预测到了什么,以及这个预测能否转化为真实可交易的机会。策略变复杂,不代表优势变强;预测误差变小,也不代表利润就会出现
”
最后补充几句。上面的这个复盘只是针对我们的做市策略中的一个模型的分享,我们还尝试过根据订单流的交易策略,以及根据 CoinGlass 因子的机器学习截面多空策略,Hyperliquid 与币安的资金费率套利策略,和一大堆数不清的。Eric和我还写了几篇“著作”,包括《为什么 AS 和 GLFT 是扯淡》、《用价格预测价格》等等文章,都欢迎大家讨论分享!今天实属冰山一角。
—— Dave