# Raw backtest computations in R

This note – which originated from an answer on Stack Exchange/Quantitative Finance – discusses how raw signals can be translated into P/L or returns.

Raw P/L computation from a vector of signals in R can be quite fast. As signal, I define a vector that is `1` if the portfolio is long, and `0` if it is not invested. In different words, the signals define the position; the changes in the signal define trades.

```P <- c(100, 99, 104, 103, 105, 104)  ## price series
S <- c(  0,  1,   1,   0,   1,   0)  ## position to be held
dS <- c(0, diff(S))                  ## change in position ==> trades
(portfolio.value <- S*P - cumsum(dS*P))
```

Proportional Transactions costs are easy to add.

```dSP <- dS*P ## with 10bp proportional fees
(portfolio.value <- S*P - cumsum(dSP) - cumsum(abs(dSP)*0.001))
```

We have now stored all trades in the vector `dS`. Here is a sketch how you could handle the trades, using package PMwR (which I maintain).

```## trades
library("PMwR")
J <- journal(amount = dS, price = P, timestamp = seq_along(P))
J
```
```pl(J)
```

`pl` will give the total P/L. But you can easily split up the trades.

```  trade <- dS != 0
Call `pl` for each single trade.
```sapply(trades, function(x) pl(as.journal(x), pl.only = TRUE))