2

私は R でトレーディング戦略をバックテストしています。これは現時点で私のコードです。- MergedSet$FXCloseRate には、特定の通貨ペアの終値が含まれます - MergedSet$RiskMA は、特定のリスク インデックスの移動平均です - 残りは明確である必要があります 現時点では、この数式は 11,000 エントリを超えると実際には高速ではありません。なんで?データ フレームが遅すぎますか? ここでどこを最適化できますか?

############
# 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
  }
}
4

0 に答える 0