【发布时间】:2014-05-10 07:26:06
【问题描述】:
我编辑以指定我的问题。 这是我的数据集(例如)
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
这应该是它的外观的data.frame
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() 与 n行=长度(条件) 2,最后我想要某种循环,重复它直到没有成功列高于前一个。它的意思是。对所有条件使用savefun(),选择Success列最高的条件,取这个条件给savefun(),参数f这样>
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
【问题讨论】:
-
试试
assign("x",list(x=x,b=b),envir = .GlobalEnv)是否可行,稍后使用get("x")访问它 -
你可能想要
deparse(substitute(x))而不是as.character(substitute(x)) -
谢谢,我改了。这个比较好。你能帮我解决我上面提到的“”问题吗?我编辑答案。非常感谢
-
用于解析通过
vector,do.call(rbind,lapply(vector,function(x) savefun(x))) -
谢谢,但它不起作用。它在 data.frame 中仅显示 1 行