一般而言,当市场中资金流动强度平缓时,风格投资者保持原有的风格方向;当资金流动强度强烈时,风格投资者转换原有的风格方向,例如:小市值投资者在资金流动强烈时,会转向大市值风格。本篇文章将从规模因子(大小盘风格)入手,研究关于资金流动强度与风格投资的话题。
风格下资金流入强度的分析
1 导入库包
In [2]:
import pandas as pd
import numpy as np
import datetime
import math
import matplotlib.pyplot as plt
plt.style.use('seaborn')
2.资金流入净值取数和计算
In [3]:
#取数平安银行主动买入量
data_buy=get_money_flow_step(security_list='000001.SZ',start_date=None,end_date='20190103',fre_step='1d',\
fields=['act_buy_xl','act_buy_l','act_buy_m'],count=250,is_panel=0)['000001.SZ']
#取数平安银行主动卖出量
data_sell=get_money_flow_step(security_list='000001.SZ',start_date=None,end_date='20190103',fre_step='1d',\
fields=['act_sell_xl','act_sell_l','act_sell_m'],count=250,is_panel=0)['000001.SZ']
#横向加总
data_buyall=pd.DataFrame(data_buy.apply(lambda x:x.sum(),axis=1),columns=['buy_all'])
data_sellall=pd.DataFrame(data_sell.apply(lambda x:x.sum(),axis=1),columns=['sell_all'])
data_all=pd.concat([data_buyall,data_sellall],axis=1)
#得出平安银行流入净值
data_all['data_net']=data_all['buy_all']-data_all['sell_all']
data_all.tail()
Out[3]:
buy_all | sell_all | data_net | |
---|---|---|---|
2018-12-26 | 108688097.0 | 176514956.0 | -67826859.0 |
2018-12-27 | 191021237.0 | 258350579.0 | -67329342.0 |
2018-12-28 | 249609737.0 | 161550282.0 | 88059455.0 |
2019-01-02 | 115789628.0 | 270478617.0 | -154688989.0 |
2019-01-03 | 173588438.0 | 115469752.0 | 58118686.0 |
3.一个截面的资金流动强度分析
In [43]:
start_date='2019-01-10'
start_date=datetime.datetime.strptime(start_date,'%Y-%m-%d')
def inflow(stock_list,start_date):
for stock in stock_list:
#print(stock)
data_buy=get_money_flow_step(security_list=stock,start_date=None,end_date=start_date,fre_step='1d',\
fields=['act_buy_xl','act_buy_l','act_buy_m'],count=1,is_panel=0)[stock]
data_sell=get_money_flow_step(security_list=stock,start_date=None,end_date=start_date,fre_step='1d',\
fields=['act_sell_xl','act_sell_l','act_sell_m'],count=1,is_panel=0)[stock]
data_buyall=pd.DataFrame(data_buy.apply(lambda x:x.sum(),axis=1),columns=['buy_all'])
data_sellall=pd.DataFrame(data_sell.apply(lambda x:x.sum(),axis=1),columns=['sell_all'])
data_all=pd.concat([data_buyall,data_sellall],axis=1)
data_net=data_all['buy_all']-data_all['sell_all']
try:
data_net=pd.Series(data_net[0],index=[stock])
except:
continue
if 'inflow_df' in locals():
inflow_df = inflow_df.append(data_net)
else:
inflow_df = data_net
inflow_df=inflow_df.to_frame()
inflow_df.columns=['net_inflow']
return inflow_df
stock_list=list(get_all_securities('stock',date=start_date).index)
#取全市场股票各股票市值因子
df = get_fundamentals(query(asharevalue.symbol, asharevalue.total_mv).filter(\
asharevalue.symbol.in_(stock_list)).order_by(asharevalue.total_mv.asc()),date=start_date)
df.set_index('asharevalue_symbol',inplace=True)
df.index.name='symbol'
#取全市场股票各股票流入净值
df_inflow=inflow(stock_list,start_date)
#取全市场股票各股票成交量
df_volume = get_price(stock_list, None, '20170303', '1d', ['volume'], True, None, 1, is_panel=1)['volume']
df_volume=df_volume.T
df_volume.columns=['df_volume']
#合并三表
df=pd.concat([df,df_inflow,df_volume],axis=1)
#按照市值排序
df.sort_values(by='asharevalue_total_mv',ascending = True,inplace=True)
df.dropna(inplace=True)
df_slice=round(len(df)/10)
#print(df)
#将dataframe的净流入和成交量分成10份切片,并在切片内进行加总
data_net_inflow=[]
data_volume=[]
data_factor=[]
for i in range(10):
data_sum=df.ix[i*df_slice:(i+1)*df_slice,['asharevalue_total_mv','net_inflow','df_volume']].apply(lambda x: x.sum())
data_net_inflow.append(data_sum['net_inflow'])
data_volume.append(data_sum['df_volume'])
data_factor.append(data_sum['asharevalue_total_mv'])
data_net_inflow=pd.Series(data_net_inflow)
data_volume=pd.Series(data_volume)
data_factor=pd.Series(data_factor)
data_total=pd.DataFrame([data_factor,data_net_inflow,data_volume])
data_total=data_total.T
data_total.columns=['data_factor','data_net_inflow','data_volume']
data_total.head(10)
Out[43]:
data_factor | data_net_inflow | data_volume | |
---|---|---|---|
0 | 4.776260e+11 | -4.869376e+08 | 1.257051e+09 |
1 | 6.446934e+11 | -1.012772e+09 | 1.832052e+09 |
2 | 8.006962e+11 | -7.643456e+08 | 2.153484e+09 |
3 | 9.747939e+11 | -9.009924e+08 | 2.541013e+09 |
4 | 1.179759e+12 | -1.555130e+09 | 2.463412e+09 |
5 | 1.447312e+12 | -1.324253e+09 | 2.500842e+09 |
6 | 1. |