这里,我们采用集算器来分析股票上涨的趋势。分析的具体算法可以有很多种,我们采用其中一种加以说明,其他的情况可以用类似的代码解决。具体的要求是:
连续上涨了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。
我们发现,集算器的编程思路就是自然思路。因此,采用集算器所编写的代码就更容易理解、容易维护。具体代码如下:
代码说明如下:
1、A1单元格确定n的输入值是2天。如果是外部调用,也可以通过参数传入。
2、A2单元格从txt文件中读取源数据。如果需要的话,也可以从数据库或者hdfs中读入。
3、A3单元格将数据按照股票编码分组。分组后,每组对应一只股票。
4、创建一个空白的序表,用来保存每只股票的连涨天数。
5、A5对分组的股票循环,一次处理一组,也就是一只股票。循环体是B6到B10。
6、B6取得本组第一条记录的股票编码;B7设置上涨天数的初始值0。
7、B8是对本组的数据,按照交易日期排序。
8、B9是在本组内部循环逐条判断,如果收盘价比上一条的收盘价大则将B7加1,否则B7清0。
9、B10是将计算好的股票编码和上涨天数添加入A4。循环结束。
10、A11是用A4中上涨天数大于等于n+1天的股票数除以上涨天数大于等于n天的股票数,就是所求的占比。
从上述代码可以看出,符合自然思维的编码可以减少人脑和代码之间的差异,从而降低编写和维护代码的难度,提高效率降低成本。
需要说明的是,采用集算器提供的IDE(集成开发环境),可以很方便的调试代码,进一步提高开发效率。例如:我们可以单步执行到B8单元格,观察排序的结果,如下图:
程序员熟悉了集算器的编程思想之后,很快就能编写出更简洁的代码,如下图:
转载于:https://blog.51cto.com/report5/1558490