开发者社区> 问答> 正文

用R语言计算某只股票的涨幅次数

用R语言计算某只股票的涨幅次数

展开
收起
wkmqwe 2018-05-26 00:11:09 2924 0
1 条回答
写回答
取消 提交回答
  • R解决方案

    01 library(gdata)#use excel function library

    02 A1<-read.xls("e:\data\all.xlsx") #import data

    03 A2<-subset(A1,as.POSIXlt(Date)>=as.POSIXlt('2012-06-01')& as.POSIXlt(Date)<=as.POSIXlt('2012-06-30')) #filter by date

    04 A3<- split(A2,A2$Code) #group by Code

    05 A8<-list()

    06 for(iin 1:length(A3)){

    07 A3[[i]][order(as.numeric(A3[[i]]$Date)),]#sort by Date in each group

    08 A3[[i]]$INC<-with(A3[[i]],Close-c(0,Close[- length (Close)])) #add a column, increased price

    09 if(nrow(A3[[i]])>0){ #add a column, continuous increased days

    10 A3[[i]]$CID[[1]]<-1

    11 for(j in 2:nrow(A3[[i]])){

    12 if(A3[[i]]$INC[[j]]>0 ){

    13 A3[[i]]$CID[[j]]<-A3[[i]]$CID[[j-1]]+1

    14 }else{

    15 A3[[i]]$CID[[j]]<-0

    16 }

    17 }

    18 }

    19 if(max(A3[[i]]$CID)>=5){ #stock max CID is bigger than 5

    20 A8[[length(A8)+1]]<-A3[[i]]

    21 }

    22 }

    23 A9<-lapply(A8,function(x)x$Code[[1]]) #finally,stock code

    01:启用Excel支持。要注意的是R对Excel的支持第三方的包l,需要先行下载安装,R对第三方包比较挑剔,找到一个兼容可能的不大容易

    02:导入Excel的数据。可能是找来的Excel解析包不好用,这个过程大约需要8-10分钟,内存占用也比集算器多几百M,好在导入数据后内存就释放了。事实上R本身的运算速度还是比较快的,取数据库中的数据时会很好的体现这一点。

    03,04:按时间过滤,并按Code分组。分组后的数据查看起来不易理解,点击右侧的变量看到的结果是这样的:

    如果在控制台直接输入命令则相对好一些,如下:

    05:A8<-list(),定义一个list类型的变量A8,它将用来存放连涨天数大于等于5的股票。

    06-22:由于R不能像集算器那样方便的用~来操作每个分组,因此这里需要一个大循环,每次循环针对一个股票进行计算。

    07:按日期排序。分组前就排序代码会更简单,但我考虑到最直观的思路是:分组前数据是混在一起的,看不出是否排序;分组后经过观察才发现顺序混乱,不排序则无法进行下一步的行间运算。

    08:增加一个列INC,计算”当日收盘价”-“前一日收盘价”。R不支持行间运算,所以这里巧妙的将收盘价整体下移一行,再和原来的收盘价相减。代码是:Close-c(0,Close[- length (Close)])。

    09-18:增加一个列CID,计算连涨天数。09行的if(nrow(A3[[i]])>0)是为了避免有些股票没数据(比如暂时停牌),否则后面会报空指针错误。10行的A3[[i]]$CID[[1]]<-1是为了赋初值和避免后面运算报空指针错误。集算器中不需要做类似的检查,看来它对非专业技术人员更友好些。11-17:计算连涨天数。代码虽然很多,其实算法同集算器完全一样。

    19-21:过滤,如果某只股票最大的连涨天数大于等于5,则它就是需要的优质股票。代码虽然较多,其实算法和集算器完全一样。结果如下:

    23:取出分组中的代码,A9<-lapply(A8,function(x) x$Code[[1]]),如下图:

    一些体会:

    R和集算器凭借自身的能力都可以实现较复杂的股票分析。集算器的代码更简单易懂,避免了大部分的循环语句,数组越界等容易犯错的地方也做了些人性化的处理。基本上,会用基本的Excel公式应该就能用集算器来做股票分析了。

    使用R来完成股票分析需要一定的编程技巧和数学知识,这样才能灵活运行R的各项功能。R还具备优秀的扩展性,比如有针对股票的第三方库函数和统计图;再比如完全可以自己写一个更高效的读取Excel的函数

    2019-07-17 22:27:21
    赞同 展开评论 打赏
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载