R:data.frame在循环中太慢了?
我正在用R回溯测试交易策略。这是目前我的代码。 -MergedSet$FXCloseRate包含特定货币对的收盘价 -MergedSet$RiskMA是特定风险指数的移动平均值 -其余的应该是清楚的 目前,这个公式在11000个条目上并不是很快。为什么?数据帧是否太慢?我可以在哪里进行优化R:data.frame在循环中太慢了?,r,loops,dataframe,R,Loops,Dataframe,我正在用R回溯测试交易策略。这是目前我的代码。 -MergedSet$FXCloseRate包含特定货币对的收盘价 -MergedSet$RiskMA是特定风险指数的移动平均值 -其余的应该是清楚的 目前,这个公式在11000个条目上并不是很快。为什么?数据帧是否太慢?我可以在哪里进行优化 ############ # STRATEGY # ############ #Null out trades and position MergedSet$Trade <- 0 MergedSet$P
############
# STRATEGY #
############
#Null out trades and position
MergedSet$Trade <- 0
MergedSet$Position<-0
MergedSet$DailyReturn<-0
MergedSet$CumulativeReturn<-0
MergedSet$Investment<-0
MergedSet$CumulativeReturn[1:MAPeriod] <- 1
MergedSet$Investment[1:MAPeriod] <- InitialInvestment
#Strategy
n<-nrow(MergedSet)
for(i in seq(MAPeriod+1,n)){
#Updating the position
if(MergedSet$RiskMA[i] <= ParamDwn && MergedSet$RiskMA[i-1] > ParamDwn){
#sell signal, so short if no or long position active otherwise do nothing
if(MergedSet$Position[i-1] == 0 || MergedSet$Position[i-1] == 1){
MergedSet$Position[i] = -1
MergedSet$Trade[i] = 1
}
} else if(MergedSet$RiskMA[i] >= ParamUp && MergedSet$RiskMA[i-1] < ParamUp){
#buy signal, go long if no or short position active, otherwise do nothing
if(MergedSet$Position[i-1] == 0 || MergedSet$Position[i-1] == -1){
MergedSet$Position[i] = 1
MergedSet$Trade[i] = 1
}
} else {
MergedSet$Position[i] = MergedSet$Position[i-1]
}
#Return calculation
if(MergedSet$Position[i] == 1){
#long
MergedSet$DailyReturn[i] = MergedSet$FXCloseRate[i]/MergedSet$FXCloseRate[i-1]-1
} else if(MergedSet$Position[i] == -1){
#short
MergedSet$DailyReturn[i] = MergedSet$FXCloseRate[i-1]/MergedSet$FXCloseRate[i]-1
}
}
############
#策略#
############
#取消交易和头寸
未预先分配的MergedSet$交易。“这样做,然后凝视。”罗曼鲁什特里克:看起来是预先分配给我的。更可能的问题是,对data.frames进行子集设置很慢。[不使用数据帧,只需处理循环中的单个向量,然后在末尾创建数据帧。(即,在每个位置删除MergedSet$
)。如果代码更改最少,则速度会快得多。x=as.numeric(MergedSet$Position)是从data.frame获取向量的示例。