首页 > 编程开发 > python数据分析 >
-
资金流向热力图:可视化主力资金流入流出
第17章 资金流向分析实战
17.1 资金流向热力图:可视化主力资金流入流出
17.1.1 先讲个真实需求:老板要我分析主力资金的流向
上个月老板让我分析主力资金的流向,看看哪些板块和股票受到主力资金的青睐,哪些板块和股票被主力vb.net教程C#教程python教程SQL教程access 2010教程资金抛弃。我之前只会用Excel做简单的资金流向分析,完全不知道怎么用热力图可视化主力资金的流入流出。后来发现Plotly可以轻松实现资金流向热力图,而且还能添加交互功能。今天我就把用资金流向热力图可视化主力资金流入流出的方法讲清楚,帮你快速做出专业的资金流向分析。
17.1.2 核心技术:主力资金流向数据获取与热力图可视化
-
主力资金流向数据获取
Tushare提供了主力资金流向的数据接口,可以获取个股和板块的主力资金流入流出数据,包括超大单、大单、中单、小单的资金流入流出情况。 -
热力图可视化
Plotly的热力图可以将主力资金的流入流出数据进行可视化展示,帮助我们更直观地分析主力资金的流向。
17.1.3 实战:用热力图可视化主力资金流入流出
-
实战代码:主力资金流向热力图
python
# 1. 导入需要的库
import tushare as ts
import pandas as pd
import plotly.graph_objects as go
from datetime import datetime, timedelta
# 2. 获取主力资金流向数据
pro = ts.pro_api()
# 获取最近30个交易日的主力资金流向数据
start_date = (datetime.now() - timedelta(days=30)).strftime('%Y%m%d')
end_date = datetime.now().strftime('%Y%m%d')
# 获取个股主力资金流向数据
money_flow_df = pro.moneyflow(ts_code='', start_date=start_date, end_date=end_date)
# 获取板块主力资金流向数据
sector_money_flow_df = pro.sector_moneyflow(start_date=start_date, end_date=end_date)
# 3. 数据预处理
# 个股主力资金流向数据预处理
money_flow_df['trade_date'] = pd.to_datetime(money_flow_df['trade_date'], format='%Y%m%d')
money_flow_df.sort_values('trade_date', inplace=True)
# 计算主力资金净流入(超大单净流入+大单净流入)
money_flow_df['main_net_inflow'] = money_flow_df['large_net_inflow'] + money_flow_df['xlarge_net_inflow']
# 获取股票基本信息
stock_list = pro.stock_basic(exchange='', list_status='L', fields='ts_code,symbol,name,industry,list_date')
money_flow_df = pd.merge(money_flow_df, stock_list, on='ts_code', how='inner')
# 板块主力资金流向数据预处理
sector_money_flow_df['trade_date'] = pd.to_datetime(sector_money_flow_df['trade_date'], format='%Y%m%d')
sector_money_flow_df.sort_values('trade_date', inplace=True)
# 计算主力资金净流入(超大单净流入+大单净流入)
sector_money_flow_df['main_net_inflow'] = sector_money_flow_df['large_net_inflow'] + sector_money_flow_df['xlarge_net_inflow']
# 4. 绘制板块主力资金流向热力图
# 构建板块主力资金流向矩阵
sector_pivot = sector_money_flow_df.pivot(index='trade_date', columns='industry', values='main_net_inflow')
# 填充缺失值
sector_pivot = sector_pivot.fillna(0)
# 绘制热力图
fig_sector = go.Figure(data=go.Heatmap(
z=sector_pivot.values,
x=sector_pivot.columns,
y=sector_pivot.index.strftime('%Y-%m-%d'),
colorscale='RdYlGn', # 颜色从红色(净流出)到黄色(零)到绿色(净流入)
colorbar=dict(title='主力资金净流入(万元)'),
hoverongaps=False,
hovertemplate='<b>日期: %{y}</b><br>'
'<b>板块: %{x}</b><br>'
'<b>主力资金净流入: %{z:.2f}万元</b><br>'
'<extra></extra>'
))
# 设置图表布局
fig_sector.update_layout(
title={
'text': '板块主力资金流向热力图(最近30个交易日)',
'y': 0.98,
'x': 0.5,
'xanchor': 'center',
'yanchor': 'top',
'font': dict(size=20, color='#333333')
},
xaxis_title='板块',
yaxis_title='日期',
height=800,
width=1200,
template='plotly_white',
xaxis=dict(tickangle=45)
)
# 保存网页
fig_sector.write_html('板块主力资金流向热力图.html')
# 显示图表
fig_sector.show()
# 5. 绘制个股主力资金流向热力图(以白酒板块为例)
# 筛选白酒板块的股票
white_wine_stocks = stock_list[stock_list['industry'] == '白酒']
white_wine_money_flow = pd.merge(money_flow_df, white_wine_stocks, on='ts_code', how='inner')
# 构建个股主力资金流向矩阵
stock_pivot = white_wine_money_flow.pivot(index='trade_date', columns='name', values='main_net_inflow')
# 填充缺失值
stock_pivot = stock_pivot.fillna(0)
# 绘制热力图
fig_stock = go.Figure(data=go.Heatmap(
z=stock_pivot.values,
x=stock_pivot.columns,
y=stock_pivot.index.strftime('%Y-%m-%d'),
colorscale='RdYlGn',
colorbar=dict(title='主力资金净流入(万元)'),
hoverongaps=False,
hovertemplate='<b>日期: %{y}</b><br>'
'<b>股票: %{x}</b><br>'
'<b>主力资金净流入: %{z:.2f}万元</b><br>'
'<extra></extra>'
))
# 设置图表布局
fig_stock.update_layout(
title={
'text': '白酒板块个股主力资金流向热力图(最近30个交易日)',
'y': 0.98,
'x': 0.5,
'xanchor': 'center',
'yanchor': 'top',
'font': dict(size=20, color='#333333')
},
xaxis_title='股票',
yaxis_title='日期',
height=800,
width=1200,
template='plotly_white',
xaxis=dict(tickangle=45)
)
# 保存网页
fig_stock.write_html('白酒板块个股主力资金流向热力图.html')
# 显示图表
fig_stock.show()
逐行讲解:
pro.moneyflow(ts_code='', ...):获取个股主力资金流向数据,ts_code=''表示获取所有个股的数据
pro.sector_moneyflow(...):获取板块主力资金流向数据
money_flow_df['main_net_inflow'] = money_flow_df['large_net_inflow'] + money_flow_df['xlarge_net_inflow']:计算主力资金净流入,主力资金通常指超大单和大单
sector_pivot = sector_money_flow_df.pivot(index='trade_date', columns='industry', values='main_net_inflow'):构建板块主力资金流向矩阵,行是日期,列是板块,值是主力资金净流入
go.Heatmap(...):绘制热力图,z参数是热力图的数据,x参数是x轴的标签,y参数是y轴的标签,colorscale参数是颜色方案
运行结果:
会在浏览器中打开两个网页,一个是板块主力资金流向热力图,另一个是白酒板块个股主力资金流向热力图。热力图的颜色从红色到绿色,红色表示主力资金净流出,绿色表示主力资金净流入,颜色越深表示资金流入流出的规模越大。可以通过鼠标悬停查看具体的日期、板块/股票和主力资金净流入数据。
17.1.4 基础知识拓展:主力资金流向的分析方法
-
主力资金净流入的含义
主力资金净流入是指主力资金(超大单和大单)的流入金额减去流出金额。如果主力资金净流入为正,说明主力资金在买入该股票或板块;如果主力资金净流入为负,说明主力资金在卖出该股票或板块。 -
主力资金流向与股价的关系
一般来说,主力资金净流入会推动股价上涨,主力资金净流出会导致股价下跌。但也有例外情况,比如主力资金在打压股价吸筹,或者在拉高出货,这时候主力资金的流向与股价的走势可能不一致。 -
主力资金流向的分析指标
主力资金净流入率:主力资金净流入与成交额的比值,反映主力资金在成交额中的占比。
主力资金连续净流入天数:连续多少个交易日主力资金净流入,反映主力资金的持续关注度。
主力资金净流入排名:主力资金净流入在板块或市场中的排名,反映主力资金对该股票或板块的青睐程度。
python
# 计算主力资金净流入率
money_flow_df['main_net_inflow_rate'] = money_flow_df['main_net_inflow'] / money_flow_df['amount'] * 100
# 计算主力资金连续净流入天数
money_flow_df['main_net_inflow_连续天数'] = money_flow_df.groupby('ts_code')['main_net_inflow'].apply(lambda x: x.gt(0).cumsum().where(x.gt(0), 0))
# 计算主力资金净流入排名
money_flow_df['main_net_inflow_排名'] = money_flow_df.groupby('trade_date')['main_net_inflow'].rank(ascending=False)
# 保存数据
money_flow_df.to_csv('个股主力资金流向分析.csv', index=False, encoding='utf-8-sig')
sector_money_flow_df.to_csv('板块主力资金流向分析.csv', index=False, encoding='utf-8-sig')
运行结果:
会生成两个CSV文件,分别是个股主力资金流向分析和板块主力资金流向分析,包含主力资金净流入率、连续净流入天数、净流入排名等指标。
17.1.5 实战优化:添加主力资金流向与股价的对比分析
-
实战代码:主力资金流向与股价的对比分析
python
# 获取白酒板块某只股票的主力资金流向和股价数据
ts_code = '600519.SH' # 贵州茅台
stock_money_flow = money_flow_df[money_flow_df['ts_code'] == ts_code]
stock_price = pro.daily(ts_code=ts_code, start_date=start_date, end_date=end_date)
stock_price['trade_date'] = pd.to_datetime(stock_price['trade_date'], format='%Y%m%d')
stock_price.sort_values('trade_date', inplace=True)
stock_price.set_index('trade_date', inplace=True)
# 合并主力资金流向和股价数据
merged_df = pd.merge(stock_money_flow, stock_price, on='trade_date', how='inner')
# 绘制主力资金流向与股价的对比图
fig = go.Figure()
# 绘制主力资金净流入柱状图
fig.add_trace(go.Bar(
x=merged_df['trade_date'],
y=merged_df['main_net_inflow'],
name='主力资金净流入(万元)',
marker_color=np.where(merged_df['main_net_inflow'] > 0, '#1f77b4', '#d62728'),
opacity=0.7,
yaxis='y2'
))
# 绘制股价折线图
fig.add_trace(go.Scatter(
x=merged_df['trade_date'],
y=merged_df['close'],
name='收盘价(元)',
line=dict(color='#ff7f0e', width=3),
opacity=0.8,
yaxis='y1'
))
# 设置图表布局
fig.update_layout(
title={
'text': f'{merged_df.iloc[0]["name"]}主力资金流向与股价对比图(最近30个交易日)',
'y': 0.98,
'x': 0.5,
'xanchor': 'center',
'yanchor': 'top',
'font': dict(size=20, color='#333333')
},
xaxis_title='日期',
yaxis=dict(
title='收盘价(元)',
titlefont=dict(color='#ff7f0e'),
tickfont=dict(color='#ff7f0e')
),
yaxis2=dict(
title='主力资金净流入(万元)',
titlefont=dict(color='#1f77b4'),
tickfont=dict(color='#1f77b4'),
overlaying='y',
side='right'
),
height=600,
width=1200,
template='plotly_white',
legend={'x': 0.02, 'y': 0.98}
)
# 保存网页
fig.write_html('贵州茅台主力资金流向与股价对比图.html')
# 显示图表
fig.show()
运行结果:
会在浏览器中打开一个网页,显示贵州茅台主力资金流向与股价的对比图。柱状图表示主力资金净流入,红色表示净流出,蓝色表示净流入;折线图表示股价。可以通过对比主力资金流向和股价的走势,分析主力资金的操作意图。
17.1.6 总结:主力资金流向分析的应用场景
1.投资决策:通过主力资金流向分析,可以选择主力资金净流入的股票或板块进行投资,享受主力资金推动股价上涨带来的收益;也可以避开主力资金净流出的股票或板块,避免股价下跌带来的损失。
2.量化策略:在量化策略中,主力资金流向分析可以用于构建主力资金跟踪策略,当主力资金连续净流入时买入股票,当主力资金连续净流出时卖出股票。
3.风险控制:通过主力资金流向分析,可以识别出主力资金在出货的股票,及时卖出股票,控制投资风险。
4.市场监控:通过主力资金流向分析,可以监控市场的热点板块和龙头股票,把握市场的投资机会。
通过这个实战,你应该已经掌握了用热力图可视化主力资金流入流出的方法,包括板块主力资金流向热力图、个股主力资金流向热力图、主力资金流向与股价的对比分析等功能。接下来可以尝试用这些方法制作更专业的资金流向分析工具和投资决策系统。
下一节咱们就讲如何用Python做量化策略回测,帮你验证策略的有效性。
本站原创,转载请注明出处:https://www.xin3721.com/ArticlePrograme/csharp49713.html










