Skip to content

Commit ea2e3c0

Browse files
authored
Merge pull request #25 from mkaplan9/mk_4_allocation
Mk 4 allocation
2 parents a9071f5 + 832704e commit ea2e3c0

File tree

2 files changed

+110
-19
lines changed

2 files changed

+110
-19
lines changed

asset_allocation.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ <h4>Enter percent stocks</h4>
7575
<button id="addLine">Add Line</button>
7676
<button id="clear">Clear All Data</button>
7777

78-
<h4>Enter years from 1956 to 2018</h4>
78+
<h4>Enter years from 1963 to 2018</h4>
7979
<input type="text" id="startDate"/>
8080
<input type="text" id="endDate"/>
8181
<button id="dateButton">Set Dates</button>

scripts/asset_allocation.js

Lines changed: 109 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,6 @@ var colors = [
1919
]
2020

2121
var sAndP = [
22-
["1956", 45.16],
23-
["1957", 46.20],
24-
["1958", 40.33],
25-
["1959", 55.44],
26-
["1960", 59.91],
27-
["1961", 57.57],
28-
["1962", 71.55],
2922
["1963", 63.10],
3023
["1964", 75.02],
3124
["1965", 84.75],
@@ -85,8 +78,69 @@ var sAndP = [
8578
["Spacer", "Spacer"]
8679
]
8780

81+
var bonds = [
82+
["1963", 4.00],
83+
["1964", 4.19],
84+
["1965", 4.28],
85+
["1966", 4.93],
86+
["1967", 5.07],
87+
["1968", 5.64],
88+
["1969", 6.67],
89+
["1970", 7.35],
90+
["1971", 6.16],
91+
["1972", 6.21],
92+
["1973", 6.85],
93+
["1974", 7.56],
94+
["1975", 7.99],
95+
["1976", 7.61],
96+
["1977", 7.42],
97+
["1978", 8.41],
98+
["1979", 9.43],
99+
["1980", 11.43],
100+
["1981", 13.92],
101+
["1982", 13.01],
102+
["1983", 11.10],
103+
["1984", 12.46],
104+
["1985", 10.62],
105+
["1986", 7.67],
106+
["1987", 8.39],
107+
["1988", 8.85],
108+
["1989", 8.49],
109+
["1990", 8.55],
110+
["1991", 7.86],
111+
["1992", 7.01],
112+
["1993", 5.87],
113+
["1994", 7.09],
114+
["1995", 6.57],
115+
["1996", 6.44],
116+
["1997", 6.35],
117+
["1998", 5.26],
118+
["1999", 5.65],
119+
["2000", 6.03],
120+
["2001", 5.02],
121+
["2002", 4.61],
122+
["2003", 4.01],
123+
["2004", 4.27],
124+
["2005", 4.29],
125+
["2006", 4.80],
126+
["2007", 4.63],
127+
["2008", 3.66],
128+
["2009", 3.26],
129+
["2010", 3.22],
130+
["2011", 2.78],
131+
["2012", 1.80],
132+
["2013", 2.35],
133+
["2014", 2.54],
134+
["2015", 2.14],
135+
["2016", 1.84],
136+
["2017", 2.33],
137+
["2018", 2.91],
138+
["Spacer", "Spacer"]
139+
]
140+
88141
var dates = sAndP.map(x => x[0]);
89-
var prices = sAndP.map(x => x[1]);
142+
var sAndPPrices = sAndP.map(x => x[1]);
143+
var bondYields = bonds.map(x => x[1]);
90144
var startIndex = 0
91145
var endIndex = -1
92146

@@ -100,7 +154,7 @@ var config = {
100154
datasets: [{
101155
label: "100% S&P",
102156
borderColor: 'rgb(255, 99, 132)',
103-
data: prices.slice(0, -1),
157+
data: getNewLine(100, 0, -1),
104158
percentStocks: 100,
105159
fill: false
106160
}]
@@ -124,10 +178,12 @@ var config = {
124178

125179
document.getElementById('addLine').addEventListener('click', function() {
126180
var percentStocks = document.getElementById('percentStocks').value
127-
if(percentStocks <= 100 && percentStocks >= 0) {
128-
var newLine = prices.slice(startIndex, endIndex)
129-
newLine = newLine.map(function(el) { return el * percentStocks / 100 })
181+
addLine(percentStocks)
182+
});
130183

184+
function addLine(percentStocks) {
185+
if(percentStocks <= 100 && percentStocks >= 0) {
186+
var newLine = getNewLine(percentStocks, startIndex, endIndex)
131187
var colorIndex = Math.floor(Math.random() * colors.length)
132188

133189
config.data.datasets.push({
@@ -139,13 +195,17 @@ document.getElementById('addLine').addEventListener('click', function() {
139195
})
140196
chart.update();
141197
}
142-
});
198+
}
143199

144200
document.getElementById('clear').addEventListener('click', function() {
145-
config.data.datasets = []
146-
chart.update();
201+
clear()
147202
});
148203

204+
function clear() {
205+
config.data.datasets = []
206+
chart.update();
207+
}
208+
149209
document.getElementById('dateButton').addEventListener('click', function() {
150210
var startDate = document.getElementById('startDate').value
151211
startIndex = dates.indexOf(startDate)
@@ -166,13 +226,44 @@ document.getElementById('dateButton').addEventListener('click', function() {
166226

167227
config.data.labels = dates.slice(startIndex, endIndex);
168228
config.data.datasets.forEach(function(dataset) {
169-
var newLine = prices.slice(startIndex, endIndex)
170-
newLine = newLine.map(function(el) { return el * dataset.percentStocks / 100 })
171-
dataset.data = newLine
229+
dataset.data = getNewLine(dataset.percentStocks, startIndex, endIndex)
172230
});
173231

174232
chart.update();
175233
});
176234

235+
function getNewLine(percentStocks, startIndex, endIndex) {
236+
var decimalStocks = percentStocks / 100
237+
var decimalBonds = 1 - decimalStocks
238+
var stockReference = sAndPPrices.slice(startIndex, endIndex)
239+
var bondReference = bondYields.slice(startIndex, endIndex)
240+
var stockValue
241+
var bondValue
242+
var total = 100
243+
var newLine = [total]
244+
245+
var iters = stockReference.length
246+
for (iter = 0; iter < iters; iter++) {
247+
if(iter + 1 == iters) {
248+
break
249+
}
250+
251+
stockValue = total * decimalStocks
252+
bondValue = total * decimalBonds
253+
254+
var stockPerformance = stockReference[iter + 1] / stockReference[iter]
255+
var bondPerformance = 1 + bondReference[iter] / 100
256+
257+
var endStock = stockValue * stockPerformance
258+
var endBond = bondValue * bondPerformance
259+
260+
total = endStock + endBond
261+
262+
newLine.push(total)
263+
}
264+
265+
return newLine
266+
}
267+
177268

178269
var chart = new Chart(ctx, config);

0 commit comments

Comments
 (0)