蔡自偉
(運城學(xué)院數(shù)學(xué)與信息技術(shù)學(xué)院,山西運城 044000)
量化交易[1]通常是指交易者使用的一種交易手段,通過分析對應(yīng)的行情以及政策,并形成穩(wěn)定的交易系統(tǒng)。量化交易過程中最重要的是行之有效的交易策略[2]。量化交易需要利用計算機技術(shù)按照這些策略進行自動化交易。目前,在股票投資比較成熟的市場里面,量化交易已經(jīng)存在數(shù)十年,并取得了非常好的成績。隨著股票交易市場規(guī)模日益擴大,量化交易系統(tǒng)的應(yīng)用更加廣泛。我國的投資環(huán)境有自身的發(fā)展規(guī)律和特點,隨著量化投資理論和實踐的發(fā)展,量化交易這種投資理念在國內(nèi)也逐漸興起。盡管國內(nèi)的量化交易起步較晚,但是發(fā)展迅猛。由于A股市場交易的特殊性,發(fā)展和A股市場實際情況相適應(yīng)的量化交易系統(tǒng)顯得尤為重要。當(dāng)然,對于股票交易者而言,功能強大、收益客觀、性能穩(wěn)定的的量化交易系統(tǒng)才是市場需要的。
量化交易作為一種新穎高效的股票交易手段,在技術(shù)上主要通過數(shù)學(xué)方法對交易數(shù)據(jù)進行建模,進而通過計算機實現(xiàn)自動化交易。隨著大數(shù)據(jù)技術(shù)快速發(fā)展,量化交易系統(tǒng)能夠做到更加智能化,從而支撐股票交易人員做出更高收益的投資決策。
實現(xiàn)的交易系統(tǒng)在技術(shù)上采用靈活性較強的Django 框架,不僅能實現(xiàn)美觀大方的界面,更重要的是便于系統(tǒng)按需調(diào)整。該量化交易系統(tǒng)實現(xiàn)了股票交流區(qū)、策略編輯回測及股票指標(biāo)可視化[3]等功能。
通過需求分析,基于MTV[4]架構(gòu)思想設(shè)計了該系統(tǒng),系統(tǒng)包含如圖1所示的功能。
圖1 系統(tǒng)框圖
第一部分是登錄注冊模塊,實現(xiàn)了注冊、登錄功能,用于系統(tǒng)用戶管理。
第二部分是行情信息模塊,主要用于展示股票的歷史行情和實時行情。歷史行情除了能夠查看指定股票在指定時間的最低價格、最高價、量比、換手率等數(shù)據(jù)外,還能查看各種趨勢圖。實時行情只能展示某只股票當(dāng)天的基本信息。
第三部分是個股信息模塊,它主要負責(zé)展示個股信息,包括股票交易數(shù)據(jù)和股票相關(guān)的新聞。
第四部分是股票池模塊,允許用戶把一類股票放在一起形成一個股票池。
第五部分是策略模塊,主要實現(xiàn)了生成交易策略,對策略進行回測和顯示策略回測結(jié)果等功能。
第六部分是股票討論區(qū)模塊,主要用于承載用戶針對股票的討論和分析。
系統(tǒng)基于MTV 思想,設(shè)計為三層,分別是視圖層、控制層和數(shù)據(jù)層。量化交易系統(tǒng)包圖如圖2 所示。
圖2 量化交易系統(tǒng)包圖
簡要說明一下量化交易系統(tǒng)各個功能層級的作用。視圖層主要完成用web交互面的相關(guān)功能,包含登錄注冊等??刂茖又饕糜陧憫?yīng)視圖層的輸入,包含對量化交易系統(tǒng)相關(guān)操作的響應(yīng)。數(shù)據(jù)層主要完成數(shù)據(jù)的處理和計算。量化交易系統(tǒng)視圖層主要提供了直接面向交易者的UI界面,web界面的框圖如圖3所示。
圖3 web界面
量化交易系統(tǒng)的一個重要特點就是充分結(jié)合了大數(shù)據(jù)分析技術(shù)。系統(tǒng)涉及的數(shù)據(jù)主要包含以下幾個方面,分別是股票交易數(shù)據(jù)、相關(guān)股票的新聞和系統(tǒng)自身產(chǎn)生的數(shù)據(jù)。股票交易數(shù)據(jù)的獲取途徑較多,目前很多財經(jīng)網(wǎng)站都開放了股票數(shù)據(jù)獲取接口。同樣,新聞數(shù)據(jù)也可以從網(wǎng)絡(luò)上收集而來。根據(jù)大數(shù)據(jù)處理流程要求,數(shù)據(jù)處理的主要分成三步。第一步是數(shù)據(jù)采集與預(yù)處理;第二步是數(shù)據(jù)變換。第三步是數(shù)據(jù)處理。
金融行業(yè)多年來積累了非常豐富的數(shù)據(jù),數(shù)據(jù)量來源多,數(shù)據(jù)獲取比較容易。所使用的數(shù)據(jù)主要來源于網(wǎng)易財經(jīng)網(wǎng)站。主要采集了其中的股票數(shù)據(jù),這些數(shù)據(jù)包含用于股票量化交易分析的全部數(shù)據(jù)。
開源社區(qū)提供了Tushare 開源庫,Tushare 實現(xiàn)了各種獲取數(shù)據(jù)的接口。采用的接口依賴requests[5]技術(shù),簡述如下:
requests技術(shù)主要使用了Request容器對象和Re?sponse 對象。Request 對象通過構(gòu)造url 向HTTP 服務(wù)器請求資源,Request 請求返回的是包含了HTTP 資源的Response 對象,由此系統(tǒng)可獲取從HTTP 服務(wù)器返回的所有相關(guān)數(shù)據(jù)。系統(tǒng)自動爬取數(shù)據(jù)的過程可以總結(jié)為:通過request 方法獲取html 數(shù)據(jù)后,根據(jù)指定條件篩選出對應(yīng)的數(shù)據(jù),然后把數(shù)據(jù)存儲到數(shù)據(jù)庫中,流程表示如圖4。
圖4 自動數(shù)據(jù)爬取流程
數(shù)據(jù)采集完成以后,系統(tǒng)獲取了大量用于計算的原始數(shù)據(jù)。但是這些數(shù)據(jù)并不能直接使用,需要先進行預(yù)處理。預(yù)處理主要包含唯一值分析、無效值分析和異常值分析。由于從網(wǎng)上爬取的數(shù)據(jù)存在一些不完整和異常的情況,比如空值、空字符串等。因此,在對數(shù)據(jù)進行分析處理前,需要對這些異常值進行修補。為了簡化系統(tǒng)設(shè)計,預(yù)處理仍然使用了開源庫。擅長完成數(shù)據(jù)預(yù)處理的開源庫是Pandas[6],預(yù)處理流程如圖5所示。
圖5 數(shù)據(jù)預(yù)處理流程
在大數(shù)據(jù)開源包Pandas 中,有針對各種數(shù)據(jù)的處理接口。由于從網(wǎng)易財經(jīng)中獲取的是csv 格式文件,適合的讀取函數(shù)為read_csv[7]。數(shù)據(jù)獲取后第一步是進行空值判斷,對空值進行填充;第二步是進行異常值和重復(fù)值判斷和處理;第三步是進行一致性處理后導(dǎo)出數(shù)據(jù)存放在mysql數(shù)據(jù)庫中。
數(shù)據(jù)變換和處理的流程如圖6所示。
圖6 數(shù)據(jù)可視化流程圖
用戶通過網(wǎng)頁上的選項和按鈕發(fā)布數(shù)據(jù)處理的命令,系統(tǒng)從mysql 數(shù)據(jù)庫中獲取預(yù)處理完成后的數(shù)據(jù)。一方面對這些數(shù)據(jù)進行大數(shù)據(jù)分析,另外一方面把這些數(shù)據(jù)和分析結(jié)果用可視化的手段呈現(xiàn)在web界面上。主要包含股票的K線圖,MACD曲線,成交量變化曲線,KDJ 變化曲線,RSI 變化曲線等一系列個股相關(guān)的指標(biāo)數(shù)據(jù)。
量化交易策略是量化交易系統(tǒng)的重點,目前成熟的量化交易策略很多,比如海龜策略,均線回歸策略,動量交易策略[9]等。動量交易策略是一種經(jīng)典的并與A股交易特點相適應(yīng)的一種交易策略,所以系統(tǒng)選擇了動量交易策略。通過對動量交易策略進行分析,在保證基本思路不改變的情況下對其進行了適當(dāng)?shù)恼{(diào)整。在策略運行之前要預(yù)先設(shè)定一些參數(shù),包括換倉頻率,運行周期,用戶感興趣的股票池等。股票池選取的原因是為了避免對整個股票市場的個股進行計算,減少計算復(fù)雜度,增強系統(tǒng)的實時性,但這依賴用戶的經(jīng)驗。這是一種折中的方案,其操作的具體步驟安排如下。
首先,計算單支股票連續(xù)J個交易日的累計收益率,計算公式表示如下:
Rit代表其中的第i支個股第t日的收益率,RiJ代表J日累計收益率,其次,對RiJ排序,選擇排名靠前的股票形成一個候選集合,最后,從候選集合中買入股票,按照預(yù)先設(shè)定的持倉時間進行持倉。
動量交易策略只考慮了收益率,而忽略了該收益率所承擔(dān)的風(fēng)險,系統(tǒng)改進了常規(guī)的動量交易策略,通過引入夏普比率這一風(fēng)險評價指標(biāo)來評估策略風(fēng)險。其中,夏普比率[10]的計算過程可以用如下方法表示:
式中E(RP)表示投資組合的收益率,Rf表示無風(fēng)險收益率,αp表示投資組合的風(fēng)險。夏普比率越大,說明該股票風(fēng)險投資回報越高。用戶可以通過評估自己的風(fēng)險承受能力來選擇策略。
系統(tǒng)除了支持策略選擇外,還支持策略編輯,整個量化交易系統(tǒng)的策略模塊實現(xiàn)框圖如圖7所示。
圖7 量化交易策略模塊
經(jīng)測試,系統(tǒng)的登錄界面如圖8 所示,界面設(shè)計簡潔大方,方便易用。
圖8 系統(tǒng)主界面
動量交易策略回測結(jié)果如圖9 所示。從圖中可以看到,持倉時間設(shè)定為2018 年5 月10 到2019 年5月10,調(diào)倉頻率設(shè)置為10,當(dāng)前股票池選擇了四只股票,分別是000002(萬科A)、002001(新和成)、002002(宏達興業(yè))和300001(特銳德)。點擊web 頁面按鈕開始回測,從web 頁面觀察返回的結(jié)果。結(jié)果顯示:該策略的勝率為95.65%,夏普比率為1.56%,結(jié)果較為理想。
圖9 回測結(jié)果
量化交易系統(tǒng)利用Django web 框架和大數(shù)據(jù)處理技術(shù),實現(xiàn)了股票行情展示、大數(shù)據(jù)分析和策略回測等功能。系統(tǒng)的特點在于指標(biāo)的可視化增強,便于用戶使用。系統(tǒng)仍有許多不足之處,例如交易策略設(shè)計的便捷性有待進一步優(yōu)化,股票數(shù)據(jù)源更新不穩(wěn)定,需要進一步改進。