一位從事量化交易的實戰者,手把手帶你入門量化交易!

大數據文摘出品

來源:quantstart

編譯:LYLM、笪潔瓊

本文作者是一位從事量化交易的實戰者,他將他的實戰心得寫成一個量化交易系列,本篇則是系列的第一篇,從文中你會對整個量化交易的框架、流程、以及策略思路的來源地都有相應地說明。接下來就和文摘菌一起來看看量化交易應該如何入門吧!

在此文中我將爲你們介紹一些端對端量化交易系統的基本概念,希望藉此幫助到兩類讀者:一類是希望在基金公司中找到量化交易相關工作的人,另一類是那些希望能自行利用算法進行交易的“散戶”。

量化交易是量化金融中非常複雜的一個領域。要通過面試或者制定自己專屬的交易策略,需要花費大量時間來學習相關知識。不僅如此,你還需要粗略會些編程技能,至少要會MATLAB,R語言或者Python其中一種語言。然而,隨着策略交易頻率的增加,技術方面相關性更強了,因此熟悉C語言或C++就更爲重要。

量化交易系統由四個主要部分組成:

  • 策略識別-尋找策略,利用優勢以及決定交易頻率

  • 策略回測-獲取數據,分析策略性能以及消除偏差

  • 執行系統-與經紀(開戶)公司對接,自動化交易以及最小化交易成本。

  • 風險管理-最優資本配置,“押注規模”/凱利公式以及交易心理。

我們先來看看如何確定交易策略。

 

策略識別


所有的量化交易過程都是在研究初期就開始了的。這個研究過程包括尋找策略,看看這個策略是否與你正在運行的其他策略組合相融,獲取測試策略所需的所有數據,並試圖優化策略以獲得更高的回報和/或更低的風險。如果你是以“散戶”的身份運行交易策略,還需要考慮自己的資金要求,以及每項交易成本是如何影響策略的。

與人們普遍認爲的相反,通過各種公開渠道尋找可盈利的策略是非常簡單的。學術界會定期發表理論交易結果(儘管大部分是交易成本總額),量化金融的博客通常會詳述其使用的策略,行業期刊也會概述基金採用的部分策略。

你可能會問,爲什麼個人和企業都這麼熱衷於討論自己的盈利策略呢,尤其是知道其他人都想來“分一杯羹”的情況下,可能這個策略長期來看就未必還能盈利了。原因在於,他們其實不會討論他們使用的確切的參數設置和微調方法。這些優化手段是將相對平庸的策略轉爲獲取高額收益的關鍵。實際上,創建自己獨特策略的最佳方法之一,就是找到相似的方法,然後自己進行調優。

以下是可供各位尋找策略的網址列表:

  • 社會科學研究網
    www.ssrn.com

  • arXiv量化金融
    arxiv.org/archive/q-fin

  • 尋找阿爾法
    www.seekingalpha.com

  • 精英交易員
    www.elitetrader.com

  • Nuclear Phynance
    www.nuclearphynance.com

  • Quantivity
    quantivity.wordpress.com

很多你接觸到的策略通常都是劃分到均值迴歸和趨勢追蹤/動量這兩類裏的。均值迴歸策略是一種希望利用“價格序列”(如兩個相關資產之間的價差)上的長期均值的存在以及圍繞該均值的短期波動終會迴歸的策略。動量策略試圖利用投資者心理和大型基金結構,搭上市場趨勢的順風車,這種順風車可以在一個方向聚集動量,並跟隨趨勢,直到趨勢逆轉。

定量交易的另一個非常重要的方面是交易策略的頻率。低頻交易(LFT)通常指持有資產超過一個交易日的策略。

相對應的是高頻交易(HFT),通常指持有資產不超過一個交易日的策略。超高頻交易(UHFT)指的是以秒和毫秒爲單位進行資產交易的策略。作爲散戶,高頻交易和超高頻交易當然也有可能,但只在對交易的“技術棧”和訂單動態有詳細瞭解的情況下才可實現。因此在這篇介紹性文章中不會過多涉及。

一旦確定了某個或某套策略組合,就需要根據歷史數據對其盈利能力進行測試,這就屬於回測的範疇了。

策略回測

回測的目的是提供證據,以證明通過上述過程確定的策略在應用於歷史數據和樣本外數據時是能獲得收益的。這就爲該策略在“現實世界”中的表現設定了預期。然而,由於種種原因,回測並不能完全保證策略的成功。這或許是量化交易中最爲微妙的領域了,因爲這其中有許多的偏差,需要經過深思熟慮儘量消除偏差。我們會討論一些常見的偏差類型,比如前瞻性偏差,倖存者偏差和優化偏差(也稱“數據透視”偏差)。回測中的其他重要領域還包括歷史數據的可用性和清洗程度,考慮實際的交易成本和選擇一個穩定的回測平臺。我們將在後面的執行系統部分討論交易成本。

一旦確定了一項策略,就應該獲取歷史數據用於測試,或更進一次用於改進策略。在所有種類的投資中都擁有大量的數據供應商。它們的售價會因數據質量、深度和實效性而有所區別。開始量化交易,最傳統的開始手段(至少是散戶開始的手段)是使用雅虎今日的免費數據集。在此我不會過多講述這些供應商,而是集中於討論處理歷史數據集時可能會遇到的一般問題。

對歷史數據的主要關注點在於準確性/清洗程度,倖存者偏差和企業行動(如股息和股票分割)的調整:

  • 準確度和數據的整體質量掛鉤,即它是否包含錯誤數據。有時,錯誤很容易被識別,比如使用窄帶濾波器(spike filter),在時間序列數據中挑出錯誤的“高峯”並予以糾正。而有的時候又會很難發現。這時我們通常需要有兩個或以上的供應商,來檢驗雙方的數據。

  • 倖存者偏差通常是免費或廉價數據集的一種“特徵”。數據集具有幸存者偏差意味着它不包含不再進行交易的資產。就股票而言,指的就是那些退市或破產的股票。這一偏差意味着,在這樣的數據集中,任何股票策略都會比在“現實世界”中表現更佳,因爲歷史的“贏家”已經被預先挑選出來了。

  • 企業行動包括企業進行的“後手”活動,這些活動通常會導致原始價格的階躍函數變化,不應被包含在價格回報的計算中。股息和股票分割的調整是這類變化的罪魁禍首。在每一個這類動作中都需要進行一次反向調整。我們必須非常小心,不要將股票分割和真正的回報調整混爲一談。很多交易員都被這類企業行動坑了一把。

爲了執行回測程序,我們得使用軟件平臺。你可以使用專用的回測軟件,如Tradestation,或是數字平臺,如Excel或MATLAB,或者使用編程語言如Python或C++進行自定義實現。我不會Tradestation類似的軟件或是Excel和MATLAB這類工具做過多研究,因爲我相信可以搭建一個完整的自用技術棧,原因如下:這樣做的一個好處是,哪怕是使用最先進的統計策略,都可以緊密地集成化回測軟件和執行系統。特別是對於高頻交易策略而言,使用自定義實現是至關緊要的。

回測系統時,必須能量化其性能表現。量化策略的“工業標準”指標是最大回撤率和夏普率。最大回撤率是指賬戶權益曲線在特定時間段內(通常是每年)的最大峯谷跌幅,通常以百分比的形式出現。由於許多統計因素的影響,低頻交易策略的最大回撤率通常會比高頻交易策略高。歷史回測會找出過去的最大回撤率,對未來的最大回撤率會有很大指導作用。第二個衡量指標是夏普率,定義是超額回報的平均值除以這些超額回報的標準差。

在這裏,超額回報指的是戰略回報高於預設基準,比如標準普爾500指數或是三個月的短期國庫券。請注意,年化回報通常不是衡量的指標,因爲與夏普率不同,它沒有考慮策略的波動性。

一旦策略通過回測並被認爲是基本沒有偏差,還有了好的夏普率和最低限度的回撤率,是時候建立一個執行系統了。

 

執行系統

執行系統是指將一系列由策略生成的交易發送給經紀去執行的系統。儘管實際上交易生成可以是半自動或全自動的,執行機制會是全手動、手動的(如“點擊一次”)或全自動的。對於低頻交易策略,手動和半手動技術是非常常見的。對於高頻交易策略,必須搭建一個全自動的執行機制,(由於策略和技術的相互依賴),該機制通常與交易生成器緊密耦合。

搭建執行系統時最優先考慮的是與經紀業務的對接,最小化交易成本(包括佣金、時延和差價)以及實時系統和回測系統性能之間的差異。

與經紀業務的對接實現方式有很多,可以和直接打給你的交易員,或是編寫一個全自動化的高性能程序編程接口(API)。理想情況下是希望儘可能地自動化執行交易操作。能讓你有時間關注於進一步的研究,並且允許你同時運行多個策略,甚至更高頻的策略(實際上如果沒有自動執行,高頻交易基本上是不可能實現的)。上述常用的回測軟件,如MATLAB、Excel和Tradestation,使用較低頻率和較簡單的策略時表現尚可。然而,如果要執行高頻交易策略的話,必須要用C++等高性能語言編寫搭建一個自用執行系統。說個題外話,在我以前工作的基金機構中,我們有個10分鐘的“交易循環”,每10分鐘下載一次新的市場數據,然後在同一時間段內基於該信息進行交易,使用的是優化後的Python腳本。若是分鐘級或秒級的數據,我相信C語言或C++會更理想。

在更大的基金機構中,優化執行往往不是量化交易員的職責。然而在小公司或是高頻交易型公司,交易員就是執行者,因此需要更廣泛的技能組合。請記住,如果你想在基金機構工作,你的編程技術和你的統計學和計量經濟學知識同樣重要,甚至更重要。

另外一個在執行層面需關注的重要問題是如何最小化交易成本。交易成本通常由三個部分組成,佣金(或納稅),由經紀機構、交易所和證監會(或其他類似的政府監管機構)規定收取的費用;時延,即打算提交訂單的時間和實際提交訂單的時間差;差價,即交易證券買賣價格的差別。請注意,差價不是恆定的,而是取決於當前市場上的流動性(如買賣訂單是否可用)。

交易成本會區分開擁有良好夏普率的可盈利策略和擁有較差夏普率的不可盈利策略。使用回測較難準確預測出交易成本。根據策略的頻率,需獲得歷史的交易數據,其中包括買賣價格的勾選數據。基於這些原因,大型基金機構的整個量化團隊都會致力於優化執行情況。

考慮這樣的場景:某基金機構需要拋售大量交易(這樣做的原因有很多)。拋售如此大的份額到市場上,會迅速地壓低價格,從而得不到最佳執行。因此將訂單慢慢流入市場的算法是存在的,儘管這樣做會導致基金機構時延的風險。除此之外,還有一些針對這些必然性並利用其效率低下的其他策略。這就屬於基金結構套利的範疇。

行系統最後一個主要問題是關於策略性能和回測性能的差異的。產生差異的原因有很多。我們在考慮回測時,已經深入討論過前瞻性偏差和優化偏差的問題了。然而,有些策略在部署之前並不能很好地測試出這些偏差。這主要發生在高頻交易中。在執行系統和交易策略本身都可能存在漏洞,這些漏洞並不會在回測時出現,但卻會出現在實時交易中。在策略實施後,市場可能會出現制度變化。新的監管環境、不斷變化的投資者情緒和宏觀經濟現象都可能導致市場行爲的變化,從而改變你策略的盈利能力。

 

風險管理

量化交易的最後一塊拼圖是風險管理流程。“風險”包括了之前討論的各種偏差。還包括了技術風險,比如交易所的突然故障。還包括了經紀風險,比如經紀公司破產(這並非不可能,鑑於最近對曼氏金融這類情況的恐慌情緒)。簡而言之,風險涵蓋所有可能干涉交易實施的因素,來源可能有很多。很多作者用了整本書去講述量化策略的風險管理,所以在這我不會展開講述所有可能的風險來源。

風險管理還包括了所謂的最優資本配置,這是投資組合理論的分支。通過這種方式,資本被分配到一系列不同的策略以及策略中的交易上。這是個複雜的領域,依賴於一些高深的數學。與最優資本配置和策略槓桿相關的行業標準稱爲凱利公式。因爲這是一篇介紹性文章,我不會深入講述其計算方法。凱利公式對回報的統計性質作出了一些假設,在金融市場上未必成立,因此交易員在對其實施上通常持保守態度。

風險管理的另一關鍵組成部分是管理個人心理狀況。在交易過程中可能會出現有許多的認知偏差。雖然在算法交易中,大家公認這不算是大問題,前提是讓策略獨自完成決策。一個常見的認知偏差是損失厭惡,即在處於損失狀態,由於損失的痛苦,人們通常不願進行斬倉處理。同樣,還會發生由於害怕損失已經獲得的足夠多的利潤,從而提前取出利潤。另外一個常見的認知偏差是近期偏差。當交易員着眼於近期事件而非長遠時,這種認知偏差就會出現。當然還有另外一對經典的情緒偏差——恐懼和貪婪。這通常會導致槓桿過低或過高,從而導致崩盤(例如賬戶權益趨於零或更糟)或減少收益。

 

總結

可以看出,量化交易是一個極其複雜但很有趣的量化金融領域。在這篇文章中,我只涉及到其皮毛,但篇幅已經很長了。有很多我只提了一兩句的內容,都有很多對應的書籍和論文針對該內容詳細展開。因此在申請量化交易崗位前,必須進行大量的基礎性研究工作。至少你要在統計學和計量經濟學方面有廣泛的背景,並利用如MATLAB、Python或R等編程語言進行實現的大量實操經驗。在更高頻的更復雜的策略中,所需技術可能還包括Linux內核修改,C語言/C++,其它語言和優化網絡延遲等。

如果你有興趣嘗試搭建自己的算法交易策略,我的首要提議是善於編程。我個人偏好是儘可能多地去搭建自己的數據採集器,策略回測和執行系統。如果你的資金要冒險投資,那麼對系統進行過全面測試並瞭解其缺陷和特定問題後,你晚上睡覺才能安眠吧?將此外包給供應商,雖然短期內可以節省時間,但長期來看代價是昂貴的。

相關報道:

https://www.quantstart.com/articles/Beginners-Guide-to-Quantitative-Trading/

點「在看」的人都變好看了哦!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章