算法交易系统与策略——开发交易系统的主流方法

130 阅读19分钟

在你动手打造自己的系统之前,必须先考察可行的实现路径。也许你的点子早有人做过,你就没必要再自己写一套程序。即便市面上没有与你想法相同的产品,你仍然可以从现有产品中汲取有价值的洞见。

当前,构建交易系统的方法很多——从在交易所上采用传统的人工交易系统,到雇佣第三方开发者或公司为你实现想法。事实上,互联网上你不仅能找到交易系统的创意,还能找到它们的各种实现。

本章将介绍搭建交易系统的主要路径,并讨论其优缺点。我也会描述自己的做法,以及我为何做出这样的选择。

人工交易(Manual Trading)

许多著名交易者凭借知识、努力与丰富经验获得了巨额财富。如果你希望走他们的路线,就需要每天磨炼交易技能、不断扩充知识面。

基于人工交易的系统,其本质是在独立探索成功策略的同时,从每日的失败与成功中积累经验。我对那些不借助第三方辅助程序而取得成功的交易者深感着迷。自然,这些人会使用券商提供的经典图表,但核心的策略分析工作都是自己完成的。无论人工神经网络多流行,它们依然没有直觉与潜意识——而这是人类的无可争辩的优势。

不过,需要指出的是,这个“优点”同时也是“缺点”。情绪与贪婪困扰人类已久,交易者也不例外。常常在关键决策时,人会屈从于从众效应,甚至陷入恐慌,盲目承担不必要的风险。因此,在人工交易中,人为错误概率很高,而错误又会反过来消耗交易者的神经与意志。

情绪永远不会控制交易机器人。除此之外,机器人决策速度远快于人类,也不需要休息或睡眠;因此它能完成的交易笔数显著多于人类。

成品信号与算法(Ready-Made Signals and Algorithms)

最容易理解与落地的交易系统,可以基于他人提供的交易信号,或基于你购买的交易机器人(的信号或自动交易)。这两种路径都可能带来收益,但前提是正确使用。不要被销售方的承诺所蒙蔽——要把它们当作工具而不是万能方案

信号(Signals)

交易中的“信号”是信号提供者发出的买卖提示或建议。也就是告诉你何时买、何时卖。实操中,如果信号以提醒(alert)形式出现,可能是一条简短短信,例如:

TSLA。买入价 203,卖出价 208

信号提供者既可能是普通交易者,也可能是专业公司的资深分析师。市场上的信号提供者数量庞大;主要难点是找到高质量且诚实的机构。

信号的好处在于无需开发与测试时间。买来即可用——照单执行即可。但魔鬼在细节里。尽管信号看似简单,供应方往往隐藏或只部分披露其决策逻辑,用户无法确切知晓信号依据。因此,要不要与某个提供者合作、是否采纳其信号,需要你认真审阅其分析材料。

按控制方式与定价不同,信号可粗分为以下几类(划分较为笼统):

  • 手工信号:由提供者人工交易得出。通常需要长期盯盘、长期研究某个标的。一名提供者往往不会给出太多这类信号。
  • 自动信号:基于提供者的交易算法自动生成。通常数量会多于手工信号。
  • 跟单(Copy trading) :卖家与买家账户绑定,卖家开仓时,买家账户自动同步开仓。省时,但对自己账户的控制不足是最大的缺点。
  • 提醒(Alerts) :以文字消息形式告知用户该怎么做(前文示例即此)。因操作与仓位大小由账户持有人自行决定,这是较为安全的信号类型之一。
  • 代客理财(Account management) :客户将账户完全交由供应方操盘,供应方通常按利润抽成。选择此方案需谨慎核查服务方信息,此处欺诈风险较高。
  • 免费信号:一般质量不如付费信号——毕竟很少有人会无偿分享自己的成果。

乍看之下,基于成品信号构建交易系统似乎很简单:从不同供应商处构建一篮子信号组合,然后照此执行。真正困难在于,你必须耗费大量时间做分析与测试,持续引入新信号、淘汰过时信号。也就是说,创建这类系统虽然相对容易,但维护成本与难度却极高。

第三方算法(Third-Party Algorithms)

“万物自动化与算法化”的全球趋势也席卷交易领域,帮助交易者、甚至可独立交易的算法系统每年都在增长。任何人都可以买到“交易机器人”,并不需要会编程。

机器人如此之多,不禁让人发问:既然这么赚钱,为什么开发者不自己用它们赚到几百万? 有的人或许做到了,但讽刺的是,很多收益更多来自销售机器人而非交易本身。

我要强调的是:若用机器人交易能赚到的比卖机器人更多,就没人会卖机器人。这并不意味着没有有用的机器人,只是说明机器人在“搜索与分析”方面的能力有限

还要注意机器人的价格通常不菲。你既希望拿到盈利的交易算法,也需要回本。实际上,找到一个稳定工作的像样机器人并不容易。写作本书时,某大型机器人交易平台上在售的“专家顾问(EA)”约有 4000 个。想象一下,要把它们都分析并验证可行性有多难!购买前,除了看评论,你还应自行分析其关键指标。

话虽如此,不想从零开始的人可以直接购买机器人。确实有人持有上百个机器人的“组合”,却从未在研发上花过一分钟。

机器人所用算法类型多样,区别不仅体现在决策逻辑,也体现在资金管理、平均持仓时长、交易方式、价格等诸多参数上。此外,任何交易机器人都应包含其工作分析数据,这些是对买家很有价值的信息。

下面是用于分析机器人表现的一些指标(下一章会详述):

  • 期望收益(Expected value) :估计策略在长期使用中的平均期望回报,反映长期成功潜力。
  • 收益因子(Profit factor) :策略有效性的指标,等于总利润 / 总亏损,体现“赚赔对比”。
  • 绝对回撤(Absolute drawdown) :从交易期初到期末,账户资金的绝对变化。
  • 相对回撤(Relative drawdown) :相对前期最高权益的最大百分比亏损。
  • 最大回撤(Maximum drawdown) :从历史最高点到最低点的最大资金回落幅度。
  • 恢复因子(Recovery factor)净利润绝对值 / 最大回撤。数值越高,回撤后的恢复越快。

可想而知,机器人的类型非常多,常见包括:

  • 长/中/短线:按平均持仓时间划分。

    • 短线又分为套利(Arbitrage)剥头皮(Scalping) 。套利机器人会在多家交易所开仓,但持仓极短,往往以毫秒计——与剥头皮相似,但后者通常只在单一交易所交易。
  • 全自动 / 半自动:全自动系统无需人工介入;半自动系统需要持续关注,因为功能较弱,需人工补位(如需人工输入开仓手数等)。

  • 马丁格尔(Martingale)EA:一种资金管理法,每次亏损后加倍下一次仓位;一旦盈利便可覆盖前次亏损并回到初始手数。

  • 趋势类与震荡指标类(Trend & Oscillator) :基于技术分析。

  • 非指标类(Nonindicator) :基于新闻网站、论坛等文本/事件分析来决策的特定算法机器人。

短线信号而言,最重要的分析指标之一是平均持仓时间。若该指标 ≤ 1 分钟,基本就是剥头皮/套利信号。这类信号对网络延迟极为敏感,你大概率跟不上的。因此,建议仅考虑至少数分钟以上的持仓时长的信号。反之,持仓极长也不是好兆头——也许机器人在“熬”已积累的亏损,决策逻辑存在严重缺陷,导致退出不及时。

此外,马丁格尔类型的 EA 应当敬而远之。尽管看上去简单,这套体系几乎总会把你的资金清零:只要连亏次数足够长,资本就会归零。识别马丁格尔并不难:查看余额曲线资金曲线(净值曲线) 。正常系统这两条曲线应尽可能贴合且自然向上;开平仓均匀交替也是可靠性的体现。而两条曲线之间大幅离散未平仓数量增加已平仓数量下降,通常就是马丁格尔的信号。

一般认为,全自动机器人比半自动更可靠,因为排除了人为因素。但它们开发难度更高、价格也更贵。同时必须对这类系统实施严格监控,以便你或监控系统能及时发现问题并停止交易

机器人市场上,趋势类与震荡类系统占据主导地位——这很合理,因为技术指标公式易于程序化,也易在图表上观测与分析。

任何交易机器人的一个不容置疑的优势在于:可以交易多种标的。仅此一点就说明该机器人相对可靠:它显然不是靠“拟合”某单一场景,长期表现更可能稳健,对市场变化的适应力也更好。

若你想通过购买算法来构建自有交易系统,可以走分散化与降风险的路线:买入数量较多原理不同的机器人,综合使用。本质上,这与用“交易信号”构建组合类似:大部分时间仍花在持续分析与测试上。只不过,这条路径通常更昂贵

专业化服务(Specialized Services)

前面所有选项都有一个缺点——它们无法完全按你的交易策略想法来实现。当然,你也可以用自己的思路自建一套交易系统。但如果不会编程怎么办?在这种情况下,可以求助于一些专项服务平台:无需专业知识,就能一步步把你的机器人“拼装”出来。你只需实现自己的决策逻辑,然后对生成的策略进行测试与分析。有些服务甚至允许你设置资金管理规则与风控;还有些则支持用专用脚本语言把逻辑做得更复杂。

不幸的是,靠这类服务很难做出特别定制的东西。若想实现更高级的策略,至少需要学会一种简单脚本语言,以突破“拼装式”的基础逻辑。一些服务提供 PythonC# 等编程能力,能让你构建更复杂的算法。除此之外,还有比“搭建器”更多样的服务类型;它们通常拥有庞大的用户群成熟的学习生态

当你想做的东西足够独特、需要验证某个不符合标准框架的假设时,困难就来了——这通常就是该转向独立开发,或雇佣第三方开发者的时候。

独立自建交易平台(Independent Creation of a Trading Platform)

拥有自己的交易系统相比其他路径有一大优势——你可以验证任何自己的假设,不受成品方案功能边界的限制。这一路径的前景巨大,因为它不受任何人、任何方式的束缚。开发过程往往极具创造性,并且对每位开发者来说都独一无二。更棒的是,开发者不被某种编程语言捆绑;你可以用自己熟悉的技术栈。大概率一旦走上这条路,你就很难再回到更“简单”的方式了。

此类做法内部的“划分”其实很随意。毕竟,每增减一项功能,系统就会发生变化、成为一个全然不同的东西。不过,我们仍先看看几种不同思路,帮你判断哪种更适合你。

测试单一策略(Testing a Single Strategy)

设想你有一个灵光一现的想法,想要验证它。你会快速把逻辑写出来,用自建或第三方服务跑测试。此时你的交易系统只包含单一策略。平台功能本身并不重要——是否包含测试或优化模块都无所谓。平台的全部工作,就是按这一个既定剧本去交易。

这个思路最大的优点是开发速度快。你无需纠结策略参数的最优值,或某个指标对表现的影响。

显而易见的缺点是:你无法理解策略里哪些部分可以改进、若增删某个条件或调整指标参数,绩效会如何变化。粗略讲,主要问题是缺少对“最优策略”的搜索——你只是直接给理论套上了一组固定参数。

示例策略如下:

入场信号:

  • BBW > 0.05
  • WMA < 开盘价(Open Price)

出场信号:

  • BBW < 0.01
  • RSI > 30

当然,你可以用绩效指标来评估该策略,但更好的做法是观察当策略参数变化时,这些指标如何变化。这里最容易实现的方法是穷举法(brute-force)

穷举法虽“古老而朴素”,却总能在未知情境下助人一臂之力;对个人开发者同样管用。把穷举法用在上面的策略中,你就能看到每个参数的具体取值如何影响绩效。也就是说,设定一个取值范围与步长,就可以绘制“任一绩效指标随参数变化的曲线”。

穷举法非常擅长分析指标参数的具体取值对理论有效性的影响。通过顺序或组合遍历所有可能的参数,你可以对理论做出较为精确的分析。但该方法只在参数不多时高效;若策略的参数空间很大,寻找最优解将耗费难以承受的时间

不同的开发者路径(Various Developer Approaches)

认真做事的人,往往会开发功能完善的整套交易平台:有人自写“交易所仿真”以便独立回测;还会做优化模块最优策略搜索模块实盘交易模块资金管理模块等(为进行独立测试、优化与策略搜索、实盘执行、资金管理等提供支持)。

那些标准辅助服务无法验证的理论,在你的自有系统里就能验证。比如,你想检验一条市场心理学假说:某公司股价与其在社交媒体上的提及量直接相关。你可以开发一个解析器,通过话题标签(hashtags)分析群体情绪,当正向或负向情绪达到临界值时产生信号。又比如,你认为某些股票之间存在直接依赖关系;或某公司股价在下雨时会上涨。听上去疯狂?也许吧,但当你走上独立开发之路,所有点子都能被验证

雇用第三方开发者(Hiring Third-Party Developers)

在某个时点,机械化交易的交易者可能会决定将其系统全部或部分自动化,以便腾出更多时间用于更深入的分析以及对交易策略与理论的改进。不过,如果交易者没有编程经验,这一步可能让人望而却步。毕竟,没人愿意在回报不确定的情况下花上数月甚至数年去学习。

因此,尽管市面上有许多服务可以帮助你打造一套成熟的交易机器人,这依旧是一项劳动强度很高的任务。结果往往是那些已经成功的交易者会考虑雇佣经验丰富的工程师来设计和开发自己的交易系统。也就是说,当有人有一个很棒的理论,却既没有时间也没有条件把想法程序化时,他们通常会请第三方开发者代劳。

这种做法的第一个缺点是:你需要把自己有利可图的点子分享给他人。这可能导致竞争者出现,按你的思路开始做交易。因此,你需要保护你的知识产权。签订专项合同或许有帮助,但也未必万无一失。无论如何,你绝对不该只凭开发者的口头承诺行事。有时看起来只分享一部分想法更稳妥,但这样开发出来的系统可能无法按你最初设想运转。因此,如果你决定雇佣程序员,最好由你亲自撰写详尽的技术规格(需求文档)。

第二个缺点是:无法确定你是否能收回研发成本。你投入大量资金将理论落地,但最终可能并不盈利

另一个重要问题是:到哪里为你的系统找到优秀的开发者?这里也有多条路径。聘请第三方公司看起来最合适,你的知识产权大概率也能保留在你这边——毕竟公司的声誉很重要。但要准备好,成本通常高于雇佣自由职业者。

我的做法(My Approach)

前面讨论的每种途径都有其位置,各自都有可能为交易者带来利润。在本书中,我将介绍我的方法,以及我是如何在不雇佣第三方开发者不使用专门软件等情况下构建一套交易平台的。

起初,我分析了当时开发交易机器人的现有路径,研究了当时在售的机器人,阅读了成功的算法交易从业者的博客等。结果我发现,几乎所有交易者都在寻找“超级盈利”的策略:月收益 1000% 、最大回撤 ≤1% 。当然,每位交易者对“极致盈利策略”的定义不同,但大多数人连看都不会看年化仅 3% 的策略。

我一开始并不认同这种思路。即便一个人非常聪明,也完全可能穷其一生都找不到这样的策略。我意识到,我自己找到“超高收益策略”的概率很低。于是我决定尝试分散化路线:如果我开发一批原理上彼此不同、指标较为温和的策略(比如月收益 0.5%–1% ),但在实盘中部署到数百个呢?这类策略很可能远多于“超高收益”的策略,而且更容易找到

最终,我选择完全独立开发,核心思想是自动化搜索大量收益温和但稳定的策略。当然,如果系统找到一个超级盈利策略,皆大欢喜;找不到也无妨。因此,我想打造一个任何开发者都能独立实现、并且几乎在任何时候都能产生额外收益的系统。没错,它可能赚不到“上百万美元”,但它稳定、持续,且运维成本低

这种思路的最大缺点是:实现起来极为耗时。事实上,这个过程永无止境——我总想改进点什么或添加新功能。不过这也是一个非常有创造力且有趣的过程,我建议所有人都可以尝试。

小结(Summary)

本章我简要讨论了交易系统的类型与构建方式,并分析了各自的优缺点:

  • 人工交易:最大优点是无需为创建交易系统投入劳动成本,同时能发挥人类的智慧与经验。缺点包括:情绪导致的不稳定性,以及开仓笔数相对较少
  • 基于成品信号的交易:优点是无需自建系统。主要缺点是你必须信任他人的经验,且可能不了解信号背后的决策逻辑。
  • 购买算法机器人进行交易:同样的优点是无需自建系统,你在用他人的系统。这也带来缺点:你往往在购买后才能真正了解系统能力;并且经常误解其内部逻辑。
  • 独立开发单一策略:因其简单与灵活而流行。你可以实现独特策略,但快速上线的代价是功能受限
  • 雇佣第三方开发者:可获得几乎任何你想要的系统(包括实现我提出的系统开发方法)。主要缺点:难以找到优秀开发者、需要共享你的想法、成本高
  • 独立开发完整交易系统:你(独立或与少量合伙人)实现的不是单一策略,而是一套完整系统,具备自动搜索、测试与执行策略的能力。显而易见的优点是策略实现高度灵活;最大的缺点是实现成本高、投入巨大。