蔣慧敏
摘 要:使用Zigzag指標(biāo)預(yù)測(cè)期貨價(jià)格的走勢(shì)是構(gòu)造期貨程序化交易系統(tǒng)中K線特征趨勢(shì)算法交易模型的關(guān)鍵技術(shù)之一。針對(duì)期貨程序化交易系統(tǒng)中Zigzag指標(biāo)函數(shù)的實(shí)際開(kāi)發(fā)需要,提出了一種基于Zigzag的K線趨勢(shì)中的高點(diǎn)、低點(diǎn)和拐點(diǎn)的識(shí)別算法。為了提高K線特征趨勢(shì)交易模型的收益率,借助該算法對(duì)特定的期貨時(shí)間序列進(jìn)行K線模式識(shí)別,并對(duì)其Zigzag的深度、偏差和后退等參數(shù)進(jìn)行優(yōu)化。實(shí)驗(yàn)結(jié)果表明:該算法識(shí)別精度高,穩(wěn)定性好,能很好地滿足期貨程序化交易系統(tǒng)的K線趨勢(shì)拐點(diǎn)快速識(shí)別的需要。
關(guān)鍵詞:拐點(diǎn);識(shí)別算法;Zigzag指標(biāo);K線;期貨
中圖分類號(hào): TP319 文獻(xiàn)標(biāo)志碼: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)是應(yīng)用計(jì)算機(jī)和網(wǎng)絡(luò)系統(tǒng),預(yù)先設(shè)置好交易模型,并在模型條件被觸發(fā)時(shí),由計(jì)算機(jī)瞬間完成組合交易指令、實(shí)現(xiàn)自動(dòng)下單的一種新興電子交易手段。期貨程序化交易的核心價(jià)值體現(xiàn)在支持投資者交易策略的算法交易(algorithmic trading)模型的快速構(gòu)建、測(cè)評(píng)和自動(dòng)化執(zhí)行[1-2]。而在高速大規(guī)模期貨時(shí)間數(shù)據(jù)流下,設(shè)計(jì)和實(shí)現(xiàn)期貨時(shí)間序列K線趨勢(shì)特征模式的快速識(shí)別算法,是構(gòu)建期貨價(jià)格趨勢(shì)技術(shù)分析算法交易模型的核心技術(shù)和難點(diǎn)之一。
目前,研究人員提出了不少有效的基于曲線圖模式的技術(shù)分析方法用于預(yù)測(cè)期貨價(jià)格的走勢(shì)。比如,head and shoulder、cup and handle等基于形狀的模式。此外,存在許多技術(shù)指標(biāo)(technical indictor)用于估計(jì)期貨價(jià)格的反轉(zhuǎn)點(diǎn),例如,Zigzag、Moving Average、Relative strength index(RSI)[6]。本文針對(duì)某期貨程序化交易平臺(tái)中Zigzag指標(biāo)函數(shù)開(kāi)發(fā)的實(shí)際需求,提出了一種基于Zigzag的K線趨勢(shì)中的高點(diǎn)、低點(diǎn)和拐點(diǎn)的識(shí)別算法,然后應(yīng)用于該平臺(tái)系統(tǒng)中的Zigzag指標(biāo)函數(shù)。Zigzag[4]指標(biāo)函數(shù)主要用途是來(lái)標(biāo)識(shí)過(guò)去價(jià)格中的相對(duì)高低點(diǎn)(inflection point,拐點(diǎn)),并以這些點(diǎn)之間的連線來(lái)表示這段價(jià)格變動(dòng)的趨勢(shì),如圖1所示。最后,使用Zigzag指標(biāo)函數(shù)對(duì)特定的期貨時(shí)間序列模式進(jìn)行K線模式識(shí)別,并對(duì)其Zigzag參數(shù)進(jìn)行優(yōu)化。
2 識(shí)別框架
期貨時(shí)間序列(time series)數(shù)據(jù)是期貨交易系統(tǒng)中按照時(shí)間順序觀察收集得到開(kāi)盤價(jià)、最高價(jià)、收盤價(jià)、最低價(jià)等一系列價(jià)格數(shù)據(jù)。期貨時(shí)間序列的本質(zhì)包括:高維度和經(jīng)常更新,數(shù)值性,連續(xù)性。為了減少原始數(shù)據(jù)的維度(數(shù)據(jù)點(diǎn)的數(shù)量),文獻(xiàn)[7]使用了最簡(jiǎn)單的收集樣品數(shù)據(jù),但是,這種方法會(huì)受抽樣率限制,如果抽樣率太低就會(huì)扭曲時(shí)間序列特征。文獻(xiàn)[8]提出了MSM(Multi-scaled Segment Mean)時(shí)間序列表述方法,并在此基礎(chǔ)上提出了一種新的多步過(guò)濾機(jī)制。
K線(K-line)[3]是根據(jù)期貨每天走勢(shì)所形成的四個(gè)價(jià)位(包括開(kāi)盤價(jià),收盤價(jià),最高價(jià),最低價(jià))繪制而成。通過(guò)K線圖,我們即可以看到期貨價(jià)格的基本趨勢(shì),因此,K線圖在各種技術(shù)分析手段中被廣泛運(yùn)用。根據(jù)K線的計(jì)算周期,可以分為分K線,日線,月K線以及年K線等。圖2給出了一種基于K線圖表示的期貨時(shí)間序列拐點(diǎn)識(shí)別一般框架示意圖。本文是針對(duì)某期貨程序化交易系統(tǒng)中Zigzag指標(biāo)函數(shù)的實(shí)際開(kāi)發(fā)需要,設(shè)計(jì)和實(shí)現(xiàn)了一種基于Zigzag的K線趨勢(shì)中的高點(diǎn)、低點(diǎn)和拐點(diǎn)的識(shí)別算法;然后通過(guò)在大量歷史期貨數(shù)據(jù)集上的實(shí)驗(yàn)對(duì)比,對(duì)算法參數(shù)優(yōu)化,從而都能夠在某種程度上提升重要點(diǎn)識(shí)別的準(zhǔn)確率,尤其是對(duì)于相對(duì)較大規(guī)模的數(shù)據(jù)集;最后應(yīng)用于期貨程序化交易系統(tǒng)中的Zigzag函數(shù),并使用Zigzag函數(shù)對(duì)特定的期貨時(shí)間序列趨勢(shì)K線模式進(jìn)行模式識(shí)別,為期貨市場(chǎng)投資者預(yù)測(cè)反轉(zhuǎn)點(diǎn)等決策提供技術(shù)支持。endprint
3 Zigzag識(shí)別算法設(shè)計(jì)
期貨程序化交易系統(tǒng)中的K線圖是以每個(gè)分析周期中期貨合約成交的開(kāi)盤價(jià)、最高價(jià)、最低價(jià)和收盤價(jià)格等數(shù)據(jù)繪制而成,而Zigzag指標(biāo)主要用途是在K線圖中標(biāo)識(shí)所選定的期貨合約歷史成交價(jià)格中的相對(duì)高低點(diǎn),并以這些點(diǎn)之間的連線來(lái)表示該期貨合約過(guò)去價(jià)格變動(dòng)的趨勢(shì)。
感知重要點(diǎn)PIP(Perceptually Important Points)識(shí)別過(guò)程是在文獻(xiàn)[9]中首先提出來(lái)的,常用在金融應(yīng)用中完成技術(shù)模式的匹配。文獻(xiàn)[10]提出了基于PIP的ZIP(Zigzag based perceptually Important Points)識(shí)別重要點(diǎn)方法和ZM-Tree(ZIP-based Multi-way search Tree)索引結(jié)構(gòu)。然而在實(shí)際的基于Zigzag的K線趨勢(shì)中的高點(diǎn)、低點(diǎn)和拐點(diǎn)的識(shí)別算法中,一方面,要求參與計(jì)算的K線數(shù)據(jù)值是根據(jù)趨勢(shì)拐點(diǎn)來(lái)動(dòng)態(tài)確定是使用K線的最高價(jià)還是最低價(jià);另一方面,識(shí)別的趨勢(shì)拐點(diǎn)往往是與參與計(jì)算的K線深度、偏差、后退等參數(shù)有關(guān),甚至還要借助交易策略設(shè)計(jì)人員的經(jīng)驗(yàn)。已有的文獻(xiàn)中算法顯然已不能滿足實(shí)際要求,也不能滿足實(shí)際中期貨程序化交易系統(tǒng)的交易性能優(yōu)化,從而需要我們?cè)O(shè)計(jì)新的算法。
1.Zigzag指標(biāo)識(shí)別參數(shù)
使用Zigzag指標(biāo)在識(shí)別K線特征趨勢(shì)的高低點(diǎn)過(guò)程中,設(shè)置了以下3個(gè)參數(shù)(類型為整型):深度、偏差、后退,并分別記作Depth、Deviation 、Backstep。其中:
(1)Depth是設(shè)置K線圖中的高低點(diǎn)是相對(duì)過(guò)去多少個(gè)K線(Bars),缺省值是12。
(2)Deviation是設(shè)置重新計(jì)算高低點(diǎn)時(shí),同前一高低點(diǎn)的相對(duì)點(diǎn)差,缺省值是5。也就是說(shuō),如果當(dāng)前高點(diǎn)的值大于前一個(gè)高點(diǎn)和Deviation 之和,或者當(dāng)前低點(diǎn)值小于后一個(gè)低點(diǎn)和Deviation之差的情況下,則會(huì)對(duì)之前計(jì)算過(guò)的Backstep個(gè)K線的高低點(diǎn)進(jìn)行重新計(jì)算。
(3)Backstep是設(shè)置回退計(jì)算的K線個(gè)數(shù),缺省值是3。
2.Zigzag指標(biāo)識(shí)別算法
在啟動(dòng)Zigzag識(shí)別算法之前,要先選擇好準(zhǔn)備計(jì)算的期貨合約、分析周期、分析范圍,以及識(shí)別參數(shù)。Zigzag識(shí)別算法的具體步驟如下:
步驟1 對(duì)計(jì)算位置等進(jìn)行初期化。
步驟1.1 判斷是否是第一次進(jìn)行高低點(diǎn)計(jì)算,如果是,則設(shè)定計(jì)算位置為除去Depth個(gè)K線最初的部分。
步驟1.2 如果之前已經(jīng)計(jì)算過(guò),找到最近已知的三個(gè)拐點(diǎn)(高點(diǎn)或低點(diǎn)),將計(jì)算位置設(shè)置為倒數(shù)第三個(gè)拐點(diǎn)之后,重新計(jì)算最后的拐點(diǎn)。
步驟 2 從步驟1已經(jīng)設(shè)置好的計(jì)算位置開(kāi)始,將對(duì)用于存儲(chǔ)高低點(diǎn)的變量進(jìn)行初始化,準(zhǔn)備計(jì)算高低點(diǎn)。
步驟2.1 計(jì)算Depth區(qū)間內(nèi)的低點(diǎn),如果該低點(diǎn)是當(dāng)前低點(diǎn),則進(jìn)行步驟2.2的計(jì)算,并將其記錄成一個(gè)低點(diǎn)。
步驟2.2 如果當(dāng)前低點(diǎn)比上一個(gè)低點(diǎn)值小于相對(duì)點(diǎn)差Deviation,就不進(jìn)行回歸處理;否則找到了一個(gè)新的低點(diǎn),將之前Backstep個(gè)K線的記錄中,高于當(dāng)前低點(diǎn)的值清空。
步驟2.3 高點(diǎn)的計(jì)算如同步驟2.1和步驟2.2。
步驟3 從步驟1已經(jīng)設(shè)置好的計(jì)算位置開(kāi)始,定義指標(biāo)高點(diǎn)和低點(diǎn)。
步驟3.1 如果開(kāi)始位置為高點(diǎn),則接下來(lái)尋找低點(diǎn),在找到低點(diǎn)之后,將下一個(gè)尋找目標(biāo)定義為高點(diǎn);如果開(kāi)始位置為低點(diǎn),則接下來(lái)尋找高點(diǎn),在找到高點(diǎn)之后,將下一個(gè)尋找目標(biāo)定義為低點(diǎn)。
步驟3.1 如果開(kāi)始位置為低點(diǎn),則與步驟3.1反之。
假設(shè)分析區(qū)間的K線個(gè)數(shù)為N,該Zigzag識(shí)別算法復(fù)雜度為O(N)。另外,Zigzag識(shí)別算法的深度、偏差、后退3個(gè)參數(shù)值的設(shè)置對(duì)算法的性能也有影響。
4 算法測(cè)試與參數(shù)優(yōu)化
為了驗(yàn)證所提算法的有效性,我們開(kāi)發(fā)了一個(gè)可繪制K線圖以及Zigzag識(shí)別高低點(diǎn)的測(cè)試平臺(tái),如圖3所示。該平臺(tái)是在Windows 7 系統(tǒng)上用Microsoft Visual C++ 2010開(kāi)發(fā)實(shí)現(xiàn)的[5]。實(shí)驗(yàn)時(shí)用到了使用程序化交易平臺(tái)收集到的各個(gè)分析周期K線歷史行情數(shù)據(jù)供測(cè)試和繪制K線圖。其中,歷史行情數(shù)據(jù)使用Oracle 11g存儲(chǔ),期貨時(shí)間序列使用UTP協(xié)議仿真發(fā)送。
借助該平臺(tái)可幫助我們可視化地觀察不同參數(shù)的拐點(diǎn)識(shí)別情況??紤]到設(shè)置不同的參數(shù)值,會(huì)得到K線特征趨勢(shì)交易的不同拐點(diǎn)。如何設(shè)置好上述3個(gè)參數(shù)值,將有助于提高K線特征趨勢(shì)交易模型的收益率和改善算法的開(kāi)銷。傳統(tǒng)上是根據(jù)經(jīng)驗(yàn)設(shè)置上述3個(gè)參數(shù)值,或通過(guò)手動(dòng)方式改變這3個(gè)參數(shù)的值來(lái)不斷測(cè)試K線高低點(diǎn)識(shí)別的效果,進(jìn)而仿真得到合適的參數(shù)值。本文編程實(shí)現(xiàn)了3個(gè)參數(shù)自動(dòng)優(yōu)化。例如,以大連商品交易所的豆一1511合約為例測(cè)試如下:分析周期設(shè)置為1日線,開(kāi)始日期為2015-01-01,結(jié)束日期為2015-12-01,3個(gè)參數(shù)使用缺省值。通過(guò)該平臺(tái)計(jì)算可等到拐點(diǎn)數(shù)是6,高點(diǎn)數(shù)是5,低點(diǎn)是8。假定K線特征趨勢(shì)交易的測(cè)試策略:在開(kāi)倉(cāng)和平倉(cāng)傭金費(fèi)率是萬(wàn)分之五,下單手?jǐn)?shù)為1手的情況下,交易方式是若拐點(diǎn)是低點(diǎn),賣出平倉(cāng),買入開(kāi)倉(cāng);若拐點(diǎn)是高點(diǎn),買入平倉(cāng),賣出開(kāi)倉(cāng),且優(yōu)化目標(biāo)是收益最大化。
若使用缺省參數(shù),使用該平臺(tái)仿真交易后凈盈利為18033.2元。若使用下面優(yōu)化的參數(shù):深度是5,偏差是2,后退是3,在計(jì)算拐點(diǎn)后,再使用應(yīng)用測(cè)試,如圖4所示。
不難發(fā)現(xiàn),此時(shí)拐點(diǎn)數(shù)是23,仿真交易后凈盈利為147292元,比使用缺省參數(shù)的收益率大大提高。在實(shí)際使用過(guò)程中,對(duì)不同的開(kāi)倉(cāng)合約和分析周期進(jìn)行自動(dòng)優(yōu)化,會(huì)得到不同的優(yōu)化參數(shù)?;赯igzag指標(biāo)的K線特征趨勢(shì)交易模型在正式加載時(shí),要先根據(jù)具體情況采用本系統(tǒng)生成優(yōu)化的參數(shù),然后作為加載交易模型的缺省參數(shù)值。endprint
5 結(jié)束語(yǔ)
針對(duì)期貨程序化交易系統(tǒng)中Zigzag指標(biāo)函數(shù)的實(shí)際開(kāi)發(fā)需要,設(shè)計(jì)和實(shí)現(xiàn)了一種基于Zigzag的K線趨勢(shì)中的高點(diǎn)、低點(diǎn)和拐點(diǎn)的識(shí)別算法。為了提高K線特征趨勢(shì)交易模型的收益率,借助該算法對(duì)特定的期貨時(shí)間序列進(jìn)行K線模式識(shí)別,并對(duì)其Zigzag的深度、偏差和后退等參數(shù)進(jìn)行優(yōu)化。實(shí)驗(yàn)結(jié)果表明了該算法識(shí)別精度高,穩(wěn)定性好,能很好地滿足期貨程序化交易系統(tǒng)的K線趨勢(shì)拐點(diǎn)快速識(shí)別的需要。本文討論的Zigzag指標(biāo)函數(shù)現(xiàn)已經(jīng)運(yùn)用到了期貨程序化交易軟件的實(shí)際交易中。在后續(xù)的工作中,還需要對(duì)該算法使用更多的歷史數(shù)據(jù)和實(shí)時(shí)數(shù)據(jù)進(jìn)行聯(lián)合測(cè)試,并進(jìn)一步優(yōu)化其計(jì)算性能[11-12]。
參考文獻(xiàn)
[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] 范曉平,方陽(yáng).VC++.NET圖形編程——繪K線圖和條形圖[J].電腦編程技巧與維護(hù),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] 三揚(yáng)科技.Visual C++開(kāi)發(fā)入行真功夫[M].北京:電子工業(yè)出版社, 2009.
[6] 張丹.基于模糊K線的金融時(shí)間序列反轉(zhuǎn)模式挖掘研究[D].長(zhǎng)沙:湖南大學(xué),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] 葉笑天.期貨高頻交易系統(tǒng)設(shè)計(jì)的研究與改進(jìn)[D].上海:上海交通大學(xué),2014.endprint