2

我有一个财务时间序列data,我想根据一个序列计算Returns等。我的实际时间序列很大。我在这里给出一个玩具示例,以便我可以说出我需要的东西。这里是信号,是信号。我发起并持有交易头寸,直到收到相反的信号,然后反转头寸,依此类推。应该为每个数据点计算,以便可以绘制。Maximum Draw downsignal1buy-1sellReturnsEquity 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我想到了。

任何帮助表示赞赏。

4

1 回答 1

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)

无论如何,我希望这些对您有所帮助。

于 2013-12-13T09:19:46.403 回答