问题描述
如果用现成的APP:get_money_flow 只能统计到不同资金级别叠加后的净资金,比如可以得到超大单某天的资金是净流入xxxx元,但是无法得到当天超大单分别流入多少/流出多少。所以尝试用聚源数据的QT_TradingCapitalFlow 命令来获取数据。
我的理解是,总的流出资金和流入资金是相等的。这个可以从get_money_flow得到验证。无非是流入和流出的方向不一样,一个是正的,一个是负的。
现在我用QT_TradingCapitalFlow,总是和get_money_flow 取到的数据不一致,除了是资金级别划分的口径不同外(事实上数据结果也不一样。比如,无论是聚宽,还是聚源,划分超大单的定义都是100万----大部分股价超过2元,也能满足聚宽50万股的要求----以上,但是取到的数据就不同。希望聚宽可以统一成同样的口径),其流入资金和流出资金总和也不一样。请问为什么?是我的方法问题,还是其他原因?
下面是我用平安银行来试验:
Img
Img
最后汇总当天的流入资金和流出资金:
Img
流入资金和流出资金,并不相等。请问什么原因?
=========================
附上get_money_flow的数据:
Img
在2020-09-25,用聚宽的APP:get_money_flow,得到超大单流出-9455.5513万。
对比聚源的QT_TradingCapitalFlow数据,结果是(ValueRange等于4的那行):
(2.352533-1.4234)*100000000=9291.33万。是流入。这和get_money_flow差距就太大了。连方向都是反的。
解决方案
您好!关于您在使用 JoinQuant 平台时遇到的 get_money_flow 接口与聚源数据 (QT_TradingCapitalFlow) 资金流向数据不一致,以及流入流出总和不等的问题,这在量化数据分析中是一个非常经典且常见的情况。这通常不是您的方法问题,而是底层数据统计口径和算法差异导致的。
以下是详细的原因分析:
1. 为什么不同数据源的资金流向数据差异巨大?
资金流向(大单、小单流入流出)并不是交易所直接发布的标准数据,而是各大行情提供商(如聚宽、聚源、Wind、同花顺等)基于 Level-2 逐笔交易数据 二次计算得出的。由于计算规则没有统一的国家标准,各家的结果必然存在差异,主要体现在以下几个方面:
- 单子大小的划分标准不同:
- JoinQuant (
get_money_flow) 的标准:文档明确指出,超大单是“大于等于50万股或者100万元的成交单”;大单是“大于等于10万股或20万元且小于超大单”等。它是一个“或”的逻辑,且同时考虑了股数和金额。 - 聚源数据的标准:可能仅仅基于金额(如严格大于100万),或者基于不同的股数阈值。即使大部分股票满足条件,但在临界点上的单子归属会有很大差异。
- JoinQuant (
- “成交单”与“委托单”的差异(核心原因):
- 有些数据源是基于逐笔成交来划分的(一笔大委托被拆分成多个小成交,按小单算)。
- 有些数据源(更高级的算法)会尝试还原逐笔委托(通过单号匹配,把拆分的小成交还原成一个大委托单,按大单算)。这会导致超大单的统计结果出现天壤之别。
- 主动买入(流入)与主动卖出(流出)的判定逻辑:
- 资金流入通常指“主动买入”(外盘,以卖出价成交),流出指“主动卖出”(内盘,以买入价成交)。
- 对于夹在买一和卖一中间价格成交的单子,或者集合竞价期间的单子,各家数据源的归类算法(算流入、算流出还是各算一半,甚至直接剔除)完全不同。
2. 为什么聚源数据中,总流入和总流出不相等?
在理想状态下,买卖双方成交,全市场的总流入(主动买)应该等于总流出(主动卖),总和等于总成交额。但实际统计中出现不等,通常是因为:
- 集合竞价数据的处理:早盘 9:15-9:25 的集合竞价和尾盘的集合竞价,是集中撮合成交的,无法区分主动买和主动卖。很多资金流统计算法会直接将集合竞价的成交额剔除出资金流向的统计,或者单独列为一类。这就导致了您累加盘中各级别的流入流出时,总和不等于当天的总成交额,且流入流出总和不对等。
- 平盘成交(不明方向单):在某些极短时间内,成交价既不是买一也不是卖一,算法无法判定是主动买还是主动卖,这部分资金可能被归入“未知”或被忽略。
3. 为什么连方向都是反的?(超大单净流入 vs 净流出)
这是因为大资金的交易行为在不同算法下的暴露程度不同。例如:
- 主力挂了一个 500 万的买单(委托单),被 50 个散户的 10 万卖单吃掉。
- 算法 A(基于成交单):记录为 50 笔 10 万的小单主动卖出(小单流出增加)。
- 算法 B(基于委托单还原):识别出这是一个 500 万的超大单在吸筹,记录为超大单主动买入(超大单流入增加)。
这种底层逻辑的根本差异,会导致同一天同一只股票,A 数据源显示超大单净流出,B 数据源显示超大单净流入。
建议与总结
- 保持数据源的一致性:在量化回测和实盘中,切忌交叉使用不同数据源的衍生指标。如果您在 JoinQuant 平台上开发策略,建议统一使用
get_money_flow。虽然它只提供净额,但其计算逻辑与平台的其他行情数据是对齐的,回测结果更可靠。 - 理解指标的局限性:资金流向指标本身具有很强的“算法主观性”,它反映的是某种特定口径下的资金博弈情况,而不是绝对的物理真理。策略的有效性应该建立在对单一数据源长期统计规律的挖掘上,而不是纠结于不同数据源之间的绝对数值差异。
- 关于统一口径:由于聚源是第三方数据供应商,JoinQuant 很难去修改聚源底层的计算逻辑来迎合
get_money_flow,两者作为不同的数据维度供开发者参考。