發佈日期: 發佈留言

進行回測常被提到的套件們

常被提到的回測套件們

目前從事數據分析和數據科學的金融專業人士會使用R,Python和其程式語言對各種數據集進行分析,而Python引起了人們的極大興趣,並且正在成為數據分析的首選語言,這也歸功於Python有一個非常活躍的社群,他們毫不吝嗇地為python函式庫的發展做出了貢獻,並且多數都是開源的項目。

如果在Github上搜索,你將會發現有python套件可以執行幾乎所有你想做的事情,那本篇文章就來說分享一下有哪些套件是比較熱門的吧。

數學運算及資料結構:

Numpy – NumPy能支援高階大量的維度陣列與矩陣運算,此外也針對陣列運算提供大量的數學函式函式庫。

Scipy – SciPy包含的模組有最佳化、線性代數、積分、插值、特殊函數、快速傅立葉變換、訊號處理和圖像處理、常微分方程式求解和其他科學與工程中常用的計算。

Pandas – pandas是用於數據操縱和分析的軟體庫。特別是,它提供操縱數值表格和時間序列的資料結構和運算操作。

交易及回測:

TA-Lib – TA-Lib,在一兩秒的時間內快速計算超過一百種的技術指標!指標的選擇眾多以外,還可以微調每個技術指標參數值的設定,非常好用!

Zipline – zipline是一個量化交易的回測框架,提供相當多實用功能,以及擁有事件驅動回測引擎。

Pybacktest – 是一個基於pandas的vectorized回測框架,這個框架可能不太適合更專業的回測需求,但適合練習需求。

發佈日期: 發佈留言

技術分析新手千萬別再這麼做:無限指標濾網

你的進場條件是怎麼設定的?

隨著台灣加權指數來到 13000 附近後,整體市況由原先的單邊趨勢行情,進入連續三個多月的高檔震盪期,才在美國大選告一段落後才一舉突破新高。市況改變之下,身邊漸漸有投資朋友來抱怨說:「買什麼都不太會漲,只能小賺就跑。」

通常這裡反問的第一個問題是:「你的進場條件是怎麼設定的?」 

先撇除連自己進場條件是什麼都搞不清楚的回答。我們最常收到的回答,大致是這樣的:「我本來是看均線糾結覺得要噴出了,後來被來回停損了幾次,想說搭配MACD 指標,不過感覺不太穩所以再加上 KD,但現在還是被套在裡面。要不要賣,可以給點建議嗎?」

一般遇到這種回答,我們不會、也不應該直接給建議。

為什麼呢?

因為這位投資朋友的投資思維是有問題的:我們給得了一次建議,下一次他還是會犯一樣的錯,並且問出同樣的問題。

這樣的投資思路錯在哪?

技術指標的挑選,如同基本面財務指標一樣,必須賦予邏輯。而上面那種錯的投資思路,只是不斷地挑指標來看看它「準不準」,我們通稱這種錯誤叫做「無限指標濾網」。實際上,我們在使用指標之前應該先想想,這個指標的意義是什麼?為什麼會認為這個指標可以優化自己的進場條件?

各位已經度過這種新手時期的朋友,這個成長過程,有覺得很熟悉嗎?如果無法理解為什麼這樣是錯的。沒關係,我們來用底下兩種非常有條理的方式跟各位分享:

首先,先看到下圖,我們先假設市場盤勢有 8 種走法,兩種常見指標用法作為範例,對這些市場狀態會有不同的適應程度:適應程度好的獲利潛力較好。相對地,適應程度差的獲利潛力較差。

實際盈虧情形還需考慮出場條件,不過這裡我們先簡化敘述,不影響這個推論。這個裡舉例的用法是常見的技術指標趨勢判斷條件:KD 指標黃金交叉一般認為接下來要走多頭,應該進場做多;MACD 指標翻多一般也是認為多頭即將啟動,也要進場做多。我們實際拿大立光舉例,如下圖所示:

這兩種趨勢指標的用法,本身就具有高度相關性的可能,因此當面對同一種市場盤勢,兩種用法有較高的機率「同時出現獲利或虧損」。因此,若要兩種條件同時成立才進場,比較難期待在濾掉虧損(盲點)的同時,還能保有原先的獲利潛力。

再來,我們用專業量化研究交易的角度來解釋無限濾網的問題:

對量化交易(或程式交易)熟悉的朋友都知道,這種無邏輯塞指標的做法,又被稱作「曲線套入」,就算能回測出漂亮的績效,很高機率只是巧合而已。此外,當你的策略參數越多,掉入「過度最佳化」陷阱的可能性就越高。

我們回到上圖的兩種進場條件:

  1. KD 黃金/死亡交叉,本質上隱含至少四個參數:一個時間長度參數、兩個平滑長度參數、KD 交叉也是在對 K 值與 D 值的相減值做一個閥值判斷。
  2. MACD 翻多/翻空,本質上也隱含至少四個參數:快線長度參數、慢線長度參數、平滑參數、以及 MACD 柱以 0 為閥值也是一個參數。

若把上述兩種進場條件一起放進策略,代表已經隱含至少八個參數,更別說停利停損等出場條件加入後,參數數量又再翻上一翻。就算這樣能找到歷史回測績效漂亮的參數,實際拿來交易的績效也不會太好看。

另外,我們拿富果漂亮的圖給大家展示一下:2330 台積電過去一年的 K 線走勢圖,以及我們也標記出「這段期間 KD 指標交叉與 MACD 翻向幾乎同時發生的紀錄」,如下圖。請原諒我們使用「幾乎同時發生」這個用法,因為若要同時發生,可能就沒有任何標記了。

可以發現,這個進場條件因為太過嚴苛,交易筆數太少,光是這四個標記點,讓人難以下定論。如同先前講過的,這種做法是用錯過大量投資機會換來的,不太具備進一步優化空間。實際上,未來的市場走法與過去勢必會有差異,以此法做交易的朋友可能有相當長一段時間,都面對著獲利能力不佳的窘境。

說了那麼多,實際該怎麼做呢?

這裡提供兩個思路給大家參考:

1. 以邏輯來組成多重濾網:可以將趨勢指標與擺盪指標做搭配,或是利用長短天期的市場狀態做搭配,讓不同濾網達到更明顯的互補效果。這部分我們量化通有相關課程,課堂上帶大家使用 Python 實作相關範例,有興趣的朋友可以參考一下哦!

2. 加入其他角度的資訊綜合判斷:股票不只是從股價計算出技術面,還有基本面、籌碼面等資訊可以研究。富果也提供了許多基本面與籌碼面卡片,讓不會程式的朋友也能簡單地選出你要的股票!量化通的選股模型課程則是有 Python 實作多重角度選股模型,可以讓你用Line輕鬆不漏接每日選股資訊!

看到這邊的朋友,恭喜你已經學會一項重要的技術分析避雷技巧!

若想進一步學習選股技巧,請別忘了持續追蹤量化通的粉專,我們將帶大家一步一步踏實地向前走!

量化通是個致力於全民量化金融教育的社群,我們希望透過由淺入深的內容,帶領大家以正確觀念來實踐自動化的金融投資研究分析。內容涵蓋傳統研究分析方法、量化分析、選股、爬蟲、API串接、回測、以及下單等跨領域多元知識,由各領域專家為大家提供最精闢的內容。

如果覺得我們的文章還不錯,別忘了掃QR Code或點擊下方連結,按讚並追蹤量化通的粉專,我們將努力為您奉上每篇精選文章。

◎ 量化通FB專頁:https://www.facebook.com/QuantPass

◎ 量化通網站:https://www.quantpass.org