面对股市熔断测试,广大工科狗都坐不住了!!
2014年1月4日注定是不平凡的一天:
13点13分 沪深300指数大跌5%,触发熔断机制——上交所、深交所、中金所暂停交易15分钟。创业板指暴跌超7%。
12点28分 两市恢复交易,随即沪深300指数跌逾7%,触发熔断机制最高阀值,A股提前休市
整个事件的波形图如下:

面对难得的吐槽机会,广大工科狗无论是否涉(bu)身(zhi)股(si)市(huo),都停下搬砖的步伐,憋足了劲,把若干年前项目经理对自己吼过的内容连同隔夜的泡棉一起咆哮了出来:
既然说到了滤波,接下来我们就讨论下如何在不改变证监会项目需求的情况下对大盘波形就行滤波,以防止由毛刺触发的熔断。
1、首先,根据客户需求,信号5%和7%的变化各触发一次事件,我们的滤波算法不能改变这一属性,因此SB的均值滤波基本上就不太好用了,因为本质上,均值滤波彻底改变了大盘曲线——用于判断触发的曲线和股(yuan)民(da)们(tou)看到的曲线就不一致了。到时候,证监会被骂还不直接抓我们无证程序员顶罪?
2、基于以上讨论,我们明白,无论如何滤波,不能改变曲线本来的信息,一个点你都不能挪动!在这个前提下,我们可用的滤波算法几乎就只有基于门限的计数算法。算法很简单:
> 基于每天开盘的值,我们分别设置+5%、+7%、-5%和-7%四条门限。分别用T5P,T7P、T5N和T7N表示,这里T是Threashold的缩写,P表示Positive,N表示Negative。
> 每个门限都有自己专属的计数器,用 *_Cnt表示,例如 -5%的门限计数器就是 T5N_Cnt
> 如何判定为触发呢?当一个门限被“预触发”时,对应的计数器加1,当计数器超过预设的次数(*_MAX)后,对应门限被视作触发。计数器每天开盘前复位到0。那么如何算“预触发”呢?就是每隔固定的时间间隔T,如果当前数值可以在不使用滤波算法前被判定为触发了门限,则视为一次“预触发”。当一个门限被判定为触发时,计数器复位(其实也可以不复位,但不复位似乎就不符合客户的本意了)
> 如何设定滤波的强度呢?有两个办法可以设定滤波的强度,一个是设置每个计数器的最大值(*_MAX)以及对应的采样间隔(T);另外一个方法是引入计数器递减模式(减到0为止),即,如果计数器大于0,且在当前采样点目标门限未被“预触发”时计数器减1。





