【南區Fintech研習營】Python 程式設計基礎: Google finance股價爬蟲應用 講者: 林萍珍
第九章 技術分析套件TA-Lib 9-1 下載安裝TA-Lib套件 9-2 安裝plotly與申請 api key 9-3 均線糾結策略回測 9-3 均線糾結策略回測 9-4 布林通道買賣訊號 9-5 作業-帶量突破均線
TA-Lib簡介 跨平台股市技術分析工具。 超過200個技術指標包含SMA, ADX, MACD, RSI, Bband等。 2016/10/24 TA-Lib簡介 跨平台股市技術分析工具。 超過200個技術指標包含SMA, ADX, MACD, RSI, Bband等。 開源API提供 C/C++, Java, Perl, Python引用。 底層是C/C++撰寫,提供Python套件呼叫引用的就是TA-Lib。 官網 http://www.ta-lib.org/ 函數清單 http://www.ta-lib.org/function.html
下載TA-Lib套件 C++程式 wheel程式 TA-Lib是Cpython撰寫的需要先安裝C++的程式 http://www.microsoft.com/en-us/download/details.aspx?id=15336 下載vcredist_x64.exe後安裝。 wheel程式 再到以下網站下wheel程式 http://www.lfd.uci.edu/~gohlke/pythonlibs/#ta-lib TA_Lib 0.4.10 cp36 cp36m win_amd64.whl
安裝TA-Lib套件 Windows 7, 64bits, 下載 將*.whl檔案複製到c:\...\Anaconda3資料夾下 TA_Lib 0.4.10 cp36 cp36m win_amd64.whl 將*.whl檔案複製到c:\...\Anaconda3資料夾下 再到cmd視窗,切換到c:\...\Anaconda3資料夾下並輸入 pip install TA_Lib 0.4.10 cp36 cp36m win_amd64.whl 安裝成功會出現 Successfully installed TA-Lib-0.4.10 輸入conda list確認是否有安裝成功
安裝plotly套件 pip install plotly 申請plotly api key https://plot.ly/api/ 點選右上角sign up 可以選fb為輸入帳號密碼 點regenerate key產生api key 完成plotly帳號與api key申請
2016/10/24 TA-Lib引用 ※talib只接受矩陣資料,需使用numpy套件建構資料。
範例: 均線糾結策略回測 說明 結果 需要的套件 2016/10/24 範例: 均線糾結策略回測 說明 使用Python 套件TA-Lib超過200個技術指標中,引用其中的SMA (簡單移動平均)與WMA(加權移動平均)指標做買賣策略的參考。 結果 平均10年回測累計報酬率為131.53%,最高是南亞科(2408)為768.97%,最低(2515)是中工-37%。 需要的套件 Pandas(內建), numpy(內建), plotly, TA-Lib, html5lib。
交易規則 變化量 買進點 賣出點 最後出場 Change = WMA/SMA 2016/10/24 交易規則 變化量 Change = WMA/SMA 買進點 WMA(5) > SMA(5) 且Change > 1.02 即當5日的WMA大於 5日的SMA,且WMA超過SMA2%。 賣出點 WMA(5) < SMA(5) 且Change< 0.98 即當5日的WMA小於 5日的SMA,且WMA低於SMA2%。 最後出場 有買進,沒有賣出訊號,則在最後一個交易日賣出。
資源來源 資料來源: 上市櫃公司股票。 篩選飆股 資料期間 20日均線上升; 今日收盤>20日前收盤的1.055; 2016/10/24 資源來源 資料來源: 上市櫃公司股票。 篩選飆股 20日均線上升; 今日收盤>20日前收盤的1.055; 股價的斜率>0.15%。 共選出21檔股票見表1。 資料期間 2007,10,1至2017,9,30, 共10年.
回測績效指標 交易次數 累計報酬率 勝率 正報酬率/總報酬 獲利因子 獲利金額 / 損失金額 大於1為佳
回測結果 回測10年的累計交易次數與報酬率%見表1。 平均10年的交易次數約13.67次。 2016/10/24 回測結果 回測10年的累計交易次數與報酬率%見表1。 平均10年的交易次數約13.67次。 10年平均累計報酬率約131.53%, 年報酬率大約13.15%,最高累計報酬率是南亞科為768.97%,最低是中工-37%。 本次回測21家中,17家為正報酬,5家負報酬。
表1回測結果 2016/10/24 代號 股票名稱 交易次數 報酬率% 2408 南亞科 31 768.97 3406 王晶光 32 473.87 6165 捷泰 21 380.33 1475 本盟 221.01 2421 建準 5 216.07 3008 大立光 13 178.75 2313 華通 9 132.59 2344 華邦電 12 102.3 2337 旺宏 14 74.4 6153 嘉聯益 16 70.85 2475 華映 70.8 3661 世芯-KY 7 65.81 2330 台積電 3 54.55 2454 聯發科 8 49.26 2340 光磊 10 18.15 1455 集盛 14.38 1409 新纖 -13.77 6456 GIS-KY 4 -21.42 2317 鴻海 -23.68 2481 強茂 15 -34.14 2515 中工 -37.01 平均 13.67 131.53 最大 32 768.97 最小
2016/10/24 執行結果
2016/10/24 SMAWMA部份程式碼
SMAWMA程式功能(I) 參數設定並呼叫主程式 輸入股票代號、起迄日期, 第177-179 計算執行時間第176, 181-182列 執行主程式第180列
SMAWMA程式功能(II) 主程式(第149列) 呼叫GetGoogleFinance類別產生物件實體(gf)(第151列) 計算均線糾結策略,並回傳資料df, 交易次數、累計報酬率、勝率、獲利因子。 呼叫showMAplot函數 畫圖
SMAWMA程式功能(III) SMAWMA(第75列) 呼叫talib套件,計算5日SMA與WMA(第77-78) 進迴圈回測10日資料(第96列) 變化量(change): WMA(5) / SMA(5) (第97列) 買進: 判斷空手且WMA(5) > SMA(5) 且Change > 1.02 (第98列) 賣出: 判斷有買入且WMA(5) < SMA(5) 且Change < =0.98 (第107列) 有賣出即完成一次交易,可以計算累計報酬、勝率、與獲利與損失金額(第117-119列)。 最後出場: 有買進,在最後前一天出場(第120列) 計算獲利因子: winvar = win / loss (第129列)
SMAWMA程式功能(IV) showMAplot(第29列) 呼叫talib套件,計算5日SMA與WMA(第77-78) 進迴圈回測10日資料(第96列) 變化量(change): WMA(5) / SMA(5) (第97列) 買進: 判斷空手且WMA(5) > SMA(5) 且Change > 1.02 (第98列) 賣出: 判斷有買入且WMA(5) < SMA(5) 且Change < =0.98 (第107列) 有賣出即完成一次交易,可以計算累計報酬、勝率、與獲利與損失金額(第117-119列)。 最後出場: 有買進,在最後前一天出場(第120列) 計算獲利因子: winvar = win / loss (第129列)
2016/10/24 範例:布林通道買賣訊號 說明 使用Python 套件TA-Lib超過200個技術指標中,引用其中的BBand (布林通道)指標做買賣策略的參考。 結果 平均10年回測累計報酬率為170.3%,最高是南亞科(2408)為651%,最低(2454)是聯發科-89%,整體投資績效略優於均線糾結。
2016/10/24 交易規則 今日最高大於上布林線時,是最高價大於2倍標準差,指行情正強勢中,雖短線會拉回,但強勢趨勢不變,故趁勢追價。高於上布林線常為漲勢,故作多。 買進 今日最高價>上布林線 且成交量是20日均線的2倍 賣出 今日最低價<下布林線 且成交量是20日均線的2倍
回測結果 回測10年的均線糾結策略之投資績效見表1;布林通道買賣訊號策略之投資績效見表2。 2016/10/24 回測結果 回測10年的均線糾結策略之投資績效見表1;布林通道買賣訊號策略之投資績效見表2。 從表2回測結果中發現,平均10年的交易次數約35.3;均線糾結13.67次。 布林通道累計報酬率約170.3%高於均線糾結131.53%, 年報酬率大約13.15%;最高累計報酬率是南亞科為651%,最低是聯發科-89%; 布林通道策略的回測樣本中,19家為正報酬,3家負報酬。
實證結果
Bband程式功能(I) 呼叫主程式(第234列) 讀取result_SMA.xlsx與result_Bband.xlsx(第237列) 進迴圈依股票代號每一檔都要進行回測 呼叫主程式(第245列) 將dfSMA寫入FinalResult.xlsx的SMA活頁簿(第250頁)。
Bband程式功能(II) 本支程式除呼叫SMAWMA(第208列) 之外,外加BBandMA(第219列)兩個策略。 不執行畫圖程式,因為有21檔迴圈要執行,省略畫圖。
作業練習 帶量突破均線 買進 今天收盤價>10日均線且昨天的收盤價<小10均線且成交量>10日均量的兩倍 賣出 今天收盤價<10日均線且昨天的收盤價>10均線且成交量>10日均量的兩倍
OK 本章講解完畢 現場同學們如有不懂的地方,請提出問題。