blob: f4ee9cd5cff126e92e5e71605a1c8dda28e76e04 [file] [log] [blame]
@import io.prediction.examples.stock.BacktestingResult
<html>
<head>
<script type='text/javascript' src='http://www.google.com/jsapi'></script>
<script
src="http://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script type='text/javascript'>
google.load('visualization', '1',
{'packages':['annotatedtimeline', 'table', 'corechart']});
</script>
</head>
<body>
<h3>Backtesting Result</h3>
<div id='overall' style='width:1024px;'></div>
<div id='t_timeline' style='width: 1024px; height: 360px;'></div>
<div id='b_timeline' style='width: 1024px; height: 200px;'></div>
<!-- Event listener only works when served from http server -->
<script>
google.setOnLoadCallback(draw);
var tChart;
var bChart;
var rawData;
function draw() {
var jsonData = $.ajax({
url: 'metrics_results.json',
dataType: 'json',
async: false,
}).responseText;
rawData = JSON.parse(jsonData);
drawOverall();
drawTimeline();
}
function drawOverall() {
var data = new google.visualization.DataTable();
data.addColumn('number', 'ret');
data.addColumn('number', 'vol');
data.addColumn('number', 'sharpe');
data.addColumn('number', 'days');
var overall = rawData.overall;
data.addRow([overall.ret, overall.vol, overall.sharpe, overall.days]);
var formatter = new google.visualization.NumberFormat(
{fractionDigits: 4});
formatter.format(data, 0);
formatter.format(data, 1);
formatter.format(data, 2);
var overallDiv = document.getElementById('overall');
var overallTable = new google.visualization.Table(overallDiv);
overallTable.draw(data, {showRowNumber: false});
}
function drawTimeline() {
var tData = new google.visualization.DataTable();
tData.addColumn('date', 'Date');
tData.addColumn('number', 'Nav');
tData.addColumn('number', 'Market');
var dailyStats = rawData.daily;
for (i = 0; i < dailyStats.length; i++) {
var stat = dailyStats[i];
var row = [new Date(stat.time), stat.nav, stat.market];
tData.addRow(row);
}
var tTimelineDiv = document.getElementById('t_timeline');
tChart = new google.visualization.AnnotatedTimeLine(tTimelineDiv);
tChart.draw(tData, {
'displayRangeSelector': false,
'displayZoomButtons': false,
'scaleType': 'allmaximized',
'scaleColumns': [0,1],
});
var bData = new google.visualization.DataTable();
bData.addColumn('date', 'Date');
bData.addColumn('number', 'Position Count');
var dailyStats = rawData.daily;
for (i = 0; i < dailyStats.length; i++) {
var stat = dailyStats[i];
var row = [new Date(stat.time), stat.positionCount];
bData.addRow(row);
}
var bTimelineDiv = document.getElementById('b_timeline');
bChart = new google.visualization.AnnotatedTimeLine(bTimelineDiv);
bChart.draw(bData);
google.visualization.events.addListener(
bChart, 'rangechange', lineChartRangeChange);
}
function lineChartRangeChange() {
var newRange = bChart.getVisibleChartRange();
tChart.setVisibleChartRange(newRange.start, newRange.end);
}
</script>
</body>
</html>