一个月内连续三天涨停的股票

 

问题

下面是某证券交易所一个月内的日收盘价记录,其中 CODE 列为股票代码,DT 为日期,CL 为收盘价。

imagepng

试找出这个月内曾连续三天涨停的股票。为避免四舍五入产生的误差,涨停的比率定为 9.5%。

思路

大致思路:将记录按代码和日期排序,然后按股票代码分组,就得到了每支股票一个月来的价格表,这样就能轻易的算出每支股票每天的涨跌率,通过将涨跌率和涨停线比较即可知道是否涨停,最后统计出连续三天涨停的天数。

1. 首先为日记录表的每一条记录都增加一个字段,用于记录和前一天相比的涨跌率,值暂时留空。

2. 将表按代码和日期排序,这个操作的目的是保证后面分组后的序列中,每组内都是按照日期排序的。

3. 将表按股票代码分组,由于已经按代码排序过了,就不用再次排序了。

4. 对每组内的每条记录,算出其涨跌率,注意如果是组内第一条记录,那么没有上一条记录,涨跌记为 0。

5. 选出每组连续 3 天涨停的的次数大于 0 的股票,再取出其代码即可。

代码

A
1 =file("C:\\txt\\StockRecords.txt").import@t() 股市日记录表
2 0.095 涨停线
3 =A1.derive(:UP) 添加一个用于记录涨跌幅度的列
4 =A3.sort(CODE,DT) 将表按代码和日期排序
5 =A4.group@o(CODE) 按代码分组
6 =A5.run(~.run(UP=if(#==1,0,(CL-CL[-1])/CL[-1]))) 算出涨跌率并写入 UP 字段
7 =A6.select(~.count(UP>A2 && UP[-1]>A2 && UP[-2]>A2)>0).(CODE) 选出连续三天涨停次数大于 0 的股票的代码

结果

imagepng