使用tushare进行资金流向分析

1,850 阅读3分钟

资金流向就是股市中的资金主动选择的方向。从量的角度去分析资金的流向,即观察成交量和成交金额,成交量和成交金额在实际操作中是有方向性的,买入或卖出。475582

资金流向是反映市场多空买卖意愿、主力散户买卖意愿的数据指标体系。资金流向分析属于行为金融学和技术指标双重领域的范畴,通过分析多空买卖意愿和主力散户博弈行为来分析预测股价行为,对短线操作有较高的参考意义。 一般参考如下(表格摘自百度百科): image.png

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()
  • 绘制饼图

image.png

  • 绘制柱状图
figure_bar(f_sum)

image.png

  • 绘制近25日该股票资金流向与价格的折线图
figure_line(25)

image.png 从上图中可以看到,近10日,该股票的超大单处于净流入状态,此前,大单一直是流出的。股价自5月20日急跌几天后,超大单开始逐步流入,股价也很快止跌。于此同时,小单却在逐步流出,呈现与大单相反的趋势。在6月2日股价探底,开始回升,至最后一交易日,大单净量开始由负转正,股价也达到近两周的高点。基本符合一般判断。

PS:零基础自学,文章在于个人记录,如有错误欢迎交流指正!!