筹码:换手率模型

筹码一直都是资本市场津津乐道的话题,我们如何能从交易对手手中获得尽可能多的相对低价格的筹码,市场大部分交易者在哪些位置、在哪些时间进行了大比例筹码交换,主力资金是否优先于散户资金进行大比例买入或卖出,筹码的聚集程度呈现聚焦还是分散,这些都是股票模型的研究重点。

1.筹码

筹码分布,学术名称是流通股票持仓成本分布,其原理来源于不同价格区间的成交量,以及在不同价格最终所形成的的分布情况,用于股票在反映不同价位上的整体持仓数量。筹码从聚焦到发散,再从发散到聚焦,这就是股价波动的必然循环,筹码作为交易标的供需决定了股票价格波动,筹码的背后是心理战。无论流通筹码在盘中如何分布,累计量必然都等于总流通量,变化的是持有筹码的人数。

我们做了一些筹码数据的可视化分析,我们随机选择1000只股票股东数量分布情况,如图所示:

筹码:换手率模型

有兴趣的读者还可以计算户均持股额,用总市值除以持股户数可以得到,这也就是筹码分布的重大表现形式。某时间截面上,A股所有个股户均持股数量,如图所示:

筹码:换手率模型

在行内有这样一个说法,对筹码分布的判断是进行股市操作的基本前提,如果判断准确则离成功不远了。传统的半量化存在较多的主观成分,但是也得到了大致的结论,就是筹码研究能有效地判断股票的行情性质和行情趋势,能有效地识别庄家建仓和派发的全过程,甚至能够看到筹码堆积价格区域,作为关键的支撑位和阻力位。

筹码研究对于做量化的研究者也有很大启示,无论传统观点正确与否,如果你错过了这一话题,都将会失去许多研究因子,我们有必要对以下几个问题进行讨论。

  • 换手率对于股票价格的影响?换手率能否对股票进行强弱区分,以及高换手率是否意味着充分洗牌(筹码交换),为接下来的股价上升打开空间?
  • 主力净占比能否有效提升股票的筹码质量?由于主力资金有着比散户资金更加聚焦的目的性和意志,能够长期忍受较大回撤来战略性建仓某些股票,以换取之后的巨大涨幅,所以主力净占比是不是一个有效的因子?
  • 筹码分散度大致可以通过自由流通市值除以股东总数,计算得到户均持股市值,这个值涉及股票之间的价格量纲还没有去除,不好横向截面对比,能否对这个变量做窗口期内的动量计算,以实现对于筹码趋向于分散还是聚焦的判断?

这样就衍生出本节要介绍的两个筹码模型:

换手率模型:我们假设高换手率代表活跃的强势股,后续有超额回报。(本文章会详解)

主力占比模型:我们假设主力占比高代表个股受到大资金重点关注,后续有超额回报。(下一篇文章会详解,请等待)

2.换手率模型

换手率,是指在必定时间内市场中股票转手买卖的频率,是反映股票流通性强弱的指标之一。它的含义是指定交易日成交量(手)乘以100除以截至该日股票的自由流通股本(股)。需要注意的是这是一个点数据,也就是当日的换手率数据,如果我们要进行分析需要对它做处理,由于当天换手率的隔日变化率较大,我们的模型有固定间隔的调仓周期,刚好调整到该周期可能渠道并不是很活跃的股票。外换手率的标准差也需要加入研究,以辅助均值一起观测该因子的影响力。高换手率组(上图)和低换手率(下图)的回测结果,如图所示:

筹码:换手率模型

我们用程序完成了对于换手率高和换手率低的股票的筛选,为了防止单点换手率数据的不稳定性,我们对该值做了20日的移动平均处理。模型和之前的逻辑类似,有一个简单的定期调仓逻辑,取得买卖信号,得到出乎意料的结果。最小换手率组获得78%总收益,虽然跑赢指数,但看起来还不是一个理想值。最大换手率组则得到负86%总收益,全过程大幅度跑输指数。

所以说,高换手率买到了每个时间点最差的股票,由于高换手往往表目前股票的大幅度拉升期间,而不再底部平稳期间,A股的个股波动率总是循着一个波动-》平稳-》再波动的过程发展,股价跟随着出现上涨-》调整-》再上涨的过程,高换手率选到的股票都是高波动期间的,接下来大致率会进入低波动区间,即股价调整。

低动量是一个较好的过滤方式,我们可以根据换手率选到的股票数量调整到40只,然后从其中购买低动量和高动量的两组股票观察收益情况。

在具体下单买卖的时候,维持账户内有20只股票,结论基本稳定不变:低动量个股超越了高动量个股,虽然领先幅度不多,但是低动量也超越了原始的不加动量过滤的模式。

我们构造了一种新的逻辑,两个因子值对应相乘,即换手率因子和动量因子,然后用创造出的这个新因子去给股票打分排名,用Python代码详细给大家讲解:

def momentum_factor(stock_list, old_value):
  momentum = []
  for i in stock_list:
    interval, Yesterday = getStockPrice(i)
    stock_moment = Yesterday / interval
    momentum.append((i, stock_moment)) #[('比亚迪汽车', 0.88),('中国电信', 0.87)]
    momentum_values = np.array(momentum)[:,1].astype(float).tolist() #转为浮点数的list
    #建立新因子
    new_value = []
    for i in range(len(momentum_values)):
      new_value.append(old_value[i] * momentum_values[i])
      momentum_new_value = list(zip(stock_list, new_value))

两因子相乘,然后添加到new_value这个list中,其含义是将换手率因子值通过动量因子做一次线性放大,构成新因子。如果某只股票在某天换手率正常,但是动量较高,则该股票将获得本项较高的得分,按照升序排名,它将被排名靠后位置而没有机会被买入。

如果你不想用new_value.append(old_value[i] * momentum_values[i]),需要加强某个因子的权重。

如果你想加强换手率因子old_value权重,改为new_value.append(old_value[i] * math.sqrt(momentum_values[i]));

如果你想加强动量因子momentum_values权重,改为new_value.append(math.sqrt(old_value[i]) * momentum_values[i]);

还有一种方法,改为new_value.append(math.sqrt(old_value[i]) * np.square(momentum_values[i])),通过平方计算加强了momentum_values[i](动量因子)权重,降低了old_value换手率因子的权重,从测试效果来看,取得了较好成绩,阶段内收益率达到143.86%,夏普比率为0.32。而在进行因子组合之前,最小换手率作为一个较好的选股因子,只有78.51%收益率和0.15的夏普比率。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
滋康堂健康生活馆的头像 - 鹿快
评论 共3条

请登录后发表评论