连续三天上涨达到 9.5% 的股票

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

..

试找出这个月内曾连续三天上涨达到9.5%的股票。

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


A

1

=T("StockRecords.txt")

2

>r=0.095

3

=A1.derive(:UP).sort(CODE,DT)

4

=A3.group@o(CODE)

5

>A4.run(~.run(UP=if(#==1,0,(CL-CL[-1])/CL[-1])))

6

=A4.select(~.count(UP>r && UP[-1]>r && UP[-2]>r)>0).(CODE)

A1读出交易收盘价记录,A2设定标准涨幅r

A3在交易记录基础上,添加UP字段,准备用来存储收盘价的涨跌率,并将记录按照股票代码和交易日期排序,以便于分组以及利用相邻日期数据计算涨跌率。

A4A3中记录按股票代码分组,由于前面已做了排序,这里用@o选项无需再次排序。A5在循环所有分组,在组内跨行计算涨跌率UP,首日涨跌率按0计。SPL中,跨行计算可以用x[]实现,而用group分组时,是真实的将序表中的交易记录分在不同组中,A5UP字段赋值时,也会改变原来A3中的数据:

..

A6A4的分组数据中,选出曾经连续三天涨幅达标的组,并列出它们的股票代码:

..