基于Zigzag的K线趋势拐点识别算法设计与实现

计算技术与自动化 / 2018年04月29日 01:01

数码

前行业发展的总趋势,在矿山设备... 浮选机是实现各种贵重矿物浮选的...

蒋慧敏

摘 要:使用Zigzag指标预测期货价格的走势是构造期货程序化交易系统中K线特征趋势算法交易模型的关键技术之一。针对期货程序化交易系统中Zigzag指标函数的实际开发需要,提出了一种基于Zigzag的K线趋势中的高点、低点和拐点的识别算法。为了提高K线特征趋势交易模型的收益率,借助该算法对特定的期货时间序列进行K线模式识别,并对其Zigzag的深度、偏差和后退等参数进行优化。实验结果表明:该算法识别精度高,稳定性好,能很好地满足期货程序化交易系统的K线趋势拐点快速识别的需要。

关键词:拐点;识别算法;Zigzag指标;K线;期货

中图分类号: TP319 文献标志码:A

Design and Implementation of the K-line Trend Inflection Point Recognition Algorithm Based on Zigzag

JIANG Hui-min

(Department of Information Engineering,Hefei University of Technology,Xuanchen,Anhui 242000,China)

Abstract:Applying Zigzag index to predict the trend of futures prices is one of the concerns of building algorithm trading model for K-line trend features in future program trading system.According to the actual development of Zigzag index function in a futures program trading system, the recognition algorithm of the high, low and inflection points for K-line trend based on Zigzag is proposed.In order to improve the return rate on the K-line trend trading model, the above algorithm in specific K-line pattern recognition of futures time series is employed, and the deep, deviation and back parameters of Zigzag are optimized.The experimental results show that the algorithm with high identification accuracy and good stability can meet the needs of rapid recognition of K-line trend inflection point in the futures program trading system.

Key words:inflection;recognition algorithm;Zigzag index;K-line;futures

1 引 言

期货程序化交易(program trading)是应用计算机和网络系统,预先设置好交易模型,并在模型条件被触发时,由计算机瞬间完成组合交易指令、實现自动下单的一种新兴电子交易手段。期货程序化交易的核心价值体现在支持投资者交易策略的算法交易(algorithmic trading)模型的快速构建、测评和自动化执行[1-2]。而在高速大规模期货时间数据流下,设计和实现期货时间序列K线趋势特征模式的快速识别算法,是构建期货价格趋势技术分析算法交易模型的核心技术和难点之一。

目前,研究人员提出了不少有效的基于曲线图模式的技术分析方法用于预测期货价格的走势。比如,head and shoulder、cup and handle等基于形状的模式。此外,存在许多技术指标(technical indictor)用于估计期货价格的反转点,例如,Zigzag、Moving Average、Relative strength index(RSI)[6]。本文针对某期货程序化交易平台中Zigzag指标函数开发的实际需求,提出了一种基于Zigzag的K线趋势中的高点、低点和拐点的识别算法,然后应用于该平台系统中的Zigzag指标函数。Zigzag[4]指标函数主要用途是来标识过去价格中的相对高低点(inflection point,拐点),并以这些点之间的连线来表示这段价格变动的趋势,如图1所示。最后,使用Zigzag指标函数对特定的期货时间序列模式进行K线模式识别,并对其Zigzag参数进行优化。

2 识别框架

期货时间序列(time series)数据是期货交易系统中按照时间顺序观察收集得到开盘价、最高价、收盘价、最低价等一系列价格数据。期货时间序列的本质包括:高维度和经常更新,数值性,连续性。为了减少原始数据的维度(数据点的数量),文献[7]使用了最简单的收集样品数据,但是,这种方法会受抽样率限制,如果抽样率太低就会扭曲时间序列特征。文献[8]提出了MSM(Multi-scaled Segment Mean)时间序列表述方法,并在此基础上提出了一种新的多步过滤机制。

K线(K-line)[3]是根据期货每天走势所形成的四个价位(包括开盘价,收盘价,最高价,最低价)绘制而成。通过K线图,我们即可以看到期货价格的基本趋势,因此,K线图在各种技术分析手段中被广泛运用。根据K线的计算周期,可以分为分K线,日线,月K线以及年K线等。图2给出了一种基于K线图表示的期货时间序列拐点识别一般框架示意图。本文是针对某期货程序化交易系统中Zigzag指标函数的实际开发需要,设计和实现了一种基于Zigzag的K线趋势中的高点、低点和拐点的识别算法;然后通过在大量历史期货数据集上的实验对比,对算法参数优化,从而都能够在某种程度上提升重要点识别的准确率,尤其是对于相对较大规模的数据集;最后应用于期货程序化交易系统中的Zigzag函数,并使用Zigzag函数对特定的期货时间序列趋势K线模式进行模式识别,为期货市场投资者预测反转点等决策提供技术支持。endprint

3 Zigzag识别算法设计

期货程序化交易系统中的K线图是以每个分析周期中期货合约成交的开盘价、最高价、最低价和收盘价格等数据绘制而成,而Zigzag指标主要用途是在K线图中标识所选定的期货合约历史成交价格中的相对高低点,并以这些点之间的连线来表示该期货合约过去价格变动的趋势。

感知重要点PIP(Perceptually Important Points)识别过程是在文献[9]中首先提出来的,常用在金融应用中完成技术模式的匹配。文献[10]提出了基于PIP的ZIP(Zigzag based perceptually Important Points)识别重要点方法和ZM-Tree(ZIP-based Multi-way search Tree)索引结构。然而在实际的基于Zigzag的K线趋势中的高点、低点和拐点的识别算法中,一方面,要求参与计算的K线数据值是根据趋势拐点来动态确定是使用K线的最高价还是最低价;另一方面,识别的趋势拐点往往是与参与计算的K线深度、偏差、后退等参数有关,甚至还要借助交易策略设计人员的经验。已有的文献中算法显然已不能满足实际要求,也不能满足实际中期货程序化交易系统的交易性能优化,从而需要我们设计新的算法。

1.Zigzag指标识别参数

使用Zigzag指标在识别K线特征趋势的高低点过程中,设置了以下3个参数(类型为整型):深度、偏差、后退,并分别记作Depth、Deviation 、Backstep。其中:

(1)Depth是设置K线图中的高低点是相对过去多少个K线(Bars),缺省值是12。

(2)Deviation是设置重新计算高低点时,同前一高低点的相对点差,缺省值是5。也就是说,如果当前高点的值大于前一个高点和Deviation 之和,或者当前低点值小于后一个低点和Deviation之差的情况下,则会对之前计算过的Backstep个K线的高低点进行重新计算。

(3)Backstep是设置回退计算的K线个数,缺省值是3。

2.Zigzag指标识别算法

在启动Zigzag识别算法之前,要先选择好准备计算的期货合约、分析周期、分析范围,以及识别参数。Zigzag识别算法的具体步骤如下:

步骤1 对计算位置等进行初期化。

步骤1.1 判断是否是第一次进行高低点计算,如果是,则设定计算位置为除去Depth个K线最初的部分。

步骤1.2 如果之前已经计算过,找到最近已知的三个拐点(高点或低点),将计算位置设置为倒数第三个拐点之后,重新计算最后的拐点。

步骤 2 从步骤1已经设置好的计算位置开始,将对用于存储高低点的变量进行初始化,准备计算高低点。

步骤2.1 计算Depth区间内的低点,如果该低点是当前低点,则进行步骤2.2的计算,并将其记录成一个低点。

步骤2.2 如果当前低点比上一个低点值小于相对点差Deviation,就不进行回归处理;否则找到了一个新的低点,将之前Backstep个K线的记录中,高于当前低点的值清空。

步骤2.3 高点的计算如同步骤2.1和步骤2.2。

步骤3 从步骤1已经设置好的计算位置开始,定义指标高点和低点。

步骤3.1 如果开始位置为高点,则接下来寻找低点,在找到低点之后,将下一个寻找目标定义为高点;如果开始位置为低点,则接下来寻找高点,在找到高点之后,将下一个寻找目标定义为低点。

步骤3.1 如果开始位置为低点,则与步骤3.1反之。

假设分析区间的K线个数为N,该Zigzag识别算法复杂度为O(N)。另外,Zigzag识别算法的深度、偏差、后退3个参数值的设置对算法的性能也有影响。

4 算法测试与参数优化

为了验证所提算法的有效性,我们开发了一个可绘制K线图以及Zigzag识别高低点的测试平台,如图3所示。该平台是在Windows 7 系统上用Microsoft Visual C++ 2010开发实现的[5]。实验时用到了使用程序化交易平台收集到的各个分析周期K线历史行情数据供测试和绘制K线图。其中,历史行情数据使用Oracle 11g存储,期货时间序列使用UTP协议仿真发送。

借助该平台可帮助我们可视化地观察不同参数的拐点识别情况。考虑到设置不同的参数值,会得到K线特征趋势交易的不同拐点。如何设置好上述3个参数值,将有助于提高K线特征趋势交易模型的收益率和改善算法的开销。传统上是根据经验设置上述3个参数值,或通过手动方式改变这3个参数的值来不断测试K线高低点识别的效果,进而仿真得到合适的参数值。本文编程实现了3个参数自动优化。例如,以大连商品交易所的豆一1511合约为例测试如下:分析周期设置为1日线,开始日期为2015-01-01,结束日期为2015-12-01,3个参数使用缺省值。通过该平台计算可等到拐点数是6,高点数是5,低点是8。假定K线特征趋势交易的测试策略:在开仓和平仓佣金费率是万分之五,下单手数为1手的情况下,交易方式是若拐点是低点,卖出平仓,买入开仓;若拐点是高点,买入平仓,卖出开仓,且优化目标是收益最大化。

若使用缺省参数,使用该平台仿真交易后净盈利为18033.2元。若使用下面优化的參数:深度是5,偏差是2,后退是3,在计算拐点后,再使用应用测试,如图4所示。

不难发现,此时拐点数是23,仿真交易后净盈利为147292元,比使用缺省参数的收益率大大提高。在实际使用过程中,对不同的开仓合约和分析周期进行自动优化,会得到不同的优化参数。基于Zigzag指标的K线特征趋势交易模型在正式加载时,要先根据具体情况采用本系统生成优化的参数,然后作为加载交易模型的缺省参数值。endprint

5 结束语

针对期货程序化交易系统中Zigzag指标函数的实际开发需要,设计和实现了一种基于Zigzag的K线趋势中的高点、低点和拐点的识别算法。为了提高K线特征趋势交易模型的收益率,借助该算法对特定的期货时间序列进行K线模式识别,并对其Zigzag的深度、偏差和后退等参数进行优化。实验结果表明了该算法识别精度高,稳定性好,能很好地满足期货程序化交易系统的K线趋势拐点快速识别的需要。本文讨论的Zigzag指标函数现已经运用到了期货程序化交易软件的实际交易中。在后续的工作中,还需要对该算法使用更多的历史数据和实时数据进行联合测试,并进一步优化其计算性能[11-12]。

参考文献

[1] TRELEAVEN P, GALAS M, LALCHAND V.Algorithmic trading review[J].Communications of the ACM, 2013, 56(11):76-85.

[2] NUTI G, MIRGHAEMI M, TRELEAVEN P, et al.Algorithmic trading[J].IEEE Computer, 2011, 44(11):61-69.

[3] 范曉平,方阳.VC++.NET图形编程——绘K线图和条形图[J].电脑编程技巧与维护,2009,(5):5-13.

[4] PHETKING C, SAP M N M, SELAMAT A.Identifying zigzag based perceptually important points for indexing financial time series[A].Proceedings of the 2009 8th IEEE International Conference on Cognitive Informatics (ICCI 2009)[C].New York, NY, USA: IEEE Computer Society Press, 2009.295-301.

[5] 三扬科技.Visual C++开发入行真功夫[M].北京:电子工业出版社, 2009.

[6] 张丹.基于模糊K线的金融时间序列反转模式挖掘研究[D].长沙:湖南大学,2012.

[7] ASTROM K J.On the choice of sampling rates in parametric identification of time series[J].Information Sciences,1969, 1 (3):273-278.

[8] LIAN X, CHEN L, YU J X, et al.Similarity match over high speed time-series streams[A].Proceedings of the 23rd IEEE International Conference on Data Engineering[C].Istanbul:ICDE,2007.1086-1095.

[9] CHUNG F L, FU T C, LUK R, et al.Stock time series visualization based on data point importance[J].Engineering Applications of Artificial Intelligence.2008,21:1217-1232.

[10] CHAWALSAK P, ALI S, AMJAD R, et al.Index financial time series based on zigzag-perceptually important points[J].Journal of Computer Science.2010,6 (12): 1389-1395.

[11] SHI L, KANG C.A stochastic dominance test for the efficiency of program trading algorithm[J].RISTI-Revista Iberica de Sistemas e Tecnologias de Informacao, 2016, 2016(E9):119-132.

[12] 叶笑天.期货高频交易系统设计的研究与改进[D].上海:上海交通大学,2014.endprint

1.环球科技网遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.环球科技网的原创文章,请转载时务必注明文章作者和"来源:环球科技网",不尊重原创的行为环球科技网或将追究责任;3.作者投稿可能会经环球科技网编辑修改或补充。