4、资金流指标计算:主力净流入、净流出、资金强度、资金集中度的计算公式与实现
好,咱们直接进入正题。
上一章我们聊了数据清洗,那都是准备工作。这一章,才是真正开始“算钱”了。
资金流指标,说白了就是回答一个问题:主力到底在买还是在卖?
我刚开始做量化的时候,也迷信过各种复杂模型。后来发现,最基础的资金流指标,往往最管用。你想想看,大资金进出,就像大象过河,动静肯定小不了。
4.1 主力净流入与净流出
这两个指标是孪生兄弟。公式很简单:
主力净流入 = 主力买入金额 - 主力卖出金额
主力净流出 = 主力卖出金额 - 主力买入金额
嗯,这里有个坑。很多新手会问:“我怎么知道哪些是主力买入,哪些是主力卖出?”
其实,我们用的是近似法。在A股市场,通常把单笔成交额大于某个阈值(比如100万元)的订单,视为“主力行为”。
具体实现时,我习惯这样处理:
def calculate_net_inflow(df, threshold=1000000):
"""
计算主力净流入
:param df: DataFrame,包含成交明细(price, volume, amount, buy_sell_flag)
:param threshold: 单笔成交金额阈值,默认100万
:return: 净流入金额
"""
# 筛选出主力级别的成交
main_force = df[df['amount'] >= threshold]
# 区分买入和卖出
buy = main_force[main_force['buy_sell_flag'] == 'B']['amount'].sum()
sell = main_force[main_force['buy_sell_flag'] == 'S']['amount'].sum()
net_inflow = buy - sell
return net_inflow
避坑指南: 我曾经在实盘回测中,直接用日线级别的“大单净流入”数据,结果发现信号滞后严重。后来改成用分钟级数据计算,效果好了很多。记住,资金流是高频行为,用低频数据去算,就像用望远镜看蚂蚁搬家——看不清。
4.2 资金强度
净流入只能告诉你方向,但没法告诉你“力度”。
举个例子:某只股票今天净流入1个亿,但全天成交额是100亿。另一只股票净流入5000万,但全天成交额只有5亿。你说哪个主力更积极?
这时候就需要资金强度了。
计算公式:
资金强度 = 主力净流入 / 流通市值(或成交额)
我个人习惯用成交额做分母,因为流通市值变化太慢,反应不够灵敏。
def calculate_strength(net_inflow, total_turnover):
"""
计算资金强度
:param net_inflow: 主力净流入
:param total_turnover: 总成交额
:return: 资金强度(百分比)
"""
if total_turnover == 0:
return 0
strength = (net_inflow / total_turnover) * 100
return round(strength, 2)
资金强度大于0,说明主力在净买入;小于0,说明在净卖出。绝对值越大,力度越强。
注意: 资金强度不是万能的。我记得有一次,某只股票资金强度高达15%,我以为是主力强力建仓,结果第二天就跌停了。后来复盘发现,那是主力在对倒出货——左手倒右手,制造假象。所以,资金强度一定要结合价格走势来看。
4.3 资金集中度
这个指标,很多人会忽略。但我认为它非常关键。
资金集中度,衡量的是主力资金是否集中在少数几个价位上。如果主力在某个价位密集成交,说明这里有“阵地战”。
计算公式:
资金集中度 = 前N笔最大成交金额之和 / 总成交金额
N通常取5或10。我一般用10,因为样本量太少了不稳定。
def calculate_concentration(df, top_n=10):
"""
计算资金集中度
:param df: DataFrame,包含成交明细(amount)
:param top_n: 取前N笔最大成交
:return: 集中度(百分比)
"""
total_amount = df['amount'].sum()
if total_amount == 0:
return 0
# 按成交金额降序排列,取前N笔
top_amounts = df['amount'].sort_values(ascending=False).head(top_n).sum()
concentration = (top_amounts / total_amount) * 100
return round(concentration, 2)
集中度越高,说明主力越“抱团”。我一般这样用:
- 集中度 > 30%:高度集中,主力可能在关键价位博弈
- 集中度 15% - 30%:中度集中,正常交易状态
- 集中度 < 15%:分散交易,可能是散户行情
4.4 四个指标的综合应用
单独看一个指标,容易出错。我习惯把它们组合起来看:
| 场景 | 净流入 | 资金强度 | 资金集中度 | 我的判断 |
|---|---|---|---|---|
| 强势建仓 | 正,大额 | > 5% | > 25% | 主力真金白银在买,可以跟进 |
| 诱多出货 | 正,小额 | < 2% | < 15% | 可能是假象,小心追高 |
| 对倒做量 | 接近0 | 接近0 | > 40% | 主力在自娱自乐,别参与 |
| 恐慌出逃 | 负,大额 | < -5% | > 30% | 主力在跑,赶紧撤 |
你看,四个指标组合起来,就像给主力资金做了个“CT扫描”,哪里有问题一目了然。
4.5 知识体系总览
为了让你更直观地理解这几个指标的关系,我画了张图:
这张图把四个指标的关系串起来了。你写代码的时候,可以按照这个结构来组织函数,逻辑会清晰很多。
我的一个小习惯: 在实盘系统中,我会把这四个指标做成一个“资金仪表盘”。每天开盘前跑一遍,看看哪些股票出现了异常的资金行为。这比单纯看K线有效得多。
好了,这一章的内容就到这。公式和代码都给你了,剩下的就是去数据里验证。记住,纸上得来终觉浅,绝知此事要躬行。
公众号:蓝海资料掘金营,微信deep3321