Python:外資買入成本選股

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

計算指標前,先整理好財務數據

(沒上課程的請看這邊,上了課的可以跳過看下一段)

在計算外資買入成本前,我們必須要或得兩個 DataFrame:

  1. 「收盤價」
  2. 「外資買入張數」

這兩個 DataFrame,其 columns 是股票的代號,而 index是每天的日期,
這兩個 DataFrame 要怎麼做出來呢?

首先,可以參考之前的文章,學習爬取股價跟三大法人:

  1. 爬取股價資訊
  2. 爬取三大法人買賣超

接下來,我們可以將這先每天都有的資料轉換成時間序列的 DataFrame:
時間序列實做
以上這篇文章只有教您怎麼整理「收盤價」,沒有教您怎麼整理「三大法人買賣資訊喔!」
但原理都是一樣的,所以就依法炮製可以做出「三大法人」的DataFrame喔!

好麻煩喔!有沒有更快的方式?(利用課堂的工具)

假如您有上課程的話,利用 爬取三大法人買賣超 這篇文章,
就可以將三大法人買賣超的資訊整理好喔!

所以您用我們課程中的code,只需要額外增加:

1
2
from finlab.data import Data
data = Data()

以上的code就是一個可以跟資料庫索取資料的物件,接下來只要把資料讀進來就可以了:

1
2
3
4
5
6
7
8
# 外資買入(2017-12月後的格式)
陸資買進 = data.get('外陸資買進股數(不含外資自營商)', 250)
外資買進 = data.get('外資自營商買進股數', 250)

外資買進 += 陸資買進

# 外資買入(2017~12月前的格式)
外資買進.fillna(data.get('外資買進股數', 250))

這樣就可以,直接得到dataframe囉!
賣出也是依法炮製:

1
2
3
4
5
6
7
8
# 外資賣出(2017-12月後的格式)
陸資賣出 = data.get('外陸資賣出股數(不含外資自營商)', 250)
外資賣出 = data.get('外資自營商賣出股數', 250)

外資賣出 += 陸資賣出

# 外資賣出(2017~12月前的格式)
外資賣出.fillna(data.get('外資賣出股數', 250))

然後是收盤價:

1
2
# 收盤價
收盤價 = data.get('收盤價', 250)

接下來我們就可以來計算指標了,首先:外資買入成本

其實這一步驟是最簡單的XD
最重要的只有兩個 function

  1. DataFrame 乘法:DataFrame的乘法很聰明,會將一樣的column name 跟 index 對應到的數字相乘,所以我們可以直接寫 外資買入 * 收盤價 這樣子的語法
  2. df.rolling(60).mean():就是時間窗格,例如今天的值,會變成過去60天的值的加總,每一天都如此計算。

所以就有以下的code:

1
外資買進成本 = (外資買進 * 收盤價).rolling(60, min_periods=1).sum() / 外資買進.rolling(60, min_periods=1).sum()

就這樣算完了,但是有時候我們防止 DataFrame 裡面有 NaN ,我們希望就算有 NaN 也能算出值,就可以寫成:

1
外資買進成本 = (外資買進 * 收盤價).rolling(60, min_periods=1).sum() / 外資買進.rolling(60, min_periods=1).sum()

當中的 min_period=1 代表60天中,只需要有一天不是 NaN,就可以將不是 NaN 的數字取平均喔!
所以這樣寫會是比較建議的。

這邊要注意的是,我們不只算了單一一檔股票,是把所有股票的外資買進成本都算出來囉!

外資賣出成本

這邊一模一樣,所以就直接放code:

1
外資賣出成本 = (外資賣出 * 收盤價).rolling(60, min_periods=1).sum() / 外資賣出.rolling(60, min_periods=1).sum()

畫出曲線

我們可以將 買入、賣出 的成本都畫出來:

1
2
3
收盤價['1101'].plot()
外資買進成本['1101'].plot(color='red')
外資賣出成本['1101'].plot(color='blue')

紅色的線就是外資的買進成本
藍色的就是賣出成本

當買進成本高於賣出成本時,就是可以考慮買進的時機喔!
或是當股價上漲後,拉回到買進成本線,也是很好的買點喔!
大家可以試著回測看看~~

選股

我們也可以選擇股價小於外資成本的股票清單:

1
2
cond1 = 收盤價.iloc[-1] < 外資買進成本.iloc[-1]
print(cond1[cond1])

這樣就可以看到所有股價小於外資成本的股票囉!
方便您繼續追蹤,看這些股票有沒有突破外資成本,一飛沖天喔!

假如覺得文章不錯,那更不能錯過我們的影音課程喔!
或我們按個 鼓勵一下吧!