2019年6月7日 星期五

[股票] 用Python計算每日台股籌碼集中和籌碼分散個股

由於每支股票的股本大小不同,因此我們將外資和投信的買賣張數對股本大小做Normalization這樣算出的籌碼集中度較有意義
外本比=外資當日買賣超張數/該股票的股本 
投本比=投信當日買賣超張數/該股票的股本
所需資料: 1. 外資當日買賣張數, 2. 當日收盤價, 3. 股票的股本

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

三倍槓桿和一倍槓桿的長期定期定額報酬率分析

  以下是中國,美國股票債卷的三倍槓桿和一倍槓桿ETF分析.可以發現,三倍槓桿在下跌時期的跌幅遠比一倍槓桿的多 .且從時間軸來看,三倍槓桿由於下跌力道較強,因此會把之前的漲幅都吃掉,所以對於長期上身的市場,例如美國科技股,由於上升時間遠比下跌時間長,所以持有TQQQ的長期回報率會...