[TOC]
摘要
量化交易作为科学与机器的结合的产物,正在改变着现代金融市场的格局。如今已经有不少投资者将目光转向了这一领域。如何最大限度地降低风险并尽可能取得理想收益?也是本系列课程的目的,作为开宗明义的第一篇,先就“什么是量化交易”进行简要阐述。
概述
很多小伙伴一听到“量化交易”就会觉得高端大气、一夜暴富。人工智能时代,伴随着深度学习、大数据、云计算等先进技术等兴起,更是赋予它神秘的色彩。似乎只要运用量化交易,就能构建出“完美无缺”的交易策略。
其实,在一定程度上,量化交易已经被神话了。撇开交易,“量化”其实就是借助计算机,并利用统计学、数学等方法,通过科学的投资体系,从中找到一套正期望的交易信号系统。这个信号系统会告诉我们应该在什么时间以什么价格进行买卖。
量化交易的发展
追本溯源,最早采用量化方法来分析数据变化,并从中发现市场价格涨跌规律的人,既不是股票的发源地荷兰人,也不是将现代金融发扬光大的英国人,更不是建国就与金融共生的美国人,而是一位法国人。
早在 18 世纪,法国股票经纪人助理 Jules Regnault 就提出了股票价格变化的现代理论,随后出版了《概率计算和股票交易哲学》一书,并在书中详细阐述了自己发现的市场涨跌规律(正态分布):“价格的偏差与时间的平方根成正比”,最后以理性量化的投资决策获取交易的成功。
现如今,在互联网+大数据+云计算+人工智能的时代大背景下,量化交易也得到了快速发展。曾经的全球金融腹地伦敦金丝雀码头,早已变成了 IT 公司集散地。世界顶尖投行,也都在培养自己的量化团队,试图跻身到“得模型者得天下”的金融大战之中,这些开发交易模型的 IT 团队也被称为 Quant Team。从规模上看,起步较早的美国已经拥有一大批实力雄厚的量化对冲基金。
反观国内,无论是硬件设备还是投研实力,都还在起步阶段。但已经有越来越多的机构和专业投资者意识到量化交易的好处,并参与到这一领域,特别是在监管逐步趋严、市场有效性逐步提升的过程中,量化交易更具有广阔的成长空间。
量化交易的特点
科学验证:试想,当你有一个交易系统后,如果用模拟盘去测试它的有效性,可能会付出巨大的时间成本,如果直接拿实盘测试,可能损失的是真金白银。但是可以利用量化交易中的回测功能,通过大量的历史数据,以科学的方式去检验交易系统。什么有效,什么没效,让数据去说话,而非人云亦云。
客观准确:在交易中,我们真正的敌人是自己,心态管理说起来容易,做起来难。贪婪、恐惧、侥幸等人性的弱点,在交易市场中会数倍放大,量化交易则可以帮助我们克服这些弱点,在交易中做出更好的决策。
及时高效:主观交易,人的反映速度是无法快过电脑的,并且人的体力和精力也无法24小时运行,在机会稍纵即逝的交易市场,量化交易完全可以代替主观交易,寻找交易机会,及时快速地跟踪市场变化。
风险控制:量化交易不仅可以从历史数据中挖掘在未来可能重复的历史规律,这些历史规律都是较大概率取胜的策略。还可以构建多种不同的投资组合,降低系统性风险,平滑资金曲线。
开盘突破策略
开盘半小时往往能决定一天的走势,该策略以开盘之后的半小时内,价格是阳线还是阴线,作为判断日内趋势走向的标准。如果是阳线就开仓买入,如果是阴线就开仓卖出,收盘前几分钟内平掉仓位。这是一个非常简单的交易策略。
唐奇安通道策略
图1-1唐奇安通道策略图解
唐奇安通道策略可以称得上是日内交易的鼻祖,其规则是:如果当前价格高于前 N 根 K 线最高价的最高价时就买入,如果当前价格低于前 N 根 K 线最低价的最低价是就卖出。著名的海龟交易法则用的就是修正版的唐奇安通道策略。
跨期套利策略
跨期套利是套利交易中最普遍的一种,根据同一个交易品种,不同交割月份合约的价格为基础,如果两者价格出现了较大的价差幅度,就可以同时买卖不同时期的期货合约,进行跨期套利。假设主力合约与次主力合约的价差长期维持在 -50~50 左右。如果某一天价差达到 70,我们预计价差会在未来某段时间回归到 50。那么就可以卖出主力合约,同时买入次主力合约,来做空这个价差。反之亦然。
总结
以上,我们从量化交易的定义、发展、特点以及经典的交易策略等方面,为大家简单介绍了关于量化交易的相关概念。
了解量化交易是成为宽客(Quant)道路上的一块重要的敲门砖。最后,祝大家在熊市里充实自己,早日实现认知变现!记住,你与财富自由只差一个牛市!
下节预告 量化交易与传统交易到底有哪些区别?在实战交易中,究竟选择传统交易还是量化交易?下节我们将带着这两个疑问,进一步了解量化交易。
课后习题
1、用一句话简述什么是量化交易? 2、量化交易有哪些特点?
很多人在探讨量化交易时会以复杂的策略编程为切入点,无意间为量化交易披上了一层神秘面纱。本节我们将尝试以通俗易懂的语言,为量化交易做一个简单“素描”,揭开他的神秘面纱,相信即便是毫无基础的小白也能轻松理解。
主观交易更重视人为的分析和盘感,即使出现了买卖信号,也会选择性的下单交易,宁可错过行情,也不愿做错。人的感觉是复杂多变的且不可靠的,大多数交易者一旦发生连续亏损,往往就转而用另一种方法。随机性较强,容易被盈亏困扰,导致难以稳定盈利。
量化交易通过对交易的理解,制定一致性的买卖策略。在交易中,对所有的走势都一视同仁,开仓平仓全部系统化处理,宁可做错,也不愿错过。它还具有完整的评价体系,通过历史数据回测,确定策略更适合哪一类的行情和品种,并搭配多种策略和品种实现盈利。
简而言之,主观交易是量化交易的基础,量化交易是主观交易的提炼。主观交易更像是练武,最后能成功与否,天赋占大多数,有十年不悟的,也有一朝悟道的。量化交易更像是健身,只要刻苦努力,就算没有天赋,也能练出一身肌肉。
一个成功的主观交易者,从某种意义上说,也是一个量化交易者。因为一个成功的主观交易者,必然有一套自己的规则和方法,也就是交易系统。成功的主观交易必须建立在交易纪律和交易规则之上,而交易规则的执行部分,实际上就是主观交易中的量化部分。
相反,一个成功的量化交易者,也一定是一个优秀的主观交易者,因为量化交易策略的开发,其实就是一个人交易理念的结晶。如果一个对市场的认知和理解,从一开始就是错误的,那么开发出来的交易策略,长期以来也是难以获利的。
所以,从盈利的角度讲,决定一个交易者最终能否成功,关键因素是交易理念,而不在于是主观交易还是量化交易。量化交易表面上看似高大上,其盈利的实质与主观交易没有本质的区别,它们就像是一件事物的两面性对立又统一。
但是不可否认,从交易工具上来说,量化交易确实有很多优势。
复盘更快:想要检验一个交易策略,就需要计算大量的历史数据,量化交易几分钟之内就能计算出结果。这个速度要比主观交易快许多倍。
更加科:评价一个策略是否优秀,依靠的是数据(比如:夏普比率、最大回撤率、年化收益),而不是自圆其说的神棍。
更多机会:全球有几千个交易品种,主观交易不可能同时盯盘,但是量化交易可以全市场实时盯盘,不错过任何交易机会,增加盈利能力。
当然能,但长期坚持下来确是一件很难的事。赚钱与否并不取决于量化交易本身,它只是一个工具,量化交易只是把交易思想用程序化、规则化、数量化实现出来,程序代替的只是执行力。难的是长期稳定的赚钱,因为市场是博弈的、动态变化的,交易思路也要跟着市场转变。
量化交易也有风险,为什么呢?因为量化交易是在历史数据中去挖掘规律,形成交易策略。但是金融市场是一个生态体系,其规律和人性是一个相互作用的动态过程,归根到底还是人的市场。市场的规律会被人性所影响,而人性中间的贪婪、恐惧都会随着市场的变化而变化,市场上很少有一成不变的规律,再厉害的交易策略也很难应对这种突如其来的规律变化。
通过上面的解释,我们可以看到,量化交易不是一种独特的交易方法,它只是一种交易工具,帮助我们分析交易逻辑,完善交易策略。无论你是价值派、技术派,无论做的是股票、债券、商品还是期权,其实都可以量化。相比于靠个人经验作决策的交易者,量化交易者手中的武器就是市场证据和理性。
量化仅仅是一种交易方式,策略只是交易思想的载体,程序执行的是每个交易过程。下节将带你了解量化交易完整的生命周期,它将包括:策略构思、建立模型、回测调优、仿真交易、实盘交易、策略监控等。
1、量化交易与主观交易最重要的区别是什么? 2、与主观交易相比量化交易有哪些优势?
一个完整的量化交易生命周期,不仅仅只是交易策略本身。它至少由六个环节构成,包括:策略构思、建立模型、回测调优、仿真交易、实盘交易、策略监控等。
首先,做量化交易必须先回到交易市场,要在市场中多观察价格,理解市场波动的规律,并尝试推断每一个交易逻辑,最后总结出交易策略。这里并没有捷径,你可能需要阅读经典的投资书籍,或者不断的坚持做交易,在失败中总结经验。
对于量化交易初学者来说,刚开始开发交易策略最好的方式就是模仿。直接利用现成的技术分析指标构建策略逻辑,写入买卖规则,这样就可以得到一个简单的策略了。假如你的交易策略是这样的:如果价格高于最近10天的平均价格就买入,如果价格低于最近10天的平均价格就卖出。那么它的架构是这样的(如下图): 图1-2交易策略举例
当然,随着策略经验的积累,形成自己的交易方式后,逻辑的选择会越来越多样化,再进阶到更加系统的量化交易。如果能做一个有量化思维的交易者,无论是在股票还是期货市场上,这都是一件值得庆幸的事,因为这样的人,不管在哪个交易市场都有持续稳定的获利能力。
其次,你需要掌握一个量化交易工具,用来编写交易策略,实现你的交易想法。市面上的常用软件都可以。但是如果你想成为一名高端的量化交易者,就需要学
会一门计算机语言,这里推荐大家使用 Python,因为它是科学计算的权威语言, 并且提供各种开源的分析包,文件处理,网络,数据库等。
如果你的编程能力较弱,相信这也是大多数初学者的软肋,推荐使用相对简单的可视化编程语言或麦语言,它可以提高学习量化交易的兴趣,并使你专注于策略,高效的完成策略开发。如下图:利用麦语言,开发一个上述的交易策略,双击图片可以看到策略代码中的详细注释。
图1-3交易策略开发页面
上图的策略代码,是利用发明者量化工具的麦语言演示,其集成很多可直接使用的功能模块,并且支持回测和实盘交易功能,是一个不错的快速入门方式。
然后,当编写完策略模型后,下一步就是对策略进行回测,以及参数的筛选和优化。可以利用不同的参数对策略进行回测,观察该策略的夏普比率、最大回撤、年化收益等。通过对策略的不断调试和修改,最终得到一个完善的量化交易策略。
比如,我们把2017年的历史数据作为样本内数据,2018年的历史数据作为样本外数据。先用2017年数据优化出几组表现好的参数,再用这些参数对2018年的
数据回测。一般情况下,样本外的回测结果没有样本内的回测结果好,但是如果样本外与样本内的结果大相径庭,那么这个策略几乎是无效的,就要观察分析,判断策略失效的原因。
假设,发现策略失效由于是样本外数据,某几次极端行情导致的大幅亏损,那么就可以增加一个固定止损条件来规避这种风险;如果发现策略失效是由于交易次数过多,那我们可以将交易逻辑稍微收紧,降低交易频率。
需要注意的是,如果一开始交易逻辑本身就是错误的,再怎么修改也很难得到一个赚钱的策略,这个时候就需要重新审视自己的策略思路了。另外,在参数优化中,可用的参数组越多越好,说明策略的适用性广泛。在回测时,交易次数太少的策略其回测结果可能是幸存者偏差。如果回测的结果是一个超级赚钱的资金曲 线,很多情况下是你的逻辑写错了。
接着,当你拿到一个交易逻辑正确,样本内外都赚钱的策略时,先不要急着在真实账户上交易。尤其对于初学者来说,一定要先用仿真账户运行至少3个月,如果是中低频隔夜策略,则需要更长的仿真交易时间。
在未来一段完全未知的仿真行情中,观察策略在仿真交易中表现,仔细核对回测信号与仿真交易信号是否吻合,下单时的价格与成交时的价格是否有偏差,如果表现与预期相符合,那么说明策略有效。
终于,通过一段漫长的时间检验策略之后,就可以将策略放入实战中进行交易了。当然在量化交易的过程中我们也要保持警惕,防范极端行情。在实盘中,策略的期望一般都要打折扣的,达到预期的50%就是合格。
最后,需要提醒大家的是,随着交易进行,我们也要观察策略的有效性,当发现策略出现超出预期的亏损时,就要重新评价这个策略。因为市场特征是会变化的,我们当下形成的策略主要是针对过去的市场特征。一旦市场特征发生变化就要对策略模型及时调整,或者暂时中止这个策略。
本篇我们阐述了量化交易的完整流程。总而言之,如果你是有市场经验的投资者,阻拦你的将会是计算机语言基础,可以先从可视化语言或麦语言开始,通过在这一平台上锻炼自己,构建策略,然后逐步转向 Python 高端量化交易。
如果你是编程能力较强的理工科学生或者IT从业者,阻拦你的将会是市场投资经验,也千万不要小看这一点,作为合格的量化投资者,两类知识缺一不可。
整个量化交易生命周期中,最核心的还是交易策略。下节我们将从交易策略架构的角度,详细阐述一个完整的交易策略要素有哪些?这将帮助你更加全面的搭建你的交易策略,将量化交易提升到一个新的水平!
1、试着用麦语言编写本节中的交易策略。 2、量化交易回测中最重要的绩效指标是什么?
一个完整的策略,其实就是交易者给自己定的各种规则,它包括了交易的各个方面,并且不给交易者留下一点主观想象的余地,每个买卖决定,策略都会给出答案。它至少包含策略选择、品种选择、资金管理、下单交易、极端行情应对、交易心态等等。
从对冲基金的角度讲,主流的交易策略可以分为趋势交易、配对交易、一篮子交易、事件驱动、高频交易、期权策略等等,如下图。当然,策略的分类方式不是固定的。 图1-4交易策略分类
对于刚入门的量化交易初学者来说,先不必管这么多名词概念,一步一步从最简单的开始。如果只推荐一种量化交易策略入门,那就是趋势交易,其原因是简单有效。相信即使你没有系统的学习金融知识,一样可以做好交易。并且这种策略由来已久,在早期公开的交易策略中,至今仍在多个市场中有效,因为人性是很难改变的。
做过交易的人应该知道,每个品种都有各自的性格。有些品种性格很“火爆”,流动性好、波动大、波动率高;有些品种性格很“温顺”,常年都在一定区间内震荡,波动率低。
所以,在选择交易品种的时候,一定要有波动率这个概念,波动率高的品种,往往很容易走出一波不错的趋势行情。对于商品期货来说,如果是趋势跟踪策略,尽量选择工业品,从品种属性上来讲,工业品往往比农产品波动率要大。
不同的策略适应不同的行情,选择好交易品种,对期货交易这项大工程来说是一个非常关键的开始。从绝对意义上来说,没有绝对好的品种也没有绝对不好的品种。根据投资风格的不同,以及风险承受力的不同,需要针对自己的标准进行相应的调整。
交易赔钱容易赚钱难,当账户资金亏损50%,挽回损失则需要100%的盈利。就算你可以赚很多次100%,但只需要赔一次100%就全部亏光。所以成熟的交易策略应该包含资金管理。
为了便于大家理解,这里还使用上节的均线策略讲解。事实上,很多以传统技术指标构建的交易策略,最大回撤率一般超过50%甚至更多。但一个风险很大的策略完全不能用吗?
显然不是,最大回撤率完全可以通过资金管理控制。如果把仓位降低一半,那么整体风险也会降低一半,最大回撤率变成30%,如果把仓位再降低一半,最大回撤率就变成15%,最后我们得到的是一个最大回撤率控制在15%左右的策略。这就是一个简单粗暴的资金管理方法。很多人知道不能满仓操作,但是却不知道为什么不能满仓操作,答案就在这里。
一个好的买点,是成功的一半,它能够让你迅速摆脱成本区。但是永远不会有什么人能告诉你在这个点开始是对的,在那个点开始是错的。开仓不是交易的核心,交易的核心是开仓之后,如何尽可能优化处理持仓。
不管是短线策略,还是长线策略,比的不是看谁持仓时间长,而是风险收益比。换言之,影响策略绩效的最终结果是如何出场,何时兑现利润。出场方法又可以分为两种:止损出场和止盈出场。而这两个部分都是任何交易系统所必需的,也是关乎于交易策略成败的重要分水岭。
1、委托下单类型和方式: 委托下单的类型和方式有许多种,比如:委托时用排队限价单、对手价、最新价、超价、涨停价、跌停价、买一价、买二价、卖一价、卖二价,或者先用排队价,再用超价,分批报单,或者把大单拆成一个个小单,或者干脆直接把单子全部报出去。
2、撤单 如果下单没有成交,是继续等待还是撤单,撤单条件依据是时间,比如10秒内还没有成交,价格已经远离下单时价格10跳,是继续等待、撤单还是追单。
3、追单 当下单没成交的时候,是否追单。如果追单,是按最新价去追,还是对手价,还是涨跌停价,如果追单仍未成交是否继续追单。
4、涨跌停价 当下单信号出现时,刚好是涨跌停价格时怎么办。是否在涨跌停价挂单排队成交,如果没有成交时怎么办。
5、集合竞价 开盘集合竞价要不要参与,怎么参与。
6、夜盘 有些商品期货品种夜盘是从21:00至次日02:30,这段时间做不做,人工做还是让电脑来做。
7、重大节日 重大节日的超长假期之前,仓位需不需要保留。如果保留的话如何控制风险。
1、短时间价格大幅波动 价格瞬间涨跌停、连续涨跌停、乌龙指事件、黑天鹅行情价格踩踏事件等等,这些情况如何处理。
2、流动性风险 如果一档对手盘没有你要的下单量,但你又需要及时成交,特别是非主力合约流动性很差,自己下的单子很容易对市场造成冲击,滑点很大时,如何应对。
3、品种规则变化 商品期货品种加入夜盘,保证金比例上调,手续费上调,特别是短线策略,对于这些变化会非常敏感。
4、交易环境风险 比如:突然断电、断网、电脑故障、软件宕机、银期转账暂停、自然灾害等,出现时如何应对。
以上情况,出现的概率很小,或者说几乎不可能。但如果事情可能发生,就一定能发生。做好这些假设,并加以防范是非常有必要的。
交易中常见的三种主要心理情绪为贪婪、恐惧和侥幸。投资者需要一个强大的交易心理体系在不同阶段对上述三种情绪加以控制甚至利用。
交易之前要有一个对未来的整体预期,包括市场预期和品种心理预期。市场预期指对市场所处的位置和未来的方向有一个较为明确的目标,品种预期是指该品种在当前位置下的交易机会和风险状况。如果没有以上心理基础,则一切都无从谈起。
实盘交易的全过程就是不断分析、修正和执行的过程,其间交易的时间不多,更多的是跟踪和忍耐。这是一个综合考察心态、考验人性的过程,交易者的各种习性在交易过程中都会被展现无遗和放大。只有不断学习和总结经验教训,不断历练,才能克服人性的思维共性和心理弱点。
综上所述,所谓的交易策略,其实就是这样,有它完美的一面,也有它残缺的时候,我们衡量一个交易策略是否合理,并不能只看他完美的一面,也不能只看他残缺的一面,更应该综合的分析策略的完整性。
最后根据策略的特性,结合自身的性格和资金情况一起去衡量该策略是否适合自己,如果适合自己的话,要充分评估自己坚持下去的可能性有多大,最坏的结果要事先规划好,如果最惨的一面你都想好了,那么执行下去的可能性就相对较大。
记住,在交易中,信心源自于你发自内心的认可,信心源自于正确的交易理念!
本篇是第一章的最后一篇,下一章节我们将围绕量化交易工具,为大家展开进一步讲解,包括:量化工具整体介绍、如何配置量化交易系统、常见的 API 讲解、如何在量化系统上编写策略。
1、趋势型交易策略应该选择高波动率的品种还是低波动率的品种? 2、交易委托单的几种类型?
在前一章中,我们学习了关于量化交易的相关概念,对量化交易有了基本的了解。那么市面上都有哪些可以量化交易的工具呢?我们又该如何根据自己的需求选择呢?
开源软件和商业软件 国内量化交易工具大体上可以分为开源软件和商业软件两大类。所谓的开源软件可以理解为软件的源代码是开放的,可以直接下载源代码使用;商业软件一般泛指由商业公司维护运营的闭源软件,通常都是付费的。
首先开源软件有很强大的灵活性,是完全免费的,用户基本上可以运用这个软件去实现任何功能,无论是中低频交易策略、套利策略还是期权策略,都可以通过定制化模块来实现,由于用户掌控这软件的源代码,可以了解软件里面的每一个角落,所以更为可靠安全。
尽管开源软件有很多优点,但它对量化交易初学者不是很友好,你需要系统性学习一门标准的编程语言,比如Python、Java或者C++。从入门到放弃,其难度可想而知,有时候调bug能调到你怀疑人生。而且不像商业软件,有专门的技术客服即时答疑解惑。这时候不但没有成就感,还会打消你继续学习下去的动力。
所以,从学习的角度讲,推荐量化交易初学者一步一步,从最简单的商业软件开始,尽管它是付费的,但如果策略是盈利的,软件费用仅仅是利润的零头,再者,商业软件一般是一个团队在维护,其成熟度肯定比开源软件强很多。
国内可以做量化交易的商业软件多达几十种,比如:既专业又全面产品又多的Interactive Broker、能处理海量并发数据,适合高频交易的APAMA、支持C++的接口,执行效率不错的SPT盛立、侧重在交易执行和风控的掘金量化以及面向个人交易者的MC、TB、MQ。下图中我们把国内主流的量化平台进行了综合评测,对于量化工具的难易程度也做了一定的分类,读者可以根据自己的实际情况选择。 图2-1国内主流的量化平台综合评测
以上虽然是商业软件,但其所用的也是标准编程语言或脚本语言,与其这样还不如直接使用既免费又安全的开源软件。新手这里推荐直接使用FMZ发明者量化平台,网站是www.fmz.com。作为量化交易学习的敲门砖。
发明者量化工具对小白友好,即便你是零基础,也可以根据里面的工具体验量化的魅力。该工具是面向高频交易设计,在性能和安全上有严苛的要求。支持高频策略、套利策略、趋势策略。并且它集成了策略开发、测试、优化、模拟、实盘交易的完整流程。另外它既支持简单又好用的麦语言,也支持Python、C++等高级量化交易语言,等于一次学习无缝切换。并且只有实盘交易才收费0.125元/小时,降低你学习摸索阶段软件成本,同时可以免费模拟做仿真交易。
量化工具使用非常简单,只需要进入网站点开即可设计自己的量化策略。大家可以登陆发明者量化工具的官方网站,注册并登陆,点击控制中心即可使用(如下图),类似于目前比较火的抖音,注册登录后就可以发布自己的小视频,而量化工具登录后是设计自己的量化交易策略。
图2-2 FMZ量化交易平台主页面
量化工具编程会有一个集中的功能区,功能区主要包括(如下图)左上角的控制中心是该量化工具的核心功能,点击之后,就可以编写交易策略和策略回测、设置交易品种的交易所、创建管理策略机器人的托管者、创建具体的量化交易机器人。至于里面的功能具体用法,我们会在后续的文章中详细介绍,当前我们只做初步。
图2-3 FMZ量化交易平台登陆后管理页面
首次接触量化的朋友,不用为自己不懂代码和编程而望而却步。为了降低用户的使用门槛,官方社区出品了许多视频教程,帮助量化交易初学者快速入门;同时,在策略广场中聚合了上千个官方和第三方免费开放的交易策略,方便大家复制学习。
另外,在策略编辑界面,还配置了经典的策略样例,点击就能直接使用策略代码,轻松体验整个量化交易的核心流程,即使是小白用户也能立刻学会,并跟着做起来!
在真金白银实盘之前,仿真交易也是必不可少的环节,该工具的仿真交易符合交易所规则,并且完全免费,仿真包括的时间、价格、订单量等与真实行情实时撮合,高度吻合实盘交易。大大提高策略验证效率。
无论是开源软件还是商业软件,并没有优劣之分,也没有完美的量化交易工具,每个工具都有自己的侧重点,最重要的根据自己的需求选择适合自己的工具。商业软件需要付费,它在服务等等方面更好一些,可能更适合刚入这个行业的初学者。如果你在这个行业做了很长时间,积累了很多经验,或者需要实现更复杂的交易策略,开源软件是个更好的选择。
有了工具怎么用?和我们买了一台新手机,第一次开机需要做简单开机设置一样,量化工具也需要做基础的设置配置,下节我们将带你手把手配置发明者量化交易工具。开启量化交易第一扇门,包括:添加交易所、添加托管者、创建交易策略、创建量化机器人等等。完成了基础配置,就可以正式编写第一条属于自己的量化策略了。
1、量化交易工具分为哪两大类? 2、常用的量化编程语言都有哪些?
对于量化交易策略开发来说,首先要做的是交易工具的配置,何为配置?其实就是设置。本节我们将带你设置交易所、创建交易策略以及创建量化交易机器人,这些都是量化交易的必要前提。
配置方面分为入门学习模拟仿真交易配和实盘交易配置,这类我们主要以国内商品期货为主,其他类别的量化投资因为国内具体情况而不做推荐和介绍,但操作流程是一样的,只是配置流程不同而已。
添加交易所是整个配置环节的第一步,具体流程请看下图介绍。在这个步骤中,我们需要强调一点,添加交易所并不难,对于不清楚自己所属交易所的同学。建议先模拟学习。 图2-4 FMZ量化交易平台注册添加交易所步骤
实盘的量化交易我们主要以国内期货交易品种为主,目前发明者量化的主要服务对象也是国内期货交易所,对于做外汇的朋友,发明者量化可以作为一个学习的平台,因为外汇量化交易在mt5等平台已有出现,只是更为专业。
实盘配置需要注意的问题如下:由于发明者量化工具支持多种交易市场,所以配置商品期货,一定要先在第①步中选择“传统期货”;在第②步中,需要填写的是你所开户的期货公司,给你的期货账户和密码。
发明者量化工具,采用CTP协议,支持国内所有的期货公司,配置实盘的时候,不会出现链接不成功,除非是账号和密码错了,因此初学者要注意账号和密码要核对清楚。 图2-5 FMZ量化交易平台添加期货交易所
对于刚接触商品期货的朋友,我建议还是先仿真交易一段时间,因为在开发量化交易策略过程中,需要不断的检测、调试、优化。就像开车一样,刚开始肯定是在驾校摸索几个月,考核出证后,再上路。
这里推荐用SimNow仿真交易,SimNow是上期技术专为投资者打造的金融模拟仿真交易平台,该产品仿真各家交易所的交易及结算规则研发,目前已经支持国内各家期货交易所的商品期货业务,具体流程请看下图介绍。 图2-6 FMZ量化交易平台登陆后管理页面
策略库就是存放代码的地方,它相当于我们的量化交易策略仓库。主要分为两个功能:策略编写和模拟回测。策略编写区是我们日后开发策略主要的工作区域(如下图),很多初学者往往被各种代码给拦住,觉得非常的困难,其实只要稍微用点心,就能学会这些代码,千万不要有心理负担。模拟回测区则可以在开发策略过程中调试策略,以及策略开发完毕后检验策略,这个我们将放到之后的章节为大家详细讲解。 图2-7 创建策略步骤
量化交易机器人就是交易策略的执行者,当策略创建完毕之后,创建一个机器人,它就可以自动帮你执行策略代码中的每一个交易逻辑,以及开仓、平仓、撤单等买卖操作。创建量化交易机器人具体步骤如下:首先第①步:在控制中心页面,点击“机器人”,点击“创建机器人”第②步:给机器人自定义一个名字。第③步:点击“+”号,添加交易平台。第④步:点击“创建机器人” 图2-8 创建机器人步骤
以上流程中,除了第一步选择实盘和模拟各有不同之外,后面的步骤策略编写和创建交易机器人都是统一的步骤。整个量化工具配置完毕,交易机器人也已经运行起来了,并且会根据策略的具体条件进行买卖操作。配置量化交易总共就三步:添加交易所,填上自己的期货账户密码;编写一个交易策略;创建一个实盘量化交易机器人。是不是很简单呢?
尽管只需要简单的三步就能实现量化交易,但细心的你可能会发现,添加交易所和创建量化交易机器人尚且容易。但是,如果是要实现一个可行的交易策略,就不是那么容易了。下节我们将带大家学习量化交易中常用的API,为编写一个可行的交易策略做准备。因为无论是哪种量化交易工具,一定离不开API接口,它是实现量化交易策略的重要功能。
1、试着添加一个交易所。 2、试着编写本节中的交易策略。
提到编程,就一定离不开API,对于很多非IT人士而言,API到底是什么?API ≈ 听不懂。本节我们将用大白话科普,到底什么是API,以及介绍发明者量化工具中常用的API。
如果你在网上搜索,会得到如下结果:API(Application Programming Interface,应用程序编程接口)是一些预先定义的函数,目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力,而又无需访问源码,或理解内部工作机制的细节。那么再通俗一点来说,API究竟是什么呢?
其实日常生活中,我们有很多类似API的场景,比如:你去一家饭店吃饭,只需要看着菜单点餐就行了,不需要知道具体是怎么做出来的。而菜单中的菜名就是具体的API,菜单就是API文档。
假如你需要获取当前品种今天的开盘价是多少,不需要知道具体是怎么获取到的。你只需要在代码编辑器中写入“OPEN”,直接使用就行了,“OPEN”就是麦语言中开盘价的API。
在讲解麦语言API之前,我们先来看下常用的代码结构是怎样的,以及它都有哪些功能组成,这将帮助你更好的理解API,请看下图示例: 图2-9 麦语言例子
如上图所示的代码: 紫色的AA是变量,变量就是可以变的量,就跟我们初中学的代数是一样的。如果把开盘价赋值给AA,那么AA就是开盘价;如果把最高价赋值给AA,那么AA就是最高价。当然AA只是自定义的名字,你也可以定义为BB。
绿色的“:=”是赋值的意思,也就是将“:=”右边的数值给左边的变量。
橘色的代码就是发明者量化工具的麦语言API,注意看第一行中的OPEN是获取收盘价的API,直接使用就可以了;第二行中的MA是获取均线的API,它需要传入2个参数,也就是说你需要告诉发明者量化工具,你需要什么样的均线:如果你希望获取以开盘价计算的50周期均线,那么可以写为:MA(OPEN,50);注意两个参数之间有个英文逗号。
黄色的“//”是注释符,其后面的蓝色中文就是注释内容,这些都是自己看的,用来提示该行代码是什么意思。程序运行时不对注释做任何处理。注意注释符前面,每行代码都要有一个英文分号,作为该行的结尾。
有了基础的代码结构认知后,我们下面就给大家带来一些常用的麦语言,以后我们也会常用这些语言。 OPEN——获取最新K线的开盘价 例:AA:=OPEN; 获取最新K线的开盘价,并把结果赋值给AA
HIGH——获取最新K线的最高价 例:AA:=HIGH; 获取最新K线的最高价,并把结果赋值给AA
LOW——获取最新K线的最低价 例:AA:=LOW; 获取最新K线的最低价,并把结果赋值给AA
CLOSE——获取最新K线的收盘价,当盘中k线没有走完的时候,取得最新价 例:AA:=CLOSE; 获取最新K线的收盘价,并把结果赋值给AA
VOL——获取最新K线的成交量 例:AA:=VOL; 获取最新K线的成交量,并把结果赋值给AA
REF(X,N)——引用X在N个周期前的值。 例:REF(CLOSE,1); 获取上根K线的开盘价
MA(X,N)——求X在N个周期内的简单移动平均 例:MA(CLOSE,10); //获取最新K线的10周期均线
CROSSUP(A,B)——表示当A从下方向上穿过B,成立返回1(Yes),否则返回0(No) 例:CROSSUP(CLOSE,MA(C,10)) //收盘价上穿10周期均价
CROSSDOWN(A,B)——表示当A从上方向下穿B,成立返回1(Yes),否则返回0(No) 例:CROSSDOWN(CLOSE,MA(C,10)) //收盘价下穿10周期均价
BK——买入开仓 例:CLOSE>MA(CLOSE,5),BK; //收盘价大于5周期均线,买入开仓
SP——卖出平仓 例:CLOSE<MA(CLOSE,5),SP; //收盘价小于5周期均线,卖出平仓
SK——卖出开仓 例:CLOSE<MA(CLOSE,5),SK; //收盘价小于5周期均线,卖出开仓
BP——买入平仓 例:CLOSE>MA(CLOSE,5),BP; //收盘价大于5周期均线,买入平仓
BPK——买入平仓,并买入开仓(反手做多) 例:CLOSE>MA(CLOSE,5),BPK; //收盘价大于5周期均线,平掉空仓,再买开仓。
SPK——卖出平仓,并卖出开仓(反手做空) 例:CLOSE<MA(CLOSE,5),SPK; //收盘价小于5周期均线,平掉多仓,再卖开仓。
CLOSEOUT——平掉所有持仓,建议在加减仓模型中使用。例:CLOSEOUT; 平掉所有方向的仓位。
在讲解JavaScript语言API之前,我们先来看下常用的代码结构是怎样的,以及它都有哪些功能组成,这将帮助你更好的理解API,请看下图示例: 图2-10 JavaScript代码例子
如上图所示的代码: 在JavaScript语言中创建变量通常称为“声明”变量。红色代码,我们使用var关键词来声明变量,变量名是橘色代码:“aa”。
在JavaScript语言中,用等号赋值,也就是将“=”右边的数值给左边的变量。 青色代码“exchange”是交易所对象,这里的交易所指的就是你所设置的期货公司,这是一个固定的格式,也就是你在调用JavaScript语言的API时,必须指定交易所对象。
绿色代码就是JavaScript语言的API了,当我们调用它的时候,其实是调用交易所对象中的函数。注意蓝色代码后面的点,也是一个固定格式。这里的函数与我们中学时学的函数是一个意思。如果该函数不需要指定参数,就以空括号表示;如果该函数必须传入参数,就把参数写到括号里面。
通过案例,清楚代码的基本结构原理后,下面我们展示几个大家日后会常用到的的JavaScript语言API SetContractType(“品种代码”)——设置合约类型,也就是你要交易哪个品种 例:exchange.SetContractType(“rb1905”); //设置交易的品种为“螺纹钢1905合约”
GetTicker——获取Tick数据 例:exchange.GetTicker(); //获取Tick数据
GetRecords——获取K线数据 例:exchange.GetRecords(); //获取K线数据
Buy——买入 例:exchange.Buy(5000, 1); //以5000元的价格买一手
Sell——买入 例:exchange.Sell(5000, 1); //以5000元的价格卖一手
GetAccount——获取账户信息 例:exchange.GetAccount(); //获取账户信息
GetPosition——获取持仓信息 例:exchange.GetPosition(); //获取持仓信息
SetDirection——设置做多做空下单类型 例: exchange.SetDirection(“buy”); //设置下单类型为买入开多仓 exchange.SetDirection(“closebuy”); //设置下单类型为卖出平多仓 exchange.SetDirection(“sell”); //设置下单类型为卖出开空仓 exchange.SetDirection(“closesell”); //设置下单类型为买入平空仓
Log——在日志中输出一条信息 例:Log(“hello, worle”); //在日志中输出”hello world”
Sleep——使程序暂停一段时间 例:Sleep(1000); //使程序暂停1秒
可能有些小伙伴会有疑问,上面这么多API,怎么记住呢?其实这些都不用你死记硬背,发明者量化官方有一套详尽的API文档。就像查字典一样,当你用的时候,需要什么直接查就行了。不必被代码等初次认识的内容吓住,我们要的是通过这些语言去组织自己的策略,请大家记住,技术永远不是量化的门槛,是否拥有好的策略才是你能否在量化市场走的长远的关键。
以上就是在量化交易中最常用到的API了,基本上包括了:获取数据、计算数据、下单买卖,足以应付一个简单的量化交易策略,当然如果想要编写一个更复杂的策略,就需要去发明者量化工具官网去获取了。
1、试着写一个麦语言5周期均线上穿10周期均线语句。 2、试着用JavaScript语言的GetAccount获取你的账户信息,并用Log打印到日志。
编程就像是组装乐高积木,API就像积木的各个零件,而编程的过程就是把各个乐高零件组成一个完整的玩具。下节我将带领大家用麦语言API,组装一个完整的量化交易策略。
经过前面几节的学习,现在终于可以上手编写量化交易策略了。这将是你从手工交易踏入量化交易最重要的一步。其实也没有那么神秘,编写策略无非是把你的想法用代码变现出来。本节将从零开始实现一个量化交易策略,带大家熟悉如何在发明者量化系统上编写策略。
首先打开发明者量化工具的官网,依次点击“策略库”、“新建策略”,需要注意的是在开始编写代码之前,需要在编程语言下拉菜单中,选择麦语言或者JavaScript语言,当然该平台也支持Python、C++以及可视化语言。
在之前的章节,曾经介绍过一个价格突破均线的策略。即:如果价格高于最近10天的平均价格就买入,如果价格低于最近10天的平均价格就卖出。但是价格虽然能直观的反映出市场状态,却会有很多假突破信号;所以我们要对这个策略升级改进。
首先,选择一个较大周期均线,来判断趋势走向,这至少已经过滤将近一半假突破信号,大周期均线虽然迟钝,但是会更加稳定;然后,为了再次提高入场的成功率,再增加一个条件,这条大周期均线至少是向上的;最后使用价格、短期均线、长期均线的相对位置关系形成一个完整的交易策略。
有了以上策略想法和思路,我们就可以试着构建策略逻辑了。这里的逻辑并不是让你计算天体运行规律,它没有那么复杂。无非就是把之前的策略想法,用文字表现出来。
多头开仓:如果当前没有仓位,并且收盘价大于短期均线,并且收盘价大于长期均线,并且短期均线大于长期均线,并且长期均线是上升的。
空头开仓:如果当前没有仓位,并且收盘价小于短期均线,并且收盘价小于长期均线,并且短期均线小于长期均线,并且长期均线是下降的。
多头平仓:如果当前持有多单,并且收盘价小于长期均线,或者短期均线小于长期均线,或者长期均线是下降的。
空头平仓:如果当前持有空单,并且收盘价大于长期均线,或者短期均线大于长期均线,或者长期均线是上升的。
以上就是整个量化交易策略的逻辑部分,那么如果我们把文字版的策略逻辑转换成代码,它将包括:获取行情、计算指标、下单买卖,这三个步骤。
首先是获取行情,在这个量化交易策略中,我们只需要获取收盘价就行了,那么在麦语言中,获取收盘价的API就是:CLOSE,也就是说你只需要带代码中,写下CLOSE就已经获取到了最新一根K线的收盘价。
然后是计算指标,在这个量化交易策略中,我们一共用到了2个技术,即:短期均线和长期均线,我们假设短期均线为10周期均线,长期均线为50周期均线,那么怎么用代码表示10周期均线和50周期均线呢?请看下图: 图2-11 麦语言策略代码
在手工交易中,我们能一眼看出50周期均线是上升的还是下降的,但是我们怎么用代码表示?仔细想想,判断均线上升不就是,当前K线的50周期均线数值比上根K线的50周期均线值大,并且上根K线的50周期均线数值比上上根K线的50周期均线值大吗?反之就是判断均线下降。那么用代码表示,它应该是这样的: 图2-12 麦语言判断均线代码
注意上图第8行和第9行,玫红色的代码“AND”,在麦语言中它代表“并且”的意思。比如:第9行翻译成中文就是:如果当前K线的50周期均线大于上根K线的50周期均线,并且上根K线的50周期均线大于上上根K线的50周期均线,那么就把值计算为“是”;否则就把值计算为“否”,并把结果赋值给“MA50_ISUP”。
最后一步就是下单买卖了,只需要在买卖逻辑代码的后面,调用发明者量化工具的下单API就可以执行买卖操作。请看下图: 图2-13 麦语言买卖交易代码
注意上图第13行和第14行,玫红色的代码“OR”,在麦语言中它代表“或者”的意思。比如:第13行翻译成中文就是:如果当前K线的收盘价小于当前K线的50周期均线,或者当前K线的10周期均线小于当前K线50周期均线,就把值计算为“是”,并立即下单;否则计算为“否”,并什么都不做。
大家注意:“AND”和“OR”是 麦语言中的逻辑运算符: “AND”是所有条件都为“是”的时候,最终条件才为“是”; “OR”是所有条件中,只要有任何一个条件为“是”,最终条件就为“是”。
以上就是在发明者量化工具上用麦语言编写交易策略的整个过程,总共也就三步:从有一个策略想法,到策略构思并用文字把逻辑描述出来,最后用代码实现完整的交易策略。尽管这是一个简单的策略,但是具体的实现流程与复杂的策略大同小异,只是策略的算法和数据结构各有不同。因此只要理解掌握本节的量化策略流程后就可以针对所需的在发明者量化工具上用麦语言开展量化策略研究和实践。
1、自己试着实现本节中的策略。 2、在本节策略基础上,加入止盈止损功能。
在量化交易策略开发中,编程语言就像武器装备,一门好的编程语言能使你事半功倍。比如在量化交易界最常用的Python、C++、Java、C#、EasyLanguage、麦语言等等多达十几种。究竟该选择哪种武器上战场呢?下节我们就来介绍这些常见的编程语言,以及每个编程语言自身的特点。
在第一章和第二章中,我们学习了量化交易基础知识和发明者量化工具的使用方法,本章我们就来具体实现交易策略。工欲善其事,必先利其器。要实现交易策略,必须先掌握一门编程语言。这一节先来介绍在量化交易中主流的编程语言,以及每个编程语言自身的特点。
学习编程语言之前,首先要搞清楚“编程语言”这个概念。编程语言就是人和计算机都能看懂的语言,它是一种被标准化的交流代码,编程语言的目的是使用人类语言去控制计算机,告诉计算机我们要做的事情。计算机可以根据编程语言执行指令,我们也可以编写代码,向计算机发出指令。
就像小时候父母教我们开口说话,也教我们如何理解别
Hailhydra2 好文章啊!
悟空量化 mark