同花顺Supermind量化交易 资金面专题2-风格下资金流入强度的分析 附源代码

一般而言,当市场中资金流动强度平缓时,风格投资者保持原有的风格方向;当资金流动强度强烈时,风格投资者转换原有的风格方向,例如:小市值投资者在资金流动强烈时,会转向大市值风格。本篇文章将从规模因子(大小盘风格)入手,研究关于资金流动强度与风格投资的话题。

风格下资金流入强度的分析

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.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值