外資買入成本指標選股:Python 自製三大法人指標教學
上次已經介紹了如何爬取外資爬蟲~這次我們就用三大法人來製作指標! 自己做指標的好處是,數字都可以客製化,也可以搭配其它不同的指標進行選股和回測喔! 這次我們要做的指標是「外資買入成本」!

計算指標前,先整理好財務數據
(沒上課程的請看這邊,上了課的可以跳過看下一段)
在計算外資買入成本前,我們必須要或得兩個 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])這樣就可以看到所有股價小於外資成本的股票囉! 方便您繼續追蹤,看這些股票有沒有突破外資成本,一飛沖天喔!