大家好, 我是个搞JAVA的, 统计这一块不怎么熟悉, 我用的是 rJava.
想请教一下大家, 如果有一支股票10天的价格是
price <- c(19815.62, 19612.74, 19932.28, 19689.30, 19733.89, 19619.67, 19205.43, 19423.40, 19581.51, 19422.44)
要取出其中连续涨3天又连续跌2天这样5天5天的数据, 要怎么做呢?
大家好, 我是个搞JAVA的, 统计这一块不怎么熟悉, 我用的是 rJava.
想请教一下大家, 如果有一支股票10天的价格是
price <- c(19815.62, 19612.74, 19932.28, 19689.30, 19733.89, 19619.67, 19205.43, 19423.40, 19581.51, 19422.44)
要取出其中连续涨3天又连续跌2天这样5天5天的数据, 要怎么做呢?
回复 第1楼 的 sinceow:
好像说:二阶导数为零就是拐点,喂鸡分里有这个知识。
左正右负,左负右正,可以区分峰谷。
是这样的吧。
回复 第2楼 的 lyxmoo:
这个还真不能用二阶导数去判断,因为使用导数的前提是这条曲线是光滑的,而股票价格所构成的曲线不满足这一条件。用维尔斯特拉定理就可以造出一个处处连续,处处不可导的例子。1楼所说的价格就是这种情况。
回复 第1楼 的 sinceow:我封装成了一个函数,用来解决你的需求
findindex=function(price,pattern){<br />
var=diff(price)<br />
f=function(x){<br />
out=deparse(substitute(x))<br />
for( i in 1:length(x)){<br />
x[i]=ifelse(x[i]>0,1,ifelse(x[i]<0,0,2))<br />
}<br />
assign(out,x,envir=parent.frame())<br />
}<br />
f(var)<br />
strvar=paste(var,collapse="")<br />
temp=gregexpr(pattern,strvar)[[1]][1]<br />
if(temp!=-1){<br />
lowbound=temp+1<br />
upbound=lowbound+nchar(pattern)-1<br />
a=NULL<br />
for(i in 1:length(lowbound)){<br />
a=list(a,price[lowbound[i]:upbound[i]])<br />
}<br />
a=a[-1]<br />
return (a)}<br />
else<br />
return ("not match!")<br />
}
问题:要取出其中连续涨3天又连续跌2天这样5天5天的数据
判断:这是一个模式识别的算法选择。
初步思路:
假设A,B,C,D,E五天交易日为连续的,且A<B<C>D>E。那么,显而易见,B-A>0,C-B>0,D-C<0,E-D<0。这样,模式特征也就出来了。
初级模型:
1.拆分函数,求相邻两数之间差值。
2.逻辑判断函数,求所有差值的整数性质,若为正则设置值为True,若为负则设置值为False。
3.模式匹配函数,求指定宽度取值区间的所有符合指定模式的区间,若符合则此区间的模式变量的值为模式A(假设A是两升两降模式代码)。
4.合并函数,合并模式变量列到原数据集中。
注意:我这里在进行分析的时候是来自于假设为仅对一周交易日进行分析,而不考虑之前和之后的交易日数据,所以实质是只包含五个交易日的四个结果值,具体到本案,1#自行进行调整。显而易见这是一个股票交易特征提取的算法实现,所以代码自己写吧,
dx.sign <- sign(diff(x))
fun<-function(i,x){
f[i]<-ifelse(x[i]>0££...,1,0)}
lapply(1:(length(x)-6),fun,x=dx.sign)
仅供参考