{"id":13,"date":"2006-04-21T15:26:37","date_gmt":"2006-04-21T23:26:37","guid":{"rendered":"http:\/\/www.tranzoa.net\/~alex\/blog\/?p=13"},"modified":"2006-04-21T15:33:20","modified_gmt":"2006-04-21T23:33:20","slug":"picking-stocks-with-a-dartboard","status":"publish","type":"post","link":"https:\/\/www.tranzoa.net\/~alex\/blog\/?p=13","title":{"rendered":"Picking Stocks with a Dartboard"},"content":{"rendered":"<p>Well, I keep looking for bugs in portfolio_track.py &#8211; seeing as how it tells me I&#8217;m a genius stock picker. <\/p>\n<p>I don&#8217;t trust programs that try to butter me up.<\/p>\n<p>Especially those I write, myself.<\/p>\n<p>But, unfortunately for my sense of peace, while fortunately for my wallet, those bugs just don&#8217;t seem to be easy to find.<\/p>\n<p>Anyway, it got me thinking about converting the output of portfolio_track.py from what it tells: \thow you&#8217;re doing against a market average &#8211; to how you&#8217;re doing in percentiles of possible &#8220;market&#8221; investors. That is, if, say, 100 people dartboarded the market average&#8217;s stocks, how many of &#8217;em would you do better than?<\/p>\n<p>So, since God made computers to save us having to work for a living, let&#8217;s find out&#8230;<\/p>\n<p>Let us, for instance, take an S&#038;P 500 list of stocks (as of sometime late  last year), and buy 15 of &#8217;em at random a year ago. Then sell &#8217;em today. Do that 100 times and tell us a distribution of the results:<\/p>\n<pre>\r\nFrom: 21-Apr-05\r\nTo:   21-Apr-06\r\nMultiplier: 1.0\r\nPercentile Distribution\r\n 1   5.5   5.5\r\n 2   9.7   9.7\r\n 5  12.9  12.9\r\n10  15.4  15.4\r\n15  18.3  18.3\r\n20  19.7  19.7\r\n30  21.9  21.9\r\n40  22.9  22.9\r\n50  25.6  25.6\r\n60  27.8  27.8\r\n70  30.5  30.5\r\n80  34.4  34.4\r\n85  36.1  36.1\r\n90  38.1  38.1\r\n95  40.1  40.1\r\n97  43.1  43.1\r\n98  44.7  44.7\r\n99  47.5  47.5\r\n<\/pre>\n<p>To explain: the line, &#8220;98  44.7  44.7&#8221; tells us how the portfolio in the 98th percentile did. It gained 44.7%. His equivalent on the dunce side gained 9.7%. And, the average portfolio was up around 25%.<\/p>\n<p>There are two percentages printed. The first is the second multiplied by the &#8220;Multiplier&#8221; &#8211; a factor that makes the first percentage normalized for a 1-year period.<\/p>\n<p>Well, that&#8217;s all real cool, execept that the real S&#038;P 500 was up about 13-14% over the same year. So, what&#8217;s the deal?<\/p>\n<p>I can think of two reasons for why dartboarding some stocks from the S&#038;P list was better than buying an index fund:<\/p>\n<ol>\n<li>Survivalship bias. The stock list doesn&#8217;t include dogs that were in the list a year ago, but which were dropped because they died or floundered.<\/li>\n<li>Weighting. The S&#038;P 500 average is weighted. So, perhaps the stocks with high weights did less well than those with low weights. The dartboard picks randomly, so it&#8217;s relatively skewed by better stocks.<\/li>\n<\/ol>\n<p>And, maybe both of these factors were the cause of the results.<\/p>\n<p>I ran the script over a period of time last year when the S&#038;P 500 dropped. March 7 through April 28th of last year. (The script is told next-day dates.)<\/p>\n<pre>\r\nFrom: 8-Mar-05\r\nTo:   29-Apr-05\r\nMultiplier: 7.02485966319\r\nPercentile Distribution\r\n 1 -86.6 -12.3\r\n 2 -83.9 -11.9\r\n 5 -76.7 -10.9\r\n10 -70.5 -10.0\r\n15 -68.2  -9.7\r\n20 -65.3  -9.3\r\n30 -60.6  -8.6\r\n40 -57.8  -8.2\r\n50 -52.7  -7.5\r\n60 -48.3  -6.9\r\n70 -41.8  -5.9\r\n80 -37.6  -5.3\r\n85 -32.7  -4.7\r\n90 -29.7  -4.2\r\n95 -25.8  -3.7\r\n97 -24.7  -3.5\r\n98 -21.3  -3.0\r\n99 -12.9  -1.8\r\n<\/pre>\n<p>This is a closer match to the S&#038;P 500&#8217;s average loss of the time, 6.7%, which is how a dartboard in the 6x percentile did. This helps the argument that dartboarding a market average has the effect of magnifying the swings. But, if that were so, then it seems like it would be possible to arbitrage the differences in volatility &#8216;tween a market average and a dartboard of the average. And, if that were the case, then that arbitrage opportunity would have long been taken (since it&#8217;s not exactly rocket science).<\/p>\n<p>Anyway, here are the results from a run over a similar date period, but over which the real average was pretty much unchanged:<\/p>\n<pre>\r\nFrom: 3-Feb-05\r\nTo:   13-Apr-05\r\nMultiplier: 5.29305135952\r\nPercentile Distribution\r\n 1 -22.9  -4.3\r\n 2 -22.6  -4.3\r\n 5 -19.1  -3.6\r\n10 -16.9  -3.2\r\n15  -8.6  -1.6\r\n20  -6.6  -1.2\r\n30  -3.0  -0.6\r\n40  -0.2  -0.0\r\n50   1.1   0.2\r\n60   5.4   1.0\r\n70   9.0   1.7\r\n80  13.3   2.5\r\n85  14.2   2.7\r\n90  16.3   3.1\r\n95  21.0   4.0\r\n97  22.2   4.2\r\n98  23.8   4.5\r\n99  32.3   6.1\r\n<\/pre>\n<p>Just to give a gut feel for how accurate the numbers are, let&#8217;s run that script again:<\/p>\n<pre>\r\nFrom: 3-Feb-05\r\nTo:   13-Apr-05\r\nMultiplier: 5.29305135952\r\nPercentile Distribution\r\n 1 -28.6%  -5.4%\r\n 2 -28.2%  -5.3%\r\n 5 -23.8%  -4.5%\r\n10 -15.2%  -2.9%\r\n15 -11.6%  -2.2%\r\n20 -10.8%  -2.0%\r\n30  -6.3%  -1.2%\r\n40  -1.5%  -0.3%\r\n50   2.8%   0.5%\r\n60   5.0%   0.9%\r\n70   8.4%   1.6%\r\n80  11.7%   2.2%\r\n85  16.5%   3.1%\r\n90  21.2%   4.0%\r\n95  22.8%   4.3%\r\n97  27.1%   5.1%\r\n98  27.4%   5.2%\r\n99  32.2%   6.1%\r\n<\/pre>\n<p>OK. &#8216;Bout the same. So a hundred portforlios works ok over a fairly short period of time. Hmmm. Just for fun, let&#8217;s try 500 portfolios instead of 100:<\/p>\n<pre>\r\nFrom: 3-Feb-05\r\nTo:   13-Apr-05\r\nMultiplier: 5.29305135952\r\nPercentile Distribution\r\n 1 -35.9%  -6.8%\r\n 2 -27.3%  -5.2%\r\n 5 -20.2%  -3.8%\r\n10 -16.2%  -3.1%\r\n15 -13.3%  -2.5%\r\n20 -11.3%  -2.1%\r\n30  -6.6%  -1.3%\r\n40  -2.8%  -0.5%\r\n50  -0.0%  -0.0%\r\n60   4.0%   0.8%\r\n70   8.0%   1.5%\r\n80  11.7%   2.2%\r\n85  14.6%   2.8%\r\n90  18.1%   3.4%\r\n95  23.4%   4.4%\r\n97  25.4%   4.8%\r\n98  27.5%   5.2%\r\n99  33.1%   6.3%\r\n<\/pre>\n<p>Well, it might be a bit smoother and have better numbers out at the ends.<\/p>\n<p>So, now let&#8217;s try 30 darts rather than 15 (you can see I&#8217;m improving the print-out with each run of this script):<\/p>\n<pre>\r\nFrom: 3-Feb-05\r\nTo:   13-Apr-05\r\nPortfolio size: 15\r\nDarts: 500\r\nMultiplier: 5.29305135952\r\nPercentile Distribution\r\n 1 -30.6%  -5.8%\r\n 2 -24.0%  -4.5%\r\n 5 -20.4%  -3.8%\r\n10 -16.0%  -3.0%\r\n15 -13.3%  -2.5%\r\n20  -9.8%  -1.8%\r\n30  -6.6%  -1.2%\r\n40  -2.9%  -0.6%\r\n50   0.2%   0.0%\r\n60   3.1%   0.6%\r\n70   6.6%   1.2%\r\n80  11.0%   2.1%\r\n85  13.4%   2.5%\r\n90  16.8%   3.2%\r\n95  22.4%   4.2%\r\n97  25.4%   4.8%\r\n98  27.3%   5.2%\r\n99  31.2%   5.9%\r\n<\/pre>\n<p>Which, as one might expect, pulls the extremes in a bit, but doesn&#8217;t change anything else, really.<\/p>\n<p>So, anyway, it would have been handy if I&#8217;d had a list of S&#038;P stocks at the starting date. And, the historical data for each.<\/p>\n<p>Off hand, I can&#8217;t think of a way to get portfolio_track.py to quickly print out what percentile of dartboard investors you&#8217;d be in. Since the width of the bell curve of those dartboarders is probably a function of the number of darts they throw, I guess that portfolio_track.py would simply need to use a formula that takes the number of stocks the real portfolio has in it.<\/p>\n<p>Just to validate this thinking, here is another run with the dart count (the portfolio size) set to 400:<\/p>\n<pre>\r\nFrom:           6-Feb-06\r\nTo:             21-Apr-06\r\nPortfolio size: 400\r\nDarts:          500\r\nMultiplier:     4.93521126761\r\nPercentile 1-Year From-To Distribution\r\n 1         21.8%    4.4%\r\n 2         22.0%    4.5%\r\n 5         22.5%    4.6%\r\n10         22.9%    4.6%\r\n15         23.2%    4.7%\r\n20         23.5%    4.8%\r\n30         23.9%    4.8%\r\n40         24.3%    4.9%\r\n50         24.6%    5.0%\r\n60         24.9%    5.0%\r\n70         25.2%    5.1%\r\n80         25.6%    5.2%\r\n85         25.8%    5.2%\r\n90         26.1%    5.3%\r\n95         26.7%    5.4%\r\n97         27.0%    5.5%\r\n98         27.1%    5.5%\r\n99         27.3%    5.5%\r\n<\/pre>\n<p>Anyway, I&#8217;ll run portfolio_track.py on the latest bunch of stocks I bought (which I haven&#8217;t felt particularly good about, and which weren&#8217;t bought in a single day, but we&#8217;ll ignore little dings which in this particular case make me look a hair better against the dartboard).<\/p>\n<pre>\r\nSymbol    1yrGain  Market-relative\r\n---------------------------------------\r\nALDA        89.8%    70.1% ~ ^GSPC\r\nBBBY        41.4%    22.8% ~ ^GSPC\r\nEGY         66.6%    43.7% ~ ^GSPC\r\nFORD        10.7%    -7.8% ~ ^GSPC\r\nGTW        -61.7%   -80.2% ~ ^GSPC\r\nJAKK       151.0%   132.5% ~ ^GSPC\r\nKSWS       -16.6%   -35.1% ~ ^GSPC\r\nMTEX       181.3%   162.8% ~ ^GSPC\r\nOPTN        24.8%     6.3% ~ ^GSPC\r\nWINS       -61.6%   -83.0% ~ ^GSPC\r\n---------------------------------------\r\n^GSPC       19.3%\r\n---------------------------------------\r\nAbsolute:   42.0%\r\nRelative:            22.7% ~ ^GSPC\r\n<\/pre>\n<p>Well, now, the S&#038;P went up pretty good during that time. Let&#8217;s dartboard it, roughly:<\/p>\n<pre>\r\nFrom: 6-Feb-06\r\nTo:   21-Apr-06\r\nPortfolio size: 10\r\nDarts: 2000\r\nMultiplier: 4.93521126761\r\nPercentile Distribution\r\n 1 -20.1%  -4.1%\r\n 2 -12.1%  -2.4%\r\n 5  -1.6%  -0.3%\r\n10   4.2%   0.9%\r\n15   8.9%   1.8%\r\n20  11.3%   2.3%\r\n30  16.2%   3.3%\r\n40  20.0%   4.1%\r\n50  23.6%   4.8%\r\n60  27.5%   5.6%\r\n70  31.5%   6.4%\r\n80  36.0%   7.3%\r\n85  39.2%   7.9%\r\n90  43.3%   8.8%\r\n95  51.6%  10.5%\r\n97  58.6%  11.9%\r\n98  66.4%  13.4%\r\n99  84.7%  17.2%\r\n<\/pre>\n<p>Apparently, to feel good, I gotta get deep in the 90&#8217;s. \ud83d\ude42<\/p>\n<p>Which gets in to another subject &#8211; can the scientific method be used internally between selves? In fact, is it? &#8230; &#8216;Nother time. &#8230;<\/p>\n<p>All this wandering makes something rather clear: If you&#8217;re investing in a market average, you&#8217;re effectively saying:<\/p>\n<ul>\n<li>you believe you are somewhere under the 50th to 60th percentile of investers (assuming that the difference &#8216;tween results of a 50 percentile investor and a 60 is not worth the effort).<\/li>\n<li>you don&#8217;t know where you stand in the percentiles &#8211; and want to assume that you&#8217;re as likely to be on the bottom as on the top.<\/li>\n<li>you figure that you are all over the map, depending upon time and circumstance<\/li>\n<li>there is no percentile ranking of investors. Everyone is the same.<\/li>\n<\/ul>\n<p>Let&#8217;s assume that there is a ranking. How do you find your current position?<\/p>\n<p>If picking stocks took no time and transactions were free, then it would make sense to dartboard a boatload of stocks (say 1 share each). Then, if you find yourself above the 60th percentile, start exchanging the stocks you most dislike for the ones you most like. Do that until you drop significantly in the rankings. That&#8217;s when you&#8217;ve reached your Peter-Principle level of incompetence.<\/p>\n<p>Alternative that doesn&#8217;t require infinite time and free transactions: Buy a few shares of one stock and a lot of a market average &#8220;stock&#8221;. When you go above the 60th percentile with your picked stock(s), sell the market-average and buy a picked stock. Hill-climb the results of your total portfolio as you would using the previous method.<\/p>\n<p>The hill-climb method you would use, by the way, seems to be identical to a method you would use to trim a boat with no tell-tales or instruments while sailing up-wind in shifting winds.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Well, I keep looking for bugs in portfolio_track.py &#8211; seeing as how it tells me I&#8217;m a genius stock picker. I don&#8217;t trust programs that try to butter me up. Especially those I write, myself. But, unfortunately for my sense &hellip; <a href=\"https:\/\/www.tranzoa.net\/~alex\/blog\/?p=13\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-13","post","type-post","status-publish","format-standard","hentry","category-money"],"_links":{"self":[{"href":"https:\/\/www.tranzoa.net\/~alex\/blog\/index.php?rest_route=\/wp\/v2\/posts\/13","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.tranzoa.net\/~alex\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tranzoa.net\/~alex\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tranzoa.net\/~alex\/blog\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tranzoa.net\/~alex\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=13"}],"version-history":[{"count":0,"href":"https:\/\/www.tranzoa.net\/~alex\/blog\/index.php?rest_route=\/wp\/v2\/posts\/13\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.tranzoa.net\/~alex\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=13"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tranzoa.net\/~alex\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=13"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tranzoa.net\/~alex\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=13"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}