2021年3月22日 星期一

[量化狼][程式交易]類股輪動模型建構(十三)-資料整理

              

今天又到了狼來分享類股輪動模型的時間,這次狼要分享簡單的程式給大家。我們做量化回測或設計類股模型最重要的細節如下,進入主題之前希望大家在看過一遍。

類股輪動模型建構(十)-細節細節

細節中,狼在最後強調了報價準確度的重要性,並且也談到Yahoo Finance 」上面的報價源可以Download下來作為我們基礎的報價源,假設我要抓取2330的報價,點選下面網址,案右方的Apply就可以匯出成Excel檔整理,在Excel上基本就可以處理很多事情。

https://finance.yahoo.com/quote/2330.TW/history?p=2330.TW


題外話,狼的朋友們有時會和狼說,『量化交易好難』,『我不會寫程式耶』...,狼都會說『請問你會使用Excel嗎?』,會不會一些基本的函數《ex : AVERAGE、SUM、VLOOKUP、IF、STDEV、MAX、MIN、RANK、OFFSET....》,你對生活或數字有沒有基本的《邏輯推演》的能力? 如果是連邏輯都不好,那確實量化對你來說非常困難,但如果還ok的話,上述函式就算不會,google學一下就會了呀,所以說不會其實就是【懶】【沒熱情】【沒興趣】。重點是,量化不一定要學多難的程式,狼自己光用Excel就可以建構很強大的回測和分析系統。

但狼今天的主題就是分享一些Python基礎的資料處理方法,因為當你到達一定程度,想要建構更有彈性的回測架構,用Python還是比較適合的。下面狼盡量寫得很簡單,狼不可能把自己架構完整的模組奉送給各位,因為那是狼花許久時間完成的心血,但狼能做到的是給各位一些釣竿,倘若對爬蟲有興趣,你們也不用問我,HaHow或Youtube上面有很多學習程式的資源。進階的程式學習方面請自行去找資源學習。

下面程式碼內容就幾個動作而已
1.下載Yahoo Finance報價
2.去證交所確認該股票的產業別
3.整理

當然後續你還可以將資料存在MySQL或其他資料庫中,並且每次只需要更新最新報價就好,另外,亦也可不要根據證交所的產業別的定義,而是自行定義產業細節,這都可以去嘗試,而整個類股輪動模型就是架構在這些資料處理上基本上上面搞定了,這個輪動模型說實在程式碼非常簡單,加減乘除而已。

**************Python 程式碼*************
from yahoo_historical import Fetcher #下載yahoo fin Data
import requests # 爬蟲模組
import pandas as pd 

#下載該網頁的資料 -> 本國上市證券國際證券辨識號碼一覽表
res = requests.get("http://isin.twse.com.tw/isin/C_public.jsp?strMode=2")


#讀取進Dataframe中
df = pd.read_html(res.text)[0]

#複製代碼 & 產業別
DataSort = df.iloc[:,[0,4]].copy()

#將資料整理併分割成正確格式
DataSort.iloc[:,0] = DataSort.iloc[:,0].str.split('\s', 1, expand=True)

#DataSort
##############################################################

#想抓取哪一檔股票報價
StockName = '2330.TW'
#報價儲存
Data = Fetcher(StockName, [2007, 1, 1], [2021, 3, 20])
StockData = Data.getHistorical()
StockData['Name'] = StockName.replace(".TW", "")
StockData
##############################################################
#複製上述兩者
Data1 = StockData.copy()
Data2 = DataSort.copy()

#確認股票的產業別
Data2 = Data2[Data2.loc[:,0] == '2330'].values
Data2 =  Data2[0,1] #array
StockData['Type'] = Data2
StockData



**************Python 程式碼*************

使用Yahoo Finance的重點是裡面有還原權值的adj Close報價,用這報價計算出來的損益才會比較正確,策略你可以用還原權值的收盤或者沒還原的收盤來設計,但損益最好還是用還原權值的收盤。確認資料的報價和類別後,根據前面的文章你就可以想辦法設計類排名囉。