由於每支股票的股本大小不同,因此我們將外資和投信的買賣張數對股本大小做Normalization這樣算出的籌碼集中度較有意義
外本比=外資當日買賣超張數/該股票的股本
投本比=投信當日買賣超張數/該股票的股本
投本比=投信當日買賣超張數/該股票的股本
所需資料: 1. 外資當日買賣張數, 2. 當日收盤價, 3. 股票的股本
1.外資買賣張數:http://www.twse.com.tw/fund/TWT38U?response=html&date=20190606
投信買賣張數:http://www.twse.com.tw/fund/TWT44U?response=html&date=20190606
投信買賣張數:http://www.twse.com.tw/fund/TWT44U?response=html&date=20190606
import requests as rq import pandas as pd import matplotlib.pyplot as plt import numpy as np import datetime from io import StringIO import time
#載入股本資料 stock_capital=pd.read_csv('stock_capital.csv',delimiter=';') del stock_capital[stock_capital.columns[1]] stock_capital.columns=['證券代號','股本(億)'] stock_capital.iloc[:,0]=stock_capital.iloc[:,0].astype('str')
#下載每日收盤資料 datestr=time.strftime("%Y%m%d", time.localtime()) datestr='20190606' #下載收盤資訊 r = rq.post('http://www.twse.com.tw/exchangeReport/MI_INDEX?response=csv&date=' + datestr + '&type=ALL') if len(r.text)>0: df_stock = pd.read_csv(StringIO("\n".join([i.translate({ord(c): None for c in ' '}) for i in r.text.split('\n') if len(i.split('",')) == 17 and i[0] != '='])), header=0) df_stock.to_csv('stock/'+datestr) time.sleep( 5 ) #將沒有收開盤價的資料刪除 df_stock=df_stock.drop(df_stock[df_stock['收盤價']=='--'].index) #將收盤盤價轉換成浮點數 val=[] for i in df_stock['收盤價'].values: j=val.append(float(i.replace(",",""))) val val1=[] for i in df_stock['開盤價'].values: j=val1.append(float(i.replace(",",""))) val1 df_stock['收盤價']=val df_stock['開盤價']=val1
#外資買賣超 url_w="http://www.twse.com.tw/fund/TWT38U?response=html&date=20190606" df_w=pd.read_html(url_w) df_w=df_w[0].iloc[:,1:6] columns=[] for (a,b,c)in list(df_w.columns): columns.append(c) df_w.columns=columns del df_w['證券名稱'] df_w.iloc[:,0]=df_w.iloc[:,0].astype('str')
#連結三個資料表(stock_capital, df_stock) df_w_all_stock = pd.merge(df_stock,stock_capital,on='證券代號', how='inner') df_w_all_stock = pd.merge(df_w_all_stock,df_w,on='證券代號', how='inner')
#取得外本比前10名 index=df_w_all_stock['外本比(%)'].sort_values(ascending=False)[:10].index df_w_all_stock_top=df_w_all_stock.iloc[index] #df7['漲跌百分比']=(df7['收盤價'].astype(float)-df7['開盤價'].astype(float))/df7['開盤價'].astype(float) df_w_all_stock_top=df_w_all_stock_top.loc[:,['證券代號','證券名稱','外本比(%)','本益比','漲跌(+/-)','開盤價','收盤價']] print('外本比買超前10:') df_w_all_stock_top

#取得外本比末10名 index=df_w_all_stock['外本比(%)'].sort_values(ascending=False)[-10:].index df_w_all_stock_bottom=df_w_all_stock.iloc[index] #df7['漲跌百分比']=(df7['收盤價'].astype(float)-df7['開盤價'].astype(float))/df7['開盤價'].astype(float) df_w_all_stock_bottom=df_w_all_stock_bottom.loc[:,['證券代號','證券名稱','外本比(%)','本益比','漲跌(+/-)','開盤價','收盤價']] print('外本比賣超前10:') df_w_all_stock_bottom

#投本比計算 #投信買賣超 url_t="http://www.twse.com.tw/fund/TWT44U?response=html&date=20190606" df_t=pd.read_html(url_t) df_t=df_t[0].iloc[:,1:] columns=[] for (a,b)in list(df_t.columns): columns.append(b) df_t.columns=columns del df_t['證券名稱'] df_t.iloc[:,0]=df_w.iloc[:,0].astype('str')
#投信買賣超 url_t="http://www.twse.com.tw/fund/TWT44U?response=html&date=20190606" df_t=pd.read_html(url_t) df_t=df_t[0].iloc[:,1:] columns=[] for (a,b)in list(df_t.columns): columns.append(b) df_t.columns=columns del df_t['證券名稱'] df_t.iloc[:,0]=df_t.iloc[:,0].astype('str')
#連結三個資料表(stock_capital, df_stock,df_t) df_t_all_stock = pd.merge(df_stock,stock_capital,on='證券代號', how='inner') df_t_all_stock = pd.merge(df_t_all_stock,df_t,on='證券代號', how='inner')
#計算投本比 df_t_all_stock['投本比(%)']=(df_t_all_stock['買賣超股數'].astype(float)*df_t_all_stock['收盤價'].astype(float)/(df_t_all_stock['股本(億)']*100000000).astype(float))*100
#取得投本比前10名 index=df_t_all_stock['投本比(%)'].sort_values(ascending=False)[:10].index df_t_all_stock_top=df_t_all_stock.iloc[index] #df7['漲跌百分比']=(df7['收盤價'].astype(float)-df7['開盤價'].astype(float))/df7['開盤價'].astype(float) df_t_all_stock_top=df_t_all_stock_top.loc[:,['證券代號','證券名稱','投本比(%)','本益比','漲跌(+/-)','開盤價','收盤價']] print('投本比買超前10:') df_t_all_stock_top

##### 取得投本比末10名 index=df_t_all_stock['投本比(%)'].sort_values(ascending=True)[0:10].index df_t_all_stock_bottom=df_t_all_stock.iloc[index] df_t_all_stock_bottom=df_t_all_stock_bottom.loc[:,['證券代號','證券名稱','投本比(%)','本益比','漲跌(+/-)','開盤價','收盤價']] print('投本比賣超前10:') df_t_all_stock_bottom
