今天原先是想比较微盘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过去,让这类被调出的股在过去大概率地在你的模型里出现,但是未来谁说得来呢。持股数越多只是在相同情况下过拟合的概率越小,但不代表不会过拟合。
对此,也欢迎大家理性探讨,小市值究竟在赚什么钱。
