资金流向就是股市中的资金主动选择的方向。从量的角度去分析资金的流向,即观察成交量和成交金额,成交量和成交金额在实际操作中是有方向性的,买入或卖出。475582
资金流向是反映市场多空买卖意愿、主力散户买卖意愿的数据指标体系。资金流向分析属于行为金融学和技术指标双重领域的范畴,通过分析多空买卖意愿和主力散户博弈行为来分析预测股价行为,对短线操作有较高的参考意义。
一般参考如下(表格摘自百度百科):
Tushare数据平台提供了很方便的资金流向接口,以下以平安银行为例,分析近10日资金流向。
工具准备:
注册Tushare账户,完善资料,获取积分,参考接口文档:个股资金流向
注册地址:Tushare账号注册
实操
Step1: 数据准备
- 定义变量
code = '000001.SZ'
now = pd.Timestamp('now').__format__('%Y%m%d')
- 包装数据接口
# 小单:5万以下 中单:5万~20万 大单:20万~100万 特大单:成交额>=100万
def get_moneyflow(tcode, endate, limit):
flow = pro.moneyflow(**{
"ts_code": tcode,
"end_date": endate,
"limit": limit
}, fields=[ "trade_date", "buy_sm_vol", # 小单买入量(手) "buy_sm_amount", # 小单买入金额(万元) "sell_sm_vol", # 小单卖出量(手) "sell_sm_amount", # 小单卖出金额(万元) "buy_md_vol", # 中单买入量(手) "buy_md_amount", # 中单买入金额(万元) "sell_md_vol", # 中单卖出量(手) "sell_md_amount", # 中单卖出金额(万元) "buy_lg_vol", # 大单买入量(手) "buy_lg_amount", # 大单买入金额(万元 "sell_lg_vol", # 大单卖出量(手) "sell_lg_amount", # 大单卖出金额(万元) "buy_elg_vol", # 特大单买入量(手) "buy_elg_amount", # 特大单买入金额(万元) "sell_elg_vol", # 特大单卖出量(手) "sell_elg_amount", # 特大单卖出金额(万元) "net_mf_vol", # 净流入量(手) "net_mf_amount" # 净流入额(万元) ])
flow['net_sm'] = flow['buy_sm_vol'] - flow['sell_sm_vol']
flow['net_md'] = flow['buy_md_vol'] - flow['sell_md_vol']
flow['net_lg'] = flow['buy_lg_vol'] - flow['sell_lg_vol']
flow['net_elg'] = flow['buy_elg_vol'] - flow['sell_elg_vol']
flow['cumsum_sm'] = flow['net_sm'].cumsum()
flow['cumsum_md'] = flow['net_md'].cumsum()
flow['cumsum_lg'] = flow['net_lg'].cumsum()
flow['cumsum_elg'] = flow['net_elg'].cumsum()
return flow
定义绘图方法
# 绘制饼状图 便于查看大小单的分布
def figure_pie(f_sum):
plt.figure(figsize=(16, 12))
label1 = ['buy_sm', 'buy_md', 'buy_lg', 'buy_elg']
fig1 = plt.subplot(121)
plt.pie([f_sum['buy_sm_amount'], f_sum['buy_md_amount'], f_sum['buy_lg_amount'], f_sum['buy_elg_amount']],
labels=label1,
autopct='%1.1f%%')
label2 = ['sell_sm', 'sell_md', 'sell_lg', 'sell_elg']
fig2 = plt.subplot(122)
plt.pie([f_sum['sell_sm_amount'], f_sum['sell_md_amount'], f_sum['sell_md_amount'], f_sum['sell_elg_amount']],
labels=label2, autopct='%1.1f%%')
# 绘制柱状图 便于查看数量的对比
def figure_bar(f_sum):
name_list = ['Small', 'Mid', 'Large', 'E-Large']
num_list = [f_sum['buy_sm_amount'], f_sum['buy_md_amount'], f_sum['buy_lg_amount'], f_sum['buy_elg_amount']]
num_ist2 = [f_sum['sell_sm_amount'], f_sum['sell_md_amount'], f_sum['sell_lg_amount'], f_sum['sell_elg_amount']]
x = list(range(len(name_list)))
total_width, n = 0.8, 2
width = total_width / n
plt.bar(x, num_list, width=width, label='BUY', fc='r')
for i in range(len(x)):
x[i] += width
plt.bar(x, num_ist2, width=width, label='SELL', tick_label=name_list, fc='g')
# 折线图 便于查看数据与价格的趋势
def figure_line(limit):
flow = get_moneyflow(code, now, limit)
daily = pro.daily(**{
"ts_code": code,
"limit": limit
}, fields=[
"trade_date",
"close"
])
flow = pd.merge(flow, daily, on='trade_date')
flow['trade_date'] = flow['trade_date'].apply(lambda d: pd.to_datetime(d).__format__('%m/%d'))
flow.set_index('trade_date', inplace=True)
flow.sort_index(axis=0, inplace=True)
fig1, ax = plt.subplots(figsize=(16, 9))
plt.plot(flow['cumsum_sm'], label='sm', color='g')
plt.plot(flow['cumsum_md'], label='md', color = 'b')
plt.plot(flow['cumsum_lg'], label='lg', color = 'purple')
plt.plot(flow['cumsum_elg'], label='elg', color ='r')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Money flow')
ax2 = ax.twinx() #复制上一张子图的横坐标轴;
plt.plot(flow['close'], label='Price', color='yellow')
plt.legend()
plt.ylabel('y2')
Step2: 数据获取与分析
- 获取近10日的资金流向
f10 = get_moneyflow(code, now, 10)
f_sum = f10.sum()
- 绘制饼图
- 绘制柱状图
figure_bar(f_sum)
- 绘制近25日该股票资金流向与价格的折线图
figure_line(25)
从上图中可以看到,近10日,该股票的超大单处于净流入状态,此前,大单一直是流出的。股价自5月20日急跌几天后,超大单开始逐步流入,股价也很快止跌。于此同时,小单却在逐步流出,呈现与大单相反的趋势。在6月2日股价探底,开始回升,至最后一交易日,大单净量开始由负转正,股价也达到近两周的高点。基本符合一般判断。
PS:零基础自学,文章在于个人记录,如有错误欢迎交流指正!!