FRAMA Part II: Replicating A Simple Strategy

June 27, 2014
By

(This article was first published on QuantStrat TradeR » R, and kindly contributed to R-bloggers)

This post will begin the investigation into FRAMA strategies, with the aim of ultimately finding a FRAMA trading strategy with less market exposure, fewer whipsaw trades, and fewer counter-trend trades. This post will also introduce new analytics regarding trade duration.

To begin the investigation into developing strategies based on the previously-introduced FRAMA, I’m going to replicate the simple strategy from ETFHQ — use a 126 day FRAMA with a fast constant of 4 (that is, an EMA that goes as fast as a 4-day EMA), and all the way up to a slow constant of 300. For my ATR order-sizing, which, once again, was inspired by Andreas Clenow in the post on leverage being pointless, I’m going to use 2 percent of notional capital, with a 10 day ATR for my order sizing (ATR 20 and 30 display slightly weaker results, but nevertheless, are very close in performance).

Once again, let’s start by looking at the strategy, using our same 30 instruments as with our TVI demos (I thought about testing on mutual funds, but due to the obnoxious fees that mutual funds charge for trying to trade with them, I feel that I’d have to employ too much magical thinking to neglect their obscene trading transaction costs):

require(DSTrading)
require(IKTrading)
require(quantstrat)

initDate="1990-01-01"
from="2003-01-01"
to="2010-12-31"
options(width=70)

#to rerun the strategy, rerun everything below this line
source("demoData.R") #contains all of the data-related boilerplate.

#trade sizing and initial equity settings
tradeSize <- 10000
initEq <- tradeSize*length(symbols)

strategy.st <- portfolio.st <- account.st <- "FRAMA_I"
rm.strat(portfolio.st)
rm.strat(strategy.st)
initPortf(portfolio.st, symbols=symbols, initDate=initDate, currency='USD')
initAcct(account.st, portfolios=portfolio.st, initDate=initDate, currency='USD',initEq=initEq)
initOrders(portfolio.st, initDate=initDate)
strategy(strategy.st, store=TRUE)

#Parameters

FC=4
SC=300
n=126
triggerLag=1
pctATR=.02
period=10

#indicators

add.indicator(strategy.st, name="FRAMA", 
              arguments=list(HLC=quote(HLC(mktdata)),n=n, 
                             FC=FC, SC=SC, triggerLag=triggerLag),
              label="frama")

add.indicator(strategy.st, name="lagATR", 
              arguments=list(HLC=quote(HLC(mktdata)), n=period), 
              label="atrX")


#signals

add.signal(strategy.st, name="sigCrossover",
           arguments=list(columns=c("Close", "FRAMA.frama"), relationship="gte"),
           label="longEntry")

add.signal(strategy.st, name="sigCrossover",
           arguments=list(columns=c("Close", "FRAMA.frama"), relationship="lt"),
           label="longExit")

#rules

add.rule(strategy.st, name="ruleSignal", 
         arguments=list(sigcol="longEntry", sigval=TRUE, ordertype="market", 
                        orderside="long", replace=FALSE, prefer="Open", osFUN=osDollarATR,
                        tradeSize=tradeSize, pctATR=pctATR, atrMod="X"), 
         type="enter", path.dep=TRUE)

add.rule(strategy.st, name="ruleSignal", 
         arguments=list(sigcol="longExit", sigval=TRUE, orderqty="all", ordertype="market", 
                        orderside="long", replace=FALSE, prefer="Open"), 
         type="exit", path.dep=TRUE)

#apply strategy
t1 <- Sys.time()
out <- applyStrategy(strategy=strategy.st,portfolios=portfolio.st)
t2 <- Sys.time()
print(t2-t1)


#set up analytics
updatePortf(portfolio.st)
dateRange <- time(getPortfolio(portfolio.st)$summary)[-1]
updateAcct(portfolio.st,dateRange)
updateEndEq(account.st)

It’s a fairly simple strategy–buy the next day’s open when the price crosses above the indicator, and vice versa. In other words, it’s about as simple a strategy as you can get as its sole purpose was to demonstrate the effectiveness of the indicator. And while someone interested can peruse through ETFHQ to find all of the indicator relative tests, the general gist is that adaptive moving averages work very well, and the FRAMA (the fractal adaptive moving average) works slightly better than the rest. Ultimately though, if one believes ETFHQ’s analysis (and I do), then even one good trend-following indicator will be sufficient.

Here are the trade statistics:

                         EFA       EPP       EWA      EWC       EWG
Num.Txns              289.00    245.00    281.00   219.00    248.00
Num.Trades            145.00    123.00    140.00   109.00    121.00
Net.Trading.PL       9233.11  17020.32  14917.84 14298.85  13603.78
Avg.Trade.PL           63.68    138.38    106.56   131.18    112.43
Med.Trade.PL          -46.29    -26.79    -24.81   -21.06    -28.14
Largest.Winner       2454.58   4499.10   3301.82  4031.95   3582.43
Largest.Loser        -523.15   -847.71   -607.41  -613.76   -531.39
Gross.Profits       23874.49  29202.05  28060.29 23541.10  24820.41
Gross.Losses       -14641.38 -12181.73 -13142.45 -9242.26 -11216.63
Std.Dev.Trade.PL      420.81    624.11    518.71   565.75    565.31
Percent.Positive       42.07     46.34     46.43    46.79     46.28
Percent.Negative       57.93     53.66     53.57    53.21     53.72
Profit.Factor           1.63      2.40      2.14     2.55      2.21
Avg.Win.Trade         391.39    512.32    431.70   461.59    443.22
Med.Win.Trade         199.18    238.18    220.98   236.81    179.68
Avg.Losing.Trade     -174.30   -184.57   -175.23  -159.35   -172.56
Med.Losing.Trade     -152.31   -121.13   -159.74  -133.38   -128.70
Avg.Daily.PL           63.07    137.42    105.72   128.59    112.43
Med.Daily.PL          -49.26    -29.12    -27.68   -22.15    -28.14
Std.Dev.Daily.PL      422.22    626.59    520.49   567.74    565.31
Ann.Sharpe              2.37      3.48      3.22     3.60      3.16
Max.Drawdown        -2338.49  -1945.85  -3026.93 -2001.41  -2047.83
Profit.To.Max.Draw      3.95      8.75      4.93     7.14      6.64
Avg.WinLoss.Ratio       2.25      2.78      2.46     2.90      2.57
Med.WinLoss.Ratio       1.31      1.97      1.38     1.78      1.40
Max.Equity           9902.70  17058.92  14996.93 14298.85  14604.43
Min.Equity           -136.30   -189.12   -159.59  -233.07   -315.54
End.Equity           9233.11  17020.32  14917.84 14298.85  13603.78

                         EWH       EWJ       EWS      EWT      EWU
Num.Txns              271.00    243.00    275.00   199.00   227.00
Num.Trades            135.00    119.00    133.00    96.00   111.00
Net.Trading.PL      11548.79   5965.14  12676.51 12221.36 12044.63
Avg.Trade.PL           85.55     50.13     95.31   127.31   108.51
Med.Trade.PL          -27.05    -26.14    -12.78    14.04    -7.08
Largest.Winner       2668.92   1872.67   2773.40  2749.00  2521.64
Largest.Loser        -572.88   -521.96   -593.95  -537.06  -603.96
Gross.Profits       23173.00  17577.09  23801.66 19413.97 21927.72
Gross.Losses       -11624.21 -11611.96 -11125.16 -7192.61 -9883.09
Std.Dev.Trade.PL      501.77    395.06    470.11   506.25   512.20
Percent.Positive       44.44     43.70     46.62    53.12    49.55
Percent.Negative       55.56     56.30     53.38    46.88    50.45
Profit.Factor           1.99      1.51      2.14     2.70     2.22
Avg.Win.Trade         386.22    338.02    383.90   380.67   398.69
Med.Win.Trade         125.17    140.16    212.49   172.84   195.04
Avg.Losing.Trade     -154.99   -173.31   -156.69  -159.84  -176.48
Med.Losing.Trade     -111.58   -146.64   -115.28  -138.75  -158.23
Avg.Daily.PL           86.78     38.81     94.45   108.42   108.20
Med.Daily.PL          -25.57    -32.55    -17.73    12.24    -7.80
Std.Dev.Daily.PL      503.45    376.87    471.79   473.73   514.53
Ann.Sharpe              2.74      1.63      3.18     3.63     3.34
Max.Drawdown        -2298.32  -3445.56  -2017.06 -2764.34 -2071.61
Profit.To.Max.Draw      5.02      1.73      6.28     4.42     5.81
Avg.WinLoss.Ratio       2.49      1.95      2.45     2.38     2.26
Med.WinLoss.Ratio       1.12      0.96      1.84     1.25     1.23
Max.Equity          12708.66   6336.41  13177.76 12221.36 12640.57
Min.Equity           -272.68   -307.36   -331.04     0.00   -57.47
End.Equity          11548.79   5965.14  12676.51 12221.36 12044.63

                         EWY       EWZ       EZU      IEF       IGE
Num.Txns              261.00    265.00    270.00   216.00    249.00
Num.Trades            130.00    133.00    134.00   107.00    125.00
Net.Trading.PL      10513.27  14496.80  11233.90 13370.63  12428.65
Avg.Trade.PL           80.87    109.00     83.84   124.96     99.43
Med.Trade.PL           21.32    -42.35    -34.59   -41.49    -93.07
Largest.Winner       1550.67   2633.38   3163.76  2799.11   3710.24
Largest.Loser        -614.98   -682.75   -553.54  -542.02   -576.53
Gross.Profits       23615.06  28466.25  25227.96 22877.10  26829.04
Gross.Losses       -13101.78 -13969.45 -13994.06 -9506.47 -14400.39
Std.Dev.Trade.PL      417.96    548.34    538.74   546.44    660.65
Percent.Positive       50.77     43.61     42.54    42.06     32.80
Percent.Negative       49.23     56.39     57.46    57.94     67.20
Profit.Factor           1.80      2.04      1.80     2.41      1.86
Avg.Win.Trade         357.80    490.80    442.60   508.38    654.37
Med.Win.Trade         207.28    210.90    194.52   221.16    367.42
Avg.Losing.Trade     -204.72   -186.26   -181.74  -153.33   -171.43
Med.Losing.Trade     -187.43   -163.60   -144.77  -129.05   -154.06
Avg.Daily.PL           77.86    105.49     83.84   124.96     77.08
Med.Daily.PL           19.08    -44.57    -34.59   -41.49    -93.37
Std.Dev.Daily.PL      418.17    548.93    538.74   546.44    614.05
Ann.Sharpe              2.96      3.05      2.47     3.63      1.99
Max.Drawdown        -2462.61  -2188.41  -2310.88 -2650.59  -3045.12
Profit.To.Max.Draw      4.27      6.62      4.86     5.04      4.08
Avg.WinLoss.Ratio       1.75      2.64      2.44     3.32      3.82
Med.WinLoss.Ratio       1.11      1.29      1.34     1.71      2.38
Max.Equity          10513.27  14760.11  12629.07 14339.37  12428.65
Min.Equity           -339.01   -214.04   -203.63  -278.08   -268.60
End.Equity          10513.27  14496.80  11233.90 13370.63  12428.65

                         IYR       IYZ      LQD       RWR       SHY
Num.Txns              253.00    257.00   222.00    267.00    300.00
Num.Trades            125.00    127.00   108.00    133.00    143.00
Net.Trading.PL       9702.92   8599.09 13277.24  12090.68  15021.96
Avg.Trade.PL           77.62     67.71   122.94     90.91    105.05
Med.Trade.PL          -60.97    -47.00   -17.31    -63.38    -41.73
Largest.Winner       2602.17   2511.55  2526.23   2810.42   1987.06
Largest.Loser        -864.63   -619.97  -339.49   -758.94   -971.00
Gross.Profits       22264.43  20356.47 20777.57  25087.09  30006.10
Gross.Losses       -12561.51 -11757.38 -7500.32 -12996.41 -14984.14
Std.Dev.Trade.PL      488.33    426.35   486.90    528.23    499.11
Percent.Positive       36.80     43.31    46.30     39.10     44.06
Percent.Negative       63.20     56.69    53.70     60.90     55.94
Profit.Factor           1.77      1.73     2.77      1.93      2.00
Avg.Win.Trade         484.01    370.12   415.55    482.44    476.29
Med.Win.Trade         313.81    182.80   139.12    228.24    229.73
Avg.Losing.Trade     -159.01   -163.30  -129.32   -160.45   -187.30
Med.Losing.Trade     -126.56   -112.84  -103.66   -147.59   -145.26
Avg.Daily.PL           75.21     66.83   122.94     88.59    105.05
Med.Daily.PL          -61.69    -50.50   -17.31    -65.60    -41.73
Std.Dev.Daily.PL      489.56    427.93   486.90    529.57    499.11
Ann.Sharpe              2.44      2.48     4.01      2.66      3.34
Max.Drawdown        -5488.96  -2253.39 -1261.10  -5062.88  -2852.91
Profit.To.Max.Draw      1.77      3.82    10.53      2.39      5.27
Avg.WinLoss.Ratio       3.04      2.27     3.21      3.01      2.54
Med.WinLoss.Ratio       2.48      1.62     1.34      1.55      1.58
Max.Equity          13313.44   9225.39 14084.98  15192.88  16570.24
Min.Equity           -152.91   -522.27  -347.48   -394.76  -1036.81
End.Equity           9702.92   8599.09 13277.24  12090.68  15021.96

                         TLT       XLB       XLE       XLF       XLI
Num.Txns              238.00    247.00    229.00    245.00    261.00
Num.Trades            118.00    122.00    115.00    121.00    130.00
Net.Trading.PL       7117.62   6227.48  10335.40     -8.45   6351.34
Avg.Trade.PL           60.32     51.04     89.87     -0.07     48.86
Med.Trade.PL          -71.33    -62.80    -65.87    -56.76    -45.18
Largest.Winner       2548.77   2083.24   2407.81   1895.31   1571.81
Largest.Loser        -509.75   -544.43   -484.90   -626.99   -465.20
Gross.Profits       20099.36  19500.08  21827.84  12869.00  17364.07
Gross.Losses       -12981.73 -13272.60 -11492.44 -12877.45 -11012.73
Std.Dev.Trade.PL      506.64    421.98    566.48    345.43    379.26
Percent.Positive       31.36     36.89     34.78     35.54     41.54
Percent.Negative       68.64     63.11     65.22     64.46     58.46
Profit.Factor           1.55      1.47      1.90      1.00      1.58
Avg.Win.Trade         543.23    433.34    545.70    299.28    321.56
Med.Win.Trade         230.04    248.59    241.31    153.68    129.61
Avg.Losing.Trade     -160.27   -172.37   -153.23   -165.10   -144.90
Med.Losing.Trade     -130.27   -159.19   -148.44   -134.74   -131.29
Avg.Daily.PL           60.32     47.96     68.35     -8.00     34.56
Med.Daily.PL          -71.33    -65.49    -66.25    -58.07    -46.28
Std.Dev.Daily.PL      506.64    422.35    519.59    335.64    343.76
Ann.Sharpe              1.89      1.80      2.09     -0.38      1.60
Max.Drawdown        -4938.54  -3692.51  -2780.65  -5704.14  -3013.95
Profit.To.Max.Draw      1.44      1.69      3.72      0.00      2.11
Avg.WinLoss.Ratio       3.39      2.51      3.56      1.81      2.22
Med.WinLoss.Ratio       1.77      1.56      1.63      1.14      0.99
Max.Equity           9318.18   6780.72  10335.40   4191.68   6357.94
Min.Equity           -693.51   -213.25   -557.67  -1512.46   -795.23
End.Equity           7117.62   6227.48  10335.40     -8.45   6351.34

                         XLK       XLP       XLU       XLV       XLY
Num.Txns              254.00    280.00    241.00    218.00    220.00
Num.Trades            127.00    137.00    121.00    107.00    109.00
Net.Trading.PL       2940.29   2543.61   7904.42   3189.25   6727.03
Avg.Trade.PL           23.15     18.57     65.33     29.81     61.72
Med.Trade.PL          -72.35    -85.92    -38.84    -88.65    -71.80
Largest.Winner       2050.23   1782.84   1240.83   1927.28   2667.81
Largest.Loser        -749.16   -679.39   -598.65   -662.12   -559.61
Gross.Profits       16321.02  17361.88  18269.97  14178.93  18237.47
Gross.Losses       -13380.73 -14818.27 -10365.55 -10989.67 -11510.44
Std.Dev.Trade.PL      389.23    363.63    363.21    418.10    525.74
Percent.Positive       35.43     32.12     43.80     28.97     39.45
Percent.Negative       64.57     67.88     56.20     71.03     60.55
Profit.Factor           1.22      1.17      1.76      1.29      1.58
Avg.Win.Trade         362.69    394.59    344.72    457.38    424.13
Med.Win.Trade         158.36    236.63    180.99    238.62    159.38
Avg.Losing.Trade     -163.18   -159.34   -152.43   -144.60   -174.40
Med.Losing.Trade     -135.65   -131.38   -124.59   -122.90   -146.41
Avg.Daily.PL           23.15     18.57     63.70     29.81     61.72
Med.Daily.PL          -72.35    -85.92    -41.32    -88.65    -71.80
Std.Dev.Daily.PL      389.23    363.63    364.29    418.10    525.74
Ann.Sharpe              0.94      0.81      2.78      1.13      1.86
Max.Drawdown        -3074.10  -4531.59  -2545.84  -4623.78  -4041.34
Profit.To.Max.Draw      0.96      0.56      3.10      0.69      1.66
Avg.WinLoss.Ratio       2.22      2.48      2.26      3.16      2.43
Med.WinLoss.Ratio       1.17      1.80      1.45      1.94      1.09
Max.Equity           2981.10   2993.23   8632.88   3902.68   6838.89
Min.Equity          -1716.68  -1538.36   -165.00  -1213.50   -310.63
End.Equity           2940.29   2543.61   7904.42   3189.25   6727.03

And the aggregate trade statistics:

> (aggPF <- sum(tStats$Gross.Profits)/-sum(tStats$Gross.Losses))
[1] 1.828178
> (aggCorrect <- mean(tStats$Percent.Positive))
[1] 41.55233
> (numTrades <- sum(tStats$Num.Trades))
[1] 3704
> (meanAvgWLR <- mean(tStats$Avg.WinLoss.Ratio))
[1] 2.619

Far from spectacular. Less than 50% hit rate, the profit factor definitely indicates that there is massive room for improvement as well.

Here are the daily statistics:

                         EFA       EPP       EWA       EWC       EWG
Total.Net.Profit     9233.11  17020.32  14917.84  14298.85  13603.78
Total.Days           1280.00   1330.00   1330.00   1296.00   1264.00
Winning.Days          690.00    729.00    725.00    719.00    702.00
Losing.Days           590.00    601.00    605.00    577.00    562.00
Avg.Day.PL              7.21     12.80     11.22     11.03     10.76
Med.Day.PL             12.85     16.84     17.06     18.59     21.33
Largest.Winner        725.53    521.47    428.25    648.73    510.14
Largest.Loser        -973.81  -1162.04   -722.38   -505.11   -841.33
Gross.Profits       72427.12  85143.30  80490.48  70817.88  75036.35
Gross.Losses       -63194.01 -68122.98 -65572.64 -56519.03 -61432.57
Std.Dev.Daily.PL      139.51    153.35    140.28    125.46    141.11
Percent.Positive       53.91     54.81     54.51     55.48     55.54
Percent.Negative       46.09     45.19     45.49     44.52     44.46
Profit.Factor           1.15      1.25      1.23      1.25      1.22
Avg.Win.Day           104.97    116.79    111.02     98.49    106.89
Med.Win.Day            83.48     95.05     90.88     83.65     84.31
Avg.Losing.Day       -107.11   -113.35   -108.38    -97.95   -109.31
Med.Losing.Day        -81.61    -83.94    -84.18    -72.76    -84.31
Avg.Daily.PL            7.21     12.80     11.22     11.03     10.76
Med.Daily.PL           12.85     16.84     17.06     18.59     21.33
Std.Dev.Daily.PL.1    139.51    153.35    140.28    125.46    141.11
Ann.Sharpe              0.82      1.32      1.27      1.40      1.21
Max.Drawdown        -2338.49  -1945.85  -3026.93  -2001.41  -2047.83
Profit.To.Max.Draw      3.95      8.75      4.93      7.14      6.64
Avg.WinLoss.Ratio       0.98      1.03      1.02      1.01      0.98
Med.WinLoss.Ratio       1.02      1.13      1.08      1.15      1.00
Max.Equity           9902.70  17058.92  14996.93  14298.85  14604.43
Min.Equity           -136.30   -189.12   -159.59   -233.07   -315.54
End.Equity           9233.11  17020.32  14917.84  14298.85  13603.78

                         EWH       EWJ       EWS       EWT       EWU
Total.Net.Profit    11548.79   5965.14  12676.51  12221.36  12044.63
Total.Days           1221.00   1130.00   1300.00   1138.00   1252.00
Winning.Days          644.00    588.00    712.00    610.00    689.00
Losing.Days           577.00    542.00    588.00    528.00    563.00
Avg.Day.PL              9.46      5.28      9.75     10.74      9.62
Med.Day.PL             11.07     13.74     17.01     18.92     18.71
Largest.Winner        456.34    640.14    578.24    780.22    596.56
Largest.Loser        -495.32   -496.23  -1058.32   -835.42   -812.47
Gross.Profits       71689.04  67809.75  70413.47  71565.95  71295.50
Gross.Losses       -60140.25 -61844.61 -57736.96 -59344.59 -59250.87
Std.Dev.Daily.PL      138.92    148.13    130.19    150.04    132.82
Percent.Positive       52.74     52.04     54.77     53.60     55.03
Percent.Negative       47.26     47.96     45.23     46.40     44.97
Profit.Factor           1.19      1.10      1.22      1.21      1.20
Avg.Win.Day           111.32    115.32     98.90    117.32    103.48
Med.Win.Day            89.52     94.38     79.32     95.13     87.31
Avg.Losing.Day       -104.23   -114.10    -98.19   -112.40   -105.24
Med.Losing.Day        -81.34    -92.34    -75.96    -85.69    -82.84
Avg.Daily.PL            9.46      5.28      9.75     10.74      9.62
Med.Daily.PL           11.07     13.74     17.01     18.92     18.71
Std.Dev.Daily.PL.1    138.92    148.13    130.19    150.04    132.82
Ann.Sharpe              1.08      0.57      1.19      1.14      1.15
Max.Drawdown        -2298.32  -3445.56  -2017.06  -2764.34  -2071.61
Profit.To.Max.Draw      5.02      1.73      6.28      4.42      5.81
Avg.WinLoss.Ratio       1.07      1.01      1.01      1.04      0.98
Med.WinLoss.Ratio       1.10      1.02      1.04      1.11      1.05
Max.Equity          12708.66   6336.41  13177.76  12221.36  12640.57
Min.Equity           -272.68   -307.36   -331.04      0.00    -57.47
End.Equity          11548.79   5965.14  12676.51  12221.36  12044.63

                         EWY       EWZ       EZU       IEF       IGE
Total.Net.Profit    10513.27  14496.80  11233.90  13370.63  12428.65
Total.Days           1297.00   1351.00   1282.00   1186.00   1362.00
Winning.Days          714.00    743.00    705.00    628.00    730.00
Losing.Days           583.00    608.00    577.00    558.00    632.00
Avg.Day.PL              8.11     10.73      8.76     11.27      9.13
Med.Day.PL             15.39     16.83     16.09     13.04     12.81
Largest.Winner        461.13    661.59    726.99    660.63    666.40
Largest.Loser        -819.21   -837.40  -1254.82   -555.37   -643.72
Gross.Profits       77069.26  77329.78  74286.39  79557.53  81524.20
Gross.Losses       -66555.99 -62832.98 -63052.49 -66186.90 -69095.55
Std.Dev.Daily.PL      146.05    135.63    142.76    158.58    142.55
Percent.Positive       55.05     55.00     54.99     52.95     53.60
Percent.Negative       44.95     45.00     45.01     47.05     46.40
Profit.Factor           1.16      1.23      1.18      1.20      1.18
Avg.Win.Day           107.94    104.08    105.37    126.68    111.68
Med.Win.Day            88.89     81.86     84.23     99.02     92.92
Avg.Losing.Day       -114.16   -103.34   -109.28   -118.61   -109.33
Med.Losing.Day        -80.09    -78.39    -82.94    -94.81    -90.22
Avg.Daily.PL            8.11     10.73      8.76     11.27      9.13
Med.Daily.PL           15.39     16.83     16.09     13.04     12.81
Std.Dev.Daily.PL.1    146.05    135.63    142.76    158.58    142.55
Ann.Sharpe              0.88      1.26      0.97      1.13      1.02
Max.Drawdown        -2462.61  -2188.41  -2310.88  -2650.59  -3045.12
Profit.To.Max.Draw      4.27      6.62      4.86      5.04      4.08
Avg.WinLoss.Ratio       0.95      1.01      0.96      1.07      1.02
Med.WinLoss.Ratio       1.11      1.04      1.02      1.04      1.03
Max.Equity          10513.27  14760.11  12629.07  14339.37  12428.65
Min.Equity           -339.01   -214.04   -203.63   -278.08   -268.60
End.Equity          10513.27  14496.80  11233.90  13370.63  12428.65

                         IYR       IYZ       LQD       RWR       SHY
Total.Net.Profit     9702.92   8599.09  13277.24  12090.68  15021.96
Total.Days           1272.00   1232.00   1231.00   1306.00   1350.00
Winning.Days          689.00    656.00    687.00    708.00    738.00
Losing.Days           583.00    576.00    544.00    598.00    612.00
Avg.Day.PL              7.63      6.98     10.79      9.26     11.13
Med.Day.PL             12.50     11.72     14.81     11.46     20.75
Largest.Winner        550.83    601.69   1475.28    648.22    591.25
Largest.Loser        -749.58   -803.69   -724.79   -960.12   -988.98
Gross.Profits       68544.80  62158.11  60933.53  74573.82  80464.45
Gross.Losses       -58841.88 -53559.03 -47656.28 -62483.14 -65442.49
Std.Dev.Daily.PL      131.85    123.46    119.48    139.10    140.36
Percent.Positive       54.17     53.25     55.81     54.21     54.67
Percent.Negative       45.83     46.75     44.19     45.79     45.33
Profit.Factor           1.16      1.16      1.28      1.19      1.23
Avg.Win.Day            99.48     94.75     88.70    105.33    109.03
Med.Win.Day            82.65     72.40     70.23     83.85     88.76
Avg.Losing.Day       -100.93    -92.98    -87.60   -104.49   -106.93
Med.Losing.Day        -72.35    -70.97    -69.84    -78.11    -88.06
Avg.Daily.PL            7.63      6.98     10.79      9.26     11.13
Med.Daily.PL           12.50     11.72     14.81     11.46     20.75
Std.Dev.Daily.PL.1    131.85    123.46    119.48    139.10    140.36
Ann.Sharpe              0.92      0.90      1.43      1.06      1.26
Max.Drawdown        -5488.96  -2253.39  -1261.10  -5062.88  -2852.91
Profit.To.Max.Draw      1.77      3.82     10.53      2.39      5.27
Avg.WinLoss.Ratio       0.99      1.02      1.01      1.01      1.02
Med.WinLoss.Ratio       1.14      1.02      1.01      1.07      1.01
Max.Equity          13313.44   9225.39  14084.98  15192.88  16570.24
Min.Equity           -152.91   -522.27   -347.48   -394.76  -1036.81
End.Equity           9702.92   8599.09  13277.24  12090.68  15021.96

                         TLT       XLB       XLE       XLF       XLI
Total.Net.Profit     7117.62   6227.48  10335.40     -8.45   6351.34
Total.Days           1126.00   1252.00   1336.00   1208.00   1291.00
Winning.Days          576.00    679.00    732.00    626.00    694.00
Losing.Days           550.00    573.00    604.00    582.00    597.00
Avg.Day.PL              6.32      4.97      7.74     -0.01      4.92
Med.Day.PL              7.01     12.34     15.29      6.50     11.06
Largest.Winner        706.10    586.14    525.30    425.95    479.01
Largest.Loser        -609.88   -815.74   -501.16   -446.61   -384.75
Gross.Profits       70845.43  64778.65  73739.30  55919.96  61941.72
Gross.Losses       -63727.80 -58551.17 -63403.90 -55928.41 -55590.37
Std.Dev.Daily.PL      158.57    130.49    131.97    122.51    116.99
Percent.Positive       51.15     54.23     54.79     51.82     53.76
Percent.Negative       48.85     45.77     45.21     48.18     46.24
Profit.Factor           1.11      1.11      1.16      1.00      1.11
Avg.Win.Day           123.00     95.40    100.74     89.33     89.25
Med.Win.Day            93.07     72.97     79.85     66.21     73.41
Avg.Losing.Day       -115.87   -102.18   -104.97    -96.10    -93.12
Med.Losing.Day        -89.17    -77.13    -79.13    -69.41    -72.87
Avg.Daily.PL            6.32      4.97      7.74     -0.01      4.92
Med.Daily.PL            7.01     12.34     15.29      6.50     11.06
Std.Dev.Daily.PL.1    158.57    130.49    131.97    122.51    116.99
Ann.Sharpe              0.63      0.61      0.93      0.00      0.67
Max.Drawdown        -4938.54  -3692.51  -2780.65  -5704.14  -3013.95
Profit.To.Max.Draw      1.44      1.69      3.72      0.00      2.11
Avg.WinLoss.Ratio       1.06      0.93      0.96      0.93      0.96
Med.WinLoss.Ratio       1.04      0.95      1.01      0.95      1.01
Max.Equity           9318.18   6780.72  10335.40   4191.68   6357.94
Min.Equity           -693.51   -213.25   -557.67  -1512.46   -795.23
End.Equity           7117.62   6227.48  10335.40     -8.45   6351.34

                         XLK       XLP       XLU       XLV       XLY
Total.Net.Profit     2940.29   2543.61   7904.42   3189.25   6727.03
Total.Days           1210.00   1326.00   1322.00   1153.00   1179.00
Winning.Days          664.00    704.00    710.00    593.00    611.00
Losing.Days           546.00    622.00    612.00    560.00    568.00
Avg.Day.PL              2.43      1.92      5.98      2.77      5.71
Med.Day.PL             14.64     11.03     12.12      5.31      8.48
Largest.Winner        437.09    537.52    546.32    453.96    450.42
Largest.Loser        -765.80   -750.98   -855.10   -726.49   -447.69
Gross.Profits       57610.32  62334.98  61795.49  53165.92  58852.52
Gross.Losses       -54670.02 -59791.38 -53891.07 -49976.67 -52125.49
Std.Dev.Daily.PL      122.10    118.49    115.44    117.37    120.29
Percent.Positive       54.88     53.09     53.71     51.43     51.82
Percent.Negative       45.12     46.91     46.29     48.57     48.18
Profit.Factor           1.05      1.04      1.15      1.06      1.13
Avg.Win.Day            86.76     88.54     87.04     89.66     96.32
Med.Win.Day            71.15     73.84     70.10     72.61     78.75
Avg.Losing.Day       -100.13    -96.13    -88.06    -89.24    -91.77
Med.Losing.Day        -72.57    -74.82    -65.52    -71.56    -70.88
Avg.Daily.PL            2.43      1.92      5.98      2.77      5.71
Med.Daily.PL           14.64     11.03     12.12      5.31      8.48
Std.Dev.Daily.PL.1    122.10    118.49    115.44    117.37    120.29
Ann.Sharpe              0.32      0.26      0.82      0.37      0.75
Max.Drawdown        -3074.10  -4531.59  -2545.84  -4623.78  -4041.34
Profit.To.Max.Draw      0.96      0.56      3.10      0.69      1.66
Avg.WinLoss.Ratio       0.87      0.92      0.99      1.00      1.05
Med.WinLoss.Ratio       0.98      0.99      1.07      1.01      1.11
Max.Equity           2981.10   2993.23   8632.88   3902.68   6838.89
Min.Equity          -1716.68  -1538.36   -165.00  -1213.50   -310.63
End.Equity           2940.29   2543.61   7904.42   3189.25   6727.03

Now, I’d like to introduce some new analytics found in my IKTrading package–namely, trade duration statistics. This is a simple little function that breaks down the trades by duration, in aggregate, winners, and losers, using the usual five-number summary and the mean time. It’s programmed under the assumption that the units are days. Once you start drilling into more frequent trading, one would likely need a bit more refined analysis. However, as most freely available data occurs at the daily frequency, this function should be sufficient for most analyses.

Here is the input and output for this strategy:

durStats <- durationStatistics(Portfolio=portfolio.st, Symbols=sort(symbols))
print(t(durStats))
      EFA EPP EWA EWC EWG EWH EWJ EWS EWT EWU EWY EWZ EZU IEF IGE IYR
Min     1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1
Q1      2   2   2   3   2   2   2   2   2   2   2   3   2   2   2   3
Med     6   6   5   7   6   4   5   6   6   6   6   6   6   4   6   6
Mean   12  14  13  16  14  12  12  13  16  15  13  13  12  15  14  13
Q3     14  15  14  17  13  12  11  14  18  14  15  14  13  17  14  12
Max   119 132 135 122 126 185 130 139 106 132 105  95 131 144 125 128
WMin    1   1   1   1   1   1   1   1   1   1   1   1   1   1   3   1
WQ1     9   7   3   8   3   2   2   6   3   6   5   7   5   6   9   7
WMed   14  14  14  18  12  11   8  13  14  14  13  14  13  17  19  15
WMean  22  25  22  28  24  21  20  23  24  27  21  24  23  28  30  28
WQ3    20  28  26  34  25  20  25  23  38  28  27  37  22  38  42  33
WMax  119 132 135 122 126 185 130 139 106 132 105  95 131 144 125 128
LMin    1   1   1   1   1   1   1   1   1   1   1   1   1   1   1   1
LQ1     1   1   1   2   1   2   2   1   1   1   1   1   1   1   1   2
LMed    3   4   3   4   3   3   3   3   3   3   3   3   3   3   3   4
LMean   4   5   5   6   5   5   6   5   7   4   5   5   5   5   6   5
LQ3     5   7   6   7   7   6   8   6   6   6   6   6   6   5   6   6
LMax   30  22  22  34  28  30  25  41  64  17  28  43  22  40  62  40

      IYZ LQD RWR SHY TLT XLB XLE XLF XLI XLK XLP XLU XLV XLY
Min     1   1   1   1   1   1   1   1   1   1   1   1   1   1
Q1      3   1   2   2   2   3   2   2   2   2   2   3   2   3
Med     6   4   5   6   5   7   6   5   7   6   4   7   5   8
Mean   13  15  13  12  12  14  15  13  12  13  13  15  14  15
Q3     13  14  12  14  12  15  16  15  13  13  13  14  13  14
Max   115 151 128 109  90 105 113 130  99 116 117 121 132 123
WMin    1   1   1   1   1   6   1   1   1   1   1   1   1   1
WQ1     6   3   7   6   9  12   9   9   6   6   5   7   9  11
WMed   13  13  14  14  21  16  19  17  12  14  17  16  15  14
WMean  23  27  27  22  29  28  31  27  21  27  29  27  35  28
WQ3    34  28  27  28  43  34  48  32  20  38  45  40  44  28
WMax  115 151 128 109  90 105 113 130  99 116 117 121 132 123
LMin    1   1   1   1   1   1   1   1   1   1   1   1   1   1
LQ1     2   1   1   2   1   1   1   2   1   1   1   1   1   2
LMed    4   2   3   4   3   3   3   3   4   4   4   4   4   4
LMean   5   5   4   5   5   6   6   6   7   5   6   5   6   6
LQ3     6   5   6   6   6   7   7   7   8   7   7   7   7   8
LMax   33  25  32  42  31  36  38  41  36  19  41  39  69  35

From top to bottom in this transposed table (or left to right in the original), we have aggregate trade duration statistics, the same statistics on winners, and finally, losers. This paints a picture of this current strategy as having a profile of a classic trend follower: let your winners run, and cut your losses. Or, to set it to a higher standard, the occasional winner at the price of plenty of small whipsaws, with the occasional long-duration loser. Note that this loser may not have been a loser the entire time–it could very well have been a trade that was going sideways for a long time and finally sunk into negative territory near the end, but it seems that every instrument has had at least one somewhat long-running trade that wound up losing at least a penny.

On the winning side of the trade, the winning trades stay in the market for long berths, with the best ones riding waves that last for around half a year. Ultimately, this is the appeal of trend following–the idea of just getting in once, and just having the market pay you. The goal of investigating the FRAMA (and potentially other trend indicators), is to try and locate those long profit waves while avoiding the whipsaws, countertrends, and so on.

One other interesting piece of analytics I’m incorporating into this demo is the idea of market exposure–or what percentage of the time that the strategy is actually *in* the market. Here is the code and the results:

#market exposure
tmp <- list()
length(tmp) <- length(symbols)
for(i in 1:nrow(dStats)) {
  totalDays <- nrow(get(rownames(dStats)[i]))
  mktExposure <- dStats$Total.Days[i]/totalDays
  tmp[[i]] <- c(rownames(dStats)[i], round(mktExposure, 3))
}
mktExposure <- data.frame(do.call(rbind, tmp))
colnames(mktExposure) <- c("Symbol","MktExposure")
print(mktExposure)

Essentially, this little piece of code takes advantage of the daily statistics output to compute market exposure. Here’s the output:

   Symbol MktExposure
1     EFA       0.635
2     EPP        0.66
3     EWA        0.66
4     EWC       0.643
5     EWG       0.627
6     EWH       0.606
7     EWJ       0.561
8     EWS       0.645
9     EWT       0.565
10    EWU       0.621
11    EWY       0.644
12    EWZ        0.67
13    EZU       0.636
14    IEF       0.589
15    IGE       0.676
16    IYR       0.631
17    IYZ       0.611
18    LQD       0.611
19    RWR       0.648
20    SHY        0.67
21    TLT       0.559
22    XLB       0.621
23    XLE       0.663
24    XLF         0.6
25    XLI       0.641
26    XLK         0.6
27    XLP       0.658
28    XLU       0.656
29    XLV       0.572
30    XLY       0.585

So basically, around 60-66% of the time spent in the market, most of which are short, sporadic, losing trades, with the occasional long winner.

Here’s what the equity curve looks like:

As can be seen during the crisis, this baseline strategy is taking lots of trades…for no reason at all.

And here are the three aggregate portfolio statistics:

> SharpeRatio.annualized(portfRets)
                                    [,1]
Annualized Sharpe Ratio (Rf=0%) 1.334861
> Return.annualized(portfRets)
                       [,1]
Annualized Return 0.1288973
> maxDrawdown(portfRets)
[1] 0.1562275

The largest drawdown occurs during the crisis, but beyond that, the annualized returns are solid. What I find most impressive is that the annualized Sharpe Ratio over the course of this backtest, even with what seems to be a period of drawdowns that can be removed with what seems to be relative ease (most market timing trend-followers seem to do a decent job of avoiding most of the brunt of the crisis).

And finally, to demonstrate the indicator and investigate areas for improvement, here’s the equity curve of XLF (not XLB this time), since XLF lost eight dollars over the course of the backtest.

One advantage that I think the FRAMA has over the Trend Vigor is that as it is an indicator that’s superimposed directly on the price action, it’s easier to understand visually. (Also, the math is definitely more intuitive.) As we can see from the XLF equity curve, the base strategy presented by ETFHQ could certainly use a confirmatory, slower-moving indicator to keep out counter-trend trading. After all, while the tiny little whipsaw trades are undoubtedly a nuisance, correcting counter-trend trading is a lower-hanging fruit, and would seem to be more profitable in addressing.

Thanks for reading.


To leave a comment for the author, please follow the link and comment on his blog: QuantStrat TradeR » R.

R-bloggers.com offers daily e-mail updates about R news and tutorials on topics such as: visualization (ggplot2, Boxplots, maps, animation), programming (RStudio, Sweave, LaTeX, SQL, Eclipse, git, hadoop, Web Scraping) statistics (regression, PCA, time series, trading) and more...



If you got this far, why not subscribe for updates from the site? Choose your flavor: e-mail, twitter, RSS, or facebook...

Comments are closed.