發表文章

目前顯示的是 八月, 2019的文章

你所不知道的「大盤漲跌」特性 [附程式碼]

圖片
台股當沖比率相當高,以成交金額來看,占比已接近30%,可是卻很少人知道台股每日K棒的漲跌特性。或者說,很少人知道台股其實是會看時段漲跌的。

以下我們簡單做個統計,比較看看開盤時段(日內漲跌幅)和收盤時段(跳空漲跌幅)有何差異。
從2010年開始,累計日內漲跌幅為-150%,累計跳空漲跌幅為180%。

從圖中,可以明顯看出開盤時段大盤傾向下跌,收盤時段大盤傾向上漲。

此外,每年發放現金股利(除息)所蒸發掉的大盤點數,都算在跳空漲跌幅當中,也就是說跳空漲跌幅要先加回除息蒸發點數,再跟日內漲跌幅比較,才算合理。

台股每年殖利率平均約為4%,除以每年交易天數約250天,平均每日受到除息影響而下跌0.016%,所以我們將每日跳空漲跌幅加回去0.016%。
從2010年開始,累計日內漲跌幅為-150%,累計跳空漲跌幅為180%,累計除息還原跳空漲跌幅為220%。

最後,認真的讀者不難發現,在2015年中以後,日內漲跌幅不再偏向下跌,跳空漲跌幅的上漲傾向也大幅下降。

# 載入需要用到的函式庫 import ffn # 金融函式庫 import IPython # 互動模組 import matplotlib.pyplot as plt # 繪圖函式庫 # 取得歷史資料 stock = ffn.get('^TWII:Open, ^TWII:Close', column_names=['open', 'close']) # 下載加權指數歷史資料 # 計算跳空漲跌幅、日內漲跌幅 stock['gap'] = 100 * (stock['open'] / stock['close'].shift(1) - 1) # 跳空漲跌幅 stock['intraday'] = 100 * (stock['close'] / stock['open'] - 1) # 日內漲跌幅 # 殖利率還原 stock['gap_with_dividend'] = stock['gap'] + (4/250) # 加回平均每日殖利率 # 設定圖片輸出位置 IPython.get_ipython().enable_matplotlib…

量化型態學(3): 個股W底

圖片
承上篇「量化型態學(2): 大盤W底」,量化操盤手寫了一套自動辨識W底的程式。

在本篇中,我們要來檢驗W底應用在個股上的效果,以台積電(2330)、聯發科(2454)、大立光(3008)三檔指標股為例,用程式進行辨識和回測。

回測方式:當「W底」出現後買進,採固定百分比移動停損出場,若股價未觸及停損點,則持有到下一個「W底」出現為止。
(紅三角代表買進,綠三角代表賣出,藍線代表百分比損益)

台積電(2330)一共出現3次W底,股價皆呈現反轉噴出:

聯發科(2454)一共出現3次W底,一次小賠、一次打平、一次大賺:

大立光(3008)一共出現5次W底,一次小賠、兩次打平、兩次大賺:

在技術分析中,W底屬於典型的「反轉向上」型態,本次的檢驗結果也支持這個論點。

以W底做為買進訊號,能夠順利捕捉到股價反轉上漲波段,交易結果呈現大賺小賠,而且勝率不低。

量化型態學(2): 大盤W底

圖片
長久以來,型態學始終存在著重大缺陷,那就是「標準不一,因人而異,難以驗證」,使得技術型態的實用性大打折扣。

為了解決這個問題,必須將技術型態量化,並且進行回測驗證。

在上一篇「量化型態學(1): Python自動偵測高低點」的基礎上,我寫了一套完整的演算法,可以自動偵測股價走勢圖當中的技術型態。本篇用「W底」做為例子,來看看應用於大盤指數的效果。

回測方式:當「W底」出現後買進,採固定百分比移動停損出場,若股價未觸及停損點,則持有到下一個「W底」出現為止。
(紅三角代表買進,綠三角代表賣出,藍線代表百分比損益)

近一年的大盤指數W底:


近兩年的大盤指數W底:


藉由回測可以看出,用於掌握大盤波段起點,W底確實有參考價值。下一篇文章,我們繼續來看W底在個股上的應用!

量化型態學(1): Python偵測高低點 [附程式碼]

圖片
一般量化策略比較少去碰觸技術分析中的「型態學」,主因是一般人認為股價型態不容易用程式去辨識。但事實上,型態辨識並不困難。

很多型態的基礎特徵,是股價高低點的相對位置,譬如:M頭、W底。所以型態辨識的第一步就是找出股價高低點。


接下來,我會教你「如何利用Python自動找出股價高低點」,程式一共用到三種函式庫:

1. ffn用來下載股價資料
2. scipy用來偵測高低點
3. matplotlib用來繪圖

scipy函式庫裡面有一個find_peaks函式,可以藉由計算地形突起度(Topographic Prominence),偵測出股價的峰點(peak),這是出自於測繪學的衡量公式,由於設計精巧,我們把它運用於型態辨識。

在Anaconda內建的Spyder編輯器中,輸入:
# 載入需要用到的函式庫 import ffn # 金融函式庫 import scipy.signal as signal # 信號處理函式庫 import IPython # 互動模組 import matplotlib.pyplot as plt # 繪圖函式庫 # 取得歷史資料 stock = ffn.get('^TWII', column_names=['price']) # 下載加權指數歷史資料 # 自動偵測高低點 threshold = 750 # 設定突起度門檻 peaks = signal.find_peaks(stock['price'], prominence=threshold)[0] # 找相對高點 valleys = signal.find_peaks(-stock['price'], prominence=threshold)[0] # 找相對低點 # 設定圖片輸出位置 IPython.get_ipython().enable_matplotlib(gui='qt') # 圖片輸出於新視窗 # 繪圖 plt.figure() plt.plot(stock.index, stock['price'], color='grey') plt.plot(stock.index[peaks], stock['price'][stock.ind…

Python從零開始(2): 動手做

圖片
Python去哪裡學?
Python的學習資源很多,其中我滿推薦Codecademy這個網站,Codecademy採用互動式網頁,讓學生可以直接在網頁上寫程式、運行程式,無需額外安裝軟體,相當方便。

Codecademy還有一個特色是強調「從做中學」(Learning by doing),「從做中學」是學會寫程式最好的方法,也容易建立自信心。

目前註冊新帳號可以免費使用7天,推薦程式新手從Learn Python 3開始練習。

Python2 或是 Python3 ?
有些初學者會困惑要選Python2還是Python3,我的答案很簡單:Python3!

對我個人而言,Python3最大的好處是中文字的支援性高,由於我們主要分析的是台灣股市,原始資料常出現中文字,Python2處理起來相當麻煩,Python3則是迎刃而解。

準備好開始量化交易了嗎?
如果你已經迫不及待要開始寫程式進行股市分析,請先安裝開發環境,我推薦Anaconda,他會幫你把常用的函式庫都安裝好。

首先到Anaconda官網下載符合作業系統的Python 3.X安裝檔



安裝好之後,開啟Anaconda中的Spyder,在Spyder預設畫面右下方的IPython console輸入:
!pip install ffn 安裝金融函式庫,接下來就正式踏入量化交易的世界囉!



下一篇文章,我會跟大家分享,如何用Python自動尋找股價高低點。

Python從零開始(1): 為何選擇Python

圖片
如果你是程式新手,我會建議你學習Python!

原因有三:

第一、Python容易上手
相較於C++或Java等程式語言,Python真的容易理解多了!

寫Python的體驗,就像是在跟電腦說英文,很口語的告訴電腦該做什麼事。

第二、Python = 高效率
Python會幫我們處理好許多瑣碎的底層工作,加上語法簡潔,大幅增進了工作效率。

工作效率提升的代價就是程式運行速度較慢,不過對量化交易而言(高頻除外),程式運行速度不是我們的首要考量,能夠快速分析資料、建立策略才是重點,而這恰恰是Python的強項。

第三、Python擁有豐富的第三方函式庫
所謂第三方函式庫就是其他人寫好的程式,例如排序、計算標準差,你不需要重新打造輪子,直接載入使用即可。

如今Python已成為資料科學的基本配備,開發者眾多,有許多高手不吝於分享,將程式打包成函式庫造福大眾,同時也可以提昇開發者本人的聲望,形成雙贏的局面。

幾乎所有常見的數學和統計方法,你都找得到函式庫,絕大多數是免費的,只要下載安裝即可使用。

以上三個原因,使得Python脫穎而出,成為首選。

想要掌握交易獲利的關鍵嗎?開始學習Python,加入量化交易的行列吧!

量化交易10年有感

圖片
今年是我從事量化交易第10年。

10年前,當時大三,已有2年操作股票的經驗,聽聞外資每年在金融市場利用量化交易賺走大把鈔票,心生嚮往。

於是選修了一門財務工程,需要寫程式來計算選擇權價格,當時所用的程式語言是C++。

自此進入量化交易的世界,一晃眼就是10年。


10年前,量化交易在國外已經行之有年,在台灣卻很少人了解。

10年後,年輕一輩的投資人漸漸有了量化交易的觀念,但在操作的實務面上,仍然有很多人不得其門而入,量化交易在台灣仍是只有少數人能夠掌握的交易方法。

有感於台灣每年培養出眾多高素質人才,卻有著畸形的薪資結構,許多人領著不合理的低薪,唯有另闢蹊徑,提升自己的投資能力,才能早日達到財務自由,這是我寫文章的主要動力,希望大家能從理財出發,替自己的人生作主。

尤其對於不方便盯盤的上班族來說,量化投資是最穩健的理財方式,藉由科學化的投資策略,進行波段或是長期投資,績效遠比市面上廣告的各式基金要來的好多了,更無須支付每年就像丟進水裡的基金管理費。

近幾年由於資料科學的興起,相關學習資源越來越豐富,大幅降低量化交易的入門門檻,我強烈推薦程式新手學習Python,網路上有許多免費的線上課程,足以讓你快速學會基本的程式設計。

寫程式是量化交易的門檻,不是全部,程式只是量化交易的工具,量化交易的核心在於透過大量歷史數據找出金融商品的規律與特性,進而產生交易策略,最後才透過回測來對策略進行驗證和修正。

可惜的是,許多人本末倒置,胡亂拼湊幾個技術指標,進行參數最佳化,再把過度最佳化(Overfitting)之後的結果當成寶,做為交易策略使用,想當然耳,實戰的結果通常不會太好。

量化交易是一種思維,將交易科學化的思維,可以針對不同商品進行探索,個股、期貨、選擇權等,都有豐富的歷史資料可供研究。時間維度亦不設限,短週期的高頻、當沖,長週期的波段、長期投資,都有人花心力研究。

由於量化交易的多樣性,每位高手開發的策略不盡相同,因此排他性並不嚴重,我個人認為推廣量化交易並不會影響到自己的獲利,甚至有可能在互相交流中得到好點子。

往後,我會以淺顯易懂的方式寫作,歡迎大家多來逛逛。