Published
Edited
Apr 20, 2019
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
currentSupplyExpectedReturns = forwardChangePredictor(daiChanges.slice(-1)[0])
Insert cell
md`#### use the weighted expected returns in an arbitrage pricing theory type model with other weights expectations`
Insert cell
weightedCurrentSupplyExpectedReturns = currentSupplyExpectedReturns * forwardChangeRsquared
Insert cell
Insert cell
Insert cell
slide`This model use the Arbitrage Pricing Theory with two features that explain ${decimalToPercentStr(totalWeights)} of the price change ${growthLookBack} days later. Currently predicting a ${decimalToPercentStr(totalExpectedReturn)} change`
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
weightedCollateralExpectedReturns = collateralChartR2 * collateralChartCurrentPrediction
Insert cell
totalExpectedReturn = weightedCurrentSupplyExpectedReturns + weightedCurrentSupplyExpectedReturns
Insert cell
totalWeights = collateralChartR2 + forwardChangeRsquared
Insert cell
decimalToPercentStr = dec => dec.toLocaleString('en-us', {
style: 'percent', maximumSignificantDigits: 2
})
Insert cell
mkrCollateralRegression = createLinearRegression(
mkrCloses,
collateralCloses,
collateralFilter
)
Insert cell
Insert cell
Insert cell
Insert cell
createLinearRegression = (xData, yData, filterFn) => {
let interceptChanges = getBackwardChange(yData).slice(growthLookBack-1)
let forwardReturns = getForwardChange(xData).slice(-interceptChanges.length)
let changesChartData = forwardReturns
.map(
(day, idx) => (
{ returns: day, yChange: interceptChanges[idx]}
)
).filter(filterFn)
let changesChartClean = changesChartData.map(data => [data.yChange, data.returns])
let forwardChangeRegression = simpleStatistics.linearRegression(changesChartClean)
let forwardChangePredictor = simpleStatistics.linearRegressionLine(forwardChangeRegression)
let forwardChangeTrendline = changesChartClean.map(data => ({ y: forwardChangePredictor(data[0]), x: data[0] }))
let forwardChangePredictionRule = vz(forwardChangeTrendline)
.rule()
.x('x')
.y('y');
let forwardPredictionline = forwardChangePredictionRule.copy().line().color('none');
let lastPrediction = forwardChangeTrendline.slice(-1)[0].y
let currentPrediction = forwardChangePredictor(yData.slice(-1)[0])
let chartSupplyRule = vz(changesChartData)
.rule()
.y('returns')
.x('yChange')
.point();
let forwardChangeRsquared = simpleStatistics
.rSquared(
changesChartClean, simpleStatistics.linearRegressionLine(forwardChangeRegression)
)
let chart = vz.layer(chartSupplyRule, forwardPredictionline)
.width(900)
.height(600)
.plot()
return { chart, forwardChangeRsquared, lastPrediction, currentPrediction }
}
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
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