Interpreting Strategy Risk Metrics and Return Frequency
Summary
The discussion reviews how to compare several candidate trading models using performance, drawdown, downside-risk, and risk-adjusted return measures. The reported metrics suggest that the first two models are relatively close on some measures, while the third is weaker; the answers caution against judging a strategy from a long list of ratios or chart summaries alone. Ratios depend on how returns, risk, and annualization are defined, and benchmarks such as a buy-and-hold strategy provide useful context.
The response also flags that the supplied monthly return figures are predominantly negative and that reported Sharpe values are very low, making favorable interpretation difficult regardless of annualization details. The author is advised to inspect return construction and frequency alignment, then formulate a more specific question. The post offers general interpretation rather than a validated strategy assessment: its sample is limited, and transaction costs and stop losses were omitted, so the presented results cannot establish real-world performance.
Key ideas
- Compare risk-adjusted metrics alongside drawdowns and the underlying return series.
- Annualization and return frequency must be handled consistently for meaningful ratios.
- A benchmark helps put strategy statistics into context.
- Predominantly negative returns limit the value of fine-tuning annualization choices.
- Results without trading costs or stop-loss assumptions may not reflect live performance.
Tags
Full text
# Some interpretation on some plots / statistics
# Some interpretation on some plots / statistics
I have been playing with a model just for learning purposes (I don't expect to make any money from the model) but I wanted to get some opinions on what you think are "good" values and some opinions on the drawdown, risk / reward statistics.
I currently have 3 models `ret`, `ret1` and `ret2`. The hope is that `ret` is the "best" and `ret2` is the "worst". (Sometimes I think `ret1` outperforms `ret` but your opinions will be appreciated here!
I firstly plot the performance summary:
It appears (to me) that `ret1` performs "best" here and `ret2` performs significantly worse. `ret` performs "Well" but not as good as `ret1`.
I also construct a table:
```
ret ret1 ret2
Sterling ratio 0.6498 0.5972 -0.1897
Calmar ratio 1.0049 0.8492 -0.2315
Burke ratio 0.5216 0.5335 -0.2180
Pain index 0.0486 0.0819 0.2473
Ulcer index 0.0639 0.1014 0.2893
Pain ratio 3.7812 2.4573 -0.4251
Martin ratio 2.8764 1.9832 -0.3634
daily downside risk 0.0109 0.0111 0.0155
Annualised downside risk 0.1736 0.1760 0.2455
Downside potential 0.0052 0.0057 0.0064
Omega 1.1519 1.1561 0.9643
Sortino ratio 0.0725 0.0800 -0.0149
Upside potential 0.0060 0.0066 0.0062
Upside potential ratio 0.6851 0.8171 0.5045
Omega-sharpe ratio 0.1519 0.1561 -0.0357
```
I am not going to pretend I know all of these ratios but I focus on a few of the ratios.
The `calmar` ratio. According to here
> Like many of the other risk statistics, the higher the Calmar ratio the better with anything over 0.50 is considered to be good. A Calmar ratio of 3.0 to 5.0 is really good.
I get a `calmar` ratio of 1 in the `ret` portfolio, `ret2` does okay also and (as hoped/expected) `ret2` performs significantly worse.
The `sortinio` ratio for `ret` is 0.0725 and according to the link previously.
> Similar to the Sharpe ratio, the larger the Sortino ratio, the better. A Sortino ratio greater than 2 is consider to be good
So the model performs quite badly here (but not negative like `ret2` - (which is what I hoped)).
I also compute boxplots:
Here `ret` has less outliers and a median slightly higher than 0 (whereas `ret1` has a median of 0). The upper and lower whiskers are lower for `ret` than `ret1`. As expected `ret2` has more outliers.
I plot some histograms for each of the rets:
Ret:
Ret1:
Ret2:
I plot the risk vs return over the whole sample period:
Here `ret` offers a little less risk but for a little less return than `ret1`, `ret2` performs the worst with a lot of risk for very little rewards (negative reward).
The dotted lines are the share ratio lines from the `add.sharpe` function here.
Finally the Sharpe ratios over the whole period:
```
$ret
ret
StdDev Sharpe (Rf=0%, p=95%): 0.05065042
VaR Sharpe (Rf=0%, p=95%): 0.03233440
ES Sharpe (Rf=0%, p=95%): 0.01946019
$ret1
ret1
StdDev Sharpe (Rf=0%, p=95%): 0.04933280
VaR Sharpe (Rf=0%, p=95%): 0.04927053
ES Sharpe (Rf=0%, p=95%): 0.04927053
$ret2
ret2
StdDev Sharpe (Rf=0%, p=95%): -0.011218491
VaR Sharpe (Rf=0%, p=95%): -0.008795734
ES Sharpe (Rf=0%, p=95%): -0.008795734
```
Note: Assumes no risk free rate.
According to the website I posted:
> Usually speaking a Sharpe ratio of 1.0 or greater is considered to be good and essentially implies that for every unit of risk you are assuming you are achieving an equal amount of return.
What else should I be analysing when looking at strategies? I have assumed no stoploss or trading fees here. I don't expect the results to be perfect as there is a lot of fine tuning and learning to still implement but just wanted some opinions on what I should be looking at:
EDIT: Some further statistics which do not make sense to me as per @Alex C response. I believe its to do with the package expecting annual data but I may be wrong!
```
My monthly returns data looks like:
monthly.returns monthly.returns.1 monthly.returns.2
2014-10-31 0.31300703 -1.05950399 0.2103726
2014-11-28 -0.94407654 -13.79310542 -0.6837739
2014-12-31 -11.38919360 -1.34805319 -2.2564406
2015-01-30 2.57937903 1.55551466 1.2042048
2015-02-27 -0.53271695 -0.84215383 -2.5552930
2015-03-31 0.40443868 0.57165252 -1.1988140
2015-04-30 -0.29099019 -2.83698548 3.0960736
2015-05-29 -0.20315710 -1.80347337 -1.7485224
2015-06-30 -2.03127120 -0.30070976 -1.9815004
2015-07-31 -1.33776052 0.83705216 -2.7873944
2015-08-31 0.03799118 0.07740692 -1.4738244
2015-09-30 -5.40018716 -1.83730222 -3.7984750
2015-10-30 -1.04588872 -3.44028262 -0.1901243
2015-11-30 -17.23191874 -1.28067884 -0.5782634
2015-12-31 -1.76482208 -1.79110801 -1.7985925
2016-01-29 -2.63276038 -6.40879157 8.0642941
2016-02-29 -1.44066825 -1.14646860 -0.9073987
2016-03-31 -3.21061844 -0.07678431 -1.4639840
2016-04-29 -1.37510936 4.92086759 -3.3602500
2016-05-31 -1.53425876 -1.70798303 -1.0820894
2016-06-30 1.84510924 -0.75581135 18.6766950
2016-07-29 2.20595138 0.78605900 0.3137152
2016-08-31 -1.19837390 -1.11504612 -0.8641222
2016-09-30 -2.34133741 -2.83416288 0.5659163
2016-10-31 -2.34808575 -0.75342881 -4.9078799
2016-11-30 0.50914533 36.76775004 0.2195158
2016-12-30 -0.47516184 -3.60001092 -0.7795050
```
Which is strange since they are mostly negative.
Heres the code and data I use (in R):
Code:
```
require(PerformanceAnalytics)
top_assets_ts_monthly <- lapply(top_assets_ts, function(x){periodReturn(x,
period = 'monthly', type = 'arithmetic')})
top_assets_ts_monthly <- do.call(cbind, top_assets_ts_monthly)
```
I am pretty sure I am going wrong with the first line, trying to convert the daily returns to monthly returns.
I compute the risk return using:
```
chart.RiskReturnScatter(top_assets_ts[,c(1:3)], # check this plot a little more
Rf=.03/252, scale = 252, # for daily data
add.sharpe = c(1,2,3), add.boxplots = TRUE,
main = "Risk - Return over the period",
colorset=c("red", rep("black",5), "orange", "green"))
```
Note: this is only the first 100 observations and not the full sample (I did not have enough characters to provide the full sample here). Data:
```
top_assets_ts <- structure(c(0.0140353327356451, 0.0117110672882577, 0.000131625139482283,
0.00289398426340548, 0.00170486357468502, 0.00136934115783549,
-0.00313364096255542, 0.00533476828195045, -0.039504423712209,
0.0184284904830112, 0.00380962858111955, 0.0108159848838707,
0.00569492520349302, -0.00615801084082834, 0.0123377256193888,
0.0175081713553744, 0.00511429340185399, -0.00239896587905408,
0.00804616898926036, 0.0110866852649201, 0.00350886443830944,
0.00247653540041992, 0.00566805955344662, 0.00231205347777874,
-0.0100922615957871, 0.00917544181459484, -0.00274211142798242,
-0.00131210147093985, 0.00103058486096685, -0.0150787470301469,
-0.00332994356224525, 0.011340935386849, 0.00135858767772512,
0.00660060948582553, -0.014869805803567, 0.00418190032077481,
-0.0264851728007882, 0.00496988301033063, 0.00128649165239314,
-0.0067011395447516, -0.0116747577382633, 0.0129465431637399,
-0.00384767793349039, 0.00558742004663193, 0.0143258065778513,
-0.00354162361799526, -0.00265430849957271, 0.00555369389192228,
-0.00310670808251789, -0.00919367586529474, -0.0107069456434369,
-0.00302048881022543, -0.0168901008594784, -0.0231770502430388,
0.0105997626218366, 0.0211058298870999, -0.0117486457622904,
0.00749854157285679, -0.00788687306126101, -0.00644094445066123,
-0.0070918522539446, 0.0156833317650356, 0.00696861412574079,
0.00592569068002979, 0.0287188801045939, 0.00895822882006647,
0.0172501277143646, -0.0294264353828646, -0.0257833396772131,
0.03113352854116, -0.0383242166737916, 0.00859042109474961, 0.0001688794218766,
-0.00995387969608341, 0.014579424751366, 0.00386802223864979,
-0.00311924137722175, 0.000313336802259201, 0.0175555255338335,
0.0126519591329122, 0.0205153644495752, 0.00657289726120358,
-0.0164800657792912, -0.00209791589678787, 0.00173591068198609,
-0.00805743875947063, -0.0017633068654036, -0.00287533380314919,
-0.0248175960278338, -0.0179082567885459, 0.00490426599102567,
-0.0141386487343111, -0.006338711014795, -0.0165707113480148,
-0.0135604326930069, 0.00426543710641281, -0.0263114311416919,
-0.0182314117317652, 0.00752559255835994, -0.0111490814645889,
0.0395735288086938, 0.022612151628804, -0.0111407037840094, 0.017865807897461,
0.00372023824220413, 0.00274925690109207, 0.0150340939041098,
0.00562107249979982, 0.00428606304510692, -0.00235478295560554,
-0.00639269873771675, -0.00731245906203071, 0.00600720758474549,
0.000404782154500793, -0.0070964263760217, 0.00666254206304662,
0.0037605532909033, -0.00160251268861533, 0.0141123770379381,
0.0120545879005076, -0.00166413971360935, 0.0137266611546165,
-0.0103714049943422, -0.00482428183591921, -0.0100138282003625,
0.00904912351487952, -0.020983563716534, 0.00944808738007175,
0.0301249865882545, -0.00214741597173707, 0.000950914110429579,
-0.00452130495958358, 0.015806845671092, 0.00560595273252007,
-0.0151104620291005, 0.0191103075702628, -0.00234665618947738,
-0.000493502044113914, -0.0246913500422812, -0.00673854483765746,
-0.0550113322238935, 0.0082396565378684, 0.0198545819017795,
0.0102719022966546, 0.00671433561955936, 0.00324164394013038,
-0.00639816304505669, -0.00540099496466728, -0.00940829424867906,
-0.000452134593347697, -0.010485097567134, -0.00182076297403277,
-0.00836162284595299, -0.0186371393649587, 0.0209752072736946,
0.0275298354114371, -0.00579305838740607, -0.0246406544385241,
0.00887864353405465, -0.0302318655728798, -0.0240524886817025,
-0.00698111045286953, -0.00232244689533567, 0.00692046845887684,
0.0263501972484455, 0.00290582199395861, -0.00424003586688837,
-0.0350131524220343, -0.0137958651441119, 0.0230850215919471,
-0.0267948205128204, -0.0112999255900668, 0.00775209162412627,
0.00576909072282761, 0.00605479829702782, -0.000573849292479056,
0.00664277936021551, -0.0224007185122569, -0.0108830680959567,
0.00541130756205788, 0.0123551020478396, 0.00828150590135568,
0.0108519507218849, -0.000968265051064288, 0.00758527990035618,
-0.0130624871755511, -0.00624049792008041, -0.00761987344671444,
0.00271026672727515, -0.00422945975052524, 0.000357595393776666,
0.00117420588194217, 0.0163317089530581, 0.0133517610437088,
-0.0199571752041959, -0.00712410930823371, -0.00977339097941599,
-0.00690078614315015, 0.0175325512440379, -0.00572301771821182,
0.0131665574654334, 0.0181487979275285, -0.0234715405433169,
0.0211559623652049, -0.0179970387692995, -0.0145966235899346,
-0.0984349650239917, -0.00667182367193941, -0.010046393347678,
0.0159364407156135, 0.0129629858166871, 0.00670358630009038,
0.00239406415870369, 0.0017772766066606, 0.00502229463250292,
0.0116218228822431, -0.000408982310846739, -0.00541536680255361,
0.0472220788600579, 0.00801675881400254, -0.014550725697471,
0.012983649852742, 0.00495496271407592, -0.00489379268682522,
0.00203807070755624, 0.00886011785810781, -0.00526946040646803,
-0.00438754166819533, 0.00503951921213752, -0.0646861732301786,
0.000723050205138964, -0.0114060178778491, 0.000801400547808084,
-0.00773392607027779, -0.019159997134632, -0.00230620822550309,
-0.0221899088032583, 0.000927324159435639, -0.000448307073380283,
-0.0107928045536989, -0.0466756334695052, 0.00840185241708502,
0.0203015783928482, 0.0029463183332008, 0.00802602493758453,
0.00979548590592372, -0.00258895746306775, 0.00321337769716568,
-0.00985370312508704, -0.00999745101215144, -0.00633185664836566,
0.00398994018734267, -0.0112761568630952, -0.0134732474809368,
0.0140221152836961, 0.00683592892947171, -0.0138273726416174,
-0.00435251576686624, -0.00126804190566221, 0.0043923173670728,
0.00889016653494568, 0.0125351001141936, -0.00735290211997119,
0.0102587953516757, 0.0172413308920882, 0.00231809395188409,
-0.00230786585371068, 0.0170414481485293, -0.00320061047290576,
0.0103665657797047, -0.0139567086699802, 0.012546707552392, 0.0246344159571252,
-0.0122440161938737, 0.0107987609329967, -0.000942401700941287,
-0.016260005688054, 0.0100752281011491, -0.0164550710813862,
0.00947370526315794, 0.0180021539013566, 0.00590185636179319,
0.00696251104274359, 0.0017389110496282, 0.0093389325035842,
-0.00452190757384341, -0.00407749497247745, -0.0122549781516889,
-0.00883625003653288, 0.0217067707396039, 0.0235962783673391,
-0.00702703324441645, 0.0112712551919041, 0.00383185404618391,
-0.0117267554999964, 0.0157006727793503, -0.0243297126025714,
-0.0109094091794951, -0.00452407137842425, 0.00422093732202589
), class = c("xts", "zoo"), .indexCLASS = "Date", tclass = "Date", .indexTZ = "UTC", tzone = "UTC", index = structure(c(1413763200,
1413849600, 1413936000, 1414022400, 1414108800, 1414368000, 1414454400,
1414540800, 1414627200, 1414713600, 1414972800, 1415059200, 1415145600,
1415232000, 1415318400, 1415577600, 1415664000, 1415750400, 1415836800,
1415923200, 1416182400, 1416268800, 1416355200, 1416441600, 1416528000,
1416787200, 1416873600, 1416960000, 1417132800, 1417392000, 1417478400,
1417564800, 1417651200, 1417737600, 1417996800, 1418083200, 1418169600,
1418256000, 1418342400, 1418601600, 1418688000, 1418774400, 1418860800,
1418947200, 1419206400, 1419292800, 1419379200, 1419552000, 1419811200,
1419897600, 1419984000, 1420156800, 1420416000, 1420502400, 1420588800,
1420675200, 1420761600, 1421020800, 1421107200, 1421193600, 1421280000,
1421366400, 1421712000, 1421798400, 1421884800, 1421971200, 1422230400,
1422316800, 1422403200, 1422489600, 1422576000, 1422835200, 1422921600,
1423008000, 1423094400, 1423180800, 1423440000, 1423526400, 1423612800,
1423699200, 1423785600, 1424131200, 1424217600, 1424304000, 1424390400,
1424649600, 1424736000, 1424822400, 1424908800, 1424995200, 1425254400,
1425340800, 1425427200, 1425513600, 1425600000, 1425859200, 1425945600,
1426032000, 1426118400, 1426204800), tzone = "UTC", tclass = "Date"), .Dim = c(100L,
3L), .Dimnames = list(NULL, c("ret", "ret1", "ret2")))
```
## Answer by Chris (score 1)
https://quant.stackexchange.com/a/49431
It's pretty close to impossible for anyone to tell you how to pick successful strategies. That's a little like asking 'how do I write a successful novel?" It's equal parts art and science, not to mention informed largely by experience and understanding of the underlying strategy.
A couple general comments though:
(1) Your Sharpe ratios are quite low. You can get something in the high 0s (ie, 0.7) with a simple buy and hold equity strategy during certain periods. ~.05 is basically indistinguishable from 0. (2) Annualization isn't as big an issue as the fact your returns are largely negative. Annualizing matters in getting the correct answer, obviously, but if you're losing money most months, there's not really a point in fine-tuning.
Otherwise, I'd suggest you reevaluate and try to come up with more specific questions for the community. There's not much to do with a simple collection of code and stats with an open-ended 'how to interpret this'.Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)
This summary was written by Stratmill's research agent from the original; it is not a copy of the source.