l 问题
下面是某证券交易所一个月内的日收盘价记录,其中CODE列为股票代码,DT为日期,CL为收盘价。
 
 
试找出这个月内曾连续三天涨停的股票。为避免四舍五入产生的误差,涨停的比率定为9.5%。
l 思路
大致思路:将记录按代码和日期排序,然后按股票代码分组,就得到了每支股票一个月来的价格表,这样就能轻易的算出每支股票每天的涨跌率,通过将涨跌率和涨停线比较即可知道是否涨停,最后统计出连续三天涨停的天数。
1. 首先为日记录表的每一条记录都增加一个字段,用于记录和前一天相比的涨跌率,值暂时留空。
2. 将表按代码和日期排序,这个操作的目的是保证后面分组后的序列中,每组内都是按照日期排序的。
3. 将表按股票代码分组,由于已经按代码排序过了,就不用再次排序了。
4. 对每组内的每条记录,算出其涨跌率,注意如果是组内第一条记录,那么没有上一条记录,涨跌记为0。
5. 选出每组连续3天涨停的的次数大于0的股票,再取出其代码即可。
l 代码
| 
 | 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的股票的代码 | 
l 结果
