上次已經介紹了如何爬取外資爬蟲~這次我們就用三大法人來製作指標!
自己做指標的好處是,數字都可以客製化,也可以搭配其它不同的指標進行選股和回測喔!
這次我們要做的指標是「外資買入成本」!
計算指標前,先整理好財務數據
(沒上課程的請看這邊,上了課的可以跳過看下一段)
在計算外資買入成本前,我們必須要或得兩個 DataFrame:
- 「收盤價」
- 「外資買入張數」
這兩個 DataFrame
,其 columns
是股票的代號,而 index
是每天的日期,
這兩個 DataFrame
要怎麼做出來呢?
首先,可以參考之前的文章,學習爬取股價跟三大法人:
接下來,我們可以將這先每天都有的資料轉換成時間序列的 DataFrame:
時間序列實做
以上這篇文章只有教您怎麼整理「收盤價」,沒有教您怎麼整理「三大法人買賣資訊喔!」
但原理都是一樣的,所以就依法炮製可以做出「三大法人」的DataFrame
喔!
好麻煩喔!有沒有更快的方式?(利用課堂的工具)
假如您有上課程的話,利用 爬取三大法人買賣超 這篇文章,
就可以將三大法人買賣超的資訊整理好喔!
所以您用我們課程中的code,只需要額外增加:
from finlab.data import Data
data = Data()
以上的code就是一個可以跟資料庫索取資料的物件,接下來只要把資料讀進來就可以了:
# 外資買入(2017-12月後的格式)
陸資買進 = data.get('外陸資買進股數(不含外資自營商)', 250)
外資買進 = data.get('外資自營商買進股數', 250)
外資買進 += 陸資買進
# 外資買入(2017~12月前的格式)
外資買進.fillna(data.get('外資買進股數', 250))
這樣就可以,直接得到dataframe囉!
賣出也是依法炮製:
# 外資賣出(2017-12月後的格式)
陸資賣出 = data.get('外陸資賣出股數(不含外資自營商)', 250)
外資賣出 = data.get('外資自營商賣出股數', 250)
外資賣出 += 陸資賣出
# 外資賣出(2017~12月前的格式)
外資賣出.fillna(data.get('外資賣出股數', 250))
# 收盤價
收盤價 = data.get('收盤價', 250)
接下來我們就可以來計算指標了,首先:外資買入成本
其實這一步驟是最簡單的XD
最重要的只有兩個 function
:
- DataFrame 乘法:DataFrame的乘法很聰明,會將一樣的column name 跟 index 對應到的數字相乘,所以我們可以直接寫
外資買入 * 收盤價
這樣子的語法 - df.rolling(60).mean():就是時間窗格,例如今天的值,會變成過去60天的值的加總,每一天都如此計算。
所以就有以下的code:
外資買進成本 = (外資買進 * 收盤價).rolling(60, min_periods=1).sum() / 外資買進.rolling(60, min_periods=1).sum()
就這樣算完了,但是有時候我們防止 DataFrame
裡面有 NaN
,我們希望就算有 NaN
也能算出值,就可以寫成:
外資買進成本 = (外資買進 * 收盤價).rolling(60, min_periods=1).sum() / 外資買進.rolling(60, min_periods=1).sum()
當中的 min_period=1
代表60天中,只需要有一天不是 NaN
,就可以將不是 NaN
的數字取平均喔!
所以這樣寫會是比較建議的。
這邊要注意的是,我們不只算了單一一檔股票,是把所有股票的外資買進成本都算出來囉!
外資賣出成本
這邊一模一樣,所以就直接放code:
外資賣出成本 = (外資賣出 * 收盤價).rolling(60, min_periods=1).sum() / 外資賣出.rolling(60, min_periods=1).sum()
畫出曲線
我們可以將 買入、賣出 的成本都畫出來:
收盤價['1101'].plot()
外資買進成本['1101'].plot(color='red')
外資賣出成本['1101'].plot(color='blue')
當買進成本高於賣出成本時,就是可以考慮買進的時機喔!
或是當股價上漲後,拉回到買進成本線,也是很好的買點喔!
大家可以試著回測看看~~
選股
我們也可以選擇股價小於外資成本的股票清單:
cond1 = 收盤價.iloc[-1] < 外資買進成本.iloc[-1]
print(cond1[cond1])
這樣就可以看到所有股價小於外資成本的股票囉!
方便您繼續追蹤,看這些股票有沒有突破外資成本,一飛沖天喔!