$(function () { var chart = AmCharts.makeChart("market-depth-chart", { "type": "serial", "theme": "black", "dataLoader": { "url": "https://poloniex.com/public?command=returnOrderBook¤cyPair=BTC_ETH&depth=50", "format": "json", "reload": 30, "postProcess": function (data) { // Function to process (sort and calculate cummulative volume) function processData(list, type, desc) { // Convert to data points for (var i = 0; i < list.length; i++) { list[i] = { value: Number(list[i][0]), volume: Number(list[i][1]), } } // Sort list just in case list.sort(function (a, b) { if (a.value > b.value) { return 1; } else if (a.value < b.value) { return -1; } else { return 0; } }); // Calculate cummulative volume if (desc) { for (var i = list.length - 1; i >= 0; i--) { if (i < (list.length - 1)) { list[i].totalvolume = list[i + 1].totalvolume + list[i].volume; } else { list[i].totalvolume = list[i].volume; } var dp = {}; dp["value"] = list[i].value; dp[type + "volume"] = list[i].volume; dp[type + "totalvolume"] = list[i].totalvolume; res.unshift(dp); } } else { for (var i = 0; i < list.length; i++) { if (i > 0) { list[i].totalvolume = list[i - 1].totalvolume + list[i].volume; } else { list[i].totalvolume = list[i].volume; } var dp = {}; dp["value"] = list[i].value; dp[type + "volume"] = list[i].volume; dp[type + "totalvolume"] = list[i].totalvolume; res.push(dp); } } } // Init var res = []; processData(data.bids, "bids", true); processData(data.asks, "asks", false); //console.log(res); return res; } }, "graphs": [{ "id": "bids", "fillAlphas": 0.1, "lineAlpha": 1, "lineThickness": 2, "lineColor": "#0f0", "type": "step", "valueField": "bidstotalvolume", "balloonFunction": balloon }, { "id": "asks", "fillAlphas": 0.1, "lineAlpha": 1, "lineThickness": 2, "lineColor": "#f00", "type": "step", "valueField": "askstotalvolume", "balloonFunction": balloon }, { "lineAlpha": 0, "fillAlphas": 0.2, "lineColor": "#000", "type": "column", "clustered": false, "valueField": "bidsvolume", "showBalloon": false }, { "lineAlpha": 0, "fillAlphas": 0.2, "lineColor": "#000", "type": "column", "clustered": false, "valueField": "asksvolume", "showBalloon": false }], "categoryField": "value", "chartCursor": {}, "balloon": { "textAlign": "left" }, "valueAxes": [{ //"title": "Volume" }], "categoryAxis": { "title": "Price (BTC/ETH)", "minHorizontalGap": 100, "startOnAxis": true, "showFirstLabel": false, "showLastLabel": false }, "export": { "enabled": true } }); function balloon(item, graph) { var txt; if (graph.id == "asks") { txt = "Ask: " + formatNumber(item.dataContext.value, graph.chart, 4) + "
" + "Total volume: " + formatNumber(item.dataContext.askstotalvolume, graph.chart, 4) + "
" + "Volume: " + formatNumber(item.dataContext.asksvolume, graph.chart, 4) + ""; } else { txt = "Bid: " + formatNumber(item.dataContext.value, graph.chart, 4) + "
" + "Total volume: " + formatNumber(item.dataContext.bidstotalvolume, graph.chart, 4) + "
" + "Volume: " + formatNumber(item.dataContext.bidsvolume, graph.chart, 4) + ""; } return txt; } function formatNumber(val, chart, precision) { return AmCharts.formatNumber( val, { precision: precision ? precision : chart.precision, decimalSeparator: chart.decimalSeparator, thousandsSeparator: chart.thousandsSeparator } ); } });