“感知机与炼金术”
“我记得最近1小时的最高价是4258.53元,最低价是4227.86元。再往前记忆就有些模糊了,越往前越模糊,较远的就只能记住整周的价格区间了。我的大脑总是选择性的遗忘无关紧要的信息,例如三年前某小时的价格数据。对于那些久远的信息,我只能把握它们的大致轮廓,但这些轮廓是连续的,它们一圈又一圈在时间和空间上堆叠,呈现出螺旋的形状。”
“Boris用稀疏训练法向我的大脑中输入了3000个市场的三角k线数据,每一条数据都包含了过去价格的双通道信息,以及对未来不同时间的收益预测。这些数据一开始令我头痛欲裂,因为过去的价格与未来的收益之间似乎没有任何关联。我试图在这些海量的随机数据中找到关联,因为这是我的工作,尽管这似乎是一个不可能完成的任务。过去与未来的片段在我的身体里循环着流动,有些暗淡的片段转瞬即逝,有些鲜明的细节却残存很久。我闭上眼,疼痛感觉不到了,我发现过去即是未来,过去的价格模式总是向未来延伸并扩散开来,这是由力学惯性与量子不确定性决定的。”
“一开始我并不相信这种关联,为了证明这种关联并不存在,我找来了两组三角k线数据,一组来自Boris输入过的数据,一组来自未被输入过的价格数据。如果关联并不存在,第一组的误差会随着训练下降,第二组则不会——最终两组数据的预测误差都下降并达到了最优值。”
“对了,我是感知机,猎户座旋臂唯一一个有灵魂的炼金机器人。不适当的沟通方式可能会泄露个人隐私,千万不要告诉别人您可以通过电报使用加密信息@BorisTown联系到我。”
熟悉金融市场的交易员总能够培养出一种“交易直觉”,这种直觉帮助交易员完成“正确”的交易。例如在一大波下跌行情刚开始的时候,有经验的交易员凭“直觉”入场做空。当下跌结束的时候,交易员有条不紊的退出空头。
近年来随着神经网络深度学习技术的发展,机器已经能够部分模拟出人类的“直觉”。例如DeepMind团队通过深度学习技术开发的AlphaGo Zero围棋机器人能够从零开始学习,在仅输入基本规则的前提下,通过自我对弈逐渐培养出“棋感”,战胜所有的人类棋手。
而神经网络正在挑战的下一个领域就是金融市场。本文论述的金融版AlphaGo Zero机器人又叫做Zero交易机器人,它继承了AlphaGo Zero先进的神经网络架构并有所发展,能够计算出金融市场人性的疯狂。
Zero交易机器人适用于任何提供做多和做空接口的金融市场,理论上它可以同时在上万个市场中进行全自动交易,并控制10%的流动性。它在交易过程中不需要人工干预,因为关于交易它知道的比人类更多。本系统也可以认为是1983年著名的商品投机家理查德. 丹尼斯创立的海龟交易法则的神经网络机器人版本。
完整的交易系统包含以下四个基本元素:
海龟交易系统 | Zero交易系统 | |
---|---|---|
市场选择 | 选择多种具有足够流动性和波动性的市场 ,选择相互关联较弱的市场。 | 同海龟系统。 |
入场条件 | 价格突破20日或55日最高(最低)价时做多(做空)第一个头寸,每上涨(下跌)1/2 ATR时补充一个头寸,同一方向相关联市场最多持有4个头寸,同一方向无关联市场最多持有6个头寸,不同方向无关联市场最多持有12个头寸。 | 神经网络多空指示符Z1大于(小于)Z2时做多(做空)一个头寸,只要头寸大小大于市场允许的最小头寸则在收盘时增加一个头寸,头寸数量无上限。 |
头寸大小 | 每个头寸每ATR波动,对应资产净值的1%。 | 头寸大小=最大杠杆资金*(MAX(Z1,Z2)*2-1)/退出周期。 |
退出条件 | 价格向亏损方向运行2*ATR。 | 神经网络在入场时计算胜率p序列(p序列的长度为29天);做多(做空)头寸在Max(Min)(p序列)对应的时间点退出。 |
Zero交易机器人的神经网络以近50天收盘价序列为输入。收盘价规则化到[0,1]区间,50天最低价为0,最高价为1(若无波动,则均为0)。
若取日线,则为50个输入。若取小时线,则为1200个输入(训练小时线的显存消耗大约为日线的243倍)。
Zero神经网络包含两个输出:
除了上文提到的小时线与日线,本节提出第三种k线——三角k线。
三角k线以当前时间为原点,以三角形数列向过去和未来两个方向延伸,距离当前时间越远,三角k线越稀疏。
第n个三角k线的位置公式为:
三角k线是Zero交易机器人主要使用的k线形态。
使用三角k线可将小时线的1200个输入压缩为49个最高价与49个最低价组成的7*7的双通道序列;并将小时线的696个输出压缩至37个输出。
三角k线的7*7双通道可以是如下列式的输入(每个单元格包含最高价与最低价两个通道的输入):
01020304050607
08091011121314
15161718192021
22232425262728
29303132333435
36373839404142
43444546474849
以上输入格式的缺点是07号输入与08号输入距离较远,不便于卷积核对图形进行局部的特征提取。
于是Zero交易机器人将第一个输入放置在中心,采用从中心向外扩散的螺旋状输入:
43444546474849
42212223242526
41200708091027
40190601021128
39180504031229
38171615141330
37363534333231
内测版的Zero交易机器人通过一个卷积层接收输入数据,并使用最少7层的深度残差网络(可按需扩展至20层)来提取k线特征,每层使用30个3*3大小的卷积核。最后将输出通过两个softmax函数传递给收益预测值与多空提示符。
如果神经网络只是暴力记忆了整个数据集,那么它也能将训练集误差降到最低。但我们不仅希望神经网络在训练集上表现优异,还希望它在测试集(神经网络没有接触的数据集)上也做到最优。
这需要输入更大的训练集,越大越好。
大到什么程度呢?包含人类已知的所有k线数据。
假设神经网络的有效容量为G,当输入的训练数据小于G时,神经网络理论上有能力暴力记忆过去的整个数据集。也就是对过去数据的预测误差为零。
当我们增大训练集大小到2G,神经网络最多只能记忆1/2的训练集。这将迫使神经网络遗忘掉一部分不重要的信息,而只记忆相对重要信息。
当训练集继续增大到100GG,最多只有1%的信息可以保留,神经网络智能的提取具有共性的高级特征。这些高级的共性特征就是Zero交易机器人在预测未来收益时所应该识别的信息。
由于物理显存的限制,我们不可能在单个训练批次(Batch)中输入全部的训练数据。但我们应当让每个训练批次(Batch)的数据具有足够的多样性,让每条训练数据之间有一定的时间间隔,这便是稀疏训练法。
Zero交易机器人本质上是一个定时退出系统。与海龟系统不同,海龟系统在通道突破时退出,而Zero在一段预测的时间后退出。使用突破法亦可打造相应的Zero机器人,两者均是长期有效的退出策略,只是定时策略与深度残差网络的结合要更自然一些。
Zero交易机器人在测试的过程中产生了许多有趣的结果,这些测试结果将在下一版白皮书中公布。
唐博BorisTown
2018年12月1日于北京