我有一个财务时间序列 data
,我希望根据 Returns
计算Maximum Draw down
,signal
等系列。我的实际时间序列很大。我在这里给出一个玩具示例,以便我能说出我需要的东西。此处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)
出于这个目的,Quantmod
和PerformanceAnalytics
出现在我的脑海中。
任何帮助表示感谢。
答案 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)
无论如何,我希望其中任何一个都有帮助。