1
$\begingroup$

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: enter image description here

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:

enter image description here

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:

enter image description here

Ret1:

enter image description here

Ret2:

enter image description here

I plot the risk vs return over the whole sample period:

enter image description here

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")))
$\endgroup$
  • 1
    $\begingroup$ Something I donlt understand. Looking at your chart ret1 has annualized return of about 0.20 and annualized risk of about 0.28. So the Sharpe Ratio is (0.20-0.0)/0.28 =0.714. Why you report a Sharpe ratio of only 0.049 in the last table, and what is the meaning of "p=95%" in that table? $\endgroup$ – Alex C Oct 27 '19 at 22:40
  • $\begingroup$ Thanks for pointing this out! One of the type of things I was hoping to get questions about. I am using the performanceAnalytics package which mostly expects monthly data and I have daily data. So I think there is a problem with me feeding the "correct" data to the package. I will make a small edit with some further analysis and code where I have more doubts. $\endgroup$ – user8959427 Oct 27 '19 at 22:52
  • $\begingroup$ I added a little data and some code (in R). I expect it is an error I am making. $\endgroup$ – user8959427 Oct 27 '19 at 23:15
1
$\begingroup$

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'.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.