近期由于程序化交易而持续获取收益的交易者的增加,投资者对于程序化交易的关注度也逐渐升温。但是对于程序化交易的认识还仅仅是停留在"用计算机交易"或者是"专业交易者使用的交易方法"的层面上。为了进一步了解程序化交易,首先提出一个问题"程序化交易!你是谁?"
如果让程序化交易来回答上述问题的话,答案应该是"根据既定的交易规则,机械交易"如此简单而已。稍微再扩展上述答案的话,应该可以解释为"为了进行交易而设置入市和离市等一整套的规则,根据既定的交易规则机械交易的方法"。如果单从这一层面上看,程序化交易和规则交易相同。但是我们把规则交易叫做程序化交易的原因是利用计算机等工具来制定一系列的交易策略,在交易策略实施的过程当中也保持一致性、规则性的进行交易。
比如股价和移动平均线出现金叉则买入出现死叉则卖出的方法当中,用计算机语言编辑上述策略以后利用过去的数据进行回归测试,测试是否可以获取收益。如果测试结果显示是可以获取收益的交易策略的话,按照计算机里编程的交易策略的入市和离市信号进行交易即可。
为了开发程序化交易策略,需要使用技术分析法。当然并不是说完全不能使用基本面分析法,只是基本面分析法是把分析的焦点对准个股的股价是否被高估或者低估的判断上,因此对于具体的入市和离市的时间点上很难交代清楚。另外,基本面分析法对于像衍生品市场等不适用基本面分析法的市场却束手无策。因此程序化交易是根据价格、交易量等信息来捕捉交易时间点的技术分析法为基础而发展起来的。同时,程序化交易所使用的数据是能够测量到具体数量的数据。在人为的交易当中个股的新闻和其他信息也可以成为是否交易的判断标准并且其价值在不同的交易者身上表现不同,因此不是能够客观的测量到数量的数据。在程序化交易过程中,为了要发出一贯性和客观 性的信号,只能使用可以准确测量数量的数据。
开发程序化交易策略始于交易构思。首先大致勾勒出交易构想,然后对于构想进行细分比如何时入市、何时离市等。截止决定入市和离市规则的过程和一般的规则交易一样。只不过程序化交易还包括把入市和离市的规则用计算机语言编辑出来并且对于已制定的交易策略进行多种多样的测试,从而判断是否可以获取收益的过程。利用经过上述过程而制定出来的交易策略进行一贯性、反复交易的过程我们称之为程序化交易,通过程序化交易进行交易的人我们称之为程序化交易员。
程序化交易准备事项
当我们接触到程序化交易,对于陌生的词汇以及是否要学习开发交易系统所需的各种各样的程序、英语、计算机语言等一筹莫展。并且针对系统语言和性能报告里的统计资料,都会显得无从下手。对于程序化交易大多数人都认为是综合了技术分析法、统计、数学、电脑编程、英语等的艺术,但是实际上我们不需要成为上述所有领域里的专家。程序化交易之所以觉得复杂而又难是因为我们没有接触过。那么,怎样开始接触程序化交易并为此我们需要做什么?
第一,需要掌握技术分析法的相关知识。
程序化交易以技术分析法为基础。技术分析法包括趋势分析、支撑阻力线分析、技术指标分析、波动分析等。其中为了程序化交易需要重点掌握技术指标分析法。多种多样的技术分析指标可以为开发交易策略提供构想并在决定入市和离市时间点上也会提供帮助。如果只利用价格开发交易策略的话,因表现力不足很难再继续制定新的交易策略。相反,如果充分利用价格波动的技术分析指标的话,将更加容易地开发出新的交易策略。
在利用技术分析指标方面,尤为重要的是不能因为是经常使用的指标而忽略它。无论是图标分析师还是程序化交易员,大多数交易员都认为现在广为使用的技术分析指标不准确。那么现在广为使用的技术分析指标对于交易真的是无用之物吗?如果先说出结论的话,是广为使用的指标对于交易是最有用的。长时间一直被使用的指标可以认为是得到交易员的广泛认可的,也反映是最为有用的。因为所有人都使用所以没有太大的用处,这样的想法只是看到了技术分析指标的片面性而已。即使是分析图标的众多的交易员当中,能够准确的说出技术分析指标的计算公式的又有几个人呢?估计只有极少数的交易员能够准确的说出计算公式。
每个技术分析指标都具有固有的特点。现阶段我们知道的指标就多达数百个。因此在众多的指标里先分析哪些指标就是一个非常头疼的问题。但是技术分析指标大致可以分为几种类型,其中我们只要重点掌握经常使用的移动平均线、MACD、RSI、随机指标、DMI、ADX 等几种指标的话,其他的指标也可以迅速的掌握。只要先着重掌握经常使用的技术分析指标,然后可以逐渐向新的指标领域扩张。学习技术分析指标的过程中最为重要的不是背诵计算公式,而是理解指标的构成原理和背景。通过上述方法掌握的技术分析指标相关内容,会成为开发交易策略的原动力。
第二,需要掌握编程能力。
程序化交易是利用计算机把所有的交易用系统化的规则自动处理的过程,因此需要把自己勾勒出来的交易策略进行编程。这是把交易策略转换为计算机能够理解的语言的过程,因此需要掌握计算机编程能力。利用计算机语言编程交易策略的过程对于刚刚接触到程序化交易的人来说是最为困难的事情,但是比起计算机语言更为困难的是把交易策略客观的编辑的过程。
第一次开发交易策略的交易员为了编程交易策略通常会使用图表或技术指标分析、趋势线分析、前高点/前低点分析、支撑阻力线分析、背离(Divergence)分析等等。但是上述方法具有致命的弱点就是主观性。比如编程出现双重底时入市的规则的过程当中,需要明确第一次见底和第二次见底的幅度并且要明确双重底的间隔和高度等等。上述方法可以依据分析师的主观判断会出现诸多不同之处,因此很难用客观的数据来定型。因此在第一次接触到计算机语言的过程当中,比起选择主观性较强的分析方法不如利用技术分析指标来编程基本的交易规则更为便捷。
第三,需要程序化交易软件。
程序化交易是开发完交易策略以后通过回归测试判断其有效性之后,才应用到实际交易当中。因此程序化交易软件必须要包含上述所有的功能。首先需要具备开发交易策略所需要的计算机语言,其次需要拥有对于已开发的交易策略进行测试的充足的数据。另外,还需要具备经过测试得出的各种测试结果报告书。
开始程序化交易
转变投资的概念
首先为了选择并调整交易策略的构成要素,需要认识以下几种事项。
第一,投资就像是经营企业。
投资者即为企业家,要从整个公司的角度出发制定各个部门的业务并且要在适当的时机各个部门能够自行决定并执行部门业务而创造环境。要明确投资资金的预期回收期限和收集各种历史数据,并且根据上述资料制定事业计划书。成功的交易策略也是通过同样的方法开发出来的。
那么各个部门的业务是什么
1)建立头寸的部门 2)平仓头寸的部门 3)控制损失风险的部门 4)分配及管理所有收益及损失的部门
各个部门是构筑系统时以子系统的形式分割的。为了有效地管理资金,各个子系统里事先确定能够灵活对应头寸的规模、持仓期限、价格等信息,并且需要包含应急情况发生时的所有对策。另外,各个子系统之间不能存在摩擦和冲突。
如果公司内部的部门之间发生严重的摩擦,如何展开工作呢 另外,企业家也要考虑能否在运营当中克服感性和冲动的态度等等。如同所有公司的兴亡一样,在遇到困难的时候(发生亏损时)既不负责任也没有解决方法的话,公司的倒闭是必然的。决定公司的兴旺或者倒闭的因素是企业家是否拥有良好的业务能力和资格(交易员的能力)。
有句话说炒股票体现人格的修养。即便是既聪明又高尚的人拿出自己全部的资产进行投资的话,也会重归人类本来的面目。这是股票市场常见的生理现象。对于市场的变化如何沉着应对,是与他的人格修养达到何种境界是息息相关的。 这就意味着我们要思考的不是眼前的一次性的利益而是用长远的眼光确定损失最小化和利益最大化的目标(程序化交易的基本原则)。我们要牢牢记住,消除贪婪的人格修养是程序化交易成功的关键。
符合自己的生活方式吗?
无论是投资股票还是期货,投资行为必须要成为生活的一部分或者大部分。为了学习而买书、为了预测个股的股价变动而分析、为了实时看行情和交易而下单等等的时间并非是短时间的投入。此外,必须要考虑这种方式对自己的生活方式是否会造成障碍。大部分的投资者认为自己的这种投入从市场上得不到应有的回报。
"为了获取投资机会,要放弃休假吗?"
"有没有根据交易策略而投资的充足的资金?"
"有战胜风险的资金能力吗?"
"有没有做好坚持既定的交易策略的心理准备?"
"还是仅仅是跟着交易策略投资,如果不能获利的话就放弃?"
如果不考虑这种问题的话,我们很难开发出正确的交易策略。最坏的情况是放弃交易策略,用少量的资金从头开始也说不定。交易策略的开发和自己的生活方式是密切相关的。
对于上述问题我们要有明确的答案并且要确信不疑。程序化交易策略仅仅是策略。首先我们要使用有助于分析的一些指标。而其中的秘诀是要理解它们所代表的原理。在开发交易策略的过程中,要对于投资者何时入市、何时获利离市、何时发生损失而平仓等等做出决定。开发出成功的交易策略所做的决定要建立在普遍和客观的规则之上。"预测市场价格上升的时候入市,发生一些损失或者是获取高额收益时离 "不是程序化交易的原则,而仅仅是预测游戏罢了。
从何开始
刚开始接触程序化交易的交易员遇到的最大的困惑是要从哪里开始。成功的程序化交易包含以下四个要素。
1) 何时入市?
2) 何时获取收益并清仓?
3) 承受多少损失以后离市?
4) 何时投入多少资金并何时取出多少收益?
只要充分考虑上述四个要素的话,就能够得到成功投资的基本原理。但是要充分考虑上述四个要素需要投入大量的时间和精力,并且这个过程是非常乏味和无趣的。因此我们需要懂得把这些乏味的工作变得有趣。
那么具备上述四个要素就一定能得到令人满意的回报吗?在此过程中最重要的是加深对市场的了解。对于刚开始接触到交易策略的交易员来说,最重要的是要牢牢记住交易策略是机械化的。 即一旦确定了交易规则就要排除感情因素,仅仅只是根据交易策略来投资。交易策略发出入市信号的时候,不能因为"我今天不想入市"而忽视交易策略。
如果不遵守交易策略的话,没有必要开发和管理交易策略,并且会退步到之前的投资方法中去。但是,也不要对交易策略抱有太大的幻想。
交易并很难。价格有可能上涨也有可能下跌,也有可能保持箱体趋势。因此为了交易策略可以适用于任何的价格变化,只要坚持以下四种基本原理就可以了。
1) 跟踪趋势(Trend Following)
2) 损失最小化(Loss Cut)
3) 收益最大化(Mix Profit)
4) 资金管理(Money Management)
成功的交易策略是忠于上述原理并致力于证明上述原理和多种多样的尝试。下面让我们来证实交易策略的四种原理是否充实。
1) 跟踪趋势(Trend Following)
有句话说"趋势是我的朋友"。仅仅依靠趋势进行的交易大部分都是以失败告终的,即使成功也很难持续获取收益。当然也有偶尔运气佳而获取收益的情况。跟踪趋势进行交易,看起来非常简单。
但是"趋势"是什么?对此一定要有一个明确的定义。那么如何定义?即,现在市场是处于上升趋势还是处于下降趋势或者横盘趋势等等要有一个既定的指标。既定的指标可以是DMI或者是移动平均线等等。更为重要的是要有一个标准来衡量自己的交易策略是否和市场趋势是保持一致的。
2) 损失最小化
我们要致力于减少损失,为此要提前一步进行交易。要制定发生损失的时候暂停投资的规则。另外,也需要制定风险对策。只有这样才能遵守暂停投资的规则。
3) 收益最大化
获取收益的时候继续投资同样适用于市场清算方法(exit system),同时必须要坚持利用趋势的市场清算方法(exit system)。我们需要具备通过充分的调研能够把握市场趋势的能力。
4) 资金管理
如何做好资金管理?这是风险原则的总结。在证券市场有些交易策略是非常有用的。因此要充分利用自己的资金管理系统,在发生亏损之前实施交易策略。
开发交易策略的步骤
开发交易策略的步骤根据每个人的情况都不同,但是一般分为收集信息阶段、制定交易策略阶段、测试及评价交易策略阶段、完善交易策略阶段等。只有在开发交易策略的过程中忠于每个阶段的工作,才能开发出最佳的交易策略。
信息收集阶段
1.买卖标的市场和商品选择
开发交易策略的第一步是选择买卖标的市场和商品。即找出适合做程序化交易的商品为开发程序化交易策略的第一个步骤。
1)选择流动性较好的商品
一般来说,个人为了财产增值而选择投资对象时,会考虑能否在自己需要的时点上变现。而这样的可变现能力就是"流动性"。
一般市场参与者多、交易活跃的时候,开仓和平仓可以顺利的进行,并且所需的数量可以以自己可预期的价格买卖。但是交易平淡的商品,由于报价差比较大,因此以市价下单时,往往会以上限价成交。相反,平仓时也有可能发生需要以比预期更低的价格下单的情况,因此发生的交易费用会更高。因而用交易量,交易价格,与未结清权益把充裕流动性的商品要选择程序化交易对象的商品。
2)波动性大的商品
波动性(Volatilty)有很多种定义,但是以一句话概括的话,就是'市场波动的幅度'。无论是流动性充裕,还是在长期横盘整理的平淡的市场下,尽管开仓和平仓有多么及时,也很难创出收益。市场要有一定程度的波动才会有交易机会,而抓到这样的机会才能创出收益,所以要选取具有足够波动性的市场和商品。判断波动性的方法有单纯的测量一定时间段内最高价和最低价幅度的方法、平均Bar的最高价和最低价幅度的方法、利用过去波动性的方法等多种方法。为了掌握波动性,最常用的指标是ATR指标。
2.[利用ATR指标的波动性测量]
3)交易费用低的商品
在选择商品上,交易费用是不可忽略的因素。交易较少时,交易费用的负担相对比较低。但是交易次数达到一定程度以上时,在全部盈亏里交易费用所占的比重和负担也会增加。因此交易次数越多,选择交易费用较低的市场和商品就会越有利。交易费用不仅包含了手续费、税款等明确化的费用,还包含很多隐性费用。大部分交易者只对肉眼能看到的费用反应敏感,但是对于隐性的看不到的费用却认识不到其重要性。不过,实际在交易费用里这种隐性费用却是更为重要的。
程序化交易里说的隐性费用(滑价)是指在买卖信号中发生的价格和实际成交价格之间的差价。如上述,越是流动性不大或频繁快速涨跌的商品,其滑价也越大。滑价越大,实际获得的收益会比系统报告上的收益越小,而亏损也会越大。因此报价差比较大的商品不适合做程序化交易。除了流动性,报价单位的大小也是影响滑价。波动性相同的两个商品中,一个商品的报价单位比较小,另外一个商品的报价单位比较大,这时报价单位较小商品的滑价会比较小。
2.模拟数据选择
(1)事后回溯测试所需的长期资料
事后回溯测试所需的数据,期间越长越好,并且最好是尽可能包含更多的市场变化。测试交易策略时,要用上升、下跌、横盘整理等所有趋势都包含的长期数据来测试才会有可信度。偶尔测试数日或数个月的数据后,如果产生很好的收益,也会有把这个交易策略直接应用在市场的情况发生。但是,这些短期内能创出高收益的交易策略,如果用长期数据来测试,就会发现剩下的时间段里大部分都是亏损为主。
进行事后回溯测试时需要特别注意的一点,就是不能对全部期间做事后回溯测试。因为如果对包含近期数据的全部数据进行事后回溯测试的话,无法验证出所开发交易策略的未来获利可能性等。因此,进行事后回溯测试时,在全部数据中留下近期数据,要对这些数据进行测试。例如,假设有10年的数据,那么留下最近4年的数据,只对过去6年的数据进行事后回溯测试和最优化。而最近4年的资料,可作为最终验证未来获利可能性的前向分析(forward analysis)数据来使用。
(2)连续资料
期货与股票不同,具有最后交易日,因此不具备数据的连续性。
测试交易策略,要尽可能用长期数据来进行。但是期货由于有最终交易日,所以单独一个月份合约的数据并不充分。因此就会产生把其他不同月份的数据连接起来的必要性。连续期货数据是把未成交合约数量最大的商品连接起来,编制连续性的数据。连续期货指数虽然是已加工的数据,但是也会利用该数据开发交易策略及进行买卖。
利用连续期货指数进行程序化交易时,如果是当日交易策略,则没有其他问题。但是,如果是隔夜交易,在持仓状态下未成交合约的月份发生变化时,次日开始商品也会变更,因此要确认未成交合约的月份是否发生变化,并据此通过手动下单来更新持仓。
(3)禁止使用分钟线、Tick线的日均缺口补充资料
'分钟线,Tick线的日均缺口补充'是意味着分钟线或Tick线里的前日收盘价和当日市价之间的差距以其比例补充并消除缺口。利用分钟线或Tick线进行买卖时,如果前日收盘价和当日市价之间产生缺口,会发生指标的连续性消失的问题。而通过缺口补充可以实现指标的连续性,因此对于分秒必争的图表分析来说是最适合的方法。但是,在程序化交易里以最后交易日的价格为基准,之前的数据值会全部被补充,所以每次日期变更时过去的信号的位置也可能会变更,而且由此过去的亏损又会每天变更。因此对交易策略无法进行正确的评价。所以,在程序化交易里要利用不补充缺口的数据来测试交易策略并进行买卖。
交易策略制定阶段
如果买卖标的商品已选好,下一个就是交易策略制定阶段。要先决定对那种趋势的市场建立适合的交易策略,然后再制定如何进入市场、如何撤出市场的具体交易策略。
市场基本上可分为趋势市场、非趋势市场、波动性市场。但是无论是那个商品,都不会只显示一个市场特性。强势市场随着逐步回归理性,也会转为非趋势市场,并且走势平淡的价格也会有急涨或急跌的时候。因此每个商品都会不可避免的走出多种形态的市场。实际上,想做出在所有市场上都能获利的单个交易策略是很困难的。因此,要选出最有可能盈利的市场走势为目标,并开发符合该市场走势的交易策略。如果选择了趋势市场,就要开发出顺应趋势能获利的交易策略。如果选择的是波动市场,那就要开发出通过捕捉波动较小的市场上发生巨大行情变化的时点来获利的交易策略。
1.交易策略类型
(1)趋势追踪型策略
技术分析指标按大的范围可分为追随趋势的趋势追踪型指标和把市场走势限定在一定范围内试图分析过热及疲软领域的oscillator(震荡)指标。这两种指标可作为区分并制定趋势追踪型策略和逆趋势追踪型策略的基础。
趋势追踪型策略(TrendFollowingSystem)主要是利用移动平均线、MACD、Sonar、ADX、DMI、Parabolic、Trix等显示趋势的指标来制定。这里要注意的是,虽然是利用趋势追踪型指标来制定的策略,但制定出来的策略未必一定是趋势追踪型策略。例如,利用MACD线和MACD信号线的偏离,制定偏离收缩时买入或卖出的交易策略时,低点买入、高点卖出的逆趋势追踪型策略也会被制作出来。因此,关键点在于指标的特性,而不是在指标。
趋势追踪型策略的特点在于胜率低、平均盈亏比高。虽然胜率低、平均盈亏比高的趋势追踪型策略在横盘整理区间内发生频繁的虚假信号(whipsaw),但是趋势形成时会根据趋势方向来开仓,从而获利。趋势追踪型策略的另一个特点是盈亏依赖于市场趋势。因此设计趋势追踪型策略时,设计成不遗漏大趋势的这一点很重要。
[应用趋势追踪型策略的范例]
(2)逆趋势追踪型策略
逆趋势追踪型策略(CounterTrendSystem)是用当前趋势变弱,而新趋势刚有兆头的最初时点开仓,并迅速平仓的方法进行交易的策略。用一句话概括就是"低点买入、高点卖出"的策略。这种策略主要是通过利用显示过热和疲软的指标或支持阻力线来制定。显示过热和疲软的代表性指标有Stochastics、RSI、Divergence、CCI(顺势指标)等,而支持阻力线主要是利用前日最高价或最低价、最近NBar内的最高价或最低价、Swinghigh或SwingLow等。
逆趋势追踪型策略因胜率较高,所以可算是能平心静气交易的策略。但是,逆趋势交易如同逆水划舟,因此如果水流不大(横盘整理市场),可顺利上去,但如果水流很大(趋势市场),则会有很大的风险。因此,为了逆趋势追踪型策略的设计及市场应用,该策略里要包含强大趋势里也能坚持住的切实的风险管理规则。
[应用逆趋势追踪型策略的范例]
(3)波动性突破策略
波动性突破策略(VolatilityBreakOutSystem)是利用波动性的变化获利的交易策略。波动性突破策略是大部分时间待在场外,只在价格急涨或急跌的时点进入市场开仓并迅速平仓的交易策略。这种交易策略由于按照趋势的方向进行买卖,所以关于开仓的部分会与趋势追踪型策略类似。但是因持有时间短、及时平仓,所以胜率高、平均盈亏比低。因此其买卖结果与逆趋势追踪型策略相似。
波动性突破策略里使用到的指针及价格有ATR、BollingerBand、标准误差、前日最高价及最低价幅度、日均缺口、Demark、Pivot、特定时间内的波幅等。
<图2-6>波动性突破策略
3.开仓规则和平仓规则
对于可以做两个方向交易的期货或期权交易来说,无论是买还是卖,凡是新建头寸都叫"开仓"。而了结持有头寸的交易行为叫"平仓"。程序化交易策略大的分为开仓和平仓,而这两者又可分为以下几种详细内容。
1)开仓规则
开仓是指在市场上新建的头寸。在程序化交易里按照一定的条件决定新买入或新卖出的时点和方法,则称为开仓规则。
下图是应用短期移动平均线(5)上穿长期移动平均线(20)时买入,而短期移动平均线(5)下穿长期移动平均线(20)时卖出平仓的交易策略的图。
在这里短期移动平均线(5)上穿长期移动平均线(20)时买入的就是开仓规则。
价格上穿Parabolic线时买入或是stochastic指标上穿疲软区间20日线时买入等是为开仓规则。
[短期移动平均线(5)和长期移动平均线(20)的交叉买卖]
4.
如果买卖标的商品已选好,下一个就是交易策略制定阶段。要先决定对那种趋势的市场建立适合的交易策略,然后再制定如何进入市场、如何撤出市场的具体交易策略。
市场基本上可分为趋势市场、非趋势市场、波动性市场。但是无论是那个商品,都不会只显示一个市场特性。强势市场随着逐步回归理性,也会转为非趋势市场,并且走势平淡的价格也会有急涨或急跌的时候。因此每个商品都会不可避免的走出多种形态的市场。实际上,想做出在所有市场上都能获利的单个交易策略是很困难的。因此,要选出最有可能盈利的市场走势为目标,并开发符合该市场走势的交易策略。如果选择了趋势市场,就要开发出顺应趋势能获利的交易策略。如果选择的是波动市场,那就要开发出通过捕捉波动较小的市场上发生巨大行情变化的时点来获利的交易策略。
1.交易策略类型
(1)趋势追踪型策略
技术分析指标按大的范围可分为追随趋势的趋势追踪型指标和把市场走势限定在一定范围内试图分析过热及疲软领域的oscillator(震荡)指标。这两种指标可作为区分并制定趋势追踪型策略和逆趋势追踪型策略的基础。
趋势追踪型策略(TrendFollowingSystem)主要是利用移动平均线、MACD、Sonar、ADX、DMI、Parabolic、Trix等显示趋势的指标来制定。这里要注意的是,虽然是利用趋势追踪型指标来制定的策略,但制定出来的策略未必一定是趋势追踪型策略。例如,利用MACD线和MACD信号线的偏离,制定偏离收缩时买入或卖出的交易策略时,低点买入、高点卖出的逆趋势追踪型策略也会被制作出来。因此,关键点在于指标的特性,而不是在指标。
趋势追踪型策略的特点在于胜率低、平均盈亏比高。虽然胜率低、平均盈亏比高的趋势追踪型策略在横盘整理区间内发生频繁的虚假信号(whipsaw),但是趋势形成时会根据趋势方向来开仓,从而获利。趋势追踪型策略的另一个特点是盈亏依赖于市场趋势。因此设计趋势追踪型策略时,设计成不遗漏大趋势的这一点很重要。
[应用趋势追踪型策略的范例]
(2)逆趋势追踪型策略
逆趋势追踪型策略(CounterTrendSystem)是用当前趋势变弱,而新趋势刚有兆头的最初时点开仓,并迅速平仓的方法进行交易的策略。用一句话概括就是"低点买入、高点卖出"的策略。这种策略主要是通过利用显示过热和疲软的指标或支持阻力线来制定。显示过热和疲软的代表性指标有Stochastics、RSI、Divergence、CCI(顺势指标)等,而支持阻力线主要是利用前日最高价或最低价、最近NBar内的最高价或最低价、Swinghigh或SwingLow等。
逆趋势追踪型策略因胜率较高,所以可算是能平心静气交易的策略。但是,逆趋势交易如同逆水划舟,因此如果水流不大(横盘整理市场),可顺利上去,但如果水流很大(趋势市场),则会有很大的风险。因此,为了逆趋势追踪型策略的设计及市场应用,该策略里要包含强大趋势里也能坚持住的切实的风险管理规则。
[应用逆趋势追踪型策略的范例]
(3)波动性突破策略
波动性突破策略(VolatilityBreakOutSystem)是利用波动性的变化获利的交易策略。波动性突破策略是大部分时间待在场外,只在价格急涨或急跌的时点进入市场开仓并迅速平仓的交易策略。这种交易策略由于按照趋势的方向进行买卖,所以关于开仓的部分会与趋势追踪型策略类似。但是因持有时间短、及时平仓,所以胜率高、平均盈亏比低。因此其买卖结果与逆趋势追踪型策略相似。
波动性突破策略里使用到的指针及价格有ATR、BollingerBand、标准误差、前日最高价及最低价幅度、日均缺口、Demark、Pivot、特定时间内的波幅等。
<图2-6>波动性突破策略
2.开仓规则和平仓规则
对于可以做两个方向交易的期货或期权交易来说,无论是买还是卖,凡是新建头寸都叫"开仓"。而了结持有头寸的交易行为叫"平仓"。程序化交易策略大的分为开仓和平仓,而这两者又可分为以下几种详细内容。
1)开仓规则
开仓是指在市场上新建的头寸。在程序化交易里按照一定的条件决定新买入或新卖出的时点和方法,则称为开仓规则。
下图是应用短期移动平均线(5)上穿长期移动平均线(20)时买入,而短期移动平均线(5)下穿长期移动平均线(20)时卖出平仓的交易策略的图。
在这里短期移动平均线(5)上穿长期移动平均线(20)时买入的就是开仓规则。
价格上穿Parabolic线时买入或是stochastic指标上穿疲软区间20日线时买入等是为开仓规则。
[短期移动平均线(5)和长期移动平均线(20)的交叉买卖]
2)平仓规则
平仓规则(exitrules)与开仓规则相反,是指通过把持有的多头头寸或空头头寸平仓,从而从市场上退出的交易行为。而把这种平仓方法在系统里以规则指定的就叫平仓规则。
根据开仓和平仓的构成形态,把使用到开仓里的指标反向适用到平仓的规则称之为对称性开仓结构。例如,使用5日移动平均在线穿20日移动平均线时买入的开仓规则时,其对应的平仓规则就指定为5日移动平均线下跌20日移动平均线时。
而使用与开仓不同的其他期间周期平仓或是使用完全不同的指标,则称之为非对称性开仓结构。一般情况下,一个交易策略里往往会把对称性开仓结构和非对称性开仓结构混合使用,但是要区别判断这两者。其原因是对称结构时,就算没有适用与止损平仓一样的额外的平仓规则,也会根据与开仓规则相反的平仓规则产生信号。但是在非对称结构,则没有与开仓相反的平仓规则,所以就算有非对称平仓规则也可能不会产生信号,因此为了防止这样的情况发生要另外添加平仓规则。
3.过滤法
过滤法是通过给交易策略的主要开仓规则或平仓规则添加指针或市场价格等特定条件,使其对根据基本开仓规则和平仓规则产生的开仓和平仓信号再一次考虑,以此减少频繁的交易及提高信号准确度的方法。
[过滤法使用范例]
区分 | 过滤内容 |
方向性确认过滤 | 只在当前Bar的收盘价大于当日开盘价时,买入 |
只在当日开盘价大于前日最高价时,买入 | |
只在当日最高价大于前日最高价时,买入 | |
只在当前Bar的收盘价大于20Bar最高价时,买入 | |
只在swinglow低点高于之前时,买入 | |
只在买价存量大于卖价存量时,买入 | |
只在现价位于Pivot基线上方时,买入 | |
趋势确认过滤 | 只在20日移动平均线处于上升信道时,买入 |
只在5、20、60日移动平均线形成多头排列时,买入 | |
只在ADX指针处于上升通道时,开仓 | |
只在ADX指标在40以下时,开仓 | |
波动性确认过滤 | 只在短期ATR小于长期ATR时,买入 |
只在BollingerBand幅度缩小的情况下,买入 | |
只在当日开盘价-当日最低价的幅度未达到X时,买入 | |
买卖时间控制过滤 | 14点30分以后,禁止开仓 |
11点以后,禁止反向(reverse)开仓 | |
平仓后,一定Bar以内禁止开仓 | |
买卖次数控制过滤 | 当日只交易一次 |
当日内,禁止相同方向的开仓 | |
盈利交易平仓时,禁止反向(reverse)开仓 | |
止损平仓发生时,当日禁止追加开仓 | |
发生较大收益时,禁止下次交易开仓 |
编辑开仓规则时,要区别开仓和再开仓。市场不是一直按一个方向走的,因此开仓后,在盈利的情况下根据遇到的调整时机而编辑的平仓条件,也有可能会发生从市场退出的情况。而且也会有开仓后不久,因价格的反方向移动,而止损平仓从市场退出的情况发生。此后,如果市场回归原来的方向并持续该趋势,就算不能满足最初的开仓条件,也会产生以该方向再次开仓的需要。这时的开仓就称为再开仓。下图是根据最初的移动平均线交叉策略开仓后,价格调整时被平仓;此后随着走势转为原来的趋势方向,价格上穿短期移动平均线时,产生再开仓信号。
[平仓后的再开仓]
6.
5.反向交易
可做两个方向交易的期货和期权里可应用的反向交易是只能在持仓的状态下发生,并把平仓和开仓结合的交易。把当前持有的头寸平仓,然后再按反方向开仓新建头寸,这就叫反向交易,也常称为Reverse或是Reversal交易。
例如,如果指定5日移动平均在线穿20日移动平均线时买入,这就意味着移动平均线向上交叉只作为买入开仓规则来使用。但是如果已经持有反方向的头寸的话,就会成为反向交易,即5日移动平均在线穿20日移动平均线时,当前持有的空头将被平仓之后将新建多头;如果5日移动平均线下穿20日移动平均线,则把当前持有的多头平仓,然后再新建空头。
反向交易通常用于趋势追踪型交易策略,这主要是因为通过反向交易一直进入到市场中,由此可紧紧地跟随不知何时将会发生的大的行情。
交易策略验证阶段
交易策略验证阶段是确认开发者编辑的交易策略是否按照开发者的意图被正确编辑的过程。首先通过验证功能和信息提示,确认用计算机语言编辑的交易策略是否有语法或逻辑上的错误,然后再应用编辑的交易策略,确认在其所预计的地方是否正确产生信号。
把编辑的交易策略应用到系统里验证的行为就叫系统测试,这时需重点关注的内容是要进行与实际买卖相似的测试。这是因为,只有这样其测试结果才会有可信度,并且才能以此来进行实际买卖。进行系统测试时,虽然没有可与实际买卖完全一致的方法,但是通过把实际买卖里发生的现实内容反映到测试过程中,以此可得到类似的结果值。为了进行与实际买卖相似的测试,要注意以下事项。
(1)交易费用
进行系统测试时,如果不输入手续费、税金、滑价等交易费用或是输入完全不一样的其他值,其模拟结果将会与实际交易结果有很大出入。交易次数频繁的系统,在不包含交易费用的情况下其盈利状况很好,但是一旦适用合理的交易费用,则有可能会发生逆转为亏损的情况。因此在系统测试过程中,一定要适用与相关商品符合的交易费用来进行测试。
(2)追踪止损
"追踪止损"作为程序化交易设置窗内的强制平仓项中的一项,根据设定值其模拟交易和实际交易之间会发生巨大的差距。模拟交易里使用的历史数据不保存已成交的所有Tick数据,而只保存Bar的开盘价、最高价、最低价、收盘价等数据,并只利用这些数据来发出买卖信号。反之,实际交易则是通过反映Bar中间发生的所有Tick数据来发出买卖信号,因此模拟交易和实际交易之间会发生差距,尤其是输入非常小的值来使用时会经常发生,所以要明确认识及使用模拟交易和实际交易之间的差距。
(3)NextBarOpen
NextBarOpen是显示下一个Bar的开盘价的函数。这个函数是在Bar完成时发出订单的下单类型(onclose,atmarket)里实际发出订单的时点为"满足条件的下一个Bar的开盘价数据进来的瞬间",因此利用直到下一个Bar的开盘价数据来编辑交易策略时使用的函数。如果使用了这个函数就不能使用onclose类型的下单。这是因为Onclose类型是以满足条件的Bar的收盘价开仓或平仓来计算。即,利用NextBarOpen函数使用onclose类型的话,就表示"如果下一个Bar的开盘价上涨,则以当前Bar的收盘价买入"。如此一来,模拟上会被计算为一直以有力的价格成交,但是从实际交易上来看,将会以比这不利的价格来成交。NextBarOpen函数在除onclose以外的其他下单类型(atmarket,atstop,atlimit)里都可使用。
(4)其他差异
如果使用分钟线及Tick线的日均缺口补充功能,模拟及实际交易的结果将会不同。此外,虽然不经常发生,但是在Bar未完成时发出订单的下单类型(atstop,atlimit)里由于模拟交易利用Bar走势的假设,所以模拟和实际交易之间会发生差异。
交易策略的评估阶段
交易策略开发者通过交易策略测试报告,来评估所开发的交易策略是否会产生盈利。如果会产生盈利,就过渡到下一个过程。否则,则回到收取意见的过程中去。然后重新制定交易战略。由此,通过交易策略报告,从而判断是否产生盈利、可否信赖、交易策略是否有效等。像这样的交易策略评估,它包括最佳的过程和可行性分析过程,并且在实际交易中也将反复进行。
1)对盈利最大化的评估
盈利最大化评估是通过使用所开发的交易策略,来评估能够创造出多少盈利。由此,可以看到总盈亏、年均盈亏、平均盈亏、最大盈利等类目。
①总盈亏
总盈亏是指测试阶段总的盈利,是当前市值减去买入时的成本。如果总盈亏为负数,那么就应该及时判断交易策略的有效性。但是,实时总盈亏为正数,也不能仅靠总盈亏来判断交易策略是否有效。因此,是否是在特定交易中产生的高收益、或者是否是在恶劣条件下产生的结果等,必须与其它项目做一下综合性比较。
②年平均盈亏
年平均盈亏是指将虚拟阶段所产生的总盈利分成不同时期,再换算成年单位,从而可以得知每年可以获得的最大盈利是多少。把总盈亏作为基准,来判断交易策略的盈利时,它的问题点在于起点不同,所产生的盈亏会有很多差异。因此,为了把不同时期的交易策略所产生的成果作比较,主要使用以年单位换算的年平均盈亏。
③平均盈亏
平均盈亏是把总盈亏分成总的交易次数后计算,并且每次交易都会显示平均盈亏。有些交易策略可以在多次交易中,通过累积小的盈利而创造出盈利;有些交易策略呢,虽然交易次数较少,但可以在各自交易中创造出高盈利。当发生交易时,平均盈亏则显示测试平均能够创造出多少盈利的标准。
④最高盈利
最大盈利显示整个交易期间中,产生了最高盈利的那笔交易的盈亏情况。一次交易时,如果产生了很高的盈利,那么通过该项目,可以得知到底产生了多大的盈利。该项目虽然是针对盈利来评估的,但是,当一次交易时,产生了很大的盈利,那它是否与总盈亏有关系呢?为了对此判断,常使用该项目。
2)风险评估
好比硬币有两面,风险评估也存在内外两面。虽说判断怎么样才能视为风险的衡量标准有很多,但是普通来说,当判断将来盈亏会发生变化,或者将来可能会产生盈亏时,这就是风险。下述3项可以判断出将来是否会产生亏损:最大亏损幅度、最大亏损、最长连续亏损交易。
①最大亏损幅度
最大亏损幅度是指,以已平仓交易为基准,将累积亏损额合计,盈利率曲线的最高点至最低点中,最长的下降部分就是亏损幅度。也可理解成整个交易过程中将要产生的交易策略中潜在的最大亏损,显示出以前的交易中产生的最恶劣的情况。该情况可以视作交易时可以承受的最大亏损限度。如果交易时,以该金额为基准,来测定风险大小、并产生了莫大的亏损时,应该加强对交易策略的改善。
②最大亏损
最大亏损是以已平仓交易中发生最大亏损的交易的盈亏,来评估的一次交易中可能发生的最大的潜在亏损。如果一次交易中发生的亏损很大,导致无法承受时,就不能信任该交易策略。因此,在该情况下,需要改善降低最大亏损。
③最大连续亏损交易次数
最大连续亏损交易次数可以成为对于战略的心理上动量指针的一个项目。最大连续亏损交易次数,与最大亏损幅度一起显示交易可承受的最大亏损限度。作为此交易策略,为了实现交易,显示出交易可以承受的连续亏损的时间。
3)风险调整收益评估
风险调整收益评估是同时评估经营成果和风险的一种评估方法。在交易策略测试报告书中,泛指补偿比率、总盈利/总亏损、SharpeRatio等。
①补偿比率
补偿比率,是通过算出风险比例和补偿比率后,把总盈亏分成最大亏损幅度后计算。当补偿比率低于1时,则表面风险大、补偿少,可以判断出该交易策略不是很理想。如果补偿比率大,那么可以说明对于风险的补偿率也就大,从而可以获得比较稳定的收益。由于补偿比率是利用总盈亏来计算的,因此在测试阶段可能会受到影响。在所显示的盈利率曲线的交易策略中,如果在显示向右上方向收益率曲线的交易策略中,测试时间过长,则补偿比率随之变高。因此,测试时间不同的交易策略间的比较是毫无意义的。
②总盈利/总亏损
总盈利和总亏损,把整个测试期间的总盈利分为总亏损后计算。如果总盈利大于总亏损,则将会显示大于1的值,在短线交易策略中,可以经常看到1.5~2的值。补偿比率和总盈利/总亏损,都显示风险补偿收益率。补偿比率是把盈利的幅度和亏损的幅度作为补偿关系来测定的。相反,总盈利/总亏损则是在量变的基础上测定补偿关系的。
③夏普指数
夏普指数把月平均盈亏分为月平均盈亏的标准偏差后计算的。通过夏普指数,可以知道产生了多少比较稳定的盈亏。一般来说,夏普指数值越高,就代表了产生的盈亏更稳定。由于夏普指数是按月来计算的,所以一般采用至少3年以上的数据为计算基准。
4)可靠性评估
交易策略测试报告上的总交易次数到底有多少才能判断出测试报告上各项评价项目是可信的呢?从统计理论来说,如果使用了30个以上的样本,那么就能知道答案。那么,是不是代表了测试报告上有30次以上的交易的话就可以信赖了呢?回答是否定的。统计理论上虽然是这样定义的,但是在将来,走势将会一直与虚拟数据没有必然的联系。总之,太少的交易次数无法提供统计的有意性。并且,交易次数越多,信赖性也就越高。但是,这并不意味着在同一时间内促成多次交易。因为,可能会由于交易费用增加,而导致业绩越来越低。建议想要增加交易次数的话,不妨加长一下测试的时间。
5)交易策略有效性评估
通过交易策略测试报告书上的胜率和平均盈亏比例,来判断该交易策略是否有效。一般来说,趋势跟随型交易策略显示的是低的胜率到高的平均盈亏比;而逆势交易显示的则是高的胜率到低的平均盈亏比。低点买入、高点抛售的逆势交易性交易策略,由于盈利交易的次数多于亏损交易的次数,所以胜率一般要高于50%。但是,盈利不是很高,因此平均盈亏比与趋势跟随型交易策略相比,相对来说较低。相反,趋势跟随型交易在横步区域内由于频繁的作假信号,导致整个胜率很低。但是,出现较大趋势时,通常产生较大盈利,因此,平均盈亏比例通常较高。
交易策略改善阶段
在整个交易策略评估过程,如果判断为将来有可能产生盈利的话,那下一步就是修改和优化交易策略评估,从而达到改善交易策略的目的。
所谓优化,是由交易策略到外部变量的数值中,换入其他值,然后通过使用以前的数据来测试交易策略。也就是说,和利用进入规则和清算规则的技术性分析指针的时间相同的变量值等变更成为其它各种数值,随后通过互相评估业绩,从而达到改善交易策略业绩的目的。
如果在交易策略评估过程中,该战略落选了,必须回到开发交易策略中,并重新制定新的策略。优化过程虽然是确认所开发的交易策略能不能成为突出的交易策略、用于交易策略中的变量是否通用的过程,但是,可能会发生过优化的问题。过于优化是让以前的数据产生盈利,通过利用选配曲线,在测试报告上显示出可观的盈利。但是,这样做的话会降低自由度,导致实际交易中产生亏损。因此,交易策略开发者必须提高警惕避免陷入过优化的困境中去。为预防过优化,可以尝试一下下述方法。
第一,运用伦理性规则。
第二,使用较小的变量。
第三,对长久的数据进行测试。
第四,用在复数时间周期和复数市场中,并进行评估。
第五,实施前进式分析。