+
成功回測算法交易策略,第1部分 2014年6月30日,上午5:00 3條評論點擊:1498 本文延續了該系列的量化交易,從而拉開了與初學者指南和策略鑑定。 這兩個時間越長,更多地參與文章已經非常流行在這方面因此不適繼續,並提供詳細的戰略回溯測試的話題。 算法回溯測試需要的許多領域,包括心理學,數學,統計學,軟件開發和市場/外匯微觀結構的知識。 我不能希望覆蓋在一篇文章中所有這些話題,所以我要去他們分裂成兩個或三個小塊。 是什麼將我們在本節討論? 通過定義回溯測試生病開始,然後我將介紹它是如何進行的基礎知識。 然後,我將闡明在我們的初學者指南中談到,以量化交易的偏見。 接下來,我將介紹各種可用的回溯測試軟件選項的比較。 在隨後的文章中,我們將著眼於戰略的實現,常常幾乎沒有提到或忽略的細節。 我們也將考慮如何通過包括貿易交流的特質的回溯測試過程更加逼真。 然後,我們將討論交易成本,如何正確地模擬它們在後台測試環境。 我們將結束與在我們backtests的性能的討論和最後提供一個共同的定量策略,稱為均值回复對貿易的一個例子。 讓我們通過討論回溯測試是什麼,以及我們為什麼要隨身攜帶,在我們的算法交易開始。 什麼是回測? 算法交易脫穎而出從其他類型的投資類的,因為我們可以更可靠地提供有關過去的表現未來業績的預期,由於豐富的數據可用性的結果。 由此進行的過程被稱為回測。 簡單來說,回溯測試是通過暴露特定策略算法到流的歷史財務數據,這導致了一系列的交易信號。 每筆交易(我們將在這裡指的是兩個信號的往返)將有一個相關的盈利或虧損。 這個利潤/虧損在你的策略回測的時間的積累會導致利潤總額和虧損(也稱為PL或損益)。 這是思想的精髓,當然雖然魔鬼總是在細節中! 什麼是關鍵原因,回溯測試的算法策略? 過濾如果你還記得從戰略鑑定的物品。 我們在初期研究階段的目標是建立一個戰略管道,然後過濾掉任何不符合一定的標準戰略。 回溯測試為我們提供了另一種過濾機制,我們可以消除不符合我們的表現需要的戰略。 模型回溯測試可以讓我們(安全!)檢驗的某些市場現象,如交易成本,訂單路由,延遲,流動性或其他市場微觀結構問題的新車型。 雖然優化策略優化是充滿偏見,回溯測試可以讓我們通過修改與戰略相關的參數的數量或價值和重新計算其性能,以增加戰略的表現。 驗證我們的策略往往是來源於外部,通過我們的策略管道。 回測一個策略確保它沒有被正確實現。 雖然我們很少有機會獲得由外部戰略產生的信號,我們會經常有機會獲得性能指標,如夏普比率和縮編的特點。 因此,我們可以將它們與我們自己的實現進行比較。 回溯測試提供了一系列的優勢,為算法交易。 然而,並不總是能夠直接地回測一個策略。 在一般情況下,作為策略的頻率增加,變得難以正確模擬市場和交流的微觀結構的影響。 這導致不太可靠backtests並且因此選擇的策略的一個棘手的評價。 這是一個特殊的問題,其中在執行系統的關鍵在於策略性能,與超高頻的算法。 不幸的是,回溯測試充滿了所有類型的偏見。 我們已經談到了一些在以前的文章中這些問題,但現在我們將討論他們在深度。 偏見影響戰略Backtests 有許多偏差,可以影響的驗測試策略性能。 不幸的是,這些偏見有一種傾向,誇大業績,而不是從它減損。 因此,你應該總是考慮回測是一個理想化的上限戰略的實際表現。 這幾乎是不可能消除算法交易的偏見,因此我們的工作是盡量減少他們的最好的,我們可以為了使我們的算法策略的決策。 有跡象表明,我想討論四大偏見:優化偏差時,先行偏差,生存偏差和心理容忍偏差。 優化偏置 這可能是最陰險的回測的所有偏見。 它涉及調整或引進更多的交易參數,直到在後台測試數據集的策略的性能是非常有吸引力。 然而,一旦活的策略的性能可顯著不同。 這種偏差的另一個名字是曲線擬合或數據窺探偏見。 優化的偏見是很難消除的算法策略往往涉及許多參數。 在這種情況下參數可能是進入/退出標準,查找回時段,平均週期(即移動平均平滑參數)或波動測量頻率。 優化偏壓可以通過保持的參數的數量為最小,並提高在訓練集中的數據點的數量被最小化。 事實上,我們也必須小心,後者為較舊的訓練點可以是受前政權(如監管環境),因此可能不適合您的當前策略。 一種方法來幫助緩解這種偏見是進行敏感性分析。 這意味著遞增地改變的參數和繪製的性能的表面。 參數選擇聲音,根本的理由應與所有其他因素的考慮,導致一個平滑的參數表面。 如果你有一個非常跳動性能表面,它通常意味著一個參數沒有反映現象和是測試數據的假象。 有多維優化算法大量文獻,這是研究的高度活躍的領域。 我不會在這住在這裡,但保持它在你的腦海裡,當你發現一個夢幻般的回測的策略! 前瞻偏差 先行偏壓被導入回測系統時,未來的數據被意外包含在其中的數據也不會被實際可用的模擬的一個點。 如果我們運行的是回測時間順序,我們到達的時間點N。 那麼,如果數據包含任何點N + K出現前瞻偏差。 如果K> 0。 前瞻偏置誤差可以非常微妙。 以下是如何前瞻偏差可以推出三個例子: 技術錯誤陣列/代碼載體往往迭代器或者索引變量。 這些指數的不正確的偏移可通過將在N + k個數據為非零ķ導致一個先行偏壓。 計算最優策略參數,如兩個時間序列之間的線性回歸時參數計算的先行偏置另一個常見的例子發生。 如果整個數據集(包括未來數據)用於計算回歸係數,從而追溯適用於一個交易策略優化的目的,那麼未來的數據被併入和先行存在偏差。 千里馬/最小值某些交易策略使用在任意時間段極端值,例如將高或低的價格OHLC數據。 然而,由於這些最大/最小值只能在一個時間週期結束時進行計算,一個預偏置如果使用這些值-during-當前期間引入。 它始終是必要的任何交易策略,利用其中至少有一個週期滯後於高/低的值。 生存偏差 生存偏差是特別危險的現象,並可能導致顯著充氣性能為一定的策略類型。 它發生在策略上的數據集不包括可能已經選擇在特定時間點之前資產的全部宇宙,而只考慮那些存活到當前的時間進行測試。 作為一個例子,考慮之前和2001年市場暴跌後隨機選擇股票的測試策略。 一些科技股就倒閉了,而另一些人設法維持下去,甚至蓬勃發展起來。 如果我們限制這個策略只股票它通過市場提款期成功了,我們將引入一個生存偏差,因為他們已經證明了他們的成功給我們。 事實上,這是先行的偏見只是一個特定的情況下,未來的信息被納入到過去的分析。 主要有兩種方式來緩解生存偏差在您的戰略backtests: 生存偏差免數據集以公平的數據的情況下,可以購買該包括摘牌實體的數據集,儘管它們並不便宜,並且僅趨向於由機構公司利用。 特別是,雅虎財經的數據不是生存偏差免費的,這是常用的許多零售算法中貿易商。 你也可以交易的資產類別是不容易生存偏差,如某些商品(以及未來衍生產品)。 使用較新的數據在股票的情況下,利用一個較新的數據集減輕,所選擇的庫存選擇加權倖存者,簡單地,因為這裡整體庫存摘牌在更短的時間少的可能性的可能性。 你也可以開始從當前點收集數據起建立個人生存,無偏見的數據集。 經過3 - 4年,你將有一個堅實的生存偏自由設定股票與數據回測進一步的戰略。 現在我們將考慮可能影響你的交易表現一定的心理現象。 現在我們將考慮可能影響你的交易表現一定的心理現象。 心理容忍偏差 這個特定的現象是不經常在量化交易的上下文中討論。 然而,它對於多全權委託交易的方法廣泛的討論。 它有不同的名字,但香港專業教育學院決定,因為它抓住了問題的本質稱之為心理耐受性偏差。 當過為期5年或更長時間的創建backtests,很容易看向上趨勢的資金曲線,計算複利年收益率,夏普比率甚至縮編特點和得到滿意的結果。 作為一個例子,該策略可能具有25%的最大相對縮編和4個月的最大縮編持續時間。 這不會是非典型的勢頭策略。 這是簡單的說服自己,這是很容易容忍的損失這樣的時期,因為畫面整體飄紅。 然而,在實踐中,它是更難! 如果25%以上的歷史提款發生在backtests,那麼十有八九你會看到類似的縮編在現場交易時段。 縮編這些週期是心理上很難承受。 我觀察第一手擴展縮編可以像什麼,在機構設置,它是不愉快的,即使backtests表明會發生這樣的時期。 我稱之為它的偏置的原因是,通常,否則是成功的策略是從交易期間延長縮編倍停止,因而將導致顯著表現不佳相比,後台測試。 因此,即使在策略算法在本質上,心理因素仍然可以對利潤率的重影響。 外賣是要確保,如果你看到的一定比例和期限,在backtests資金縮水,那麼你應該期望他們出現在現場交易環境,並需要以達到盈利再一次堅持下去。 軟件包的回測 該軟件景觀的策略回測是巨大的。 解決方案通過對幾乎一切必須從頭編寫(或獲得適當的插件)編程語言,如C ++,Python和R擋位從完全集成的機構級複雜的軟件。 由於量化交易員,我們感興趣的是能夠擁有我們的交易技術堆棧與我們的開發方法的速度和可靠性在平衡。 下面是關鍵考慮軟件的選擇: 編程技巧環境的選擇將在很大程度上歸結為你的編程軟件的能力。 我認為,在總堆棧的掌控之中會比外包盡可能多地為供應商的軟件對你的長期PL的影響更大。 這是由於有外部錯誤或您無法在供應商的軟件來修復特質,否則就會如果你有更多的控制你的技術堆棧輕易修正的下行風險。 你也想罷工生產力,圖書館可用性和執行速度之間的平衡的環境。 我提出以下我個人的建議。 執行能力/經紀人互動的某些回溯測試軟件,如Tradestation,在直接聯繫與經紀業務。 我不是這種方法,因為降低交易成本往往獲得更高的夏普比率的一大組成部分的粉絲。 如果youre綁成一個特定的代理(和Tradestation迫使你這樣做),那麼你將有一個更難的時間過渡到新的軟件(或新的代理),如有需要。 盈透證券提供了一個API,它是強大的,儘管有稍鈍接口。 當創建算法中的策略,因為他們為幾乎所有數學運算可以想像提供夢幻般的圖書館,也讓大量的自定義在必要客制像MATLAB或Python的環境為您提供了極大的靈活性。 戰略複雜性的某些軟件只是心不是削減了沉重的數字運算和數學複雜。 Excel是一個這樣的軟件。 雖然這有利於簡單的策略,它不能真正應付大量資產或更複雜的算法,以速度。 偏置Minimisation難道一個特定的軟件或數據借給自己更多的交易偏見? 您需要確保,如果你想創建所有自己的功能,你不引入錯誤可能導致偏差。 開發一個速度不應該得花幾個月的時間實現回測引擎。 原型應該只需要幾個星期。 請確保您的軟件是不是阻礙你的進步,以任何很大程度上只是為了搶執行速度的一些額外個百分點。 C ++是在這裡房間裡的大象! 執行速度,如果你的策略是完全取決於執行的及時性(如HFT / UHFT),那麼,如C或C ++語言是必要的。 但是,你會瀕臨Linux內核的優化和FPGA的使用這些領域,這是本文的討論範圍之內! 成本很多的軟件環境,你可以編程的算法交易策略,以完全自由和開放源碼的。 事實上,許多對沖基金利用開源軟件為他們的整個算法中的交易籌碼。 此外,Excel和MATLAB都相對便宜,甚至有免費的替代品,以每個。 現在,我們已經列出了我們需要選擇我們的軟件基礎架構的標準,我想通過一些比較流行的包和如何運行它們的比較結果:注:我只是要包括軟件,可用於大多數零售從業者和 軟件開發人員,因為這是該網站的讀者群。 雖然其他軟件可用,如更多的機構級工具,我覺得這些都是在零售環境得到有效利用太昂貴,我親自與他們沒有經驗。 描述 。 所見即所得(什麼,你看到的,是什麼,你得到),電子表格軟件。 極為普遍的金融業。 數據和算法緊密耦合。 執行 。 是的,Excel中可連接到大多數券商。 客戶化。 VBA宏允許更高級的功能,在隱藏的實施為代價。 策略的複雜性。 更高級的統計工具是很難實施,因為與數以百計的資產策略。 偏置Minimisation。 前瞻偏差很容易通過移動突出顯示功能(假設沒有VBA)來檢測。 發展速度。 快速實施的基本戰略。 執行速度。 慢的執行速度只適合於低頻的策略。 成本 。 廉價或免費(取決於許可證)。 備擇方案 。 OpenOffice的 描述 。 編程環境,最初設計為計算數學,物理學和工程學。 非常適合矢量化操作以及涉及數值線性代數。 提供插件的定量交易的廣泛。 在定量對沖基金廣泛使用。 執行 。 沒有本地執行能力,MATLAB需要一個單獨的執行系統。 客戶化。 社區插件巨大的數組的計算數學的幾乎所有領域。 策略的複雜性。 許多先進的統計方法已經上市,並經過全面測試。 偏置Minimisation。 很難檢測到先行的偏見,需要大量的測試。 發展速度。 短腳本可以很容易地創建複雜的backtests。 執行速度。 假設一個矢量化/並行化算法,MATLAB是高度優化。 可憐的傳統的迭代循環。 成本 。 描述 。 高級語言設計的開發速度。 庫幾乎任何編程任務可以想像廣泛。 獲得對沖基金和投資銀行界更廣泛的認可。 不太一樣快,C / C ++的執行速度。 執行 。 Python的插件較大的券商,如盈透證券存在。 因此回測和執行系統都可以是相同的技術棧的一部分。 客戶化。 Python有一個非常健康的開發社區,是一個成熟的語言。 NumPy的/ SciPy的提供相關的定量交易快速科學計算和統計分析工具。 戰略複雜性:許多插件的主要算法存在,但沒有那麼大的一個定量社會存在MATLAB。 偏置Minimisation。 相同的偏置最小化問題存在於任何高級語言。 必須非常小心測試。 發展速度。 蟒蛇主要優點是發展速度快,具有強大的內置的測試功能。 執行速度。 不太一樣快,C ++,但科學計算部件進行了優化和Python可以跟原生的C代碼的某些插件。 成本 。 自由/開源替代品。 紅寶石。 二郎。 哈斯克爾 描述 。 環境設計的先進的統計方法和時間序列分析。 具體的統計,計量經濟學和原生圖形工具包廣泛。 大型開發者社區。 執行 。 - [R擁有插件部分券商,尤其是盈透證券。 因此,一個終端到端系統可以在R·用戶化完全寫入。 R能夠與任何包進行定制,但其優勢在於統計/計量經濟學領域。 策略的複雜性。 是非常有用的,如果執行,由於可用的插件計量,統計和機器學習策略。 偏置Minimisation。 偏置允許任何高級語言如Python或C ++類似的水平。 從而測試必須進行。 發展速度。 R是快速的基於統計方法的寫作策略。 執行速度。 R是比C ++慢一些,但仍然是矢量化操作相對優化(與MATLAB)。 成本 。 自由/開源替代品。 SPSS。 塔塔 描述 。 成熟的,高層次的語言,用於執行速度。 定量金融和數字圖書館的廣泛。 難以調試,往往需要更長的時間來實現比Python或MATLAB。 非常普遍的在這兩個買方和賣方。 執行 。 大部分券商的API是用C ++和Java。 因此,許多插件存在。 客戶化。 C / C ++允許直接訪問底層的內存,因此超高頻策略可以實現。 策略的複雜性。 C ++ STL提供了優化的算法廣泛。 幾乎任何專門的數學算法,擁有一個免費,開源的C / C ++實現在網絡上。 偏置Minimisation。 前瞻偏差可能會非常棘手消除,但並不比其他高級語言更難。 當底層內存處理好調試工具,但我們必須要小心。 發展速度。 C ++是相當冗長相比,Python或MATLAB對同一algorithmm。 更多行-的碼(LOC)經常導致錯誤的更大的可能性。 執行速度。 C / C ++有非常快速的執行速度,並可以針對特定的計算架構進行很好的優化。 這是利用它的主要原因。 成本 。 各種編譯器:Linux的/ GCC是免費的,微軟的Visual Studio有不同的許可證。 備擇方案 。 C#。 Java語言。 斯卡拉不同的戰略需要不同的軟件包。 HFT和UHFT戰略將用C / C ++(這些天,他們往往進行了圖形處理器和FPGA),而低頻方向的股票策略很容易實現TradeStation,由於軟件都在同一個自然/ 經紀業務。 我個人的偏好是Python的,因為它提供的定制權度,開發,測試能力和執行速度我的需要和戰略的速度。 如果我需要什麼更快,我可以從我的Python程序中直接C ++下降。 一種方法被很多量化交易員青睞的是其原型在Python策略,然後轉換速度較慢的執行部分,以C ++以迭代的方式。 最終,整個算法中是用C ++編寫,並可以獨自交易! 在上回測接下來的幾篇文章,我們會看看周圍的算法交易回測系統的實施,以及如何將貿易交流的影響一些特殊的問題。 我們將討論戰略績效評估,最後用一個例子戰略的結論。 - 邁克爾·霍爾 - 摩爾從QuantStart
No comments:
Post a Comment