量化交易初學者指南


本文將介紹整個量化交易系統中的一些基本概念。本文服務於兩類讀者:第一類想在量化基金找到量化交易員工做的人,第二類是但願嘗試和創建本身的零售算法交易業務的我的。

量化交易是量化金融中一個很是複雜的領域。爲了經過面試或者構建本身的交易策略 ,你可能須要花費大量的時間來得到必要的知識。不只如此,量化交易也須要你掌握大量的編程專業知識,至少應掌握一門程序語言,如MATLAB,R或Python。然而,隨着交易策略頻率的不斷增加,編程技術的重要性也日益提高,所以熟悉C/C++也一樣相當重要。web

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

  • 策略識別:尋找策略,挖掘競爭優點並肯定交易的頻率;
  • 策略回測:獲取數據,分析策略的性能和消除各類誤差;
  • 執行系統:將交易系統經紀商鏈接起來,自動交易以及最小化交易成本;
  • 風險管理:最優資本配置,最優下注規模、凱利標準和交易心理學。

首先介紹如何識別交易策略:算法

策略識別

全部的量化交易過程都始於最初的研究階段。這一研究階段包括尋找策略,觀察該策略是否與你可能正在運行的其餘策略組合相契合,得到測試策略所需的所有數據,並嘗試優化策略以得到更高的回報以及下降風險。若是你是一個零售交易員,你還須要考慮本身的資本約束,以及任何可能影響你的策略的交易成本因素。編程

與流行的見解相反,實際上你能夠至關直接地經過各類公共資料來源找到有利可圖的策略。學術界一般會按期發佈一些理論性策略的交易成果(儘管大多數未考慮交易成本)。量化金融博客會詳細地討論策略的細節,而與交易相關的雜誌則會涉及量化基金使用的一些策略。服務器

你可能會感到疑惑,爲何我的和公司會熱衷於討論他們的盈利策略,特別是當他們知作別人都使用該策略,可能會使得策略在長期裏失去效力。他們這麼作的緣由在於,一般他們並不會討論策略的確切參數和識別參數的方法,而這些優化纔是使得相對平庸的策略轉變爲盈利豐厚的策略的關鍵。事實上,建立本身獨特策略的最好方法之一即是找到相似的方法,而後執行本身的優化過程。網絡

下面列出了一些網站與博客,你能夠從他們這裏開始尋找自已的交易策略:架構

你看到的不少策略都屬於均值迴歸和趨勢跟蹤這兩個類別。均值迴歸策略試圖利用如下事實,即價格時間序列上有一個長期均值(例如兩種相關資產之間的價差),而且任何對該均值的短時間偏離最終會消失。動量策略試圖利用大衆投資心理學和大型基金的交易結構,經過在市場趨勢上搭便車的方式,在一個市場方向上積累動量並跟隨趨勢,直到趨勢逆轉。框架

交易策略的頻率是量化交易中另外一個很是重要的方面。低頻交易(LFT)一般指持有資產超過一個交易日的策略,相應地,高頻交易(HFT)則指的是在日內持有資產的策略。 超高頻交易(UHFT)是指持有大約幾秒和幾毫秒的資產的策略。 雖然做爲我的量化交易從業者也能實施HFT和UHFT,可是隻有當從業者充分掌握了相關交易技術細節以及訂單簿動態變化的知識後纔有可能。這篇介紹性的文章不會詳細地討論這些問題。編程語言

一旦肯定了一個策略或一組策略,就須要用歷史數據對其進行盈利測試,這就是回測須要處理的問題。svg

策略回測

回測的主要目標是爲了提供證據,證實上述過程當中識別的策略在應用於歷史和樣本外數據時確是有利可圖的,這爲量化交易員設定了策略在現實世界中可能如何表現的指望。然而,因爲各類緣由,回測並不必定能保證成功。這也許是量化交易中最微妙的領域,由於回測中涉及大量的誤差,必須仔細分析並儘量地消除。咱們將討論常見的誤差,包括前視誤差,生存誤差和過分優化誤差(也稱爲「數據窺探」誤差)。回測中其餘的重要問題還包括歷史數據的可得到性和乾淨程度,分析現實中策略的交易成本以及確立可靠的回測平臺。咱們將在下面的執行系統部分進一步討論交易成本。

一旦肯定了交易策略,就須要得到歷史數據以進行回測與改進交易策略。每一種資產類別都有相應的數據提供商,數據的成本一般隨着數據的質量,深度和及時性提升而提升。傳統上,量化交易的初學者(至少在零售層面)的起點是雅虎財經的免費數據集。我不會在這裏太多地討論數據提供商,而只是集中討論處理歷史數據集時會遇到的通常性問題。

在使用歷史數據時,主要的關注點包括數據的準確性與清潔程度,數據中可能出現的倖存者誤差以及根據公司市場行爲(如股利和股票拆分)對數據進行調整:

  • 數據的精度與其整體質量有關,即數據中是否包含錯誤。有時能夠很容易地發現錯誤,例如使用窄帶濾波器(spike filter)能夠挑選出時間序列數據中不正確的尖峯並進行校訂。其餘時候則很難發現錯誤,有時須要有兩個或多個數據提供商,經過對它們的數據進行比對以檢查數據的正確性;
  • 生存誤差一般是免費或廉價數據集的一個顯著特徵。含有生存誤差的數據不包含再也不交易的資產。具體到股票,這一般指已退市或破產的公司股票。這種誤差意味着,在這樣的數據集上測試的任何股票交易策略將可能比在真實世界中表現得更好,由於歷史贏家早已經被預先選擇了;
  • 公司市場行爲一般指公司開展的股利分配行爲,這些行爲一般致使股票原始價格出現跳躍,這些跳躍不該該包含在價格回報的計算中。常見的罪魁禍首是股息調整和股票分割,一般須要對這些市場行爲進行所謂的向後復權。你必須很是當心,不要混淆股票分割和真正的回報調整,許多交易員就被這類公司市場行爲欺騙了。

爲了執行回測程序須要使用軟件平臺,你能夠選擇專門的回測軟件,好比Tradestation,數值計算工具(如Excel或MATLAB)或者在編程語言(如Python或C++)中徹底自定義實現。我不會太多地討論Tradestation(或相似的軟件),Excel與MATLAB,由於我想要建立一套徹底屬於本身的技術架構。這樣作的好處之一是,即便對於很是複雜的統計交易策略,也能夠實現回測軟件和執行系統的緊密集成。對於HFT來講,本身實現交易技術系統尤其重要。

當對交易系統進行回測時,必須可以量化交易系統的執行狀況。衡量量化交易策略盈利能力的通用指標是回撤和夏普比率,最大回撤表示特定時間段(一般爲一年)帳戶淨值曲線出現的最大下跌,一般用百分比表示。由於一些統計上的緣由,LFT策略每每相比HFT策略有更大的回撤。回測能夠展現過去的最大回撤,這是該策略將來回撤表現的良好指南。第二個指標是夏普比率,它的定義是超額回報的平均值除以超額回報的標準差。在這裏,超額回報是指策略的回報與預先肯定的基準的差值,例如標普500指數或三月期國庫券收益率的差值。須要注意的是,年化收益並非普遍使用的業績標準,由於它沒有考慮交易策略的波動性(在這點上夏普比率不一樣)。

一旦已經進行了回測,發現歷史數據中沒有誤差,並且交易策略有一個較好的夏普比率和最小化的回撤,就應該創建交易執行系統了。

執行系統

執行系統是一種將交易策略生成的交易命令發送給經紀商執行的手段。儘管交易命令的生成能夠是半自動甚至全自動的,可是執行系統能夠是手動的,半手動的(即一次點擊)或全自動的。對於LFT策略,手動和半手動技術較爲常見。對於HFT策略,則有必要建立一個全自動的執行系統,這個系統一般與交易生成器緊密相聯(由於高頻交易的策略和執行系統是相互依賴的)。

建立執行系統時,須要考慮的關鍵因素是經紀商的接口,最小化交易成本(包括佣金,滑點和價差)以及實時交易系統的表現與回測表現的差別。

能夠經過多種方式鏈接到經紀商,從最簡單地直接給你的經紀商打電話,到一個全自動的高性能應用程序編程接口(API)。理想狀況下,你會但願儘量自動地執行你的交易。這使你能夠專一於進一步的研究,以及容許你運行多個策略甚至更高頻率的策略(事實上,HFT基本上不可能不自動執行)。以前簡略提到的經常使用回測軟件,如MATLAB,Excel和Tradestation能夠適用於簡單的低頻策略。然而,爲執行真正的高頻交易,確有必要構建用高性能語言(如C++)編寫的執行系統。在我之前工做的基金,咱們有一個10分鐘的交易循環,每10分鐘下載一次新的市場數據,而後在同一時間框架內執行基於該信息的交易。咱們使用的是優化過的Python腳本,然而對於分種級或秒級的交易策略,我相信C/C++會更加理想。

在較大規模的量化基金中,一般不須要量化交易員來優化執行系統。然而,在較小的基金或HFT公司中,交易員就是是執行者,所以交易員一般須要掌握更普遍的技能。記住,若是你但願受僱於一個量化基金,你的編程技能將與你的統計和計量經濟學知識同樣重要(若是不是更重要的話)。

執行系統中的另外一個主要問題是交易成本的最小化。交易成本一般有三個組成部分:佣金(或稅收),即由經紀人,交易所和證監會(或相似的政府監管機構)收取的費用。滑點,這是你打算執行的訂單與實際執行的訂單之間的價格差別,這是所交易證券的買價與賣價之間的差額。注意,價差並非常數,而且取決於市場當前流動性。

交易成本可使具備較高夏普比率的盈利可觀的策略變成具備糟糕的夏普比率的很是不盈利的策略。在回測中正確地預測交易成本是一個巨大的挑戰,根據交易策略的頻率,你須要得到歷史交易數據,甚至買賣價的Tick數據來爲預測交易成本提供依據。正由於此,大型基金中會有一整個團隊來優化交易系統的執行。考慮如下場景,一個基金須要賣出大量股票,將這麼多股票一下傾銷到市場會使得股價迅速降低,基金可能沒法得到最佳的執行價格。所以,存在一種「滴加」訂單到市場上的算法,儘管這種算法也面臨着執行價格滑動的風險。此外,有些策略會以這種必然要執行的交易爲捕獵的對象,利用交易中的低效率來盈利,這屬於基金結構套利的領域。

執行系統的最後一個主要問題是策略實際表現與回測表現的差別,這多是由多種緣由形成的。當分析回測時,咱們已經深刻討論了前視誤差和過分優化誤差。然而,對於有些策略,在部署以前進行測試並不容易,這在高頻交易策略中常常發生。執行系統和交易策略可能存在錯誤,但這些錯誤不會在回測中表現出來,但卻會在實時交易中表現出來。此外,在部署策略以後,市場可能已經受到體制變化的影響,新的監管環境,變化了的投資者情緒和宏觀經濟現象均可能致使市場行爲發生變化,從而影響了你的策略的盈利能力。

風險管理

量化交易難題的最後一個部分是風險管理。風險包括咱們以前已經討論的全部誤差。它也包括技術風險,例如與交易所聯合部署的服務器忽然出現硬盤故障,還包括經紀風險,例如經紀商破產。簡而言之,這些風險涵蓋了幾乎全部可能干擾你執行交易的事件。這些風險有各類來源,詳細地討論量化策略的風險管理須要一整本書,因此我不打算在這裏闡明全部可能的風險來源。

風險管理還包括所謂的最優資產配置,它是投資組合理論的一個分支,是一種將資本分配給不一樣策略以及在這些策略內進行交易的手段。這是一個複雜的領域,徹底理解它須要一些高深的數學知識。 最佳資本配置和交易策略的槓桿緊密相關,二者關係的通行標準稱爲凱利標準。因爲這只是一篇介紹性的文章,我不會詳細討論它的計算過程。凱利標準對回報的統計性質作出了一些假設,這些假設在金融市場中並不常常成立,所以交易者在執行交易時一般比凱利標準要求的更爲保守。

風險管理的另外一個關鍵組成部分是應對本身的心理活動。交易中會出現不少認識誤差,儘管若是讓交易策略獨自執行不受人工干預,這些誤差對算法交易來講都不是問題。一個常見的誤差是損失厭惡,即交易員因爲不肯意實現損失而遲遲不平掉已經虧損嚴重的頭寸。與之相似,盈利則實現的太早,由於交易員很是懼怕失去已經得到的利潤。 另外一個常見的誤差被稱爲近因性誤差,這表如今交易員過度強調最近發生而不是更長期的事件。最後,經典的情感誤差——恐懼和貪婪也是存在的,這些誤差每每致使槓桿不足或槓桿過分,並可能致使爆倉或減小盈利。

總結

能夠看出,量化交易是一個很是複雜雖然也很是有趣的量化金融領域。雖然我目前只觸及到這個話題的皮毛,文章就已經變得至關冗長,這篇文章裏的一兩句話均可以用一整本書來闡述。所以,在申請量化基金交易工做以前,有必要進行大量的準備工做。至少,你須要在統計學和計量經濟學方面有普遍的背景知識,具有至少一門編程語言的實踐經驗。對於更高頻率的更復雜的策略,你還可能須要掌握包括Linux內核修改、C/C++、彙編語言和網絡延遲優化。

若是你有興趣創建本身的算法交易策略,個人第一個建議是要擅長編程。我推薦你儘量多地本身構建數據抓取器,策略回測器和執行系統。若是你本身的資金正在交易,知道你已經徹底測試了你的系統並瞭解它的陷阱和具體問題,不該該讓你在晚上誰的更香嗎? 將交易系統外包出去,雖然可能在短時間內節省時間,可是從長遠來看可能付出高昂的代價。