一个月内连续三天涨停的股票
问题
下面是某证券交易所一个月内的日收盘价记录,其中 CODE 列为股票代码,DT 为日期,CL 为收盘价。
试找出这个月内曾连续三天涨停的股票。为避免四舍五入产生的误差,涨停的比率定为 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 的股票的代码 |
英文版
数据文件
StockRecords.txt