第三章 资金流向计算模型:三种核心算法详解

做订单流分析这些年,我最大的体会就是:资金流向的计算,没有银弹。

市面上各种软件、平台,算出来的资金流向数据经常打架。为什么?因为底层算法不一样。今天我就把三种最主流的算法掰开揉碎讲清楚。你理解了这些,以后看任何资金流向指标,心里都有杆秤。

3.1 基于成交量的资金流向算法

这是最朴素、最直观的方法。说白了,就是看每一笔成交,是主动买还是主动卖。

核心逻辑:

  • 主动买入(吃卖单) → 资金流入
  • 主动卖出(吃买单) → 资金流出

具体怎么算?我直接上代码:

def volume_flow(tick_data):
    """
    tick_data: 包含 price, volume, side 的逐笔成交数据
    side: 'buy' 表示主动买, 'sell' 表示主动卖
    """
    inflow = 0
    outflow = 0
    
    for tick in tick_data:
        if tick['side'] == 'buy':
            inflow += tick['volume']
        elif tick['side'] == 'sell':
            outflow += tick['volume']
    
    net_flow = inflow - outflow
    return net_flow

嗯,这里要注意:很多交易所的逐笔数据里,side字段可能叫法不同。有的叫AggressorSide,有的叫TakerSide。本质都一样——谁是主动吃单的一方。

实战要点:

  • 这个算法对数据精度要求最高,必须用逐笔成交数据
  • 如果只有分钟级数据,算出来误差会很大
  • 适合高频交易场景,比如期货、数字货币

我在项目中遇到过一个问题:某交易所的逐笔数据里,side字段偶尔会缺失。后来我加了个校验逻辑,如果side为空,就根据价格变动方向推断——价格向上突破,大概率是主动买。

3.2 基于大单拆分的资金流向算法

为什么需要这个算法?因为市场上有很多大资金,他们会把大单拆成小单,避免被盯上。

你想想看,如果一笔1000手的单子直接砸进去,盘口瞬间就变了。但拆成100笔10手的单子,看起来就像散户在交易。

核心思路:识别异常的大单,然后把这些大单的资金流向单独计算。

def large_order_flow(tick_data, threshold=100):
    """
    threshold: 大单阈值,单位是手
    超过这个数量的单子,视为大单
    """
    large_inflow = 0
    large_outflow = 0
    
    for tick in tick_data:
        if tick['volume'] >= threshold:
            if tick['side'] == 'buy':
                large_inflow += tick['volume'] * tick['price']
            else:
                large_outflow += tick['volume'] * tick['price']
    
    return large_inflow, large_outflow

我的经验:

阈值怎么设?我一般用动态阈值。比如取过去20个交易日的平均单笔成交量的3倍。这样能适应不同品种、不同活跃度的市场。

我曾经踩过一个坑:把阈值设死了,结果在某个流动性极差的品种上,把正常交易都识别成了大单。后来改成动态阈值,问题就解决了。

大单拆分的识别方法:

方法 原理 适用场景
时间窗口法 短时间内连续同向的小单,合并视为大单 股票市场,尤其是A股
价格冲击法 单笔成交导致价格跳变,视为大单 期货、外汇等连续竞价市场
成交量异常法 成交量超过均值N倍标准差 所有市场,通用性强

3.3 基于价格推动的资金流向算法

这个算法有点意思。它不关心单子是谁吃的,只看价格是怎么动的。

核心假设:资金流入会推高价格,资金流出会压低价格。

具体算法:

def price_flow(ohlc_data):
    """
    ohlc_data: 包含 open, high, low, close, volume 的K线数据
    """
    flows = []
    
    for i in range(1, len(ohlc_data)):
        prev_close = ohlc_data[i-1]['close']
        curr_close = ohlc_data[i]['close']
        curr_volume = ohlc_data[i]['volume']
        
        if curr_close > prev_close:
            # 价格上涨,视为资金流入
            flow = curr_volume * (curr_close - prev_close) / prev_close
        elif curr_close < prev_close:
            # 价格下跌,视为资金流出
            flow = -curr_volume * (prev_close - curr_close) / prev_close
        else:
            flow = 0
        
        flows.append(flow)
    
    return flows

注意:

这个算法有个致命缺陷:它假设价格变动完全由资金驱动。但现实中,价格可能因为消息面、情绪面等因素波动。所以这个算法更适合做辅助判断,不能单独使用。

我个人习惯把三种算法结合起来用。比如:

  • 用成交量算法看日内资金流向
  • 用大单算法识别主力动向
  • 用价格推动算法做趋势确认

三种算法同时发出信号,胜率会高很多。

3.4 三种算法的对比总结

算法 数据要求 计算复杂度 准确度 适用场景
成交量算法 高(逐笔数据) 高频交易、日内交易
大单拆分算法 中(逐笔或分钟) 主力追踪、大资金监控
价格推动算法 低(K线即可) 趋势判断、辅助指标

最后说一句:算法只是工具,关键还是你对市场的理解。我见过有人用最简单的成交量算法,照样赚钱。也见过有人把三种算法都跑通了,还是亏。为什么?因为算法背后的逻辑,比算法本身更重要。

资金流向计算模型体系 资金流向计算模型 基于成交量算法 基于大单拆分算法 基于价格推动算法 特征 • 需要逐笔成交数据 • 计算简单,速度快 • 适合高频交易场景 特征 • 识别主力资金动向 • 需要动态阈值设置 • 适合大资金监控 特征 • 只需K线数据 • 准确度相对较低 • 适合趋势辅助判断 实战建议:三种算法结合使用 成交量算法 + 大单算法 + 价格推动算法 = 高胜率信号

蓝海数据掘金营,专注资料整理