计算具有交易信号的金融时间序列的回报

时间:2013-12-12 13:45:07

标签: r finance quantitative-finance

我有一个财务时间序列 data ,我希望根据 Returns计算Maximum Draw downsignal系列。我的实际时间序列很大。我在这里给出一个玩具示例,以便我能说出我需要的东西。此处1用于buy信号,-1用于sell信号。我启动并持有交易头寸,直到收到相反的信号,然后反转头寸等等。应为每个数据点计算Returns,以便可以绘制Equity Curve

data<- rnorm(20,100,3)
signal<- c( 1,1,1,1,1,1,1,-1,-1,-1,-1,-1,1,-1,1,-1,-1,-1,-1,1)

出于这个目的,QuantmodPerformanceAnalytics出现在我的脑海中。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:1)

我不知道R财务套餐(我希望我知道)。我猜你的主要问题是知道什么时候交易,什么时候不交易,并且在弄清楚之后,你的问题就解决了。

首先,您可以尝试使用纯R解决方案。我是Reduce的粉丝所以你可以试试这个。

deltaTrade <- function(currentTrend,nextSignal) ifelse(lastOp != nextSignal,1,-1)
trade <- Reduce('deltaTrade',signal,init=signal[1],accumulate=TRUE)
tradePeriods = which(trade==1)

如果速度太慢,我最近在其他SO问题中看到,切换到C ++以获得有效的解决方案是解决问题的好方法。你可以使用cpp包来做到这一点,这显然已成为一个真正的时尚。

library(Rcpp)

cppFunction("NumericVector selectTrades(NumericVector x, NumericVector out) {
  int n = x.length();
  int current = x[0];
  for(int i = 0; i < n; ++i) {
    if (x[i] == current) {
      out[i] = 0; // hold position
    } else {
      current = x[i];
      out[i] = 1; // play position
    }
  }
  return out;
}")

trades = which(selectTrades(signal,out)==1)

无论如何,我希望其中任何一个都有帮助。