今天原先是想比较微盘400只的平均涨幅与涨幅中位数之间的差距。

每日平均涨幅的构建很简单,在有了动态股票池的基础上,直接:Savg(1日涨幅,微盘400,0)

类似的涨幅中位数:SMed(1日涨幅,微盘400,0)

 

在此基础上,我原先计划是通过:

product(ifnull(1+微盘400N日涨幅中位数(1),1),0)   以及

product(ifnull(1+微盘400N日涨幅均值(1),1),0)

来计算累计收益情况

但就结果来看和我想象的大相径庭




原先我预想的两个收益曲线应该是向上的,只是会存在一定的涨幅差异,就像我们用svalue函数所做的:Svalue(2007/01/04,微盘400)



我也向工程师咨询了一下svalue的计算原理,其实很简单,就是:股票池里的股票涨幅之和/股票数量,作为股票池的净值涨幅。

乍一看和我使用product方法计算的好像没有什么区别。但是输出结果的差异说明这背后是值得细究的。

 

以一个动态股票池为例,假设股票池昨天收盘后计算得到的该持有的股票是:A B C这三只,

而今天收盘后股票池计算得到的该持有的股票是:B C D这三只。

那么对于今天股票池的收益,

如果用svalue的方法计算,则是用A B C这三只的当日涨跌幅做个平均得到股票池的收益。

如果用product的方法,则是以B C D三只的当日涨跌幅去算收益。


那意味着两种方法算出来的差异,实际上就是被调出的A 与被调入的D所带来的。

而对于微盘股指数,最常见的被调出的原因则是:涨太多了,市值不满足最小的400只所以被调出。而从两个曲线的对比情况来看,这类被调出的情况确实为微盘指数贡献了大部分的收益,而余下的部分自17年以来则陷入了长期亏损的困境,

 

我们也可以通过hsum(SBelong(微盘400)<>ref(SBelong(微盘400),1),0)/2

来获取每天被更换的股票数量有多少


平均来看并不多,中位数只有9。也就是说每天400只里的那9只贡献了绝大部分的收益。




想到了上午有一位用户私信问到的问题,只能说可能是因为你的持股不够幸运,没能被调出吧。

我们能不断地去fit过去,让这类被调出的股在过去大概率地在你的模型里出现,但是未来谁说得来呢。持股数越多只是在相同情况下过拟合的概率越小,但不代表不会过拟合。


对此,也欢迎大家理性探讨,小市值究竟在赚什么钱。