由於每支股票的股本大小不同,因此我們將外資和投信的買賣張數對股本大小做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