构建人工智能交易系统

2020-06-27 04:35:31

大约两年前,我写了一篇关于将强化学习应用于市场的小文章。这是一个我以各种形式工作了一段时间的项目。有几个人问我这是怎么回事。因此,这篇文章涵盖了我学到的一些高级知识。与其说这是一篇有组织的帖子,不如说它更像是一场咆哮,真的。如果有足够的人对这个话题感兴趣,我很乐意在未来的帖子中更详细地介绍技术细节,但那是待定的。请在评论或推特上告诉我。

在过去的几年里,我已经建立了大约四个半的交易系统。第一个是一堆废话。第二个我没有完成,因为我很早就意识到它也是一堆废话。第三个因个人和政治原因而被放弃。第四个在12-18个月内工作得非常好。然后,利润开始减少,我决定转向其他事情,我缺乏重返这个行业的动力。我工作的一些系统是用于金融市场的,但最后一个系统适用于密码市场。所以在阅读时请记住这一点。

哈,新手!有效市场假说!E!M!H!你不能打败市场!这全是运气!

我要说的是,像有效市场假说这样的大多数经济理论都与现实世界相去甚远,以至于它们无关紧要。这并不一定意味着他们错了。它们是有趣的学术模型,在某些情况下可能很有用,比如写论文或获奖。但他们无法在与混乱的现实世界和情绪化的人类的对抗中幸存下来。如果你不知道有效市场假说是怎么说的,那么你就走运了--有时无知真的是一种幸福。我不会在这里讨论这个问题,因为你可以找到更聪明的人来讨论这个。我只想说,我坚信并且已经看到了自己,你可以建立持续击败市场的有利可图的系统。市场最终会调整以夺走这个机会吗?也许吧,但这无关紧要,因为市场可能需要几个月、几年或几十年的时间来调整(只要看看高频交易就知道了),你可以自由地随着时间的推移发展你的系统,寻找新的机会,自己适应调整中的市场。这就是我的情况。随着利润开始减少,市场似乎已经适应了我的系统,但它花了12个多月的时间,如果动机正确,我可能会调整和改进系统,使其再次发挥作用。

与其从经济学的角度考虑市场,我更喜欢从博弈论或强化学习的角度来考虑。这个市场是不存在的。人们所说的市场是许多代理人在试图最大化自己目标的环境中行动的紧急性质。每个人的目标可能略有不同。一些人想以好价格出售他们通过股票期权计划获得的股票。一些人为了快速获利而进行套利。一些人试图根据新闻或图表模式预测短期走势。一些人根据基本面进行长期投机。一些是指定的做市商,为特定的资产或交易所提供流动性,以换取费用。每个人都可以是根据直觉和情绪进行操作的人,可以是遵循某种隐式模糊算法(例如图表)的人,也可以是对数据进行操作的自动化系统。所有这些代理人的联合行为产生了人们称之为市场的幻觉。你的目标不是击败市场,而是在你关心的时间范围内击败市场上的其他一些参与者。时间范围部分很重要。并不是每笔交易都有明确的赢家和输家,因为代理人在不同的时间范围内进行优化,从微秒到几十年不等。

如果你来自科技或创业背景,过渡到交易可能需要改变思维。产品和工程往往是绝对的。如果你的网站需要100ms的加载时间,那就相当不错了。使其在99ms内加载对最终用户的益处微乎其微。这将是对工程资源的浪费。初创企业也是如此。保罗·格雷厄姆(Paul Graham)喜欢说,初创公司很少会被竞争对手扼杀。相反,他们会自杀。他们之所以失败,是因为他们找不到客户,没有可靠的商业模式,或者是因为创始人的问题。在竞争中以稍好的产品被扼杀是相当罕见的。

交易是不同的。这是关于亲戚的。如果你的网站需要10秒才能加载,如果你的竞争对手需要11秒,那也没问题。如果其他所有人的数据都更糟糕,那么拥有糟糕的数据也没什么。如果每个人都支付相同的费用,那么支付高额交易费是可以的。如果你把市场看作一个多人博弈,这一点是相当明显的。即使你在绝对规模上是一个糟糕的球员,如果你的竞争对手更差,你也可以赢。这对您如何构建软件进行折价有直接影响

被广泛采用的技术是商品。如果您使用与其他所有人相同的技术,您的优势从何而来?在构建产品时,这并不重要,因为它关乎绝对的SLA。但交易是关于亲戚的。您可以专门化并自行开发的每一项商品化技术都是击败竞争对手的机会。通过混合云,您可以减少延迟。通过以高效的二进制格式存储数据,您可以节省序列化时间,从而在开发过程中加快迭代,并在生产中进行更快的预测。通过创建与交易所的自定义集成,而不是使用现成的API,您可以使用其他人无法使用的特定订单类型,或者通过处理交易所特定的信息来获得信息优势。诸若此类。构建高度专业化的非通用系统是工程师们所痛恨的。我们喜欢概括和抽象。但专业化往往是你在交易中的优势所在。

你不需要从头开始,实现你自己的编程语言来开始交易。但您应该意识到在采用商品化技术时所做的权衡。对此做出有意识的决定。上面的一些事情看起来微不足道,但大量的微小优势加在一起就可以成为一个显著的优势。

你可能会说,嗯,这是有道理的,但我真的不想在基础设施方面竞争。相反,我想要建立一个更聪明的模型,能够做出更好的预测。这就是我的优势!这句话我听得很多,但我从来没有见过它奏效。

人工智能已经相当商品化了。我想说,它比优秀的基础设施工程、数据收集或来自领域知识的归纳偏见更商品化。如今,您可以轻松下载最先进的模型并在您的数据上运行它们。除非你处于一些极其相关的研究的前沿,否则你不太可能仅仅通过训练一个更好的模型就能获得显著的优势。

当人们意识到他们幻想的人工智能模型建立在用糟糕的数据训练的糟糕的基础设施上时(其他所有人也在使用),他们就放弃了。人工智能可以给你一个优势,但不是一个太大的优势,以至于你可以忽略其他因素。您仍然需要构建良好的基础设施、获得良好的数据、拥有像样的延迟等等。似乎很少有人愿意在这些不性感的事情上花费时间。把每一个都想成一个乘数。如果一个接近于零,那么无论你的人工智能模型有多好都无关紧要。

市场-选择合适的市场进行折价。不要选择每个人都默认选择的显而易见的选择。无论是法律上还是技术上,进入一个市场的难度越大,你就越有可能找到机会。流动性较差的市场可能会被老练的基金忽视,因为它们的资产管理规模不够大。同样,对于追求好的API的工程师来说,这通常是违反直觉的--好的API通常意味着受欢迎。流行通常意味着商品化。

数据-考虑其他人无法访问或不愿意获取的数据源。例如,由于复杂的费率限制IP禁令,可能存在难以抓取的数据。大多数人会在这里放弃。这对你来说是个机会。对流行的API和开源软件持怀疑态度。这是每个人都在使用的相同数据。

延迟--您可能不打算与高频交易员竞争(坏主意),但这并不意味着您可以完全忽略延迟。更好的延迟可能会带来更容易的执行和更少的滑移。请注意托管系统的位置、如何发送数据、如何序列化数据等。

模型-一般来说,更好的数据比更好的模型更重要,但更好的模型也可以给你带来优势。请注意,您经常在模型复杂性与延迟之间进行权衡。

执行力--如果你不能执行力,那么一个好的模型就没有多大意义。您收集的历史数据可能与交易所实际发生的情况大相径庭。除非你开始实时交易,否则你是不会知道的。

在我上一篇帖子两年多后,我仍然相信强化学习是市场交易的正确方法吗?是的,而且我个人在这方面也取得了成功。然而,我承认,要让它发挥作用,有很多技巧是必要的。强化学习的主要好处是您不需要设置可微损失函数。取而代之的是,你可以直接在一定的时间范围内优化损益。通过构建良好的仿真,您的模型可以学会对延迟、抖动、滑移和其他在真实市场中可能发生的事情保持健壮。

有了督导学习,就难多了。有许多超级参数需要获取";正好";-在什么时间范围内进行优化?要优化什么(日志返回?头寸尺寸是多少?)?什么时候出仓?如何处理延迟、拒绝订单、API问题等带来的随机性?如何处理非IID数据?诸若此类。我相信,如果你真的努力,你可以做到这一点,但依靠基于模拟的方法似乎是一个更有原则的解决方案。

我也相信市场模拟是强化学习算法的一个很好的试验台。它们有几个特性,今天的许多技术都在苦苦挣扎:

稀疏的正反馈。随心所欲的探索和天真的回报,你不太可能发现好的政策。

需要泛化到将来的日期。在研究人员对训练集进行测试的RL中,泛化常常被忽略。

有了一个好的模拟器,环境可以通过延迟、抖动、API问题、滑移等形式提供大量的随机性。

非平稳性。市场数据分布随着时间的推移而变化,代理必须学会处理它。

如果你是一名ML研究员,对学术方面的交易感兴趣,请随时给我发消息。

大多数效率低下都是转瞬即逝的,因为其他座席会适应您的策略。怎么转瞬即逝呢?那得看情况。根据交易地点和方式的不同,它们可能持续毫秒、秒、分钟、小时、天、周或月。持续盈利的方法是始终如一地善于发现转瞬即逝的机会。这基本上是元学习。

训练模型时优化外环的速度。发现新战略和调整模型和基础设施的迭代速度越快,效果就越好。围绕这一点构建您的基础设施。查询和加载批量历史数据以进行操作应该尽可能快。特别注意反序列化成本。在构建具有匹配引擎的市场模拟器时,要对其进行广泛的基准测试。最大限度地减少RPC和网络往返。我们在这里谈论的是数量级的问题。我的第一个模拟器比我最近的一个慢了大约50倍。由于模型是在模拟中训练的,这意味着在训练或玩耍时迭代速度要快50倍。自动实现数据可视化,以便在获得意外结果时可以轻松查看它们。

我从不太了解交易的人那里听到的一种常见的论点和误解是,我很幸运,因为市场在上涨,我赚了钱。实际上,几个月来我的PnL图看起来就像这样:(这是为了得到一个点而生成的,但我的实际数据看起来非常相似):

那我是不是刚刚做空了资产?不,我没有做空任何东西,因为在我交易的市场里做空是不可能的。很少有市场一直在下跌这样的事情。当人们说市场下跌时,他们谈论的是一个具体的时间尺度。市场可能以每天或每小时为单位进行盘整。这并不意味着在较短的时间尺度上只有向下移动。它可能会有相当大的波动。一旦你开始放大到秒和毫秒,总会有你在小时图、日线图或月线图上看不到的向上和向下。在不做空任何东西的情况下,仍有可能从中获利。

就我个人而言,我总是在下降趋势(按小时或每天计算)时赚得比上升趋势多。我仍然不知道这到底是为什么发生的。这可能是因为市场的那一边有更多的流动性,或者是因为当价格开始下跌时,更多不知情的交易员提交了天真的订单进入市场。

向十几个来自不同背景的交易员问同样的问题,你会得到十几个不同的意见。请注意,我使用的是意见这个词,而不是答案或事实。由于交易是一个如此神秘的领域,被广泛接受的真相很少。人们并不共享相同的背景知识,而且他们到处使用不同的术语。如果你想学习交易,那是很难的。我不知道有任何在线资源在教授算法交易方面做得很好。你在网上找到的大多数课程和教程都是由大师撰写的-他们通过教学赚钱,但自己从来没有建立起一个有利可图的系统。他们可能会趁他们还在做的时候试着向你推销他们的SaaS产品。

研究论文也是如此。我订阅了arxiv&39;的Q-fin.TR,但与机器学习等领域相比,平均纸张质量相当低。偶尔会有一些有有趣想法的珍宝,但绝大多数都是人们试图找到工作并在简历上加点东西的实验-在现实世界中,没有一个是站得住脚的。显然,运行盈利系统的人没有发表关于它的论文的动机。“交易和交易:从业者的市场微观结构”和“金融机器学习的进展”等书是一个相当不错的起点,但根据我的经验,没有什么比通过实践或寻找导师来学习更好的了。

如果有足够的兴趣,我将来可能还会写更多关于这个话题的技术文章。