蔣慧敏



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