-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
202 lines (154 loc) · 30.2 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
<!DOCTYPE html>
<html>
<head>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-110058241-3"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-110058241-3');
</script>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Asset allocation: ленивый портфель</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png">
<link rel="manifest" href="/site.webmanifest">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<!-- <link rel="stylesheet" type="text/css" media="screen" href="main.css" /> -->
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script src="https://cdn.plot.ly/plotly-1.44.1.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>
<script src="misc.js" defer></script>
<script src="dataFetch.js" defer></script>
<script src="storeData.js" defer></script>
<script src="ipc_data.js" defer></script>
<script src="makePlot.js" defer></script>
<script src="updatePlot.js" defer></script>
<script src="main.js" defer></script>
<script src="makePortfolio.js" defer></script>
<script src="makeModel.js" defer></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML' async></script>
</head>
<body>
<div class="container">
<h3 class="text-center">Asset allocation: ленивый портфель</h3>
<!-- <div id="bondPlot">Plotly chart will be drawn inside this DIV</div> -->
<div id="graphDiv"><!-- Plotly chart will be drawn inside this DIV --></div>
<!-- <div class="mx-auto"> -->
<div class="form-check">
<input class="form-check-input" type="checkbox" value="" id="flexCheckXlog" onClick="xLogSwtich(this)"/>
<label class="form-check-label" for="flexCheckXlog">Логарифмичекая шкала</label>
</div>
<form onsubmit="return showModel(this)" id="settingsForm">
<!-- <legend>Настройки портфеля</legend> -->
<div class="form-row">
<div class="form-group col-md-6">
<label class="col-form-label col-form-label-sm" for="start-date">Дата начала инвестирования (можно указать кликом)</label>
<input class="form-control" type="date" id="start-date" value="" min="" max=""/>
</div>
<div class="form-group col-md-6">
<label class="col-form-label col-form-label-sm d-flex justify-content-center" for="balance-slider">MCFTRR: <span id="MCFTRR-share">50</span>%</label>
<input class="form-control" type="range" id="balance-slider" min="0" max="100" step="10" value="50"/>
<label class="col-form-label col-form-label-sm d-flex justify-content-center" for="balance-slider">RGBITR: <span id="RGBITR-share">50</span>%</label>
</div>
</div>
<div class="form-row">
<div class="form-group col-md-8">
<input class="form-control" type="number" id="rebalance-period" value="" step = "1" min="1" max="700"/>
<label class="col-form-label col-form-label-sm" for="rebalance-period">Периодичность ребалансировки, дней</label>
<!-- <label for="rebalance-period">дней</label> -->
</div>
<div class="form-group col-md-2 col-6 d-flex justify-content-start align-items-start">
<input class="btn btn-primary" type="submit" value="Построить" id="run-button" disabled/>
</div>
<div class="form-group col-md-2 col-6 d-flex justify-content-end align-items-start">
<input class="btn btn-warning" type="button" value="Сбросить" onClick="window.location.reload(true)"/>
</div>
</div>
</form>
<!-- <div class="form-group">
<input class="btn btn-warning ml-sm-2" type="button" value="Сбросить" onClick="window.location.reload()"/>
</div> -->
<!-- </div> -->
<p>Перед вами графики индексов Московской биржи. Данные загружаются в процессе открытия этой страницы с их сайта (по API). Новые значения появляются каждый торговый день. Мы будем рассматривать портфель, состоящий только из двух групп активов: акций и облигаций.</p>
<dl class="mt-3">
<dt><a href="https://www.moex.com/ru/index/totalreturn/MCFTR">MCFTRR</a></dt>
<dd>Индекс полной (т.е. с учетом дивидендов и их реинвестирования) доходности акций. Нетто, по ставкам налогообложения резидентов РФ (т.е. минус налог на дивиденды).</dd>
<dt><a href="https://www.moex.com/ru/index/RGBITR/info/">RGBITR</a></dt>
<dd>Индекс государственных облигаций (ОФЗ), посчитанный методом совокупного дохода (т.е. с учетом купонного дохода).</dd>
<dt><a href="http://www.gks.ru/free_doc/new_site/prices/potr/tab-potr1.htm">ИПЦ</a></dt>
<dd>Индекс потребительских цен на товары и услуги. Характеризует инфляцию. Представлен справочно и не обновляется автоматически. </dd>
<dt><a href="https://en.wikipedia.org/wiki/Compound_annual_growth_rate">CAGR</a></dt>
<dd>Compound annual growth rate. Совокупная годовая скорость роста. Такая ставка сложного процента (т.е. как ставка по вкладу в банке с годовой капитализацией процентов), которая приведет к аналогичному росту за аналогичный период. Альтернативное объяснение: CAGR - частный случай <a href="https://en.wikipedia.org/wiki/Internal_rate_of_return">IRR</a> (который можно рассчитать аналитически), когда в cash flow все инвестиции приходятся на первый период, а все положительные потоки - на последний. </dd>
</dl>
<hr>
<p>В качестве акций выступает индекс <a href="https://www.moex.com/ru/index/totalreturn.aspx">MCFTRR</a>: индекс полной (т.е. с учетом дивидендов) доходности акций. Он будет моделировать ситуацию покупки акции этих компаний в тех же долях, в каких они входят в индекс.</p>
<p><a href="https://www.moex.com/ru/index/RGBITR/info/">RGBITR</a>: индекс государственных облигаций, посчитанный методом совокупного дохода (т.е. с учетом купонов). </p>
<p>Настройте портфель в соответствии с вашими пожеланиями и нажмите "Построить". Вы можете выбирать дату начала инвестирования. Если дата будет меняться, данные по индексам будут пересчитываться так, чтобы в указанную дату каждый из них имел условную стоимость равную единице. Так что бы в можно было видеть, во сколько раз выросли показатели относительно момента начала инвестирования.</p>
<hr>
<h5>Это что такое?</h5>
<p><a href="https://en.wikipedia.org/wiki/Asset_allocation">Asset allocation</a>, что можно перевести как "распределение активов" - это вид стратегий портфельного инвестирования. Их смысл в распределении капитала между разными группами активов в какой-то пропорции. Пример: акции, облигации, золото как 40/20/20. Проходит время, какие-то активы вырастают, какие-то падают. Подразумевается, что в какой-то момент, вы выравниваете пропорции продавая то что выросло и покупая то что упало.</p>
<p>В группе стратегий Asset allocation можно выделить одну простую и интересную идею инвестирования. Ее преимущество в том, что она доступна всем, не требует никаких специальных знаний и навыков. Она очень проста в управлении: не нужно разбираться в отчетности компаний, следить за новостями и ситуацией на рынке. На английском ее часто называют как "Lazy portfolio", на русский переводят как "Ленивый портфель", "Портфель простака", "Портфель лежебоки".</p>
<p>Вы выбираете классы активов и пропорции, в которых они будут входить в ваш портфель. Покупаете. И забываете о портфеле на какой-то условленный срок: например, год-полтора. По прошествии этого срока возвращаетесь и производите ребалансировку: что-то продаете, а что-то покупаете так, чтобы восстановить изначальный баланс. Далее продолжаете в том же духе.</p>
<p>Пример портфеля: 60% акции, 40% облигации. Ребалансировка - раз в год. В самом начале инвестирования распределяем капитал в соответствии с пропорцией 60/40. Проходит год. За это время стоимость наших вложений изменилась. Допустим, текущая стоимость акций в портфеле к его облигационной части стала 80/20. Тогда мы продаем акции и покупаем облигации так, чтобы вернуть свои изначальные 60/40. Проходит следующий год, и все повторяется.</p>
<p>Важно: акции - это не одна какая-то акция, они должны быть диверсифицированы. Акции - это класс активов. Пожалуй, самым простым (у нас же ленивая стратегия!) и надежным выбором будет покупка акций, которые входят в индекс биржи, в тех же пропорциях. Например, на Московской бирже есть <a href="https://www.moex.com/ru/index/MOEXBC/constituents/">индекс "Голубых фишек"</a> - 15 наиболее ликвидных акций (разные акции входят в индекс в разных долях, это можно увидеть по ссылке). Есть более узкий - <a href="https://www.moex.com/ru/index/MOEX10/constituents/">ТОП10 компаний</a>, или более широкий и самый известный, который так и называется - <a href="https://www.moex.com/ru/index/IMOEX/constituents/">индекс МосБиржи</a>.</p>
<p>Думаю, если у вас не миллиарды, индексы ТОП10 или ТОП15 будут оптимальными с точки зрения удобства и диверсификации.
<p>Аналогично с облигациями. Но, на практике, если брать только ОФЗ (Облигации федерального займа - облигации, выпущенные государством, т.е. самые надежные), можно позволить более слабую диверсификацию. Сегодня (2019 г.), если не брать в расчет облигации преддефолтных компаний, ОФЗ дают плюс-минус такую же доходность что и облигации других организаций. И это при несравненно меньших рисках и большей ликвидности. Большого смысла выбирать что-то кроме ОФЗ для облигационной части портфеля нет.</p>
<p>Самое интересное, что порой (как правило такое начинает происходить через длительный промежуток времени), такая стратегия может приносить вам доход больший, чем инвестирование в любую группу активов по отдельности. Почему? Подразумевается, что в следствие цикличности рынка, разные классы активов то растут, то падают, то опять растут. Иногда, и это желательное поведение, они двигаются разнонаправленно. Эта стратегия вынуждает вас продавать то что выросло в цене и покупать то что упало, а потом опять и опять - т.е. порой ловить рост разных активов.</p>
<hr>
<h5>Ожидаемая доходность, CAGR и выбор параметров портфеля</h5>
<p>Так какие параметры портфеля выбрать? И, самое главное, какую доходность можно ожидать? Сначала нужно ответить на второй вопрос: как оценить доходность портфеля, а потом можно будет сравнить по этому показателю разные портфели между собой.<p>
<p>Тут можно было бы взять CAGR - показатель, характеризующий годовую доходность вложений. Но за какой период? И справедливо ли будет выбрать произвольно какой-то один период для этих целей? Посмотрим на MCFTRR на графике вверху страницы. На текущий момент (январь 2019 года) его CAGR равен 1,16.</p>
<p>Но что, если нам просто повезло? Ведь дата начала расчета выбрана произвольно: это просто дата с которой начали публиковать индекс MCFTRR (26.02.2003). Аналогично выбрана конечная дата расчета CAGR - сегодняшний день. Что, если случайно эти даты выбраны слишком удачно/не удачно?</p>
<p>На том же графике вы можете смоделировать ленивый портфель выбрав дату начала инвестиций на пике перед обвалом 2008 года. К этой дате будут приведены и индексы - для сравнения с вашим портфелем. Вы увидите, что CAGR по MCFTRR стал где-то 1,06! Аналогично, выбрав датой начала самое дно кризиса 2008 года, вы можете получить почти 1.2! Так на какой CAGR можно было бы рассчитывать в среднем?</p>
<p>Кажется, на этот вопрос можно дать ответ как-то усреднив значения показателя, взятые по разным периодам. Предлагаю сделать так: посчитаем CAGR для каждого из всех возможных периодов. Начнем с 26.02.2003 по сегодняшний день, затем с 27.02.2003... и так далее до последнего периода длиной в 0 дней (с сегодня по сегодня). На данный момент это 5 838 периодов (но каждый торговый день их количество будет увеличиваться на 1 - ведь на этой странице значения индексов дополняются; так что ваш опыт может быть иным).</p>
<p>При этом есть ощущение, что чем длиннее период, по которому считается CAGR - тем более устойчивое значение мы получаем. Ведь на коротком периоде даже незначительное колебание итогового значения индекса приведет к относительно сильному изменению CAGR. Хочется как-то учесть это соображение, и не усреднять равноправно значения CAGR взятые на периодах в 5 000 и в 2 дня. </p>
<p>Тогда значениям CAGR можно дать веса: пусть показатель, взятый за период в 5 838 дней имеет вес в 5 838, за период в 5000 дней - вес в 5000, за период в 2 дня - 2. Мы перемножим значения CAGR и их веса, сложим, и разделим на сумму всех весов.</p>
<p>Тоже самое в формульном виде: <img src="weighetCAGR1.gif" style="margin: 20px 5px 0px 20px">, где <em>f</em> - самая ранняя дата для расчетов, <em>l</em> - последняя дата, <em>c</em> - текущая, стремится от <em>f</em> к <em>l</em> каждый раз прибавляя по дню, <em>(l-c)</em> - разница между датами в днях.</p>
<p>Или, если развернуть расчет CAGR, то: <img src="weighetCAGR2.gif" style="margin: 20px 0px 5px 20px">, где <em>val_с</em>, <em>val_l</em> - значения индекса на соответствующие даты.</p>
<p>Теперь у нас есть показатель - <em>weightedCAGR</em>. Рассчитаем его для разных соотношений акций/облигаций, а также для разных периодов ребалансировки. Именно это будет происходить на графике ниже если нажать кнопку "Рассчитать".</p>
<div id="simDiv"><!-- Plotly chart will be drawn inside this DIV --></div>
<form>
<div class="form-row">
<div class="form-group col-md-6">
<input class="btn btn-primary" type="button" value="Расчитать" id="run-button2" disabled onClick="startSimulation()"/>
</div>
</div>
</form>
<p>Для расчетов выбраны периоды ребалансировки из массива: [1, 7, 30, 90, 182, 365, 182+365, 365*2] </p>
<p>Интересен не только <em>weightedCAGR</em> как некая средняя доходность. Но и то, насколько большой разброс вокруг этой средней у всех CAGR по всем периодам. Для этого, параллельно, на графике ниже отображается <a href="https://ru.wikipedia.org/wiki/%D0%A1%D1%80%D0%B5%D0%B4%D0%BD%D0%B5%D0%BA%D0%B2%D0%B0%D0%B4%D1%80%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D0%BE%D1%82%D0%BA%D0%BB%D0%BE%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5">стандартное отклонение</a> значений CAGR от среднего (<em>weightedCAGR</em>). Это некая мера волатильности доходности.</p>
<p>На самом деле сейчас <em>weightedCAGR</em> учитывает не все возможные периоды расчета CAGR (как в формуле), а лишь каждые 60 - иначе слишком долго считает. Может быть потом получится оптимизировать код с точки зрения производительности и считать каждый день. Тем не менее, по моим тестам результаты плюс-минус одинаковые.</p>
<p>Разглядывая получившиеся графики можно сделать несколько выводов (январь 2019):
<ul>
<li>CAGR, в общем, растет с ростом доли акций.</li>
<li>На январь 2019 CAGR для портфеля на 100% из облигаций более-менее совпадает с показателем из графика вверху страницы. А вот с CAGR по акциям, похоже, повезло, текущее значение 1.16, тогда как среднее 1.12.</li>
<li>Есть ощущение, что доходность незначительно растет с уменьшение периода ребалансировки. Кажется, это можно объяснить тем, что более короткие периоды успевают отлавливать больше разнонаправленных движений стоимости разных активов на ограниченном временном промежутке.</li>
<li>Если присмотреться к портфелям на 90% и 100% из акций, то можно заметить, что пара 90%-ых портфелей с короткими периодами ребалансировки превосходит в средней доходности портфель из 100% акций. Как видите, составной портфель из двух активов может превосходить по доходности каждый актив по отдельности. По идее, чем дольше период вложений, тем чаще такое будет случаться.</li>
<li>С ростом доходности растет и стандартное отклонение от средней. При этом, если доходность растет замедляющимся темпом, то волатильность - ускоряющимся. При этом, есть ощущение, что чем реже проводится ребалансировка - тем больше отклонение (и, напомню, из пункта выше - тем меньше средняя доходность.) По всему, выходит, если не учитывать транзакционные издержки частой ребалансировки (например, если это делается автоматически), имеет смысл ребалансировать портфель часто. С другой стороны - разница на уровне десятых долей процента.</li>
</ul>
</p>
<p>Еще раз хочу пояснить по ожидаемой доходности. В реальности она зависит от... удачи, или, иначе, от допущений о том какой информацией вы обладаете. Например, если вы (думаете что) в состоянии оценить перепроданность на рынке акций, очевидно, что, ожидая возможного снижения, вы не будете на 100% в акциях. И, наоборот, видя, что акции дешевы как никогда, предпочтете быть в акциях по максимуму. В этом случае ваша доходность будет выше средней.</p>
<p>Но, в таком случае, ленивый портфель не для вас. Скорее, вы все так же будете распределять активы, но балансировать их будете не по формальному правилу - наступление даты ребалансировки, а в соответствии с вашими предположениями относительно ситуации на рынке. Да и навряд ли вы будет вкладываться в индекс, скорее вы предпочтете выбрать более узкий перечень наиболее перспективных бумаг.</p>
<p>Кстати, то, что я описал в последних двух абзацах соответствует моей стратегии на рынке).</p>
<p>Концепции ленивого портфеля больше соответствует предположение что раз уж вы не знаете какие именно бумаги включать в портфель (и вкладываетесь в какой-то индекс), раз уж вы формально подходите к вопросу ребалансировки (ребалансируя портфель через равные промежутки времени), то, наверное, вы так же не знаете в какой момент следует войти на рынок. А значит вам может с этим повезти, а может и нет, но, в среднем, вы можете ориентироваться на показатель <em>weightedCAGR</em>.</p>
<p>Безусловно, остается открытым вопрос, почему <em>weightedCAGR</em> рассчитан именно таким образом. Например, можно выдвинуть такой аргумент против присвоения линейно бОльших весов показателям CAGR рассчитанных на больших периодах: чем длиннее период, чем раньше дата начала расчета - тем в большей степени расчет захватывает глубоко исторический, уже мало релевантный период. Ведь в экономике и на фондовом рынке все меняется, и далекое прошлое уже ничего не говорит о настоящем.</p>
<p>Например, можно считать по-другому: допустим взять окно в 10 лет и считать по нему CAGR, двигая это окно от самой ранней даты, до последней возможной. После чего, усреднить показатель, придав каждому веса, наоборот, тем бОльшие чем ближе это окно к настоящему.<p>
<p>Я же пока оставлю расчеты как есть. В свою защиту могу лишь высказать предположение, что разница будет незначительна. Например, я пробовал придать всем CAGR веса равные единице, т.е. просто взять среднее арифметическое по всем CAGR. Результаты получились очень похожи.</p>
<a href="https://www.web-stat.com">
<img alt="Web-Stat traffic analysis" src="https://wts.one/7/5/1980900.png" width="1" height="1">
</a>
<footer style="display: flex; margin: 1em 0em 1em 1em;">
<!-- <hr id="footer-hr" style="margin: 0 0 0 0;"> -->
<span id="gh-link" style="margin-left: auto;">
<a href="https://github.com/amchercashin/asset-allocation">
<img height="16" width="16" src="https://cdn.jsdelivr.net/npm/simple-icons@latest/icons/github.svg" /> amchercashin/asset-allocation </a>
</span>
<span id="footer-date" style="margin: 0em 0em 0em 1em;">2019</span>
</footer>
</div>
</body>
</html>