1、u一个成功的程序化交易系统的开发是一个包括信息收集、交易策略的制定、交易策略的程序化、交易策略系统的检验和优化等环节有机构成的一个系统动态过程。u每一个环节相互制约,不可忽略。5.15.1 系统开发过程概述系统开发过程概述信息收集阶段系统设计阶段系统开发阶段系统评价阶段系统优化阶段系统编程调试系统编程调试编程语言程序编辑程序调试策略选择和设计策略选择和设计趋势跟踪策略逆趋势跟踪策略反转策略平台突破策略套利策略组合策略风险控制策略系统定位系统定位选择交易市场选择交易商品选择开发平台选择检验期间系统验证评估系统验证评估历史回测效果评估修改完善系统优化系统优化确定变量优化参数修改完善图5-1程序化交
2、易系统开发的动态过程u在进行程序化交易策略系统开发之前,我们必须进行深入的调查研究,进行大量的相关信息收集和分析,以决定程序化交易的市场和商品。u同时还必须为交易策略系统的检验准备数据。5.25.2 信息收集分析信息收集分析u开发交易策略的第一步是选择买卖标的市场和商品,即找出适合做程序化交易的商品。选择市场和商品需要考虑以下问题:5.2.15.2.1买卖标的市场和商品选择买卖标的市场和商品选择1)1)选择流动性较好的商品选择流动性较好的商品n流动性高的市场是一个交易者能以较低的交易成本迅速完成交易,而对价格产生较小影响的市场。市场参与者多、交易活跃的市场,开仓和平仓可以顺利进行,并且可以自己
3、可预期的价格买卖所需的数量,而不会对市场价格形成大的冲击。n而交易量小,流动性差的商品,由于买卖报价差比较大,每档报价的申报订单量少,以市价下单时,往往会以上限价成交。平仓时也有可能发生需要以比预期更低的价格下单的情况,交易费用较高。n因次,程序化交易必须选择交易量大,流动性强的商品作为标的商品。u宽度宽度是指交易价格和市价的背离,用买卖报价价差来衡量。n买卖报价价差=卖出报价(askprice)-买入报价(bidprice)n价差越小,说明交易市场的竞争越激烈,因而市场的效率越高,流动性越强。u深度深度反映的是不会影响现行价格的市场交易量,通常用最优买价和最优卖价报价的申报数量来反映。其计算
4、公式为:n深度=最优买报价对应申买数量+最优卖报价对应申卖数量u弹性弹性是指交易引起的价格波动恢复均衡的速度,目前似乎还没有共同认可的较好度量方法,通常是观察债券交易后恢复正常市场状态(买卖差价、交易量)的速度。n其重要性在于,它刻划了市场的潜在深度,这一点单纯从当前成交量很难看出来。3一般交易商品的流动性可以市场的宽度、深度和弹性一般交易商品的流动性可以市场的宽度、深度和弹性来度量。来度量。2)2)波动性大的商品波动性大的商品u波动性(Volatilty)就是市场波动的幅度。市场要有一定程度的波动才会有交易机会,而抓住这样的机会才能创出收益。u所以,程序化交易要选取具有足够波动性的市场和商品
5、。判断波动性的方法有单纯的测量一定时间段内最高价和最低价幅度的方法、平均K线的最高价和最低价幅度的方法、利用过去波动性的方法等多种方法。3)3)交易费用低的商品交易费用低的商品u交易次数达到一定程度时,在全部盈亏里交易费用所占的比重和负担也会增加。因此交易次数越多,选择交易费用较低的市场和商品就会越有利。交易费用包含了手续费、税款等明确的费用,以及很多隐性费用。u程序化交易里的隐性费用被称为滑价滑价,是指在买卖信号中发生的价格和实际成交价格之间的差价。如上所述,越是流动性不大或频繁快速涨跌的商品,滑价越大,实际获得的收益会比系统报告上的收益越小,而亏损也会越大。因此报价差比较大的商品不适合做程
6、序化交易。u除了流动性,报价单位的大小也是影响滑价的重要因素。波动性相同的两个商品中,一个商品的报价单位比较小,另外一个商品的报价单位比较大,这时报价单位较小商品的滑价会比较小。u纽约证券交易所成立于1792年。最初,报价单位是根据股票票面价值的8定价的。1915年,定价基准从票面价值的百分比调整为美元,即增量为 18美元。2001年1月29日,纽约证券交易所对在其上市的所有股票采用十进制报价交易规则,所有股票不论其股价大小,均采用1美分为最小报价单位。u中国两大证券交易所均以0.01元人民币为最小报价单位。中国金融期货交易所的沪深300指数期货的最小报价单位为0.2点,每点为人民币300元,
7、最小报价单位相当于人民币60元。因此,即使在流动性最强的主力合约,在价格波动最小的时候,以对手价成交的最小滑价即为60元。5.2.25.2.2模拟检验数据选择模拟检验数据选择u程序化交易策略系统程序编制出来后,必须用大量的历史数据来验证其策略,看其程序编制是否准确表达了其策略设计思想;检验其策略设计能否满足在该商品上进行程序化交易盈利和风险控制的基本要求,以及对该策略进行优化改进等。(1)(1)事后回溯测试所需的长期资料事后回溯测试所需的长期资料u事后回溯测试所需的数据,期间越长越好,并且最好是尽可能包含更多的市场变化形态。测试交易策略时,要用上升、下跌、横盘整理等所有趋势都包含的长期数据来测
8、试才会有较高的可信度。u偶尔测试数日或数个月的数据后,如果产生很好的收益,也会有把这个交易策略直接应用在市场的情况发生。但是,这些短期内能创出高收益的交易策略,如果用长期数据来测试,就会发现剩下的时间段里大部分都是亏损为主。其主要原因就是测试期间没有包括足够多的市场价格变动形态,其策略的普遍适用性较差。进行事后回溯测试时需要特别注意的一点,就是进行事后回溯测试时需要特别注意的一点,就是不能不能对全部期间做事后回溯测试对全部期间做事后回溯测试。u因为如果对包含近期数据的全部数据进行事后回溯测试的话,无法验证出所开发交易策略的未来获利可能性等。因此,进行事后回溯测试时,在全部数据中留下近期数据,要
9、对这些数据进行测试。n例如,假设有10年的数据,那么留下最近4年的数据,只对过去6年的数据进行事后回溯测试和最优化。而最近4年的资料,可作为最终验证未来获利可能性的前向分析(forwardanalysis)数据来使用。(2)(2)连续资料连续资料u期货具有最后交易日,因此不具备数据的连续性。测试交易策略,要尽可能用长期数据来进行。但是期货由于有最终交易日,所以单独一个月份合约的数据并不充分。因此就会产生把其他不同月份的数据连接起来的必要性。连续期货数据是把未平仓合约数量最大的商品连接起来,编制连续性的数据。u利用连续期货指数进行程序化交易时,如果是当日交易策略,则没有其他问题。但是,如果是隔夜
10、交易,在持仓状态下未成交合约的月份发生变化时,次日开始商品也会变更,因此要确认未平仓合约的月份是否发生变化,并据此通过手动下单来更新持仓,移仓换月。(3)(3)禁止使用分钟线、禁止使用分钟线、TickTick线的日均缺口补充资料线的日均缺口补充资料u“分钟线,Tick线的日均缺口补充”是指分钟线或Tick线里的前日收盘价和当日市价之间的差距以其比例补充并消除缺口。利用分钟线或Tick线进行买卖时,如果前日收盘价和当日市价之间产生缺口,会发生指标的连续性消失的问题。而通过缺口补充可以实现指标的连续性,因此对于分秒必争的图表分析来说是最适合的方法。u但是,在程序化交易里以最后交易日的价格为基准,之
11、前的数据值会全部被补充,所以每次日期变更时过去的信号的位置也可能会变更,而且由此过去的亏损又会每天变更。因此对交易策略无法进行正确的评价。所以,在程序化交易里要利用不补充缺口的数据来测试交易策略并进行买卖。5.35.3程序化交易系统的构成程序化交易系统的构成u程序化交易的核心交易策略程序需要用户自己开发。尽管一些交易平台软件已经提供了一些简单的交易模块供用户调用,但它们通常是比较简单的,不完整的。u用户必须有针对性的开发其最适用的程序化交易策略程序,且必须针对特定的市场、商品和投资者需求来进行开发。程序化交易策略系统程序化交易策略系统变量定义模块:定义外部参数、定义变量(数值型、逻辑型、字符型
12、)数据处理模块:所有数据在此处理,计算各种关系、条件交易决策模块:进行各种设定条件的比较判断交易执行模块:执行开仓、平仓等命令风险控制模块:对系统持仓风险进行实时评估,并采取相应对策控制风险图图5-2 5-2 程序化交易系统的功能模块程序化交易系统的功能模块5.3.15.3.1变量定义模块变量定义模块u作为计算机自动化交易程序,必须对大量的信息进行接收、储存和处理,并在此基础上形成交易决策和执行。要进行有效的信息接收、储存和处理,系统必须首先对相关的信息进行分类,并对相关的变量或参数进行定义,以便计算机系统为其留出相应的储存空间,建立相应的索引并进行相关的信息处理。u因此,所有的程序化交易程序
13、的基础模块就是变量定义模块。变量定义包括外部参数(常量)和内部变量两类。变量定义包括外部参数(常量)和内部变量两类。u外部参数外部参数全部为数值型。nInput:A1(10),A2(30);u内部变量内部变量则可以区分为数值型、字符型和逻辑型三种类型。又可分为单一变量、数组变量等类型。n单一变量lVar:X1(0),X2(“”),X3(false);n数组变量lArray:Y110(0),Y22,5(“”);n整个程序中所使用的参数和变量都必须在该模块中进行定义。没有定义的任何参数和变量都不能够在程序里面赋值或引用。u每一种计算机语言都多变量的定义方式、格式和命令等有自己的规定。在EasyLa
14、nguage里则是采用Input命令定义外部参数,用Variable命令定义变量。Array命令定义数组变量。5.3.25.3.2数据处理模块数据处理模块u数据处理模块是交易策略程序的核心模块之一。程序化交易的决策是建立在一定的决策模型之上的。而任何决策模型都必须对一系列的基础数据进行计算处理,对变量进行赋值,对各种决策条件进行计算和分析。u比如,移动均线金死叉交易策略,首先必须对交易商品价格计算短期和长期移动平均线,然后才能够对长期与短期均线进行动态比较,判断其是否发生交叉,是金叉还是死叉。因此。数据的处理是决策的基础。nMas=average(c,10);nMaL=average(c,20
15、);5.3.35.3.3交易决策模块交易决策模块u程序化交易系统的核心是交易决策。交易决策模块负责根据交易策略思想对已经计算处理的数据进行分析判断,是否符合策略思想确定的建仓、平仓条件,从而决定什么时候,以什么价格,多大规模,建立什么样的仓位(多仓或者空仓)或者平仓已有仓位。u这一部分功能对于交易策略系统最为重要,也最为复杂。交易策略的成功以否,一方面取决于交易策略思想是否适当,另一方面则取决于交易策略程序是否准确反映了其交易策略思想。nIfMaScrossoverMaLthenlBeginlend变量定义指标计算上升趋势区间震荡下降趋势开多仓移动平均线多头排列长期均线上升短期回荡平多仓短期超
16、卖平空开多短期超买平多开空移动平均线多头排列长期均线上升短期回荡移动平均线空头排列长期均线下降短期回升开空仓平空仓风险评估风险适度趋势未变继续持仓超风险趋势未定止损平仓超风险趋势改变反手盈利评估未达盈利目标继续持仓已达盈利目标回落平仓形态识别交易决策模块交易决策模块数据处理模块数据处理模块风险控制模块风险控制模块变量定义模块变量定义模块交易执行模块交易执行模块u有的交易策略思想极为复杂,特别是多种交易策略的组合,其交易策略决策程序必然极为复杂。这就要求我们必须根据清晰的逻辑思路来编制程序。n如图5-3所示的交易策略系统,对于不同市场形态采取不同的交易策略,市场形态(上升趋势、下降趋势和区间震荡
17、)的识别就成为正确交易决策的关键。在识别市场形态后,则根据不同交易策略条件的满足情况决定其开仓和平仓的行为。交易决策程序必须根据这种交易策略思路的交易决策程序必须根据这种交易策略思路的逻辑来编制程序逻辑来编制程序5.3.45.3.4交易执行模块交易执行模块u交易执行模块负责执行交易决策模块发出的交易信号(命令)。n交易执行模块的命令既可以写在交易策略程序中,也可以在加载交易策略程序的图表上通过交易策略设置窗口进行设置。l包括交易策略的参数设置、信号图表显示、分割交易、费用/数量、强制平仓和买卖方式等。nIfMaScrossoverMaLthenBeginIfmarktposition=-1th
18、ensell(“金叉平空仓”)thisbaronclose;Buy(“金叉开多仓”)nextbaronopen;end5.3.55.3.5风险控制模块风险控制模块u风险控制是成功的程序化交易的关键。风险控制模块负责根据风险控制策略对程序化交易的持仓风险和账户资金进行管理和控制。u风险控制模块的基本任务为:n(1)需要对账户资金进行管理,确定其建仓的规模是否适当,以控制其账户面临的最大风险。n(2)必须对已经建立的仓位面临的风险进行实时评估,判断其是否达到策略允许的最大风险上限。n(3)对达到策略允许的最大风险上限的持仓采取必要措施进行平仓,包括减仓和清仓,以控制损失的进一步扩大。u例如:nSe
19、tStopContract;nSetstoploss(10);l策略在每份股票亏损10元时将平仓,如果持有1000股,则将亏损10*1000=10000元。5.3.65.3.6各模块之间的关系各模块之间的关系u作为一个完整的程序化交易策略系统,必须由以上5个方面的功能模块所构成。如图5-5所示,变量的定义和数据的处理是基础,交易决策和执行是核心,风险控制是关键。这些功能相互制约和相互依赖,构成一个完整的交易策略系统。这些功能对于一个成功的交易策略系统是缺一不可。u当然,这些功能是由单独的功能模块来实现,还是由一些综合的语句来实现都可以。但功能不能或缺。对于一些简单的交易策略,我们可以将多种功能
20、模块的功能,如指标的计算和判断、交易决策等放在一起,甚至可以放在一个程序语句里面来实现。如金叉买入,死叉卖出策略在如金叉买入,死叉卖出策略在EasyLanguageEasyLanguage可以用可以用2 2个语句来处理:个语句来处理:uIfAverage(c,5)CrossoverAverage(c,30)thenBuy(“金叉买进”)nextbaratmarket;uIfAverage(c,5)CrossunderAverage(c,30)thenSell(死叉卖出)nextbaratmarket;n但是,对于一些比较复杂的交易策略系统,如果像这样将数据处理、交易决策放在一个程序语句里面,该
21、语句就会十分冗长和复杂,策略整体关系不清。n另外,多次引用的指标也导致重复的计算,增加计算机处理量,降低处理速度。其三,也不利于引用变量的前期值。n因此,将主要的变量数据在进行交易决策判断之前集中进行处理,不仅有利于提高系统的运行速率,也使系统的逻辑更加清晰,便于策略程序的编辑。u以上两个语句可以改写为如图所示的功能模块组成的策略程序。显然,这是一个基本功能较为完善的简单交易策略程序。策略思想虽然简单,但基本的功能已经具备。/移动均线金死叉交易系统移动均线金死叉交易系统/变量定义模块变量定义模块Inputs:MTS(5),MTL(30);Var:MaS(0),MaL(0),GoldenCros
22、s(false),DeathCross(false);/数据处理模块数据处理模块MaS=Average(c,5);MaL=Average(c,30);GoldenCross=MasCrossoverMaL;DeathCross=MasCrossunderMaL;/交易决策模块交易决策模块IfGoldenCrossthenBuy(金叉买进金叉买进)nextbaratmarket;IfDeathCrossthenSell(死叉卖出死叉卖出)nextbaratmarket;/风险控制模块风险控制模块SetStopLoss(10);SetProfitTarget(20);5.4 5.4 交易策略的制定
23、交易策略的制定u如果买卖标的商品已选好,对于交易策略系统的构成有了初步的了解,下一个阶段就是交易策略的制定。要先决定对那种趋势的市场建立适合的交易策略,然后再制定如何进入市场、如何撤出市场的具体交易策略。u市场基本上可分为趋势市场、非趋势市场、波动性市场。但是无论是那个商品,都不会只显示一个市场特性。强势市场随着逐步回归理性,也会转为非趋势市场,并且走势平淡的价格也会有急涨或急跌的时候。因此每个商品都会不可避免的走出多种市场形态。5.4.15.4.1 交易策略类型交易策略类型u实际上,想做出在所有市场形态上都能获利的单个交易策略是很困难的。u因此,要选出最有可能盈利的市场走势为主要目标,开发符
24、合该市场走势的交易策略。(1)(1)趋势追踪型策略趋势追踪型策略u技术分析指标按大的范围可分为追随趋势的趋势追踪型指标和把市场走势限定在一定范围内试图分析过热及疲软领域的震荡(oscillator)指标。这两种指标可作为区分并制定趋势追踪型策略和逆趋势追踪型策略的基础。u趋势追踪型策略(TrendFollowingSystem)主要是利用移动平均线、MACD、Sonar、ADX、DMI、Parabolic、Trix等显示趋势的指标来制定。需要注意的是,虽然是利用趋势追踪型指标来制定的策略,但制定出来的策略未必一定是趋势追踪型策略。u例如,利用MACD线和MACD信号线的偏离,制定偏离收缩时买入
25、或卖出的交易策略时,低点买入、高点卖出的逆趋势追踪型策略也会被制作出来。因此,关键点在于指标的特性,而不是在指标。趋势追踪型策略的特点在于趋势追踪型策略的特点在于胜率低、平均盈亏比高胜率低、平均盈亏比高。u虽然胜率低、平均盈亏比高的趋势追踪型策略在横盘整理区间内发生频繁的虚假信号(whipsaw),但是趋势形成时会根据趋势方向来开仓,从而获利。u趋势追踪型策略的另一个特点是盈亏依赖于市场趋势盈亏依赖于市场趋势。因此设计趋势追踪型策略时,设计成不遗漏大趋势的这一点很重要。n如图5-5所示,趋势追踪策略抓住了6月开始的2段上升趋势,大赚一笔,但之前的震荡行情中买进卖出却导致亏损。(2)(2)逆趋势
26、追踪型策略逆趋势追踪型策略u逆趋势追踪型策略(CounterTrendSystem)是用当前趋势变弱,而新趋势刚有兆头的最初时点开仓,并迅速平仓的方法进行交易的策略。用一句话概括就是低点买入、高点卖出的策略。u这种策略主要是通过利用显示过热和疲软的指标或支持阻力线来制定。显示过热和疲软的代表性指标有KDJ、RSI、Divergence、CCI(顺势指标)等,而支持阻力线主要是利用前日最高价或最低价、最近NK线内的最高价或最低价、Swinghigh或SwingLow等。逆趋势追踪型策略因胜率较高逆趋势追踪型策略因胜率较高u所以可算是能平心静气交易的策略。但是,逆趋势交易如同逆水划舟,因此如果水流
27、不大(横盘整理市场),可顺利上去,但如果水流很大(趋势市场),则会有很大的风险。u为了逆趋势追踪型策略的设计及市场应用,该策略里要包含强大趋势里也能坚持住的切实的风险管理规则。(3)(3)波动性突破策略波动性突破策略u波动性突破策略(VolatilityBreakOutSystem)是利用波动性的变化获利的交易策略。波动性突破策略是大部分时间待在场外,只在价格急涨或急跌的时点进入市场开仓并迅速平仓的交易策略。u这种交易策略由于按照趋势的方向进行买卖,所以关于开仓的部分会与趋势追踪型策略类似。但是因持有时间短、及时平仓,所以胜率高、平均盈亏比低。因此其买卖结果与逆趋势追踪型策略相似。u波动性突破
28、策略里使用到的指标及价格有ATR、布林线、标准误差、前日最高价及最低价幅度、日均缺口、Demark、Pivot、特定时间内的波幅等。5.4.25.4.2 开仓与平仓规则开仓与平仓规则u对于可以做两个方向交易的期货或期权交易来说,无论是买还是卖,凡是新建头寸都叫“开仓”。u而结束持有头寸的交易行为叫“平仓”。u程序化交易策略大的分为开仓和平仓,而这两者又可分为以下几种详细内容(1 1)开仓规则)开仓规则u开仓是指在市场上新建头寸的交易行为。在程序化交易里按照一定的条件决定新买入或新卖出的时点和方法,则称为开仓规则。图5-8短期移动平均线(5)和长期移动平均线(20)的金叉买入与死叉卖出图5-8是
29、应用短期移动平均线(5分钟)上穿长期移动平均线(20分钟)时(俗称“金叉”)买入,而短期移动平均线(5)下穿长期移动平均线(20)时(俗称“死叉”)卖出平仓的交易策略的模拟交易图。在这里短期移动平均线(5)上穿长期移动平均线(20)时买入就是开仓规则。价格上穿Parabolic线时买入或是stochastic指标上穿疲软区间20日线时买入等都为开仓规则。(2 2)平仓规则)平仓规则u平仓规则(exitrules)与开仓规则相反,是指通过对持有的多头头寸或空头头寸平仓,从而从市场上退出的交易行为。把这种平仓方法在系统里以规则表达的就叫平仓规则。根据开仓和平仓的构成形态,把使用到开仓的指标反根据开
30、仓和平仓的构成形态,把使用到开仓的指标反向使用到平仓的规则称之为对称性开仓结构。向使用到平仓的规则称之为对称性开仓结构。u例如,使用5日移动平均线上穿20日移动平均线时(金叉)买入的开仓规则时,其对应的平仓规则就为5日移动平均线下穿20日移动平均线时(死叉)。使用与开仓不同的其他期间周期平仓或是使用完全不使用与开仓不同的其他期间周期平仓或是使用完全不同的指标,则称之为非对称性开仓结构。同的指标,则称之为非对称性开仓结构。u一般情况下,一个交易策略里往往会把对称性开仓结构和非对称性开仓结构混合使用,但是要区别判断这两者。其原因是对称结构时,就算没有适用与止损平仓一样额外的平仓规则,也会根据与开仓
31、规则相反的平仓规则产生信号。u但是在非对称结构,则没有与开仓相反的平仓规则,所以就算有非对称平仓规则也可能不会产生信号,因此为了防止这样的情况发生要另外添加平仓规则。(3 3)再开仓规则)再开仓规则u编辑开仓规则时,要区别开仓和再开仓。n市场不是一直按一个方向走的,而是波浪式发展的。因此开仓后,尽管大方向是正确的,但由于市场的波动可能使程序止盈平仓退出。而且也可能在开仓后不久,因价格的反方向变动,而止损平仓退出。n此后,如果市场回归原来的方向并持续该趋势,即使不能满足最初的开仓条件,也会产生以该方向再次开仓的需要。这时的开仓就称为再开仓。图5-9平仓后的再开仓图图5-9是根据最初的移动平均线交
32、叉策略开仓后,价格是根据最初的移动平均线交叉策略开仓后,价格调整时被平仓;调整时被平仓;此后随着走势转为原来的趋势方向,价格上穿短期移此后随着走势转为原来的趋势方向,价格上穿短期移动平均线时,产生再开仓信号。动平均线时,产生再开仓信号。(4 4)反向交易)反向交易u期货和期权等金融衍生品可做多,也可做空。反向交易是指在可做多空两个方向交易的产品中,在持仓状态下先平仓再反向开仓的交易。也常称为Reverse或是Reversal交易。u例如,如果指定5日移动平均在线穿20日移动平均线时买入,这就意味着移动平均线金叉只作为买入开仓规则来使用。n但是如果已经持有反向头寸,就会成为反向交易,即5日移动平
33、均在上穿20日移动平均线时,当前持有的空头将被平仓之后再新建多头;n如果5日移动平均线下穿20日移动平均线,则把当前持有的多头平仓,然后再新建空头(如图5-8所示)。反向交易通常用于趋势追踪型交易策略反向交易通常用于趋势追踪型交易策略u这主要是因为通过反向交易一直进入到市场中,由此可紧紧地跟随不知何时将会发生的大行情。u但在小幅震荡的区间震荡行情中,根据趋势跟踪的移动平均线金死叉进行反向交易是很危险的。n可能交易在不断地反向,市场也在不断地反向,而技术指标的滞后性,使反向交易总是滞后于市场,结果是一天下来,市场行情并没有多少涨跌,而账户却因为不断的止损-反向开仓-止损-反向开仓中损失惨重。n因
34、此,在小幅区间震荡的行情中,在趋势未能形成之前,不能轻易反向交易,而应该退出市场,静观其变,等待机会。5.4.35.4.3 风险控制策略风险控制策略u 金融市场是一个不确定性的市场,有效的风险控制是保证金融市场投资成功的基本前提,对于具有杠杆的期货交易更加重要。有效的风险控制包括止损、仓位控制和资金管理。此外,程序化交易还必须考虑交易系统安全、网络通讯的稳定等问题。(1 1)止损)止损u止损是风险控制的基本策略和措施。要进行金融投资,必然面临亏损的风险。损失最小化,收益最大化是金融投资的基本原则。u关键是我们能够承担的损失风险有多大?我们必须进行合理的判断,制定合理的止损规则并坚决执行。什么样
35、的止损幅度是合理的?止损幅度过小,虽然使单笔损失最小,但它可能小于市场的正常波动幅度,其本来符合市场基本趋势方向的投资随时会被市场的小幅波动踢出市场,因而很难获得盈利的机会。止损幅度过大,则本来方向错误的投资却因未及时止损而损失过大。u止损的基本方法包括:趋势逆转止损法和限额止损法。趋势逆转止损法趋势逆转止损法u就是根据有关指标判断,投资仓位的方向与市场变化方向相反,或者投资仓位的方向原来与市场趋势方向是一致的,但现在市场已经明确发生了转向而平仓止损(或止盈)的方法。图5-10趋势逆转平仓止损如图5-10所示,在短期均线与长期均线金叉开多仓、死叉平多仓的规则下,开多仓后发生死叉时,必须平仓。第
36、一次金叉后开的多仓,在第一次死叉后平仓,发生亏损,实际上是止损平仓。第二次死叉平仓虽然是止盈,但在趋势已经逆转的情况下,如果不及时止盈,这些盈利就会随着价格的进一步回落而被完全侵蚀,并可能发生实际的损失。注意,这里的趋势逆转是指标显示的逆转,并不一定是市场真实的逆转。限额止损法限额止损法u就是规定一定的亏损限额,达到该限额即止损的方法。u该限额既可以是百分比(比如2%,3%等),也可以使绝对亏损额(如5000元、1万元,或者指数10个点、30个点等)。u限额止损法可以避免一些特殊情况下,技术指标未能及时发出止损信号,导致绝对亏损过大的问题。u缺点是究竟亏损限额多大为最优难以确定。太小容易被震出
37、市场;太大则损失太大。浮动止损法浮动止损法,u就是规定一个初始止损点和止损移动间隔,当价格向有利方向变动达到一定幅度时(即止损移动间隔),止损点自动向该方向移动1个止损移动间隔。u这样,既可以在开仓后价格向相反方向变动时控制最大亏损,又可以在价格向开仓方向变动时不断提高止损点,从而保证其已经获得的账面盈利在价格再次回落时转化为实际盈利。u因此,浮动止损法是止损与止盈相结合的方法。但如果初始止损幅度和浮动间隔太小,其持仓也容易被价格的剧烈波动震出。(2 2)仓位控制和资金管理)仓位控制和资金管理u有效的风险控制不仅需要有效的止损策略,而且必须进行有效的仓位控制和资金管理。这对于有杠杆功能的期货交
38、易尤其重要。u在保证金交易制度下,杠杆率为保证金率的倒数,即杠杆率=1/保证金率。u如10%的保证金率,杠杆率=1/10%=10倍。沪深300股指期货每点300元,如果指数在2500点,则其每手合约价值为2500*300=75万元,交易所保证金比率为12%,期货公司通常提高2个百分点为14%,需要保证金为75*14%=10.5万元。根据交易所规定,最低开户资金50万元。其在2500点最大可开仓4张合约,需保证金10.5*4=42万元。剩余资金50-42万元=8万元。u如果你在2500点开4张多单后,指数下跌2%后即开始大幅上涨。当下跌2%到2450点时,指数下跌50点,4张合约损失4*50*3
39、00元=6万元,准备金41.16万元,剩余资金2.84万元。u如果你继续持有多单,随后行情持续大幅上涨350点到2700点。如果将多单持有到2700点平仓,4张多单盈利4*200*300元=24万元,盈利率=24/50=48%。看起来盈利不错。u但是,如果在2500点开多仓4张后,指数不是下跌2%而是下跌5%(到2400点)后反弹到2800点。看起来你好像可以赚更多的钱,但情况可能完全出乎你的意料。当指数下跌78点到2422点时(下跌3.12%)。4张合约损失9.36万元,自有资金剩余50-9.36=40.64万元,准备金需要40.656万元,还差496元。这时期货公司将通知你立即补充准备金。
40、如果你不能在规定时间补足准备金,期货公司将立即强行平仓你的所有仓位。尽管指数随后即开始大幅反弹,但因为你的仓位已经被强制平仓,你已经不可能以平仓价格买回同样的仓位。由于可用资金的限制和指数的大幅反弹,你只能以更高的价格买回较少的仓位。特别是在强行平仓后,即使行情反弹,但你可能在犹豫之中丧失较好的回补机会。即使指数反弹到原来开仓的2500点,但强行平仓的损失可能却无法全部挽回。u如果你在2500点仅开3张多仓,初始准备金31.5万(占总资金的63%),则可用资金可以维持到指数下跌到2328点,即最大可以承受指数6.88%的波动。因此,这里充分显示了仓位控制和资金管理的重要性。指数每张合约价值(元
41、)1张合约准备金(元)全部合约准备金(元)盈亏(元)资金总额(元)可用资金(元)指数波动(%)盈亏率(%)300元/点14%4张 500,000 以2500为基准2500750,000 105,000420,0000 500,00080,000002460738,000 103,320413,280-48,000 452,00038,720-1.6-9.62450735,000 102,900411,600-60,000 440,00028,400-2-122440732,000 102,480409,920-72,000 428,00018,080-2.4-14.42430729,000 1
42、02,060408,240-84,000 416,0007,760-2.8-16.82425727,500 101,850407,400-90,000 410,0002,600-3-182422726,600 101,724406,896-93,600 406,400-496-3.12-18.722420726,000 101,640406,560-96,000 404,000-2,560-3.2-19.22430729,000 102,060408,240-84,000 416,0007,760-2.8-16.82480744,000 104,160416,640-24,000 476,00
43、059,360-0.8-4.82500750,000 105,000420,000-500,00080,000002600780,000 109,200436,800 120,000 620,000 183,2004242700810,000 113,400453,600 240,000 740,000 286,4008482800840,000 117,600470,400 360,000 860,000 389,6001272表5-150万元投资期指可用资金及盈亏变动情况u注:目前交易所和期货公司均采用逐日盯市的结算方式:u1)平仓盈亏(逐日盯市)平当日仓盈亏+平历史仓盈亏u平当日仓盈亏当
44、日开仓价与平仓价之差手数交易单位u 平历史仓盈亏平仓价与昨日结算价之差手数交易单位u2)持仓盈亏(逐日盯市)持当日仓盈亏+持历史仓盈亏u持当日仓盈亏当日结算价与当日开仓价之差手数交易单位u持历史仓盈亏当日结算价与昨日结算价之差手数交易单位u3)当日盈亏平仓盈亏(逐日盯市)+持仓盈亏(逐日盯市)u4)当日结存(逐日盯市)上日结存(逐日盯市)+当日存取合计+当日盈亏-当日手续费u5)客户权益当日结存(逐日盯市)u6)可用资金=当日结存-保证金占用5.4.45.4.4 交易策略的组合交易策略的组合u没有一种适用于任何市场状况的交易策略。每一种交易策略都只适用于一种特定的市场状况。市场是万千变化的,只
45、有适用于一种市场状况的策略肯定不能适应市场的变化。因此,成功的程序化交易需要将适用于多种市场状况的交易策略有机的组合成为一个策略系统。(1 1)过滤组合法)过滤组合法u过滤组合法是通过给交易策略的主要开仓规则或平仓规则添加一些指标或市场价格等特定条件,使其对根据基本开仓规则和平仓规则产生的开仓和平仓信号再一次进行分析,判断其是否符合特定的开仓平仓条件,以此减少频繁的交易信号并提高交易信号准确度的一种策略组合方法。u过滤组合法是一种比较简单的策略组合法,目的是通过不同指标的组合来过滤掉一些异动信息,提高其主规则的信号准确度。表5-2列示了一些过滤组合法的基本类型。过滤类型过滤内容方向性确认过滤只
46、在当前K线的收盘价大于当日开盘价时,买入只在当日开盘价大于前日最高价时,买入只在当日最高价大于前日最高价时,买入只在当前K线的收盘价大于20根K线最高价时,买入只在当前低点高于之前低时,买入只在买价量大于卖价量时,买入只在现价位于Pivot基线上方时,买入趋势确认过滤只在20日移动平均线处于上升通道时,买入只在5、20、60日移动平均线形成多头排列时,买入只在ADX指针处于上升通道时,开仓只在ADX指标在40以下时,开仓波动性确认过滤只在短期ATR小于长期ATR时,买入只在布林线开口缩小的情况下,买入只在当日开盘价-当日最低价的幅度未达到X时,买入买卖时间控制过滤14点30分以后,禁止开仓11
47、点以后,禁止反向开仓平仓后,一定K线以内禁止开仓买卖次数控制过滤当日只交易一次当日内,禁止相同方向的开仓盈利交易平仓时,禁止反向开仓止损平仓发生时,当日禁止追加开仓发生较大收益时,禁止下次交易开仓(2 2)策略组合法)策略组合法u过滤法组合而成的一个策略虽然是多种指标的组合,但它仍然仅是一种策略,仅能实现一种开仓或平仓目的。而要适应多变的市场,必须有实现多种目的的策略组合。比如趋势跟踪策略加上逆向交易策略,再加上风险控制策略就构成一个最基本的交易策略组合。而每一类策略又可以由许多不同方法和不同特点的策略组合构成。u策略多可以适应不同的市场变动,但也容易相互发生矛盾冲突。用多少策略,用什么样的策
48、略进行组合,应该根据市场交易品种的历史数据进行大量的回测检验来确定。留下表现好的策略,淘汰表现差的策略,最后形成一个优化的策略组合。5.55.5交易策略的程序化交易策略的程序化u在制定基本的交易策略备选方案以后,必须将其程序化,然后才能进行历史回测、优化和检验。交易策略的程序化包括绘制交易策略流程图、编制程序和程序调试几个基本环节。5.5.15.5.1 交易策略流程图交易策略流程图u绘制交易策略流程图是编制交易策略程序的第一步。所谓的交易策略流程图就是用图形将交易策略的信息流和决策关系形象地表达出来,便于我们分析策略的信息流和决策关系。(1 1)概括策略思想)概括策略思想u首先我们需要将交易策
49、略思想用文字或数学公式概括和表达出来。u比如最简单的移动平均线交叉趋势跟踪策略思想可以用文字概括表达为:当短期移动平均线上穿长期移动平均线时买进;当当短期移动平均线下穿长期移动平均线时卖出。u用数学公式表达为:u其中:MAS为短期均线;MAL为长期均线;Buy=1为买进;Buy=0不买进;Sell=1为卖出;Sell=0为不卖出。u每一时刻,程序首先需要读入更新数据,然后计算移动平均线,再分别判断是否短期均线上穿长期均线,是否短期均线下穿长期均线,并相应做出买入、卖出或维持仓位不变的决策。新的一期又重复以上过程。买进是否短期均线上穿长期均线是计算移动平均线是否短期均线下穿长期均线否是卖出更新数
50、据否图5-11移动均线交叉追踪趋势策略流程图其策略流程图如图其策略流程图如图5-11所示:所示:5.5.25.5.2 交易策略编程交易策略编程u在绘制策略流程图后,我们即可编制交易策略程序。交易策略程序必须在计算机上实现。由于程序化交易必须能够获取交易商品的市场行情信息,并将程序化交易策略的交易指令下达到交易所,因此,我们必须按照第二章所述选择相应的程序化交易平台,并利用该交易平台提供的程序化交易策略编辑器进行交易策略的编程。u图5-12显示了利用TradeStation交易平台提供的交易策略开发语言EaseLanguage编辑的上述移动均线交叉跟踪趋势策略的计算机程序。5.5.35.5.3