期货AI交易之路

论坛 期权论坛 期权     
期权匿名问答   2022-10-30 15:37   5843   0
本文允许转载,转载需注明出处,不得修改文章内容。

一、缘起

我之前是做外汇EA交易的,EA交易类似于期货的CTA,但比CTA更加灵活一些,所以后来转到期货CTA的时候并不困难。那几年的一个大新闻是AlphaGo打败了人类,然后几乎所有做程序化交易人都声称自己在做AI交易,但实际上都只是在做程序化交易,交易策略根本没有学习能力的。
AI交易的最本质的特征是“自学习”,对交易来说,“自学习”的意思是:交易策略的逻辑不再是固定的,而是会根据最近的市场变化,动态地去调整。AI策略成熟以后,每个月都需要用一个小时的时间,让AI重新学习一遍,来重新构建交易逻辑。也就是说,AI交易的研发目标是要制造一个“策略生成器”,它能够在一个小时的时间内,快速完成一个全新策略的构建和验证工作,AI就是这个自动化的策略生成工具。
国内期货量化的发展还是非常快的,但也造成了一个新的问题:之前曾经有效的CTA策略正在快速地失效,这种情况无法避免,因为它是由交易的本质决定的,大家都在用相同或类似的方式捕鱼,而池子里面鱼就这么多,每个人能够捕到的鱼自然就变少了,所以,策略失效是一种常态。对交易员来说,这个问题的解决方案只有一个,就是让我们的策略也随着市场变化,这就需要有快速的交易策略构建能力,而这就是AI交易最擅长的。
尽管我很早就明白这些道理,也知道AI策略的价值,但我不清楚AI交易到底能不能显著地超越CTA?我不是数学博士,自己能搞定AI交易吗?带着这些问题,我先买了几本AI的书,结果看完之后更加是一头雾水,里面无数的新名词再加上一大堆数学公式,彻底把我搞晕了,这些AI的书全都是给数学专业的人准备的,普通人看了这些书完全是在打击信心。
幸好我有一位朋友死磕到底的朋友,不停地鼓动我研究AI:“AI交易一定是未来的方向,几个大的基金公司都在研究,王老师你的数学那么好,编程水平又高,交易也做了十几年了...”
交易十几年并不假,编程水平我也从不谦虚,作为理工男,本来我觉得我自己的数学也还行,但看了AI的书之后,我就没有这份自信了,看上去我首先需要成为数学专业的博士,然后才有可能搞定AI交易,而我大学和研究生学的是工科,数学课程偏应用,并且已经有一大半知识还给老师了,剩下的三脚猫功夫恐怕远远不够。朋友开导我说:“大家都在同一起跑线上,在这个时候,愿意多投入,多付出,多干活的人就有可能领先。”
之后陆陆续续地接触了些AI知识,直到2年前,朋友自己掏了一笔小钱,再拉上一位正在做AI的仁兄一起,我们三个人组成一个梦幻小分队,我们两人加起来有30年的交易经验,另一位仁兄有丰富的AI项目经验和数学功底,我们都非常能吃苦,愿意没日没夜地干,并且有很强的编程能力,可以实现任何想法。我们意气风发,开始了梦想之旅。大家激情澎湃地奋战了几个月,烧死了几箩筐的脑细胞,梦想终于破灭了,我也长舒了一口气,这种看不到希望的非人的生活终于可以结束了。
项目虽然结束了,但梦想总还是要有的,原来,它用一种润物细无声的方式悄悄地改变着我。我时不时会拿出程序来修修改改,坐地铁的时候也上网随便看看,偶尔翻到原来已经看过的帖子,也会有不同的理解,原来一些看不懂的东西,慢慢地也能看懂一些了。
到2021年年中的时候,我们又组建了一个小分队,重新开始了期货AI的项目,到现在也已经有一年多了,目前已经小有成就,也上了实盘账户,看上去净值曲线还不错,对自己有一些信心,可以做做梦,也有胆量吹牛了。
鉴于AI交易涉及的知识非常多,绝非一两篇文章可以讲完的,所以本文并只是记录我在AI交易的时候碰到的一些思维理念的问题,具体落地和编程准备放在另外一篇文章里面写。有些内容可能会比较深奥看不太懂的,还有一些内容看上去是理所当然、无需赘述的,不过,如果你做过AI项目,你可能就不会这么认为了,在AI的汪洋大海中航行,有人的一句话可以让我们少走很多弯路的,这些问题都曾经是阻碍我前进的关键问题,很多问题都是花了非常多的时间,绕了一大圈才搞明白的,因为我就是这么过来的。
二、AI模型

AI系统里面的核心有两个,一是模型,二是数据。
AI是我们的交易策略生成器,AI模型是用来搭建交易逻辑的,打一个比方,我们准备搭一个玩具房子,不同的模型就相当于使用了不同的原材料,有的用木头,有的塑料小方块,有的用雪花片,还有的用彩泥。能够搭出以房子不算本事,不管使用哪种方式,最终都能搭一个玩具房子,不存在是否能够搭建出房子的问题,唯一的问题是:“搭建出来的房子好不好用?”
一般来说,简单的模型只能搭建简单的逻辑,复杂的模型可以搭建复杂的逻辑,特别复杂的模型就把自己搞晕了,就需要封装组合起来,否则最后自己也不知道自己在做什么。并不是模型越复杂越好,有效的才是最好的。
当我们把一本《康熙大辞典》扔给一个小孩,我们非常确信他不可能真正学会。因为里面涉及的知识点太多太杂了。同样的,当我们把一大堆K线数据丢给AI模型,我们也不能指望它能够学到什么东西。如果我们自己完全没有底,只是希望“用某个模型试试”,我们应该都会失望的。在小学阶段,我们最好从最简单的汉语拼音入手,而不是真的丢一本《康熙大辞典》,然后指望着奇迹发生。
我们注意到目前的AI成功的应用都是侧重在某一个细分领域的,他们都只是教会AI做一件相对简单的事情,如文字识别的AI就是专门识别文字的,不能做其他的工作的。我还是有自知之明的,知道我目前的水平是不可能做出一个超级交易模型出来的,因此我退而求其次,在交易方法里面寻找一些相对简单的模式,以此作为我们项目的起点。
假设我们已经有了一堆交易数据,那么我们的模型就是一个交易规律提取器,它能够从这一堆数据里面把交易规律提取出来,这里面的关键点是:每一种模型都只能提取某一种交易规律,如果我们给的数据里面虽然有规律,但这个规律AI模型无法提取,那么模型也不可能学会什么东西。这就是我们常说的“垃圾进、垃圾出。”尽管这份数据是有价值的,但对于这个模型来说,这份数据就是垃圾。
为了让AI模型提取到交易规律,如果我们是数学博士,我们可以构建非常复杂的模型,这样,我们只需要简单的数据就可以让它提取到规律了。如果我的建模能力跟数学博士相差很远,构建一个复杂模型有很大的困难,我只能依赖于AI现有的成熟模型,那么,我应该充分利用我的交易经验,花大力气去准备我的交易数据,这样,AI模型才有可能从中提取到规律,这是一种更加现实可行的方案。
你可能已经看过一些AI的书籍或文章,常见的AI模型有线性模型(线性回归,逻辑回归...)、决策树(XGBOOST,GBDT,AdaBoost,随机森林...),神经网络(CNN,RNN,LSTM,Transformer...)等,那么每一种模型可以提取什么样的交易规律呢?这还得和交易理念相结合。

  • 线性模型:线性模型的适合那种简单的同涨同跌的简单的规律。
    如果我们的交易理念是“强者恒强,弱者恒弱。”或者“涨多了会跌,跌多了会涨”,那么我们可以用线性模型去匹配它,模型实际上会同时寻找符合上述两种理念的交易规律。总的来说,线性模型可以匹配的规律都是非常简单的,它不适合寻找复杂规律的。
  • 决策树:决策树稍微复杂一些,适合那种按照门限值分档的规律
    如果我们是按照RSI指标来进行交易的,我们发现RSI>80或者RSI<20附近的时候行情会反转,那么我们就可以用决策树来匹配它。我们不需要告诉模型RSI模型到底使用什么门限。模型会在训练的时候自动帮我们找到最佳的门限值,最后的结果有可能把RSI门限分成5个档位:
上限下限研判
10082反转下跌
8265继续上涨
6535震荡
358继续下跌
80反转上涨
你会注意到,AI的研判是非常精确的,它不会再是那种80或者20附近的大体区间,而且它一定会把区间震荡的情况也考虑进去,而不仅仅是上涨或下跌。

实际交易中,我们不会只使用一个RSI指标的,实际上,AI非常擅长处理大数据,所以我们可以放几十个指标进去,让AI自动寻找它们之间的搭配组合规律,几十个指标的搭配组合有几万亿种,AI也没有办法一下子找到效果最好的组合,所以AI会先做出100个小模型,他们分别在某一个方面学到最好,然后等到需要做决定的时候,大家民主投票,少数服从多数。这种方式被称为“集成学习”,是一项重要的AI技术,它把很多弱学习器组合成一个强学习器,感兴趣的朋友可以自己找XGBOOST的资料来看看。
3. 神经网络:神经网络是比较复杂的模型,可以寻找非常复杂的规律,甚至连模型的构建者都说不清楚里面的逻辑(“神经网络的可解释性差。”)但近年来AI领域的主要的进展都发生在这个领域,如文字识别,图像识别等等,足以证明它的有效性。虽然里面的每一条逻辑没有办法说清楚,但神经网络的构建方式还是可以搞清楚的。
以CNN为例,CNN一般都会构建多层网络,每一层都是一组卷积、池化、激活搭建的模块,CNN在文字识别上取得了成功,因为它的卷积层实际上就是在提取图像的轮廓线(特征抽取),池化的时候进行图像压缩,从而得到一张张特征明显的小图片(下采样、降维、特征压缩、扩大感受野),之后通过激活函数来找到它们和输出之间的关系。
对应到交易,CNN也在抽取轮廓线,我们可以想象这样一种情景,某几个有实力的机构使用TWAP算法,每隔30秒下单一次单,持续买入一只股票,那么在逐笔成交上就会体现出周期性的成交或挂单增加的情况,多个角度组成的成交量指标都应该能察觉到这种变化的,这就相当于形成了图像的轮廓线,如果AI可以提取到这种轮廓线,就能找到轮廓线和行情涨跌之间的关系,就算他们的下单时间进行过随机数的调整,通过CNN的池化技术也仍然能够找出这样的特征。当然,CNN的适应场景远不止这个情景,我自己对这一方面的研究也还比较浅,如果说错了,诸位权当是一个笑话。
三、数据

数据准备是AI交易的一项重要但非常繁琐的工作,下面我以期货最常见的Dual Thrust策略为例来说明,这是一个非常经典的期货策略,策略已经公开很多年了,虽然绩效已经不那么亮眼了,但现在仍然有很多人在使用它。
我之所以这样做,有两个原因。第一,AI交易仍然需要解决交易理念和概率优势的问题,我们最好到有金子的地方去淘金,而不是在地上随便挖个洞就开始了。你不能让AI在没有规律的地方寻找规律,然后把找不到规律的责任扔给AI。
第二,我们不能保证第一次做AI交易就能成功,基于现有的策略就天然有了一个比较基准,即便没有能够最终盈利,有一个绩效的比较基准,也能看到自己的进步。相比之下,没有比较基准就容易在交易的汪洋大海里迷失自己,无法给自己继续奋斗的信心。
Dual Thrust策略:
在Dual Thrust交易系统首先需要定义一个震荡区间,公式为:
Range = Max(HH-LC,HC-LL)
其中HH 是N日High的最高价,LC是N日Close的最低价,HC是N日Close的最高价,LL是N日Low的最低价。
之后,使用以当天的开盘价为基准算出上轨和下轨
UpperLine = Open + K1*Range
LowerLine = Open - K2*Range
当价格向上突破上轨时,开仓做多。
当价格向下突破下轨时,开仓做空。
更多策略细节可以自行搜索。尽管这个策略早就公布多年了,很多人手里也有这个策略,但大多数人并没有使用它,因为他发现这个策略虽然只有三个参数,但如何选择这个参数仍然是一个非常大的麻烦,查看历史,在某一段时间总有一套参数是最合适的,但接下去的行情谁也不知道,到底使用哪一套参数心里没底,随便选一套参数大概率是不赚钱的。
CTA的策略是无法直接搬到AI的,因为在没有学习之前,AI内部没有任何交易逻辑,AI需要通过学习来得到上面的交易逻辑,而模型最终学到的东西和上述策略内容不会完全一致的,但我们的AI模型必须能够包括上述的逻辑,也就是说,我们没有办法让我们的模型完全等于Dual Thrust策略,但我们可以让我们的模型包含Dual Thrust策略。
尽管AI模型内部很复杂,但它对外表现其实并不复杂,如果我们把AI模型看成一个黑盒子,AI模型可以看成一个巨大的y=f(X)的函数,什么是X和y呢?你可能注意到X的大写的,因为它是一组向量(“因子”或者“特征”),你可以把它理解成所有的技术指标、持仓量或期现价差等等;而y是小写的,因为它是一个结果数值(“标签”),你可以把它理解成未来10根K线的价格涨跌。X和y的定义必须要包含上面Dual Thrust的策略信息,然后我们让模型找出X和y之间有什么关系,之后的我们拿到最新的技术指标X,就可以用这个模型来预测未来10根K线的涨跌y了。
我们需要稍微分析一下策略,上轨和下轨是两个门限值,把最终盈利分成了几个档位。这是典型的门限值用法,所以我们选择决策树来作为它的模型。之后我们定义数据的产生方式,我们在每次突破的时候产生一条数据(“样本”),而不是每根K线都产生一条数据,这样做虽然数据量会少一些(“样本量少”,是AI训练的一个劣势),但都是有效数据,反之,样本量多,但样本里面的干扰数据也比较多(“样本的噪音比例过高”),就需要进行降噪处理或数据整理。
y的定义比较简单,对Dual Thrust来说,它只有两种情况,
- 行情突破区间上轨之后,盈利或亏损的金额。
- 行情突破区间下轨之后,盈利或亏损的金额。X的定义就相对复杂一些,需要与具体的模型相匹配,没有统一的方法,需要绞尽脑汁,反复尝试的。我使用的方法是改写上下轨的公式,把它变成下面这样:
x1 = UpperLine/Open
x2 = LowerLine /Open之所以这样改写,是因为我们的模型是决策树,它会自己寻找最佳的门限值的,如果门值=x1,那么它就相当于使用参数K1在寻找,如果找到的是其他的门限值,那就相当于使用了其他的K1参数值,所以,这样的数学变换就可以把参数K1和K2变成X的一部分,方便模型找到最优解。
我们当然不会只生成一个x,我们会根据不同的N生成一连串的x1和x2,并把它们组成一个向量X,并有可能加入其它维度的X来扩充策略的细节,比如我们注意到宽幅震荡的区间和窄幅震荡的区间会产生不同的效果,就可以尝试把震荡区间的大小也作为一个新的X加进去。
数据准备好之后,就可以输入模型进行训练了,然后就可以验证其效果。XGBOOST模型的工作原理还是需要搞清楚的,否则训练结果不如意的时候,我们就会一头雾水,不知道如何排查问题,对XGBOOST不熟悉的朋友可以自行搜索。
关于绩效,因为时间比较久了,原始的数据我已经找不到了,我只记得结论是:使用XGBOOST比CTA在盈利和最大回撤上都有提升,只不过提升的幅度还远没有达到让人彻底放心的程度。作为一个最基础版本,这样的进步也足以激励我们继续AI研发。
在最终进行交易预测的时候,AI和CTA都是根据交易逻辑来预测的,而在策略生成阶段,CTA把交易经验写成交易逻辑,AI是从交易数据中学到了交易逻辑。要让AI达到并超越CTA的绩效,就必须:

  • 输入AI的X必须包含涵盖CTA用到的所有数据。
  • X需要进行调整和转化,以适应交易模型的需求,因为交易模型实际上并不聪明,他们都是死脑筋,直肠子,完全不知道什么叫“灵活变通”,所以只能我们做一些改变来迎合模型了。不是我们迎合模型,就得让模型迎合我们。相比之下,“我们迎合模型”是一个现实可行的方式。“模型迎合我们”只能作为一个遥远的梦想。
我们需要彻底了解模型的工作原理,否则不知道怎样才能“迎合模型”。
四、拟合

AI模型都可以理解成y=f(X)的函数,但每种模型的搭建方式不同,因此它们能够提取的交易规律也不相同,它们的内部结构差异非常很大,有的使用残差进行拟合,有的使用梯度下降和反向传播,里面涉及非常复杂的数学公式,这些模型有一点是共同点,就是在做拟合,理解AI就必须要理解拟合。
从AI交易的角度来说,拟合就是在寻找交易规律。现在的很多模型如CNN,LSTM已经非常复杂,我们还是用最简单的线性模型来解释,我们假设屏幕上有很多点,然后我们希望用一根直线来把他们连起来,那么:

  • 这些点根本就不在一条直线上,我们最终找到的直线只能尽量靠近大多数的点,所以拟合就是一种近似方法,对交易来说,如果里面有规律,AI只是使用某种数学方法逼近了这个规律,而不是真正的“找到”它,了解这一点非常关键,它可以帮助我们抛弃对AI不切实际的幻想。
  • 既然是近似方法,主观随意性就太大了,所以需要它定一个目标,这个目标我们可以理解成老板给员工定的KPI考核标准,定什么样的KPI考核标准,就会驱动员工往这方面努力。这个考核标准在AI里面称之为“目标函数”,比如XGBOOST,它本来就内置了一大堆的目标函数可供选择,但如果我们使用自带的softmax作为学习目标,它的卡玛比例可能并不好,因为你让AI的努力方向并不是让卡玛比例变好,而是让那softmax变得更小。所以,AI的努力方向还是需要纠正过来,否则就有点南辕北辙的意思了(虽然不完全如此)。
  • 既然是某种近似方法,我们就必须要考虑减少干扰信息,因为,AI无法分辨到底什么信息是有效信息,什么信息是干扰信息,它会把所有的信息都看成是有效的信息,我们必须要知道:我们每次给AI输入一份有效信息,就能够让它更聪明,而每给它一份干扰信息,就会让它变得更傻。一股脑儿地把一大堆信息扔给AI的做法是一种偷懒行为,同时也可能让AI无所适从。
  • 既然是通过拟合的方式来学习的,那么就存在有没有学会的问题。如果AI是一个学生,我们把AI做过的题目再拿出来给它做,AI如果连90分都考不到,这种现象被称为“欠拟合”,说明它的学习方法有问题,或者它刷题刷得不够(样本数量不够);如果AI对于做过的题目能考满分,但对于没有做过的题目只考了50分,甚至考了个零蛋,这种现象被称为“过拟合”,或者被称为“泛化能力差”。说明AI学到的所谓“规律”并不是真正的规律,“过拟合”的原因就比较复杂,涉及的因素非常多,里面比较主要的原因是:


  • 我们给AI的数据里面本来就没有什么规律,在地上随便挖个洞是淘不到金子的。
  • 尽管AI数据里面有规律,但AI模型无法提取到这样的规律,这就需要换模型,或者把X转换成AI可以理解的形式。
  • 对模型使用不当,如超参数配置不合理,样本量太少,未能及时停止(EarlyStop),网络参数太多等等,要具体情况具体分析了。
  • 偷数据(考试前面泄题了,这一般是编程问题,或者使用了带有未来函数的指标)。
五、训练集和验证集

我们还是从传统CTA开始。新手拿到一个CTA策略的时候首先会做历史测试,如果过去5年表现很好,他就认为这个策略的效果不错,就把它挂到模拟盘上观察,在绝大多数情况下,模拟盘的表现都不会太好,这会让它很困惑。其实,想明白了之后也就不会困惑了,因为这个策略的内在的交易规律实际上就是根据过去5年的行情总结出来的,过去5年的行情,对CTA来说,是“做过的题目”,在这段行情中,考试成绩就应该非常好,即使它的表现好,也不能代表它有真本事。之后模拟挂机的时候考不好,因为那些题目没有做过,说明之前找到的这个“规律”其实并不是真正的规律,CTA的这种做法一定会“过拟合”的
所以,有经验的CTA交易员会把过去5年分成两部分,前面4年用来寻找规律,后面1年用来验证,AI交易的时候也是类似的做法,我们会把交易数据分成4年的训练集(样本内)和1年的测试集(样本外)在样本内寻找规律,在样本外检验这种方式能否提取找到真正的规律。
请注意我的用词,我没有说“在样本外检验这个规律是否有效”,而是说“在样本外检验这种方式能否提取找到真正的规律”,两者还是有本质区别的。因为:

  • AI交易员并不认为交易规律是永恒不变的,所以AI交易员永远都紧盯着捕鱼技术,而不是那一条鱼。他们希望可以找到一种提取交易规律的方法,而不是盯着某个具体的交易规律。
  • 因为AI的交易规律并不是交易员写进去的,AI学到的规律可能和我们的期望有很大的差别,所以我们需要用用测试集来检验AI是否真的学到了规律,但这会导致最近1年的数据没有参与交易规律的学习中,也就是说,即使我们证明了AI真的学到规律了,这个规律也是一年之前的过期的交易规律,我们需要在最后阶段使用全部数据让AI重新学习一遍,因此,我们只能把注意力放在“寻找交易规律的能力”上面。
  • 交易规律是需要定期更新的,即便我们找到了最近半年有效的规律,半年之后仍然需要重新寻找规律。如果没有一套方法,死守现有的规律极有可能出现明显的绩效衰退。
六、FAQ

不知不觉已经写了很多了,我非常着急要把文章收尾了,这篇文章并没有系统性地讲解AI交易,只不过记录了我在AI交易的时候爬过的几个坑,所以大家一定会有很多问题,我把大家可能关心的问题用FAQ的方式罗列如下。
Q1:做AI交易需要熟悉编程吗?对编程的要求怎么样?
A:编程能力在AI交易里面其实是非常关键的。不同于CTA或传统手工交易,AI交易对编程的要求还是非常高的,Python要非常熟练,相关的库也要非常熟练。而且最好看英文原版的文档,实在没办法也可以看中文翻译的,但不要机翻的。
编程这一块还需要有项目的整合能力,因为要把一个项目真正落地,成为一套可应用于实盘的系统,需要做太多的工作,包括数据采集,指标计算,指标评估,模型训练,对接CTP/STP,绩效评估,为了系统的稳定性,最好还是让程序跑在Linux上,把它做成全自动的系统,这些工作都要有很强的编程能力,我们花了几个月的时间才把整个系统搭建好(并且我自以为这个速度已经非常快了)。
本文通篇都没有讲编程,是因为编程里面的细节实在太多,我之后准备挑选几个主题来写一写如何编程落地。
Q2:做AI交易一定要有数学方面的人吗?
A:数学能力一塌糊涂肯定是不行的,至少团队里面需要有人能够说清楚模型的工作原理,如果在使用中碰到了问题,要有人可以分辨这是不是模型本身的问题,否则整个项目就被卡住了。
Q3:纯数据AI交易可行吗?
A:上文讲到的交易仍然要用到交易经验的,我们知道纯数据AI交易完全不用任何交易经验,纯粹依靠数据挖掘来找到规律,我对他们非常敬仰的,他们选择的这条路对数学要求更高、实现难度更大、同时适应性也更广。万法归宗,赚到钱的方法才是好方法,我不排斥那种方法,只不过我目前阶段我还是想找一个相对比较容易的地方切入。
Q4:你那个实盘账户绩效如何?
A:目前的收益回撤比大约是4倍,算是比较稳健的模式,不过时间不长,但AI交易本来就比较新,时间短一些也算正常,具体的细节只能私聊。
Q5:你写这篇文章的目的是什么?后续有什么打算?
A:经过几个月的磨合,我们对AI交易已经有一些信心了,所以想做更大一些的事情,一方面准备纳入更多的期货策略,另一方面也准备把同样的方式扩充到股票上。我们一直闷头搞技术,对外交流比较少,而AI的研发比较烧钱,后面的宏伟计划还需要找到一群志同道合的朋友并且有了足够的研发经费才能把它做起来,目前的交易小组显然不够。我留一个微信号:wanglipingplus,对AI交易感兴趣的朋友可以跟我联系,尤其希望是愿意提供研发经费的人。
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:392877
帖子:78576
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP