拥挤度的真相

原文图片1
原文图片1

如上,近日这张图在各处流传,我看了一眼,直觉就是可能有假,因为图形显示的转折点太过完美,第二个想法是,如果这指标这么神奇,那我一定要把它复现出来,纳入我的兵器库。

于是我又开始忙活。这个指标的思路很简单,就是统计每天成交额最大的头部5%个股,然后相加得到总额,再除以市场总成交额,得到的比值称之为拥挤度,或者称之为抱团程度。它的逻辑是,当抱团过于集中时市场见顶,抱团解散低迷时市场见底。听起来很有道理,也符合马太效应发展过程。

但到底是不是这样呢,我用通达信计算得到的结果是这样的:

原文图片2
原文图片2

从截取的这片段看,图形基本是相似的,但转折阈值在55附近,并不是小作文传言中的45,而且目前这两天的数值就在45左右,这点和传言吻合。所以,如果按照我的这个图,很明显拥挤度还没有达到极限值,而且45这个值很普遍,这大半年反复够到,并不稀奇。

另外,暴跌的时候,拥挤度也会提高,并不似网图那般的溜光水滑,除非它的算法中刻意排除了下跌拥挤的情形。

为便于和大家一起考证,我介绍一下通达信计算的设置过程,还是挺不容易的:

第一步,为了求得成交额头部5%的个股,必须以成交额为指标进行排序,做一个扩展数据,计算品种选择所有A股;

第二步,通达信没有市场股票总数的序列指标,所以要用变通的方法求取,创建一个指标ALLSTOCK:

ALL:C<>DRAWNULL;{收盘价不为空};

对收盘价为真的所有个股进行横向统计并累加,再创建一个指标TOTALNUM:

TOTAL_NUM : INSUM('沪深A股','ALLSTOCK',1,0);{沪深A股总数}

然后对TOTALNUM再做扩展数据,计算品种自定义只锚定在一个代表性指数上,采用平均股价指数。这就得到了历史上每天的股票总数量,我用输出核对了一下,非常接近,略有个位数的误差。

为什么搞这么复杂,这是因为通达信语法和结构的限制,而INSUM函数的计算量非常庞大。

第三步,求取头部5%股票的成交额:

TOTAL_NUM := CALCSTOCKINDEX('880003','STOCKNUM',1);

RANK_VAL := EXTDATA_USER(9,0); {引用成交额排名}

TOP_NUM := TOTAL_NUM / 20; {计算前5%的临界排名}GG_AMT : IF(RANK_VAL <= TOP_NUM, AMOUNT, 0); {若排名≤临界值,输出成交额};

第四步,对头部5%股票的成交额再做一个扩展数据,计算品种选择所有A股,使之成为数值序列,然后编写累加公式,再次用到INSUM函数:

TOP5%_AMTSUM : INSUM('沪深A股','TOPAMT',1,0);

第五步,对TOP5%_AMTSUM再做一次扩展数据,计算品种仍然锚定在平均股价指数,否则计算量太大会很卡,得到累积值的数值序列,然后编写最终的拥挤度公式:

TOTAL_AMT := AMOUNT;TOP5%_AMT := EXTDATA_USER(11,0);CONGESTION := TOP5%_AMT / TOTAL_AMT * 100;CONGESTION;拥挤:45,DOTLINE;

复杂点的计算,通达信就显得十分笨拙,这个过程反复叠加扩展数据,挺绕的,着实烧了我不少脑细胞。当然更高级的做法,用扩展TDX通道。