这里,我们采用集算器来分析股票上涨的趋势。分析的具体算法可以有很多种,我们采用其中一种加以说明,其他的情况可以用类似的代码解决。具体的要求是:

连续上涨了n天的股票当中,又继续上涨了一天的的股票所占的比例。

解决这个问题的关键是计算每只股票最长连续上涨的天数(以下简称上涨天数)。用上涨天数大于等于n+1天的股票数除以上涨天数大于等于n天的股票数,就是所求的占比了。

股票数据中,必须有的三个字段是:交易日、收盘价和股票编码。因此,源数据可以是下面这个样子:

stock     date       price

120089 2009-01-01 00:00:00  50.24

120123 2009-01-01 00:00:00  10.35

120136 2009-01-01 00:00:00  43.37

120141 2009-01-01 00:00:00  41.86

120170 2009-01-01 00:00:00  194.63

120243 2009-01-01 00:00:00  15.75

120319 2009-01-01 00:00:00  1.36

120343 2009-01-01 00:00:00  20.95

120344 2009-01-01 00:00:00  232.38

120355 2009-01-01 00:00:00  31.6

120414 2009-01-01 00:00:00  244.32

120439 2009-01-01 00:00:00  181.36

120484 2009-01-01 00:00:00  6.27

120528 2009-01-01 00:00:00  43.86

120533 2009-01-01 00:00:00  227.91

120584 2009-01-01 00:00:00  25.12

120607 2009-01-01 00:00:00  36.36

120626 2009-01-01 00:00:00  29.36

120630 2009-01-01 00:00:00  29.77

120642 2009-01-01 00:00:00  30.98

计算最长连续上涨天数的自然思路是:将每个股票的收盘价按照交易日排序,按顺序比较每个收盘价和上一天的收盘价的大小。如果大于,那么上涨天数加1;如果不大于,上涨天数清0

我们发现,集算器的编程思路就是自然思路。因此,采用集算器所编写的代码就更容易理解、容易维护。具体代码如下:

wKiom1QeRD2juIq3AADnOLGxV40649.jpg

代码说明如下:

1、A1单元格确定n的输入值是2天。如果是外部调用,也可以通过参数传入。

2、A2单元格从txt文件中读取源数据。如果需要的话,也可以从数据库或者hdfs中读入。

3、A3单元格将数据按照股票编码分组。分组后,每组对应一只股票。

4、创建一个空白的序表,用来保存每只股票的连涨天数。

5、A5对分组的股票循环,一次处理一组,也就是一只股票。循环体是B6B10

6、B6取得本组第一条记录的股票编码;B7设置上涨天数的初始值0

7、B8是对本组的数据,按照交易日期排序。

8、B9是在本组内部循环逐条判断,如果收盘价比上一条的收盘价大则将B71,否则B70

9、B10是将计算好的股票编码和上涨天数添加入A4。循环结束。

10、A11是用A4中上涨天数大于等于n+1天的股票数除以上涨天数大于等于n天的股票数,就是所求的占比。

从上述代码可以看出,符合自然思维的编码可以减少人脑和代码之间的差异,从而降低编写和维护代码的难度,提高效率降低成本。

需要说明的是,采用集算器提供的IDE(集成开发环境),可以很方便的调试代码,进一步提高开发效率。例如:我们可以单步执行到B8单元格,观察排序的结果,如下图:

wKioL1QeRGnwTH1yAAGp6IZ5oLM770.jpg


程序员熟悉了集算器的编程思想之后,很快就能编写出更简洁的代码,如下图:

wKiom1QeREyjHWsoAACnU04Xu_w488.jpg