<!DOCTYPE html>
<meta charset="utf-8">
<style>

    body {
        font: 10px sans-serif;
    }

    text {
        fill: #000;
    }

    button {
        position: absolute;
        right: 20px;
        top: 440px;
        display: none;
    }

    path.candle {
        stroke: #000000;
    }

    path.candle.body {
        stroke-width: 0;
    }

    path.candle.up {
        fill: #dc3526;
        stroke: #dc3526;
    }

    path.candle.down {
        fill: #007d30;
        stroke: #007d30;
    }

</style>
<body>
    <h3 id="chart-title"></h3>
    <div>
        <input type="radio" name="range" value="5d">5日<br>
        <input type="radio" name="range" value="30d">30日<br>
        <input type="radio" name="range" value="ytd">今年迄今<br>
      </div>

<script src="http://d3js.org/d3.v4.min.js"></script>
<script src="http://techanjs.org/techan.min.js"></script>
<script>

    var margin = {top: 20, right: 20, bottom: 30, left: 50},
            width = 960 - margin.left - margin.right,
            height = 500 - margin.top - margin.bottom;

    var parseDate = d3.timeParse("%d-%b-%y");

    var x = techan.scale.financetime()
            .range([0, width]);

    var y = d3.scaleLinear()
            .range([height, 0]);

    var candlestick = techan.plot.candlestick()
            .xScale(x)
            .yScale(y);

    var xAxis = d3.axisBottom()
            .scale(x)
            .tickFormat(d3.timeFormat('%y-%m-%d'));

    var yAxis = d3.axisLeft()
            .scale(y);

    var svg = d3.select("body").append("svg")
            .attr("width", width + margin.left + margin.right)
            .attr("height", height + margin.top + margin.bottom)
            .append("g")
            .attr("transform", "translate(" + margin.left + "," + margin.top + ")");


    var data_by_date = [];
    


d3.json(`https://gist.githubusercontent.com/Yoxem/e3e1986777af209a00f8a318056431ed/raw/b646e322a87e2bc2c061ecf32902fc543bc41aed/0050.json`, function(d) {
    console.log(d);

    var data_by_date = [];
    var parseDate = d3.timeParse("%Y-%m-%d");


    for (var i=0;i<d["close"].length;i++){
        data_by_date.push({
                date: parseDate(d["date"][i]),
                open: +d["open"][i],
                high: +d["high"][i],
                low: +d["low"][i],
                close: +d["close"][i],
                volume: +d["volume"][i],
            });};

            console.log('dataGet', data_by_date);

            var accessor = candlestick.accessor();
            data_by_date = data_by_date.sort(function(a, b) { return d3.ascending(accessor.d(a), accessor.d(b)); });

console.log("===" + JSON.stringify(data_by_date)); 

svg.append("g")
        .attr("class", "candlestick");



svg.append("g")
        .attr("class", "x axis")
        .attr("transform", "translate(0," + height + ")")
        .append("text")
        .text("日期")
        .attr("transform", "translate(" + width + ", 0)");



svg.append("g")
        .attr("class", "y axis")
        .append("text")
        .attr("transform", "rotate(-90)")
        .attr("y", 6)
        .attr("dy", ".71em")
        .style("text-anchor", "end")
        .text("股價(NT$)");
        
// Data to display initially
d3.select("#chart-title").text("今年迄今");
draw(data_by_date);
// Only want this button to be active if the data has loaded
// d3.select("input").on("click", function() { draw(data_by_date); }).style("display", "inline");

d3.selectAll('input[name="range"]').on("change", function(){
    if (this.value == "ytd"){
        draw(data_by_date);
        d3.select("#chart-title").text("今年迄今");
    }
    else if(this.value == "30d"){
        draw(data_by_date.slice(data_by_date.length-30, data_by_date.length-1));
        d3.select("#chart-title").text("30日");        
    }
    else{
        draw(data_by_date.slice(data_by_date.length-5, data_by_date.length-1));
        d3.select("#chart-title").text("5日");        
    };
});


} );  // 串接網址



    function draw(data) {
        x.domain(data.map(candlestick.accessor().d));
        y.domain(techan.scale.plot.ohlc(data, candlestick.accessor()).domain());

        svg.selectAll("g.candlestick").datum(data).call(candlestick);
        svg.selectAll("g.x.axis").call(xAxis);
        svg.selectAll("g.y.axis").call(yAxis);
    }

</script>