摘要:实习期间,在指导老师的帮助下,熟悉了期货交易和资产管理有关工作,对期货公司以及量化投资的策略有一定的了解,并参加了资产管理部交易策略的开发,从数据挖掘的角度研究股指期货,并对各个周期数据进行了详细的测试。
关键词:期货;交易策略;数据挖掘
1 实习单位简介 方正中期期货有限公司是由方正证券控股75.62%的大型期货公司,注册资本3.4亿元人民币,目前在全国设有北京、天津、上海、广州、深圳、南京、苏州、扬州、常州、宁波、青岛、武汉、西安、包头、保定、邯郸、唐山、长沙、株洲、郴州、岳阳、娄底、常德等26家营业部;同时,方正中期期货依托方正证券100余家营业网点逐步打造覆盖全国的业务网络。 2013年方正证券收购北京中期期货60%股权,同时由北京中期期货吸收合并方正期货,合并后的公司更名为方正中期期货有限公司。原方正期货和原北京中期期货均拥有超过20年的发展历史,具有深厚的市场积淀和专业优势。 方正中期期货是中国期货业协会理事单位(001号会员)、北京期货商会副会长单位,为上海期货交易所、大连商品交易所、郑州商品交易所会员及中国金融期货交易所交易结算会员;公司具有开展商品期货和金融期货经纪业务资格,并陆续取得投资咨询、风险管理、资产管理业务资格,公司综合实力及总体盈利水平得以不断提升。 随着资本规模及经营规模的扩大,合并后的方正中期期货将以传统经纪业务为根基,加快期货金融衍生品、期货资产管理等创新业务的发展步伐,持续推动公司业务转型升级,不断提高期货业务的竞争力和总体盈利水平。 2 实习主要过程 此次实习首先熟悉了公司的组织架构,公司的文化,之后被分配进了资产管理部进行交易策略的学习研究和开发。 第一,学习了均线指标并着手编程。 第二,学习了海龟交易系统和alpha套利策略并程序化海归策略。 第三,听取同事意见并学习Tradeblazer软件(开拓者TB)。 第四,对一些现有策略的主程序完成分析报告。 第五,在Tradeblazer平台上进行收益回撤比测试。 第六,学习MATLAB的全局优化工具箱中的函数。 第七,利用MATLAB的全局优化工具箱对现有策略的参数进行优化。 第八,在完成绝大多数现有策略的报告后完成自己的策略并进行回测。 3 实习主要内容 最开始学习了均线指标,包括EMA、AMA、MACD等。之后用不同周期均线的交叉设计策略,并在MATLAB上编程实施。在编程过程中还复习了MATLAB中的一些函数。 后来参与了海龟交易系统的程序化,在没考虑卖空交易的情况下取得了较为一般的回测结果。也遇到了一些问题,海龟交易系统有短突破周期和长突破周期(shortBreak),短突破周期(shortBreak)中有短买入突破周期(shortOpenBreak)和短卖出突破周期(shortCloseBreak),相应的有长买入突破周期(longOpenBreak)和长卖出突破周期(longCloseBreak)。但是有条件限制着这些周期: shortOpenBreak > shortCloseBreak; longOpenBreak > longCloseBreak; shortOpenBreak < longOpenBreak; 当不满足这些条件时,程序会出错(数组的下标会超出范围,而且与实际策略的初衷不符)。 而这就使得用遗传算法(Genetic Algorithm)寻找参数时,函数的参数变量(parameter)的上界UB和下界LB的被压缩到了一个很小的范围,这时有几种办法。第一种是不断根据获得的参数重新调整上下界以达到最优,但是非常繁琐。第二种是当买入周期小于卖出周期时强制使卖出周期等于买入周期,当长周期小于短周期时强制使短周期等于长周期,但是在寻找参数时得到的是强制赋值没发生时候的周期,很大程度上是不符合要求的,也就是相当多的周期相同。并且这种方法一定程度上破坏了策略的内部系统。第三种方法是当条件不满足时返回一个很差的值,但是这样做的话会对内部的系统造成非常严重的破话,使系统变得十分离散,而对于遗传算法来说,连续的系统才能更好得收敛。 多次的实验参数变化都比较大,这说明模型本身并不稳定,虽然在1983年是很成功的交易法则,但是对于2010-2014年的股指期货数据来说并不显得优越。并且求得的参数与原始参数有着较大的区别,周期有不同程度的缩短,特别是平仓周期均缩短了一半以上。原因可能是商品和股指差别大,也可能是理查德丹尼斯(Richard Dennis)所运用策略的时间与现在相距较远,也可能是国内与国外市场的不同。总之策略现在不是特别实用。 后来学习了alpha策略,alpha策略的原理是根据不同行业的发展情况对HS300的成分股的比例进行超配或低配。 超配是由于行业发展良好,根据成分股在HS300指数中所占的比例,增加头寸持有的百分比。低配是由于行业发展不好,根据成分股在HS300指数中所占的比例,减少头寸持有的百分比。 之后用滤波方法分析经济周期,即在wind软件中得到数据后对GDP数据进行滤波,得到其相对较短的周期,再从软件中获得CPI数据,得到图表。根据总需求的缺口,也就是是总供给与总需求之间的缺口:供不应求,供过于求等对经济周期进行分析。 GDP上涨,CPI下降时为复苏;GDP上涨,CPI上涨时为繁荣;GDP下降,CPI上涨时为滞涨;GDP下降,CPI下降时为衰退。 在wind软件中得到行业数据,通过之前对周期的分割得到四个周期,根据行业数据的表现进行分类,从而可以对行业进行超配与低配,但是在不同的时段的周期中行业有少量波动。分类的过程可以用最小生成树对申万里分出的23个行业划分,相关程度越好的越近。之后可以划分出上中下游集群可以对不同集群寻找不同的指标进行估计。之后可以根据敏感因子对个股进行挑选。 后来对开拓者软件进行学习,基本上是基于C语言编程的规则,申明变量都在主函数之前。但是TB语言与C语言有一些区别:主函数以Begin开始,而不是main(),并且从Begin到end算作一个Bar周期,共有三类变量:Bool(布尔),Numeric(数值),string(字符串)每一类变量都有一般形式,引用形式(Ref),和序列形式(Series)。一般形式的变量仅在一个Bar周期内有效,而序列形式可以存在于所有Bar周期。中括号可以回溯数据,即引用以前数据。 在熟悉了TB之后对一些现有的策略的程序做出了一些分析,其中包含 1.dual_thrust 突破策略,Mday与Nday为买入和卖出的周期参数。 HH代表之前一定周期最高价格的最高值。 HC代表之前一定周期收盘价格的最高值。 LL代表之前一定周期最低价格的最低值。 LC代表之前一定周期收盘价格的最低值。 当价格 > Open + k1 * max(HH-LC,HC-LL)时(以Mday计算)买入。 当价格 < Open - k1 * max(HH-LC,HC-LL)时(以Nday计算) 卖出。 i_offset代表每笔交易费。 评价:用max(HH-LC,HC-LL)来衡量变动幅度是模型的亮点,此外模型简单,效果一般。 2.DynamicBreakII 周期在20到60之间,用标准差衡量波动大小,今日周期 = 昨日周期 * (1 + (今日波动-昨日波动)/ 今日波动)并且四舍五入,中线为收盘价周期内的移动平均,幅值为周期内的标准差,上线与下线分别为中线±上下比例系数×幅值。收盘价高于上线且今日最高高于周期最高买入,今日最低低于周期内移动平均时平仓。做空时相同。 评价:模型使用一般标准差而不是样本标准差从而容易导致误差,而且用标准差衡量波动会导致当大的趋势接近时会像横盘波动很大时一样给予一个很大的波动值。而此时用净利差比总利差会更好。此外模型的平仓条件比较弱,导致趋势来临时遇到小的风险便会平仓。 3.r_breaker 日内策略,当日平仓,当前一天的(最高价-最低价)> rangemin*今日开盘价时才交易,设置交易时间为中金所交易时间并在收盘前20分钟平仓,分为两个系统。 系统一:向上突破shortSetup但是下降到(当日之前最高值-shortEnter)/div 时卖空。向下突破buySetup但是上升到(buyEnter-当日之前最低值)/div 时买入。当收益达到1%今日开盘价*reverse 时止损。离收盘20分钟时强制平仓。一天只做一次交易。参数设置:shortSetup=昨日最高+f1*(昨日收盘-昨日最低),buySetup=昨日最低-f1*(昨日最高-昨日收盘),shortEnter=(昨日最高+昨日收盘)/2 + f2*((昨日最高+昨日收盘)/2 - 昨日最低),buyEnter=(昨日最低+昨日收盘)/2 + f2*((昨日最低+昨日收盘)/2 - 昨日最高)。 系统二WWW.eeelw.com:在没开始系统一之前或者系统一平仓之后才能执行,系统二执行之后系统一也可以执行。价格向上突破buyBreak时买入,价格向下突破shortBreaker时卖空,同样当收益达到1%今日开盘价*reverse 时止损,或者离收盘20分钟时强制平仓。 评价:模型十分精致,在一定通道内预期价格在内部波动,在突破通道时预期价格有一定趋势。除了两个没用到的变量外,每一个变量都有效。 4.RangeBreak 区间突破系统,根据振幅确定上下轨,突破上轨买入,突破下轨卖出,当日平仓,AvgRange=两日内(昨日最高-昨日最低)的平均并和MinRange*开盘价取最大值,UpperBand=开盘价+PercentOfRange*AvgRange或=开盘价+PercentOfRange*(昨日最高-昨日最低),上轨-StopLossSet*开盘价为多头止损,下轨+StopLossSet*开盘价为空头止损。多处程序被注释,部分变量未被使用,表明模型被不断优化,不好直接操作,但是有参考价值。 评价:1%开盘价格在前两个模型都有体现,但是不知道具体与通道的关系。 优化参数后的Rbreaker在2014/04/16-2015/01/15周期上运行效果很差;原始参数运行达到预期效果,但是导致盈利的交易占总比例非常小,资金曲线不正常。 再后来重新学习遗传算法,全局检索等MATLAB全局优化工具箱中的求解器。在自己设计的斜率—波动模型中寻找了最优参数,并获得了一般的回测结果。 4 实习的主要收获和体会 在实习过程中我学到了实用的技术和模型,对资产管理和金融工程的实际操作有了一定的了解,接受了许多同事的意见以及推荐的量化投资相关的书籍。在日常交流中对金融市场有了更加深刻的了解,并且在与不同人交流后获得了对市场的不同的观点以及他们的投资理念。 所有的模型的收益率都会随着时间而不断减小,最终的资金曲线就会走对数而逐渐趋于平缓,而新的模型和技术又会从市场中诞生。我们只有不断学习他人的模型和从他人那吸取教训才可以使模型得到改善或者创造出新的模型。金融工程的创新是需要从多种角度多种技术层面进行产生的,单个人或者专业或者方向所带来的创新是有限的,单从宏观趋势或中观行业,或微观个股的分析都有不全面的地方,所以我们需要从多种角度看问题,从多种渠道吸取经验,从而找到解决方法。 |