我编辑以指定我的问题。 这是我的数据集(例如)
library(quantmod)
getSymbols("AAPL",from="2013-01-01")
data<-AAPL
p1<-4
dO<-data[,1]
dC<-data[,4]
emaO<-EMA(dO,n=p1)
emaC<-EMA(dC,n=p1)
fee<-0.1
cross<-ifelse((emaC<emaO & lag(emaC,1)>lag(emaO,1))|emaC>emaO & lag(emaC,1)<lag(emaO,1),"A","N")
type<-ifelse(emaC>emaO,"S",
ifelse(emaC<emaO,"L","Equal"))
Pos_emaO_dO_UP<-emaO>dO
Pos_emaO_dO_D<-emaO<dO
Pos_emaC_dC_UP<-emaC>dC
Pos_emaC_dC_D<-emaC<dC
Pos_emaC_emaO_UP<-emaC>emaO
Pos_emaC_emaO_D<-emaC<emaO
Profit_L<-((((lag(dC,-1))-(lag(dO,-1)))/(lag(dO,-1)))*100)-fee
这应该是一个如何显示的数据框
df1<-data.frame(cross,type,Pos_emaO_dO_UP,Pos_emaO_dO_D,Pos_emaC_dC_UP,Pos_emaC_dC_D,Pos_emaC_emaO_UP,Pos_emaC_emaO_D,Profit_L)
colnames(df1)<-c("cross","type","Pos_emaO_dO_UP","Pos_emaO_dO_D","Pos_emaC_dC_UP","Pos_emaC_dC_D","Pos_emaC_emaO_UP","Pos_emaC_emaO_D","Profit_L")
conditions<-c(Pos_emaO_dO_UP,Pos_emaO_dO_D,Pos_emaC_dC_UP,Pos_emaC_dC_D,Pos_emaC_emaO_UP,Pos_emaC_emaO_D)
我问你这个功能可能是错的
savefun<-function(x){
Condition<-deparse(substitute(x))
f<-head(subset(table_1,prekrizeni=="A" & TYP1=="L" & x),-1)
Success<-nrow(f[f$Zisk_L>0,])/nrow(f)
d<-data.frame(Condition,Success)
d
}
所以我会告诉你我不需要被误解的全部内容。 我想创建一个两步过程的函数(或循环)。 1,我想通过函数savefun()ale的条件(第一,第二等)并拥有一个data.frame,其中所有这些结果都在表单data.frame(Condition,Success)中,就像在savefun()中一样行=长度(条件) 2,最后我想要某种循环重复它,直到没有成功列高于前一个。它的意思是。对所有条件使用savefun(),选择具有最高Success列的条件,采用此条件并将其赋予savefun(),参数f如下&gt;
savefun<-function(x){
Condition<-deparse(substitute(x))
f<-head(subset(table_1,prekrizeni=="A" & TYP1=="L" & NEW_ADDED_CONDITION & x),-1)
Success<-nrow(f[f$Zisk_L>0,])/nrow(f)
d<-data.frame(Condition,Success)
d
}
在所有条件(而不是new_added_condition)上再次运行savefun()并重复此过程,直到没有与之前的“最高成功”相比更高的组合。然后停止循环并在停止之前显示结果data.frame或仅显示最后一步中使用条件的名称。 我希望很清楚,我真的会帮助你,我必须完成我的学业,我及时按下。再次感谢 @Richard Scriven @Osssan
答案 0 :(得分:0)
使用assign
和get
savefun<-function(x){
f<-subset(table_1,prekrizeni=="A" & TYP1=="L" & x)
b<-nrow(f[f$Zisk_L>0,])/nrow(f)
assign('x',list(x=x,b=b),envir=.GlobalEnv)
return(get('x',envir=.GlobalEnv))
}