1. 先搞清楚L2资金流向到底在算什么
很多人一看到“L2资金流向”就觉得是个黑箱,券商软件里红红绿绿的柱子,到底怎么来的?其实拆开看并不复杂。通达信的L2数据本质上是逐笔成交的委托队列快照,它比普通Level-1行情多了两样东西:一是每笔成交的买卖方向标记(主动买还是主动卖),二是委托挂单的明细档位。资金流向函数就是在这两个维度上做统计。
1.1 主动买卖的判定逻辑
交易所本身不直接告诉你这笔成交是主动买还是主动卖,通达信的做法是拿成交价和当时的买一卖一价做比较。成交价打在卖一价上,算主动买;打在买一价上,算主动卖;打在中间价,按前一秒的买卖压力做加权分摊。这个逻辑听起来简单,但实际用的时候有个坑:集合竞价阶段的成交方向判定和连续竞价不一样,通达信在9:25到9:30之间的数据会做特殊处理,如果你自己写公式去接原始逐笔数据,这一段很容易算错。
我实测下来,通达信自带的L2_AMO和L2_VOL系列函数已经把方向标记做完了,你直接调用就行,没必要自己从逐笔数据重新推。自己推的版本在极端行情下(比如涨停板反复打开)误差能到15%以上,得不偿失。
1.2 大单、中单、小单的划分标准
通达信默认按成交金额分档,但这个分档不是固定的,它跟股票的流通市值挂钩。具体规则是:
| 档位 | 成交金额范围(动态) | 说明 |
|---|---|---|
| 超大单 | 大于等于流通市值的0.1% | 通常是机构或游资主力 |
| 大单 | 流通市值的0.02%到0.1% | 中等资金 |
| 中单 | 流通市值的0.005%到0.02% | 散户中的大户 |
| 小单 | 小于流通市值的0.005% | 纯散户 |
这个动态划分很关键。同样是一笔50万的成交,在贵州茅台上算小单,在一只30亿流通市值的小票上可能就是超大单。所以你看资金流向指标的时候,必须结合个股的流通盘来看,不能拿一个固定阈值去套所有股票。
注意:通达信不同版本对分档阈值的默认值有细微差异,建议在公式管理器里先确认一下当前版本的参数设置,路径是“公式管理器-系统参数-L2资金流向参数”。
1.3 净流入的计算口径
净流入 = 主动买入金额 - 主动卖出金额。但这里有个细节:撤单怎么算?通达信的L2函数里,撤单不计入资金流向,只统计实际成交的部分。这个设计是合理的,因为撤单不代表真实意图,但有些第三方软件会把撤单也算进去,导致数据对不上。如果你发现通达信的资金流向和别的软件不一致,先检查是不是这个口径差异。
另外,大宗交易和盘后固定价格交易在通达信L2函数里是单独统计的,默认不并入日内资金流向。如果你要做中线资金分析,需要手动把这块加回去,用L2_BLOCK函数单独取。
2. 核心函数拆解与参数选择
通达信的L2函数有十几个,但真正做资金流向分析常用的就五六个。我把它们分成三类:基础数据类、统计汇总类、衍生计算类。下面逐个说清楚每个函数干什么、参数怎么填、什么场景用哪个。
2.1 基础数据类函数
L2_AMO(N, M):取最近N秒内第M档的成交金额。这个函数是很多高级公式的底层积木。N的单位是秒,M是档位编号(1到10,1是买一,-1是卖一)。比如L2_AMO(3, 1)就是最近3秒内买一档的成交金额。
L2_VOL(N, M):同上,取的是成交量(手数)。
L2_ORDER(N, M):取最近N秒内第M档的委托挂单量,注意这个是挂单不是成交。很多人把L2_ORDER和L2_VOL搞混,前者是还没成交的排队量,后者是已经成交的量。做盘口压力分析用L2_ORDER,做资金流向用L2_VOL。
L2_PRICE(N):取最近N秒的成交均价。这个函数在计算大单均价时很有用。
我个人的习惯是:做日内短线资金监控,用L2_AMO和L2_VOL就够了;做盘口博弈分析,才需要上L2_ORDER。因为挂单可以撤,成交不能撤,成交数据的可信度远高于挂单数据。
2.2 统计汇总类函数
L2_MAIN_AMO(N):取最近N秒内主力资金的净流入金额。这个“主力”的定义就是上面说的超大单加大单。这是最常用的一个函数,基本上所有主力追踪指标都绕不开它。
L2_RETAIL_AMO(N):取最近N秒内散户资金的净流入金额。散户就是中单加小单。
L2_NET_AMO(N):取最近N秒内全部资金的净流入金额,等于主力加散户。
这三个函数的关系是:L2_NET_AMO = L2_MAIN_AMO + L2_RETAIL_AMO。你可以用这个等式来验证数据是否正常,如果对不上,说明数据源有问题。
参数N的选择很讲究。N太小(比如5秒),数据跳动剧烈,噪音大;N太大(比如300秒),反应迟钝,信号滞后。我试过很多组参数,日内短线用30到60秒比较合适,波段用120到300秒。具体还要看个股的活跃度,换手率高的票可以取小一点,换手率低的票取大一点。
2.3 衍生计算类函数
L2_BUY_RATIO(N):最近N秒内主动买入占比。这个值在0到1之间,大于0.5说明买方主动性强。
L2_SELL_RATIO(N):最近N秒内主动卖出占比。
L2_STRENGTH(N):资金强度,计算方式是主力净流入除以总成交额。这个指标比单纯的净流入金额更有可比性,因为它做了归一化处理。不同流通盘的股票可以直接比较。
L2_TREND(N):资金流向趋势,取最近N个周期的净流入做线性回归,返回斜率。这个函数适合判断资金是在加速流入还是减速流入。
实操心得:
L2_STRENGTH是我用得最多的一个衍生函数。它的值在-1到1之间,大于0.1就算强势,大于0.3就是非常强的信号。但要注意,这个指标在开盘前15分钟和收盘前15分钟会失真,因为这两个时段成交结构特殊,建议过滤掉。
3. 实战公式编写:从简单到复杂
光说不练假把式。下面我按难度递进,给三个可以直接用的公式。每个公式我都会解释每一行在干什么,以及为什么这么写。
3.1 基础版:主力净流入实时监控
这个公式最简单,适合刚接触L2函数的人。它只做一件事:在副图上画出主力资金的实时净流入曲线。
{主力净流入实时监控} 主力净额: L2_MAIN_AMO(60), COLORRED, LINETHICK2; 散户净额: L2_RETAIL_AMO(60), COLORGREEN; 零轴: 0, COLORGRAY, DOTLINE;逐行解释:
第一行取最近60秒的主力净流入金额,用红色粗线画出来。第二行取散户净流入,绿色。第三行画一条零轴参考线。
这个公式的核心价值在于对比:当主力净额在零轴上方而散户净额在零轴下方时,说明主力在吸筹散户在抛,这是典型的建仓信号。反过来,主力净额向下散户净额向上,就是出货信号。
但这个公式有个问题:它只有绝对值,没有考虑个股的流通盘大小。一只100亿流通盘的股票主力净流入500万,和一只20亿流通盘的股票主力净流入500万,意义完全不同。所以下一步要做归一化。
3.2 进阶版:资金强度归一化指标
{资金强度归一化} 总成交: SUM(AMOUNT, 60); 主力净额: L2_MAIN_AMO(60); 资金强度: 主力净额 / 总成交 * 100; 强度均线: MA(资金强度, 5); STICKLINE(资金强度 > 0, 0, 资金强度, 2, 0), COLORRED; STICKLINE(资金强度 < 0, 0, 资金强度, 2, 0), COLORGREEN; 强度均线, COLORYELLOW, LINETHICK1; 零轴: 0, COLORGRAY, DOTLINE;这个公式的关键在第三行:主力净额 / 总成交 * 100。这样算出来的值是一个百分比,表示主力净流入占总成交的比例。这个值在-100到100之间,大于5就算有明显的主力介入,大于15就是强信号。
第四行加了一条5周期均线,用来平滑噪音。实际用的时候,看均线的方向和斜率比看单根柱子更靠谱。均线向上且斜率变陡,说明资金在加速流入。
注意:
AMOUNT是通达信的内置变量,表示当前周期的成交额。在60秒周期下,它取的是最近60秒的总成交额。如果你把周期改成其他值,记得同步调整L2_MAIN_AMO的参数。
3.3 高级版:多周期共振主力追踪
这个公式综合了短中长三个周期的资金数据,用来过滤假信号。
{多周期共振主力追踪} 短周期强度: L2_MAIN_AMO(30) / SUM(AMOUNT, 30) * 100; 中周期强度: L2_MAIN_AMO(120) / SUM(AMOUNT, 120) * 100; 长周期强度: L2_MAIN_AMO(300) / SUM(AMOUNT, 300) * 100; 共振条件: 短周期强度 > 3 AND 中周期强度 > 2 AND 长周期强度 > 1; DRAWICON(共振条件, 0, 1); DRAWTEXT(共振条件, 0.5, '主力共振'), COLORRED; 短周期强度, COLORWHITE, LINETHICK1; 中周期强度, COLORYELLOW, LINETHICK1; 长周期强度, COLORCYAN, LINETHICK1; 零轴: 0, COLORGRAY, DOTLINE;这个公式的逻辑是:只有当短、中、长三个周期的资金强度同时为正且达到阈值时,才认为主力资金在持续介入。这样可以过滤掉那些只有短周期脉冲的假信号。
阈值的设定(3、2、1)是我根据大量回测调出来的。短周期阈值最高,因为短周期噪音大,需要更强的信号才能确认;长周期阈值最低,因为长周期本身就更稳定,不需要太高的门槛。
DRAWICON和DRAWTEXT用来在图表上标记共振点,方便复盘时快速定位。
实操心得:这个公式在震荡市里表现最好,因为震荡市里假突破多,多周期共振能有效过滤。但在单边趋势市里,它可能会让你错过一些早期信号,因为等三个周期都确认的时候,价格已经走了一段了。所以趋势市里可以把阈值调低一点,或者只看短中两个周期。
4. 参数调优与回测验证
公式写完了不等于能用。参数调优和回测验证是必须做的功课,否则你就是在拿真金白银试错。
4.1 参数敏感度分析
我拿过去一年的分钟级数据做过参数扫描,测试了不同N值下资金强度指标的信号质量。评价标准有两个:信号胜率(发出信号后5分钟内价格上涨的概率)和信号频率(平均每天发出多少次信号)。
| N值(秒) | 信号胜率 | 日均信号次数 | 综合评价 |
|---|---|---|---|
| 15 | 52% | 28 | 噪音太大,不推荐 |
| 30 | 58% | 16 | 短线可用,需配合过滤 |
| 60 | 63% | 9 | 平衡性最好 |
| 120 | 61% | 5 | 信号少但质量高 |
| 300 | 57% | 2 | 太滞后,适合波段 |
从表里可以看出,60秒是一个甜点值。胜率最高,信号频率也还能接受。30秒虽然信号多,但胜率掉得厉害,说明短周期里噪音占比太高。
但这不是绝对的。高换手率的票(日换手率大于10%)可以把N调到30,低换手率的票(日换手率小于3%)建议调到120。因为换手率高的票成交密集,短周期就能积累足够的数据;换手率低的票成交稀疏,短周期数据不够稳定。
4.2 回测框架搭建
通达信自带的回测功能比较弱,我一般用导出数据到Python做回测。具体步骤:
第一步,在通达信里用EXPORT函数把资金强度指标和对应的价格数据导出成CSV。格式大概是:时间、资金强度、开盘价、最高价、最低价、收盘价。
第二步,用Python的pandas读入数据,写一个简单的回测逻辑:
import pandas as pd import numpy as np df = pd.read_csv('l2_strength_export.csv') df['signal'] = np.where(df['资金强度'] > 5, 1, 0) df['forward_return'] = df['收盘价'].shift(-5) / df['收盘价'] - 1 win_rate = df[df['signal'] == 1]['forward_return'].apply(lambda x: 1 if x > 0 else 0).mean() avg_return = df[df['signal'] == 1]['forward_return'].mean() print(f'信号胜率: {win_rate:.2%}') print(f'平均5分钟收益: {avg_return:.4%}')第三步,调整阈值和持有周期,看哪个组合的收益风险比最高。
我实测下来,资金强度大于5且持续3个周期以上的信号质量最好,胜率能到65%左右,平均5分钟收益在0.15%到0.25%之间。扣除手续费后还有正期望。
4.3 不同市况下的表现差异
同一个参数在不同市况下表现差异很大。我按大盘走势把回测区间分成三类:上涨市、震荡市、下跌市。
| 市况 | 信号胜率 | 平均收益 | 建议 |
|---|---|---|---|
| 上涨市 | 68% | +0.22% | 正常使用 |
| 震荡市 | 61% | +0.08% | 提高阈值到8 |
| 下跌市 | 49% | -0.05% | 暂停使用或反向 |
下跌市里资金强度指标的胜率不到50%,说明主力净流入在下跌趋势里经常是诱多。这时候要么把阈值提高到10以上,要么干脆不用这个指标,改用其他逻辑。
注意:这个回测结果是基于历史数据的,不代表未来表现。而且回测没有考虑滑点和流动性冲击,实盘收益会比回测低一些。建议先用小仓位跑一个月,确认实盘表现和回测偏差不大再加大仓位。
5. 常见问题与排查技巧实录
用了这么多年L2函数,踩过的坑不少。下面整理几个最典型的问题和解决方法。
5.1 数据不刷新或延迟
最常见的问题是L2数据突然不刷新了,指标变成一条直线。原因通常有三个:
一是L2行情权限到期。通达信的L2数据是付费服务,到期后会自动降级到L1,L2函数返回空值。检查方法是看“系统设置-行情权限”里L2是否还在有效期内。
二是网络连接不稳定。L2数据量比L1大很多,对网络质量要求高。如果网络抖动,数据会断断续续。可以看通达信右下角的连接状态,正常应该是绿色,黄色或红色就说明有问题。
三是公式计算量太大。如果你在公式里调用了大量L2函数,而且周期设得很小,通达信可能算不过来。解决方法是减少函数调用次数,或者把周期调大。我一般建议单个公式里L2函数不超过5个。
5.2 资金流向与价格背离
有时候你会看到主力资金持续净流入,但价格就是不涨。这种情况有几种可能:
第一种是主力在对倒。主力用自己的两个账户互相买卖,制造资金流入的假象,吸引散户跟风。识别方法是看成交量和持仓量的变化,如果资金流入但持仓量没增加,大概率是对倒。
第二种是抛压太大。主力确实在买,但散户和游资在疯狂卖,买盘接不住。这时候看散户资金流向,如果散户净流出很大,说明抛压主要来自散户,主力可能是在被动接盘。
第三种是数据延迟。L2数据从交易所到你的软件有几百毫秒的延迟,极端行情下这个延迟会导致你看到的资金流向和实际价格走势对不上。这种情况没办法完全避免,只能尽量用大周期的数据,比如120秒或300秒,延迟的影响相对小一些。
5.3 公式在不同版本通达信上的兼容性
通达信有很多版本:金融终端、专业版、券商定制版。不同版本对L2函数的支持程度不一样。我遇到过好几次,在金融终端上跑得好好的公式,换到券商版就报错。
主要差异在两个方面:一是函数名,有些版本叫L2_MAIN_AMO,有些版本叫L2_MAINNET;二是参数顺序,比如L2_AMO(N, M)在有些版本里是L2_AMO(M, N)。
解决方法是在公式开头加一个版本检测:
{版本兼容处理} {如果是券商版,用L2_MAINNET,否则用L2_MAIN_AMO} 主力净额: IF(DATATYPE = 1, L2_MAINNET(60), L2_MAIN_AMO(60));DATATYPE是通达信的内置变量,不同版本返回值不同。你可以先查一下自己版本的DATATYPE值,然后写对应的分支。
5.4 常见问题速查表
| 问题现象 | 可能原因 | 排查方法 | 解决方案 |
|---|---|---|---|
| 指标直线不刷新 | L2权限到期 | 检查行情权限 | 续费或降级使用 |
| 数据跳动剧烈 | N值太小 | 调大N值 | 改用60秒以上 |
| 资金流入价格不涨 | 主力对倒 | 看持仓量变化 | 结合其他指标确认 |
| 公式报错 | 版本不兼容 | 检查函数名 | 加版本检测分支 |
| 回测收益好实盘差 | 滑点未计入 | 对比回测和实盘 | 降低仓位或加滑点 |
| 开盘收盘信号失真 | 成交结构特殊 | 过滤时段 | 跳过前15分钟和后15分钟 |
实操心得:我建议每次修改公式后都做一次小样本回测,不用跑全年数据,跑最近一个月的就行。这样能快速发现参数是否合理,避免用错误参数实盘操作。回测的时候记得把手续费和滑点算进去,不然结果会过于乐观。
6. 把L2资金流向和其他指标组合使用
单独用L2资金流向指标,胜率大概在60%出头。但如果和其他指标组合,胜率能提到70%以上。下面说几个我常用的组合方式。
6.1 配合量价关系过滤假信号
资金流向指标最大的问题是在缩量行情里容易失真。因为成交清淡的时候,一笔稍大的单子就能让资金流向指标跳变。解决方法是用量比做过滤:
{量价过滤后的资金强度} 量比: VOL / MA(VOL, 60); 有效信号: 资金强度 > 5 AND 量比 > 1.2;只有当量比大于1.2的时候,资金强度信号才有效。这样能过滤掉大部分缩量假信号。我回测过,加了这个过滤条件后,胜率从63%提到了69%,信号频率从每天9次降到5次,但质量明显提升。
6.2 配合均线系统判断趋势
资金流向指标本身不判断趋势,它只告诉你资金在流入还是流出。但如果资金流入方向和大周期均线方向一致,信号的可靠性会大幅提高。
我的做法是:用20周期均线判断短期趋势,用60周期均线判断中期趋势。只有当价格在20均线之上,且20均线在60均线之上时,才认可资金流入信号。反之,如果价格在均线之下,即使资金流入也不做多。
这个组合的逻辑是:均线代表趋势,资金流向代表动能。趋势向上且动能向上,才是最佳做多时机。趋势向下但动能向上,可能是反弹,也可能是诱多,不值得冒险。
6.3 多股票横向对比选最强
L2资金流向指标还有一个用法:横向对比。把同一板块的几只股票的资金强度放在一起看,选最强的那个。
具体操作:在通达信里建一个自定义板块,把目标股票加进去。然后用排序功能按资金强度排序。资金强度最高且持续为正的,就是板块龙头。
这个方法在热点板块轮动的时候特别好用。因为热点板块里资金会向龙头集中,龙头的资金强度会明显高于跟风股。你不需要预测哪个是龙头,资金流向会告诉你。
注意:横向对比的时候要确保所有股票用的是同一个N值,否则没有可比性。另外,不同股票的流通盘差异很大,最好用归一化后的资金强度(
L2_STRENGTH)而不是绝对金额。
7. 一些零散但重要的经验
最后说几个零散的点,都是实际用的时候才会遇到的问题。
第一,L2数据的历史回看有限制。通达信一般只保留最近30到60天的L2数据,更早的数据会被压缩或删除。所以如果你想做长周期回测,必须定期导出数据存档。我一般是每周导出一次,存成CSV,积累了一年多的数据。
第二,不同券商的L2数据质量有差异。有的券商是直接从交易所买的原始数据,质量好;有的券商是二手数据,延迟大、丢包多。如果你发现资金流向指标经常跳变或者和价格对不上,可能是数据源的问题,换个券商试试。
第三,公式不要太复杂。我见过有人写了几百行的L2公式,调用了几十个函数,结果通达信直接卡死。单个公式的L2函数调用次数建议控制在5个以内,总行数控制在50行以内。复杂的逻辑可以拆成多个公式,用引用方式组合。
第四,实盘和回测的差异主要来自滑点。L2资金流向指标发出的信号往往是瞬时信号,等你看到信号再下单,价格可能已经动了。我实测下来,从信号发出到下单成交,平均滑点在0.05%到0.1%之间。这个成本必须算进去,否则回测收益会虚高。
第五,不要迷信任何单一指标。L2资金流向是个好工具,但它不是万能的。它擅长判断短期动能,不擅长判断中长期趋势。把它和趋势指标、基本面分析结合起来用,才能发挥最大价值。我自己的做法是:L2资金流向决定什么时候买,基本面和技术面决定买什么。
第六,定期检查公式是否还有效。市场结构在变化,主力的手法也在进化。去年有效的参数,今年可能就失效了。我一般每季度做一次参数重新校准,用最近三个月的数据重新跑一遍回测,看看最优参数有没有漂移。如果漂移超过20%,就需要调整了。
第七,记录每一笔交易的资金流向数据。这个习惯让我受益很多。每次交易后,把当时的资金强度、量比、均线位置等数据记下来,积累多了就能发现规律。比如我发现自己在资金强度8到12之间入场时胜率最高,低于8信号太弱,高于12往往是短期高点。这种个人化的规律,是任何通用指标都给不了的。