Public
Edited
Jan 18, 2023
Insert cell
Insert cell
values0=model([300000,200000],[300000,200000],[300000,200000],[0.06,0.01],[0.02,0.04],6000.0,0.1,0.0875,40)
Insert cell
values1=model([300000,200000],[300000,200000],[300000,200000],[0.06,0.01],[0.02,0.04],3000.0,0.1,0.0875,40)
Insert cell
// Model evolution of a 60:40 portfolio of assets.
// Hmmm... complicated if are going to include tax thresholds.
function model(unsheltered,bookcost,sheltered,growthrate,yieldrate,cgtthreshold,cgtrate,divitaxrate,years) {
var r=[];
for (var year=0;year<years;year++) {
var value=unsheltered[0]+unsheltered[1]+sheltered[0]+sheltered[1];
var valuek=value/1000.0;
r.push({Year: year,Value:value,ValueK:valuek});
unsheltered[0]*=(1.0+growthrate[0]);
unsheltered[1]*=(1.0+growthrate[1]);
sheltered[0]*=(1.0+growthrate[0]);
sheltered[1]*=(1.0+growthrate[1]);

var uscash=(unsheltered[0]*yieldrate[0]+unsheltered[1]*yieldrate[1])*(1.0-divitaxrate);
var scash=sheltered[0]*yieldrate[0]+sheltered[1]*yieldrate[1];

// Always use gains; prioritize growth assets
var sell=unsheltered[0]-bookcost[0]
}
return r;
}
Insert cell
Plot.plot({
y: {
type: "linear" // Or log
},
color: {
domain: ["Parameters A","Parameters B"],
range: ["red", "blue"],
legend: true,
type: "ordinal"
},
marks: [
Plot.line(values0, {x: "Year", y: "ValueK",stroke:()=>{return "Parameters A";}}),
Plot.line(values1, {x: "Year", y: "ValueK",stroke:()=>{return "Parameters B";}})
]
})
Insert cell

Purpose-built for displays of data

Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.
Learn more