3、换手率指标:定义、计算与情绪择时实战

换手率,说白了就是一只股票被倒手的频率。

我刚开始做量化那会儿,总觉得换手率就是个成交量除以流通股本,没啥技术含量。后来在实盘里吃了亏,才发现这玩意儿背后藏着市场情绪的密码。今天咱们就把它彻底拆开看看。

3.1 换手率的定义与计算方式

官方定义很简单:换手率 = 当日成交量 / 流通股本 × 100%

举个例子,某只股票流通股本是1亿股,今天成交了2000万股,那换手率就是20%。

嗯,这里要注意——流通股本不是总股本。我见过不少新手直接拿总股本算,结果算出来的换手率偏低,信号失真。尤其是那些大股东持股比例高的股票,流通盘小,换手率容易被放大。

参数 说明 常见误区
成交量 当日成交的总股数 别用成交金额代替
流通股本 可在二级市场自由交易的股份 不是总股本!
换手率 反映交易活跃度 高≠好,低≠差

我个人习惯用5日平均换手率来平滑噪音。单日换手率受消息面影响太大,比如突然来个涨停,换手率瞬间飙到30%,但第二天可能就掉回5%。用均值能过滤掉这种脉冲信号。

3.2 换手率在情绪择时中的应用

换手率的核心价值在于——它告诉你市场参与者有多「躁动」。

为什么会这样?因为换手率高,说明买卖双方分歧大,情绪亢奋。换手率低,说明大家都不动,市场冷清。

我总结了几条实战规律:

  • 换手率持续低于1%:市场进入「僵尸状态」,这时候别指望大行情,适合观望。
  • 换手率突然放大到10%以上:短期情绪过热,小心回调。我曾经在2019年用这个信号躲过一波科技股的暴跌。
  • 换手率温和放大(3%-7%):资金有序进场,趋势可能延续。这是我最喜欢的区间。
  • 换手率与价格背离:比如价格创新高,但换手率在下降——说明上涨动力不足,该跑了。

核心逻辑:换手率是情绪的「温度计」。温度太高容易烫伤,温度太低冻死人,只有温温的才舒服。

你想想看,一只股票如果每天换手率只有0.5%,突然某天飙到15%,说明什么?说明有资金在搞事情。但搞事情不一定就是好事——可能是主力拉高出货。

3.3 Python实现与回测

好了,理论说完了,咱们直接上代码。我习惯用akshare拿数据,用pandas处理,用backtrader回测。

import akshare as ak
import pandas as pd
import numpy as np
import backtrader as bt
from datetime import datetime

# 获取数据
def get_turnover_data(symbol="000001", start="2020-01-01", end="2024-01-01"):
    df = ak.stock_zh_a_hist(symbol=symbol, period="daily", 
                            start_date=start, end_date=end, adjust="qfq")
    df['换手率'] = df['换手率']  # akshare直接返回换手率
    df['日期'] = pd.to_datetime(df['日期'])
    df.set_index('日期', inplace=True)
    return df[['收盘', '换手率']]

# 计算情绪信号
def generate_signal(df, high_threshold=10, low_threshold=1):
    df['信号'] = 0
    # 换手率过高,卖出
    df.loc[df['换手率'] > high_threshold, '信号'] = -1
    # 换手率过低,买入(均值回归逻辑)
    df.loc[df['换手率'] < low_threshold, '信号'] = 1
    return df

# 回测策略
class TurnoverStrategy(bt.Strategy):
    params = (
        ('high_threshold', 10),
        ('low_threshold', 1),
    )
    
    def __init__(self):
        self.turnover = self.datas[0].turnover
        self.close = self.datas[0].close
        
    def next(self):
        if not self.position:
            if self.turnover[0] < self.params.low_threshold:
                self.buy()
        else:
            if self.turnover[0] > self.params.high_threshold:
                self.sell()

避坑指南:我曾经直接用单日换手率做信号,结果回测曲线漂亮得不像话。一上实盘就崩了——因为换手率在开盘半小时内就能冲到10%,但收盘可能又掉下来。后来我改用收盘前30分钟的换手率,效果好了很多。

回测结果怎么看?我一般关注三个指标:

  • 年化收益率:别低于10%,否则不如买指数
  • 最大回撤:超过20%的策略我直接放弃
  • 胜率:换手率策略的胜率通常在40%-60%之间,别期望太高

我个人习惯把换手率和其他指标结合使用。比如加上成交量——如果换手率高但成交量没跟上,说明是散户在折腾,不是主力行为。再比如加上价格位置——低位放量换手率高,是好事;高位放量换手率高,是坏事。

3.4 换手率情绪择时框架

下面这张图是我自己总结的换手率情绪择时框架,你可以直接拿去用:

换手率情绪择时框架 原始换手率数据 5日均值平滑 + 异常值过滤 情绪状态判断 换手率 < 1% → 冷清(买入信号) 换手率 1%-10% → 正常(持有/观望) 换手率 > 10% → 过热(卖出信号) 择时信号输出

这个框架的核心就三步:拿数据 → 平滑处理 → 判断情绪。别搞太复杂,越简单的东西越不容易过拟合。

警告:换手率策略在震荡市里表现很好,但在单边牛熊市里容易失效。牛市里换手率天天高,你天天卖,踏空;熊市里换手率天天低,你天天买,套牢。所以一定要结合市场环境来用。

最后说一句,换手率不是万能的。我见过有人把换手率当圣杯,结果亏得裤衩都不剩。记住,它只是一个情绪指标,帮你感知市场的温度,而不是预测未来的水晶球。

好了,这一章就到这儿。代码拿去跑跑看,有问题咱们下一章聊。


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