Quantitative Trading Strategies in R Part 1 of 3
Quantitative Trading Strategies in R Part 1 of 3
Quantitative Trading Strategies in R Part 1 of 3
mm 40 60 80 100 120
Part 1 of 3
60
Guy Yollin
Principal Consultant, r-programming.org Visiting Lecturer, University of Washington
80
2011)
quantstrat-I
1 / 72
Outline
mm 40 60 80 100 120
Performance analytics
80
2011)
quantstrat-I
2 / 72
40
60
80
100
120
quantstrat: quantitative strategy model framework blotter: tools for transaction-oriented trading systems development
40
Quantitative trading rules and trading accouting
60
80
2011)
quantstrat-I
3 / 72
40
80
2011)
quantstrat-I
4 / 72
Lecture references
mm 40 60 100 TradeAnalytics project page on R-forge: 80 http://r-forge.r-project.org/projects/blotter/ documents and demos for: 40
blotter package quantstrat package
120
R-SIG-FINANCE: https://stat.ethz.ch/mailman/listinfo/r-sig-finance
60
2011)
quantstrat-I
5 / 72
Outline
mm 40 60 80 100 120
Performance analytics
80
2011)
quantstrat-I
6 / 72
Key features supports portfolios of multiple assets supports accounts of multiple portfolios supports P&L calculation and roll-up 60 Authors Peter Carl Brian Peterson 80
40
2011)
quantstrat-I
7 / 72
Initialization
Bar-by-bar processing
Reporting
40
Initialize currency and instruments, and load historic data Initialize portfolio and account Check prices and indicators to see if Buy or Sell triggered Update position and equity End of Data Generate performance reports and graphs
60
80
2011)
quantstrat-I
8 / 72
40
40 getPosQty
addTxn updatePortf updateAcct updateEndEq
getEndEq
60
60 80 100 Description Initialization initializes a portfolio object initializes an account object Processing retrieves the most recent value of the capital account gets position at Date add transactions to a portfolio calculate P&L for each symbol for each period calculate equity from portfolio data update ending equity for an account Analysis chart market data, position size, and cumulative P&L calculate portfolio instrument returns get an account object from the .blotter environment get a portfolio object from the .blotter environment retrieve transactions from a portfolio calculate trade statistics
120
2011)
quantstrat-I
9 / 72
40
60
80
100
120
60
Loading blotter causes these other libraries to be loaded automatically FinancialInstrument quantmod TTR
80
2011)
quantstrat-I
10 / 72
The blotter package creates an environment named .blotter for private storage of portfolio and account objects Likewise, 40 FinancialInstrument package creates an environment the called .instrument for private storage of dened instruments (e.g. currency, stock, future, etc.)
R Code:
60
".instrument"
80
2011)
quantstrat-I
11 / 72
Initialization
Bar-by-bar processing
Reporting
40
Initialize currency and instruments, and load historic data Initialize portfolio and account Check prices and indicators to see if Buy or Sell triggered Update position and equity End of Data Generate performance reports and graphs
60
80
2011)
quantstrat-I
12 / 72
Main arguments: primary id character string providing a unique ID for the instrument currency 80 string describing the currency ID multiplier numeric multiplier (multiplier price = notional values) tick size tick increment of the instrument price
Guy Yollin (Copyright
2011)
quantstrat-I
13 / 72
mm
40
60
80
100
120
[1] "USD" > get("USD",envir=.instrument) $primary_id [1] "USD" $currency [1] "USD" $multiplier [1] 1 $tick_size [1] 0.01 $identifiers NULL
40
60
80
2011)
quantstrat-I
14 / 72
mm
40
60
80
100
120
[1] "SPY" > get("SPY",envir=.instrument) $primary_id [1] "SPY" $currency [1] "USD" $multiplier [1] 1 $tick_size [1] 0.01 $identifiers list()
40
60
80
2011)
quantstrat-I
15 / 72
40
60
80
100
120
> getSymbols('SPY', from='1998-01-01', to='2011-07-31', adjust=T) > SPY=to.monthly(SPY, indexAt='endof') > SPY$SMA10m <- SMA(Cl(SPY), 10) > tail(SPY)
40
SPY.Open 2011-02-28 128.2641 2011-03-31 132.3362 2011-04-29 132.7519 2011-05-31 136.3938 2011-06-3060 133.8464 2011-07-29 132.0900
SPY.Low SPY.Close SPY.Volume SPY.Adjusted SMA10m 128.1849 131.9201 2846131894 131.92 114.9287 124.1228 131.9359 4825610492 131.94 117.4512 128.8711 135.7570 2826839043 135.76 120.9079 130.7319 134.2345 3354154109 134.23 123.5213 125.6968 131.9700 4723424476 131.97 126.3944 127.9700 129.3300 3840839000 129.33 128.0790
Note conversion from daily data to monthly data using the last trading day of the month (xts functionality)
80
2011)
quantstrat-I
16 / 72
Initialization
Bar-by-bar processing
Reporting
40
Initialize currency and instruments, and load historic data Initialize portfolio and account Check prices and indicators to see if Buy or Sell triggered Update position and equity End of Data Generate performance reports and graphs
60
80
2011)
quantstrat-I
17 / 72
initPosQty initial position quantity initDate 80 date for initial account equity and position (prior to the rst close price) currency currency identier
Guy Yollin (Copyright
2011)
quantstrat-I
18 / 72
120
portfolios vector of strings naming portfolios included in this account date for initial account equity and position (prior to the rst close price) initial account equity currency identier
2011)
quantstrat-I
19 / 72
40
60
80
100
120
60
80
2011)
quantstrat-I
20 / 72
40
60
80
100
120
40 [1] "account.bFaber"
> ls(.instrument) [1] "SPY" "USD"
"portfolio.bFaber"
60 various objects (including the historic price xts object) stored in the global environment
portfolio and account objects stored in .blotter environment currency and trading instrument objects stored in the .instrument 80 environment
Guy Yollin (Copyright
2011)
quantstrat-I
21 / 72
Initialization
Bar-by-bar processing
Reporting
40
Initialize currency and instruments, and load historic data Initialize portfolio and account Check prices and indicators to see if Buy or Sell triggered Update position and equity End of Data Generate performance reports and graphs
60
80
2011)
quantstrat-I
22 / 72
R Code:
> > > > > > > theme<-chart_theme() 40 theme$col$up.col<-'lightgreen' theme$col$up.border<-'lightgreen' theme$col$dn.col<-'pink' theme$col$dn.border<-'pink' chart_Series(SPY,theme=theme,name="SPY") plot(add_SMA(n=10,col=4,lwd=2)) 60
80
2011)
quantstrat-I
23 / 72
mm
140 130
40
60
80
100
120
140 130
120
40
120
110
110
100
100
60
90 90 80 80
70
80
1998 1999 Jan 1999 Jul 1999 Jan 2000 2000 Jul 2000 Jan 2001 2001 Jul 2001 Jan 2002 2002 Jul 2002 Jan 2003 2003 Jul 2003 Jan 2004 2004 Jul 2004 Jan 2005 2005 Jul 2005 Jan 2006 2006 Jul 2006 Jan 2007 2007 Jul 2007 Jan 2008 2008 Jul 2008 Jan 2009 2009 Jul 2009 Jan 2010 2010 Jul 2010 2011 Jan 2011 Jul 1998
70
Jan 1998
Jul 2011
2011)
quantstrat-I
24 / 72
Buy-Sell rules: buy when monthly price > 10-month SMA sell and move to cash when monthly price < 10-month SMA
40
Notes: all entry and exit prices are on the day of the signal at the close
60 all data series are total return series including dividends, updated monthly
2011)
quantstrat-I
25 / 72
120
2011)
quantstrat-I
26 / 72
40
function (Portfolio, Symbols = NULL, Dates = NULL, Prices = NULL, ...) NULL
Main arguments: 60 Portfolio Symbols Dates portfolio object containing transactions character vector of symbols
80
dates for calculation (these dates must appear in the price stream)
2011)
quantstrat-I
27 / 72
Main arguments: 60 name name of account Dates dates for calculation requires that updatePortf has already been run
80
2011)
quantstrat-I
28 / 72
40
2011)
quantstrat-I
29 / 72
Initialization
Bar-by-bar processing
Reporting
40
Initialize currency and instruments, and load historic data Initialize portfolio and account Check prices and indicators to see if Buy or Sell triggered Update position and equity End of Data Generate performance reports and graphs
60
80
2011)
quantstrat-I
30 / 72
Performance plot
mm 40 60 80 100 120
R Code: 40
> source("chart_Posn.R") > chart_Posn(b.strategy, Symbol = 'SPY', Dates = '1998::') > plot(add_SMA(n=10,col=4, on=1, lwd=2))
60
80
2011)
quantstrat-I
31 / 72
Performance plot
SPY
140
19980130 / 20110729
mm
40
60
80
100
120
130 120 115
140
130
120
110
110 105
100
100
90
40
95 90 85
80
80 75
70
70
Positionfill 1000
q
q q
60
q q q q q q q
CumPL 98314.97275 100000 80000 60000 40000 20000 0 1998 Jan 1998 Jul 1998 Jan 1999 1999 Jul 1999 Jan 2000 2000 Jul 2000 Jan 2001 2001 Jul 2001 Jan 2002 2002 Jul 2002 Jan 2003 2003 Jul 2003 Jan 2004 2004 Jul 2004 Jan 2005 2005 Jul 2005 Jan 2006 2006 Jul 2006 Jan 2007 2007 Jul 2007 Jan 2008 2008 Jul 2008 Jan 2009 2009 Jul 2009 Jan 2010 2010 Jul 2010 2011 Jan 2011 Jul 2011
80
40000 20000 0
2011)
quantstrat-I
32 / 72
Transactions
R Code: mm
Txn.Qty 1997-12-31 0 1998-10-30 1000 1999-09-3040 -1000 1999-10-29 1000 2000-09-29 -1000 2002-03-28 1000 2002-04-30 -1000 2003-04-30 1000 2004-08-3160 -1000 2004-09-30 1000 2007-12-31 -1000 2009-06-30 1000 2010-06-30 -1000 2010-07-30 1000 2010-08-3180 -1000 2010-09-30 1000
40
60
80
100
120
> getTxns(Portfolio=b.strategy, Symbol="SPY") Txn.Price Txn.Fees Txn.Value Txn.Avg.Cost Net.Txn.Realized.PL 0.00000 0 0.00 0.00000 0.000 89.25095 0 89250.95 89.25095 0.000 105.61590 0 -105615.90 105.61590 16364.951 112.38352 0 112383.52 112.38352 0.000 118.98858 0 -118988.58 118.98858 6605.062 96.28988 0 96289.88 96.28988 0.000 90.69007 0 -90690.07 90.69007 -5599.813 78.59565 0 78595.65 78.59565 0.000 96.86532 0 -96865.32 96.86532 18269.669 97.83755 0 97837.55 97.83755 0.000 136.15069 0 -136150.69 136.15069 38313.139 88.81119 0 88811.19 88.81119 0.000 101.18979 0 -101189.79 101.18979 12378.598 108.10113 0 108101.13 108.10113 0.000 103.23868 0 -103238.68 103.23868 -4862.443 112.48419 0 112484.19 112.48419 0.000
2011)
quantstrat-I
33 / 72
Outline
mm 40 60 80 100 120
Performance analytics
80
2011)
quantstrat-I
34 / 72
Key features supports strategies which include indicators, signals, and rules allows strategies to be applied to portfolios leverages the blotter package for trade accounting Authors
60 40
2011)
quantstrat-I
35 / 72
Initialization
Define strategy
Bar-by-bar processing
Update
Reporting
40
Initialize currency and instruments, and load historic data Initialize portfolio, account, orders, strategy Add indicators, signals, and rules Apply strategy to portfolio Update portfolio, account, equity Generate performance reports and graphs
60
80
2011)
quantstrat-I
36 / 72
40 add.signal
add.rule
add.indicator
80 applyStrategy
60 80 100 Description Initialization initialize order container constructor for strategy object Strategy denition add an indicator to a strategy add a signal to a strategy add a rule to a strategy Default functions generate comparison signal generate a crossover signal generate a signal from a formula signal function for peak/valley signals generate a threshold signal default rule to generate a trade order on a signal default order sizing function Processing apply the strategy to arbitrary market data
120
2011)
quantstrat-I
37 / 72
Initialization
Define strategy
Bar-by-bar processing
Update
Reporting
40
Initialize currency and instruments, and load historic data Initialize portfolio, account, orders, strategy Add indicators, signals, and rules Apply strategy to portfolio Update portfolio, account, equity Generate performance reports and graphs
60
80
2011)
quantstrat-I
38 / 72
40
60
80
100
120
60
2011)
quantstrat-I
39 / 72
R Code:
> > > > > # initialize orders container 40 library(quantstrat) initOrders(portfolio=qs.strategy,initDate='1997-12-31') # instantiate a new strategy object strat<- strategy(qs.strategy)
80
2011)
quantstrat-I
40 / 72
40
60
80
100
120
80
2011)
quantstrat-I
41 / 72
Initialization
Define strategy
Bar-by-bar processing
Update
Reporting
40
Initialize currency and instruments, and load historic data Initialize portfolio, account, orders, strategy Add indicators, signals, and rules Apply strategy to portfolio Update portfolio, account, equity Generate performance reports and graphs
60
80
2011)
quantstrat-I
42 / 72
60
Main arguments: strategy strategy object name name of the indicator (must be an R function) 80 arguments arguments to be passed to the indicator function label name to reference the indicator
Guy Yollin (Copyright
2011)
quantstrat-I
43 / 72
> strat <- add.indicator(strategy = strat, name = "SMA", arguments = list(x = quote(Cl(mktdata)), n=10), label="SMA10") 40 > summary(strat) Length name 1 assets 0 indicators 1 60 signals 0 rules 1 constraints 0 init 0 wrapup 0 call 2 Class -none-none-none-none-none-none-none-none-noneMode character NULL list list list NULL list list call
80
2011)
quantstrat-I
44 / 72
120
Main arguments: strategy 80 strategy object name name of the signal (one of the 5 supported signals) arguments arguments to be passed to the indicator function
Guy Yollin (Copyright
2011)
quantstrat-I
45 / 72
80
100
120
Class -none-none-none-none-none-none-none-none-none2011)
Mode character NULL list list list NULL list list call
Quantitative Trading Strategies in R quantstrat-I 46 / 72
100
120
strategy object name of the rule (typically ruleSignal) arguments to be passed to the rule function type of rule (risk,order,rebalance,exit enter , )
2011)
quantstrat-I
47 / 72
mm
40
60
80
100
120
Main arguments: 60 data an xts object containing market data (defaults to mktdata) sigcol column name to check for signal sigval signal value to match orderqty quantity for order or all, modied by osFUN ordertype80 market limit,stoplimit,stoptrailing,iceberg , orderside long , short or NULL , osFUN function or name of order sizing function (default is osNoOp)
Guy Yollin (Copyright
2011)
quantstrat-I
48 / 72
add rule to enter when Cl.gt.SMA is true add rule to exit when Cl.lt.SMA is true
R Code: 40
> # go long when close > MA > strat <- add.rule(strat, name='ruleSignal', arguments = list(sigcol="Cl.gt.SMA", sigval=TRUE, orderqty=1000, ordertype='market', orderside='long', pricemethod='market'), type='enter', path.dep=TRUE) > # exit60 when close < MA > strat <- add.rule(strat, name='ruleSignal', arguments = list(sigcol="Cl.lt.SMA", sigval=TRUE, orderqty='all', ordertype='market', orderside='long', pricemethod='market'), type='exit', path.dep=TRUE)
80
2011)
quantstrat-I
49 / 72
The strategy object contains: 1 user dened indicator 80 2 user dened signals 2 user dened trading rules
Guy Yollin (Copyright
2011)
quantstrat-I
50 / 72
Initialization
Define strategy
Bar-by-bar processing
Update
Reporting
40
Initialize currency and instruments, and load historic data Initialize portfolio, account, orders, strategy Add indicators, signals, and rules Apply strategy to portfolio Update portfolio, account, equity Generate performance reports and graphs
60
80
2011)
quantstrat-I
51 / 72
a list of portfolios to apply the strategy to named list of parameters to be applied during evaluation of the strategy
2011)
quantstrat-I
52 / 72
40
60
80
100
120
40 [1] "qsFaber"
> names(out$qsFaber) [1] "SPY" > names(out$qsFaber$SPY)
60
"rules"
80
2011)
quantstrat-I
53 / 72
40
2010-08-31 2010-09-30 2010-10-29 2010-11-30 2010-12-31 2011-01-31 2011-02-28 2011-03-31 2011-04-29 2011-05-31 2011-06-30 2011-07-29
SPY.Adjusted 103.24 112.48 116.78 116.78 124.59 127.49 131.92 131.94 135.76 134.23 131.97 129.33
60
SMA10m 107.7569 108.3360 109.1411 110.3413 111.9953 113.3289 114.9287 117.4512 120.9079 123.5213 126.3944 128.0790
SMA10 Cl.gt.SMA Cl.lt.SMA 107.7569 NA 1 108.3360 1 NA 109.1411 NA NA 110.3413 NA NA 111.9953 NA NA 113.3289 NA NA 114.9287 NA NA 117.4512 NA NA 120.9079 NA NA 123.5213 NA NA 126.3944 NA NA 128.0790 NA NA
80 Inspecting mktdata can be very helpful in understanding strategy processing and debugging
Guy Yollin (Copyright
2011)
quantstrat-I
54 / 72
Initialization
Define strategy
Bar-by-bar processing
Update
Reporting
40
Initialize currency and instruments, and load historic data Initialize portfolio, account, orders, strategy Add indicators, signals, and rules Apply strategy to portfolio Update portfolio, account, equity Generate performance reports and graphs
60
80
2011)
quantstrat-I
55 / 72
update P&L
mm 40 60 80 100 120
40
60
80
2011)
quantstrat-I
56 / 72
Initialization
Define strategy
Bar-by-bar processing
Update
Reporting
40
Initialize currency and instruments, and load historic data Initialize portfolio, account, orders, strategy Add indicators, signals, and rules Apply strategy to portfolio Update portfolio, account, equity Generate performance reports and graphs
60
80
2011)
quantstrat-I
57 / 72
Plot performance
mm 40 60 80 100 120
R Code: 40
> chart_Posn(qs.strategy, Symbol = 'SPY', Dates = '1998::') > plot(add_SMA(n=10,col=4, on=1, lwd=2))
60
80
2011)
quantstrat-I
58 / 72
19980130 / 20110729
mm
40
60
80
100
120
130 120 115
140
130
120
110
110 105
100
100
90
40
95 90 85
80
80 75
70
70
Positionfill 1000
q q
60
q q q q q q
CumPL 81950.02164 8e+04 6e+04 4e+04 2e+04 0e+00 1998 Jan 1998 Jul 1998 Jan 1999 1999 Jul 1999 Jan 2000 2000 Jul 2000 Jan 2001 2001 Jul 2001 Jan 2002 2002 Jul 2002 Jan 2003 2003 Jul 2003 Jan 2004 2004 Jul 2004 Jan 2005 2005 Jul 2005 Jan 2006 2006 Jul 2006 Jan 2007 2007 Jul 2007 Jan 2008 2008 Jul 2008 Jan 2009 2009 Jul 2009 Jan 2010 2010 Jul 2010 2011 Jan 2011 Jul 2011
80
2e+04 0e+00
2011)
quantstrat-I
59 / 72
Transactions
R Code:
mm
40
60
80
100
120
> getTxns(Portfolio=qs.strategy, Symbol="SPY") Txn.Qty 1997-12-31 0 1999-10-29 1000 40 2000-09-29 -1000 2002-03-28 1000 2002-04-30 -1000 2003-04-30 1000 2004-08-31 -1000 2004-09-3060 1000 2007-12-31 -1000 2009-06-30 1000 2010-06-30 -1000 2010-07-30 1000 2010-08-31 -1000 2010-09-3080 1000 Txn.Price Txn.Fees Txn.Value Txn.Avg.Cost Net.Txn.Realized.PL 0.00000 0 0.00 0.00000 0.000 112.38352 0 112383.52 112.38352 0.000 118.98858 0 -118988.58 118.98858 6605.062 96.28988 0 96289.88 96.28988 0.000 90.69007 0 -90690.07 90.69007 -5599.813 78.59565 0 78595.65 78.59565 0.000 96.86532 0 -96865.32 96.86532 18269.669 97.83755 0 97837.55 97.83755 0.000 136.15069 0 -136150.69 136.15069 38313.139 88.81119 0 88811.19 88.81119 0.000 101.18979 0 -101189.79 101.18979 12378.598 108.10113 0 108101.13 108.10113 0.000 103.23868 0 -103238.68 103.23868 -4862.443 112.48419 0 112484.19 112.48419 0.000
2011)
quantstrat-I
60 / 72
Outline
mm 40 60 80 100 120
Performance analytics
80
2011)
quantstrat-I
61 / 72
40
60
80
100
120
> thePortfolio = getPortfolio(b.strategy) > names(thePortfolio) [1] "symbols" "summary" > names(thePortfolio$symbols)
40
60 > names(thePortfolio$summary)
[1] "Long.Value" [5] "Realized.PL" [9] "Net.Trading.PL" "Short.Value" "Unrealized.PL" "Net.Value" "Gross.Value" "Gross.Trading.PL" "Txn.Fees"
2011)
quantstrat-I
62 / 72
mm
Long.Value 40
60
80
Short.Value 100
120
Net.Value
100000
Gross.Value
40
Realized.PL
100000
Unrealized.PL
0
0 20000
Gross.Trading.PL
Txn.Fees
60
Net.Trading.PL
80
2000 2005 2010
2011)
quantstrat-I
63 / 72
40
60
80
100
120
> theAccount = getAccount(b.strategy) > names(theAccount) [1] "portfolios" "summary" > names(theAccount$portfolios) 40 [1] "bFaber" > names(theAccount$portfolios$bFaber) [1] "Long.Value" [5] "Realized.PL" 60 [9] "Net.Trading.PL" "Short.Value" "Unrealized.PL" "Net.Value" "Gross.Value" "Gross.Trading.PL" "Txn.Fees"
> names(theAccount$summary) [1] "Additions" [5] "Int.Income" [9] "Advisory.Fees" 80 "Withdrawals" "Realized.PL" "Gross.Trading.PL" "Txn.Fees" "Net.Performance" "End.Eq" "Unrealized.PL" "Net.Trading.PL"
2011)
quantstrat-I
64 / 72
Trade statistics
mm
R Code:
> (tstats <- tradeStats(Portfolio=b.strategy, Symbol="SPY")) SPY SPY SPY SPY SPY SPY Portfolio Symbol Num.Trades Net.Trading.PL Avg.Trade.PL Med.Trade.PL bFaber SPY 16 98314.97 11638.45 12378.6 40 Largest.Winner Largest.Loser Gross.Profits Gross.Losses Std.Dev.Trade.PL 38313.14 -5599.813 91931.42 -10462.26 15128.19 Percent.Positive Percent.Negative Profit.Factor Avg.Win.Trade Med.Win.Trade 71.42857 28.57143 8.786959 18386.28 16364.95 Avg.Losing.Trade Med.Losing.Trade Avg.Daily.PL Med.Daily.PL Std.Dev.Daily.PL -5231.128 -5231.128 13578.19 15324.13 16919.37 60 maxDrawdown Net.Trading.PL.1 Avg.WinLoss.Ratio Med.WinLoss.Ratio Max.Equity -19594.29 5.017532 3.514784 3.128379 104741.9 Min.Equity Net.Trading.PL.2 0 98314.97
40
60
80
100
120
80
2011)
quantstrat-I
65 / 72
Key features extensive collection of performance charts extensive collection of performance metrics and ratios extensive collection of risk metrics
60 support for building tables of metrics 40
2011)
quantstrat-I
66 / 72
80
100
120
80
2011)
quantstrat-I
67 / 72
mm
40
60
80
100
120
Cumulative Return
0.04
0.06
0.08
40
Monthly Return
0.00
0.02
60
0.000 0.010
Drawdown
0.010
0.020
80
Dec 97 Jul 98 Jul 99 Jul 00 Jul 01 Jul 02 Jul 03 Jul 04 Jul 05 Jul 06 Jul 07 Jul 08 Jul 09 Jul 10 Jul 11
Date
2011)
quantstrat-I
68 / 72
R Code:
> PA1.tab <- table.Arbitrary(rets,metrics=c("Return.cumulative", "Return.annualized", "SharpeRatio.annualized", "CalmarRatio"), 40 metricsNames=c("Cumulative Return", "Annualized Return", "Annualized Sharpe Ratio", "Calmar Ratio")) > PA2.tab <- table.Arbitrary(rets, metrics=c("StdDev.annualized", "maxDrawdown", "VaR", "ES"), metricsNames=c("Annualized StdDev", "Max DrawDown", "Value-at-Risk", "Conditional VaR")) > tab1 <- 60 data.frame(rownames(PA1.tab),PA1.tab[,1],rownames(PA2.tab),PA2.tab[,1])
80
2011)
quantstrat-I
69 / 72
Return statistics
mm 40 60 80 100 120
80
2011)
quantstrat-I
70 / 72
40
60
80
100
120
80
2011)
quantstrat-I
71 / 72
Trade statistics
mm 40 60 80 100 120
80
2011)
quantstrat-I
72 / 72