
function appPost(method,args,callback, title){
    var _args = null; 
    if (typeof(args) == 'string'){
        _args = JSON.stringify(toArrayObject(args));
    } else {
        _args = JSON.stringify(args);
    }

    var _title = '正在获取...';
    if (typeof(title) != 'undefined'){
        _title = title;
    }

    var loadT = layer.msg(_title, { icon: 16, time: 0, shade: 0.3 });
    $.post('/plugins/run', {name:'cryptocurrency_trade', func:method, args:_args}, function(data) {
        layer.close(loadT);
        if (!data.status){
            layer.msg(data.msg,{icon:0,time:2000,shade: [0.3, '#000']});
            return;
        }

        if(typeof(callback) == 'function'){
            callback(data);
        }
    },'json'); 
}

function appPostN(method,args,callback, title){

    var _args = null; 
    if (typeof(args) == 'string'){
        _args = JSON.stringify(toArrayObject(args));
    } else {
        _args = JSON.stringify(args);
    }

    var _title = '正在获取...';
    if (typeof(title) != 'undefined'){
        _title = title;
    }
    $.post('/plugins/run', {name:'cryptocurrency_trade', func:method, args:_args}, function(data) {
        if(typeof(callback) == 'function'){
            callback(data);
        }
    },'json'); 
}

function appAsyncPost(method,args){
    var _args = null; 
    if (typeof(args) == 'string'){
        _args = JSON.stringify(toArrayObject(args));
    } else {
        _args = JSON.stringify(args);
    }

    var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 });
    return syncPost('/plugins/run', {name:'cryptocurrency_trade', func:method, args:_args});
}


function appPostCallbak(method, args,callback, script){
    var loadT = layer.msg('正在获取...', { icon: 16, time: 0, shade: 0.3 });

    var req_data = {};
    req_data['name'] = 'cryptocurrency_trade';
    req_data['func'] = method;

    if (typeof(script) != 'undefined'){
        req_data['script'] = script;
    }

 
    if (typeof(args) == 'string'){
        req_data['args'] = JSON.stringify(toArrayObject(args));
    } else {
        req_data['args'] = JSON.stringify(args);
    }

    $.post('/plugins/callback', req_data, function(data) {
        layer.close(loadT);
        if (!data.status){
            layer.msg(data.msg,{icon:0,time:2000,shade: [0.3, '#000']});
            return;
        }

        if(typeof(callback) == 'function'){
            callback(data);
        }
    },'json'); 
}


function appPostCallbakNoMsg(method, args,callback, script){

    var req_data = {};
    req_data['name'] = 'cryptocurrency_trade';
    req_data['func'] = method;

    if (typeof(script) != 'undefined'){
        req_data['script'] = script;
    } else {
        req_data['script'] = req_data['name'];
    }

 
    if (typeof(args) == 'string'){
        req_data['args'] = JSON.stringify(toArrayObject(args));
    } else {
        req_data['args'] = JSON.stringify(args);
    }

    $.post('/plugins/callback', req_data, function(data) {
        if (!data.status){
            layer.msg(data.msg,{icon:0,time:2000,shade: [0.3, '#000']});
            return;
        }

        if(typeof(callback) == 'function'){
            callback(data);
        }
    },'json'); 
}


function dbConf(){
	appPost('get_db_conf','',function(data){
        var rdata = $.parseJSON(data.data);
        // console.log(rdata);
        var db_host = '127.0.0.1';
        var db_port = '3306';
        var db_name = 'cryptocurrency_trade';
        var db_user = 'cryptocurrency_trade';
        var db_pass = 'cryptocurrency_trade';
        if(rdata['status']){
        	db_data = rdata['data'];
        	db_host = db_data['db_host'];
        	db_port = db_data['db_port'];
        	db_name = db_data['db_name'];
        	db_user = db_data['db_user'];
        	db_pass = db_data['db_pass'];
        }

        var mlist = '';
        mlist += '<p><span>数据库地址</span><input style="width: 250px;" class="bt-input-text mr5" name="db_host" value="'+db_host+'" type="text"></p>'
        mlist += '<p><span>数据库端口</span><input style="width: 250px;" class="bt-input-text mr5" name="db_port" value="'+db_port+'" type="text"></p>'
        mlist += '<p><span>数据库名称</span><input style="width: 250px;" class="bt-input-text mr5" name="db_name" value="'+db_name+'" type="text"></p>'
        mlist += '<p><span>用户名</span><input style="width: 250px;" class="bt-input-text mr5" name="db_user" value="'+db_user+'" type="text"></p>'
        mlist += '<p><span>密码</span><input style="width: 250px;" class="bt-input-text mr5" name="db_pass" value="'+db_pass+'" type="text"></p>'

        var option = '<style>.conf_p p{margin-bottom: 2px}</style>\
			<div class="conf_p" style="margin-bottom:0">\
                ' + mlist + '\
                <div style="margin-top:10px; padding-right:15px" class="text-right">\
                    <button class="btn btn-success btn-sm" onclick="submitDbConf()">保存</button>\
                </div>\
            </div>';
        $(".soft-man-con").html(option);
    });
}

function submitDbConf(){

	var pull_data = {};

	pull_data['db_host'] = $('input[name="db_host"]').val();
	pull_data['db_port'] = $('input[name="db_port"]').val();
	pull_data['db_name'] = $('input[name="db_name"]').val();
	pull_data['db_user'] = $('input[name="db_user"]').val();
	pull_data['db_pass'] = $('input[name="db_pass"]').val();

	appPost('set_db_conf',pull_data,function(data){
        var rdata = $.parseJSON(data.data);
        layer.msg(rdata['msg'],{icon:rdata['status']?1:2,time:2000,shade: [0.3, '#000']});
    });
}


function userConf(){
	appPost('get_user_conf','',function(data){
        var rdata = $.parseJSON(data.data);
        var app_key = 'app_key';
        var secret = 'secret';
        var password = 'password';
        var uid = 'uid';
        var exchange = 'okex';
        if(rdata['status']){
        	db_data = rdata['data'];
        	app_key = db_data['app_key'];
        	secret = db_data['secret'];
        	password = db_data['password'];
        	uid = db_data['uid'];
            exchange = db_data['exchange'];;
        }

        var mlist = '';
        mlist += '<p><span>交易所</span><input style="width: 250px;" class="bt-input-text mr5" name="exchange" value="'+exchange+'" type="text"><font>必填写[okex, binance]</font></p>'
        mlist += '<p><span>apiKey</span><input style="width: 250px;" class="bt-input-text mr5" name="app_key" value="'+app_key+'" type="text"><font>必填写</font></p>'
        mlist += '<p><span>secret</span><input style="width: 250px;" class="bt-input-text mr5" name="secret" value="'+secret+'" type="text"><font>必填写</font></p>'
        mlist += '<p><span>password</span><input style="width: 250px;" class="bt-input-text mr5" name="password" value="'+password+'" type="text"><font>根据情况填写</font></p>'
        mlist += '<p><span>uid</span><input style="width: 250px;" class="bt-input-text mr5" name="uid" value="'+uid+'" type="text"><font>根据情况填写</font></p>'

        var option = '<style>.conf_p p{margin-bottom: 2px}</style>\
			<div class="conf_p" style="margin-bottom:0">\
                ' + mlist + '\
                <div style="margin-top:10px; padding-right:15px" class="text-right">\
                    <button class="btn btn-success btn-sm" onclick="submitUserConf()">保存</button>\
                </div>\
            </div>';
        $(".soft-man-con").html(option);
    });
}


function submitUserConf(){
	var pull_data = {};

	pull_data['app_key'] = $('input[name="app_key"]').val();
	pull_data['secret'] = $('input[name="secret"]').val();
	pull_data['password'] = $('input[name="password"]').val();
	pull_data['uid'] = $('input[name="uid"]').val();
    pull_data['exchange'] = $('input[name="exchange"]').val();

	appPost('set_user_conf',pull_data,function(data){
        var rdata = $.parseJSON(data.data);
        layer.msg(rdata['msg'],{icon:rdata['status']?1:2,time:2000,shade: [0.3, '#000']});
    });
}

function syncDataList(){
    appPost('sync_data_list', {}, function(data){
        var rdata = $.parseJSON(data.data);


        var list = '';
        if (rdata['status']){
            var dlist = rdata['data']['list'];
            for(i in dlist){

                list += '<tr>';
                list += '<td>' + dlist[i] +'</td>';
                list += '<td style="text-align:right">' +
                            '<a href="javascript:;" class="btlink" onclick="syncDataDelete(\''+dlist[i]+'\')" title="删除">删除</a>' +
                        '</td>';
                list += '</tr>';
            } 
        }
        

        if( list == '' ){
            list = "<tr><td colspan='2'>当前没有数据</td></tr>";
        }

        var task_status = rdata['data']['task_status'];
        var task_status_check = '';
        if (task_status){
            task_status_check = 'checked';
        }

        var con = '<div class="safe bgw">\
            <div>\
                <button onclick="syncDataAdd()" title="添加币种" class="btn btn-success btn-sm" type="button" style="margin-right: 5px;">添加币种</button>\
                <div class="ss-text pull-left mr50">\
                    <em>是否启动</em>\
                    <div class="ssh-item">\
                        <input class="btswitch btswitch-ios" id="add_task" type="checkbox" '+task_status_check+'>\
                        <label class="btswitch-btn" for="add_task" onclick="syncDataAddTask()"></label>\
                    </div>\
                </div>\
            </div>\
            <div class="divtable mtb10">\
                <div class="tablescroll">\
                    <table id="DataBody" class="table table-hover" width="100%" cellspacing="0" cellpadding="0" border="0" style="border: 0 none;">\
                        <thead>\
                            <th>名称</th>\
                            <th style="text-align:right;">操作</th></tr>\
                        </thead>\
                        <tbody>'+ list +'</tbody>\
                    </table>\
                </div>\
            </div>\
        </div>';
        
        con += '<div class="code">\
            <span>详细如下：</span>\
            <span>*：添加同步的币种,都小写,以USDT为本币同步数据。</span>\
            <span>*：需要提前安装supervisor插件。</span>\
        </div>'

        $(".soft-man-con").html(con);
        $('#databasePage').html(rdata.page);
    });
}

function syncDataAddTask(){
    var at_check = $('#add_task').prop('checked');
    appPost("sync_data_add_task", {'check':at_check?'0':'1'}, function(data){
        rdata = $.parseJSON(data.data);

        showMsg(rdata.msg,function(){
            if (rdata.status){
                syncDataList();
            }
        },{icon:rdata.status?1:2});
    });
}

function syncDataDelete(name){
    appPost("sync_data_delete", {"token":name}, function(data){
        rdata = $.parseJSON(data.data);

        showMsg(rdata.msg,function(){
            if (rdata.status){
                syncDataList();
            }
        },{icon:rdata.status?1:2});
    });
}

function syncDataAdd() {
    layer.open({
        type: 1,
        area: '500px',
        title: '添加同步数据',
        closeBtn: 2,
        shift: 0,
        shadeClose: false,
        btn: ['确定', '取消'],
        content: "<div class='bt_conter bt-form pd15' style='height:auto;width:100%;'>\
                    <div class='line'>\
                        <span class='tname'>名称</span>\
                        <div class='info-r c4'>\
                            <input id='name' class='bt-input-text' type='text' name='name' placeholder='请输入名称' style='width:270px' />\
                        </div>\
                    </div>\
                    <ul class='help-info-text c7' style='padding-left: 29px;margin-top:5px;'>\
                        <li style='color:#F00'>注意：币种名称用小写！</li>\
                    </ul>\
                   </div>",
        yes: function(index, layero){

            var token = $('input[name="name"]').val();
            appPost("sync_data_add", {"token":token}, function(data){
                rdata = $.parseJSON(data.data);
                showMsg(rdata.msg,function(){
                    if (rdata.status){
                        layer.close(index);
                        syncDataList();
                    }
                },{icon:rdata.status?1:2});
            })
            return;
        }
    });
}


function onlineEditStrategyFile(k, f, tag) {
    if(k != 0) {
        var l = $("#PathPlace input").val();
        var h = $("#textBody").val();
        var a = $("select[name=encoding]").val();
        var loadT = layer.msg("正在保存中...", {icon: 16,time: 0});
        appPostCallbakNoMsg('save_body',{'data':h,'path':f,'encoding':a,"tag":tag}, function(data){
            var rdata = data.data;
            showMsg(rdata.msg, function(){
                if (rdata.status){
                    layer.close(loadT);
                }
            },{icon: rdata.status ? 1 : 2});
        });
        return
    }
    var e = layer.msg("正在读取文件,请稍候...", {icon: 16,time: 0});
    var g = f.split(".");
    var b = g[g.length - 1];
    var d;
    switch(b) {
        case "html":
            var j = {
                name: "htmlmixed",
                scriptTypes: [{
                    matches: /\/x-handlebars-template|\/x-mustache/i,
                    mode: null
                }, {
                    matches: /(text|application)\/(x-)?vb(a|script)/i,
                    mode: "vbscript"
                }]
            };
            d = j;
            break;
        case "htm":
            var j = {
                name: "htmlmixed",
                scriptTypes: [{
                    matches: /\/x-handlebars-template|\/x-mustache/i,
                    mode: null
                }, {
                    matches: /(text|application)\/(x-)?vb(a|script)/i,
                    mode: "vbscript"
                }]
            };
            d = j;
            break;
        case "js":
            d = "text/javascript";
            break;
        case "json":
            d = "application/ld+json";
            break;
        case "css":
            d = "text/css";
            break;
        case "php":
            d = "application/x-httpd-php";
            break;
        case "tpl":
            d = "application/x-httpd-php";
            break;
        case "xml":
            d = "application/xml";
            break;
        case "sql":
            d = "text/x-sql";
            break;
        case "conf":
            d = "text/x-nginx-conf";
            break;
        default:
            var j = {
                name: "htmlmixed",
                scriptTypes: [{
                    matches: /\/x-handlebars-template|\/x-mustache/i,
                    mode: null
                }, {
                    matches: /(text|application)\/(x-)?vb(a|script)/i,
                    mode: "vbscript"
                }]
            };
            d = j
    }
    $.post("/files/get_body", "path=" + encodeURIComponent(f), function(s) {
        if(s.status === false){
            layer.msg(s.msg,{icon:5});
            return;
        }
        layer.close(e);
        var u = ["utf-8", "GBK", "GB2312", "BIG5"];
        var n = "";
        var m = "";
        var o = "";
        for(var p = 0; p < u.length; p++) {
            m = s.data.encoding == u[p] ? "selected" : "";
            n += '<option value="' + u[p] + '" ' + m + ">" + u[p] + "</option>";
        }
        var code_mirror = null; 
        var r = layer.open({
            type: 1,
            shift: 5,
            closeBtn: 1,
            area: ["90%", "90%"],
            title: "在线编辑[" + f + "]",
            btn:['保存','关闭'],
            content: '<form class="bt-form pd20">\
                <div class="line">\
                    <p style="color:red;margin-bottom:10px">提示：Ctrl+F 搜索关键字，Ctrl+G 查找下一个，Ctrl+S 保存，Ctrl+Shift+R 查找替换!\
                        <select class="bt-input-text" name="encoding" style="width: 74px;position: absolute;top: 31px;right: 19px;height: 22px;z-index: 9999;border-radius: 0;">' + n + '</select>\
                    </p>\
                    <textarea class="mCustomScrollbar bt-input-text" id="textBody" style="width:100%;margin:0 auto;line-height: 1.8;position: relative;top: 10px;" value="" />\
                </div>\
            </form>',
            success:function(){
                $("#textBody").text(s.data.data);
                var q = $(window).height() * 0.9;
                $("#textBody").height(q - 160);
                code_mirror = CodeMirror.fromTextArea(document.getElementById("textBody"), {
                    extraKeys: {
                        "Ctrl-F": "findPersistent",
                        "Ctrl-H": "replaceAll",
                        "Ctrl-S": function() {
                            $("#textBody").text(code_mirror.getValue());
                            onlineEditStrategyFile(2, f,tag);
                        },
                        "Cmd-S":function() {
                            $("#textBody").text(code_mirror.getValue());
                            onlineEditStrategyFile(2, f,tag);
                        },
                    },
                    mode: d,
                    lineNumbers: true,
                    matchBrackets: true,
                    matchtags: true,
                    autoMatchParens: true
                });
                code_mirror.focus();
                code_mirror.setSize("auto", q - 150);
                $(window).resize(function(){
                    var q = $(window).height() * 0.9;
                    code_mirror.setSize("auto", q - 150);
                });   
            },
            yes:function(){
                $("#textBody").text(code_mirror.getValue());
                onlineEditStrategyFile(1, f, tag);
            }
        });
//////////////////
    },'json');
}


// ------------------------------------------------------------------------------
// ------------------------------------------------------------------------------
// 大屏页功能 --------------------------------------------------------------------
// ------------------------------------------------------------------------------
// ------------------------------------------------------------------------------


function changeDivH(){
    var l = $(window).height();
    $('.content-screen').css('height',l-80);
    $('.s-right').css('height',l-80-10);
    $('.s-left').css('height',l-80-10);
}


function dataSourceLog(){
    appPostCallbakNoMsg('get_datasource_logs',{}, function(rdata){
        $('#datasource_log').html(rdata.data);
    });
}

function dataStrategyLog(){
    appPostCallbakNoMsg('get_strategy_logs',{}, function(rdata){
        $('#strategy_log').html(rdata.data);
    });
}


// $('#strategy_list').find('span[data-id="01"]')
function setStrategyStatus(id,status){
    appPostCallbakNoMsg('set_strategy_status',{"id":id,"status":status}, function(data){
        var rdata = data.data;
        showMsg(rdata.msg,function(){
            if (rdata.status){
                if (status == 'start'){
                    $('#strategy_list').find('tr[data-id="'+id+'"] td span').removeClass('glyphicon-pause').addClass('glyphicon-play').css('color','#20a53a');
                } else{
                    $('#strategy_list').find('tr[data-id="'+id+'"] td span').removeClass('glyphicon-play').addClass('glyphicon-pause').css('color','red');
                }
            }
        },{icon:rdata.status?1:2},2000);
    });
}


function setStrategyRestart(id){
    appPostCallbakNoMsg('set_strategy_restart',{"id":id}, function(data){
        console.log(data);
        var rdata = data.data;
        showMsg(rdata.msg,function(){
            if (rdata.status){
            }
        },{icon:rdata.status?1:2},2000);
    });
}

function setStrategyEdit(id){
    appPostCallbakNoMsg('get_strategy_path',{"id":id}, function(data){
        onlineEditStrategyFile(0,data.data.msg,id);
    });
}


function getStrategyList(p=1){
    appPostCallbakNoMsg('get_strategy_list',{'page':p}, function(rdata){
        // console.log(rdata);

        ldata = rdata.data.data;
        var tBody = '';

        for (var i = 0; i < ldata.length; i++) {
            tBody += '<tr data-id="'+ldata[i]['id']+'">'
            tBody += '<td>'+ldata[i]['id']+'</td>';
            tBody += '<td>'+ldata[i]['name']+'</td>';

            if (ldata[i]['status'] == 'start'){
                tBody += '<td><span style="color:#20a53a;cursor: pointer;"  class="strategy_status glyphicon glyphicon-play"></span></td>';
            } else{
                tBody += '<td><span style="color:red;cursor: pointer;" class="strategy_status glyphicon glyphicon-pause"></span></td>';
            }
            
            tBody += "<td style='text-align: right;'><a class='btlink restart'>重启</a> | <a class='btlink edit'>编辑</a></td>";
            tBody +='<tr>';
        }

        // console.log(tBody);
        $('#strategy_list').html(tBody);
        $('#strategy_list_page').html(rdata.data.list);


        $('#strategy_list .strategy_status').click(function(){
            var id = $(this).parent().parent().data('id');
            var status = 'stop';
            if ($(this).hasClass('glyphicon-pause')){
                status = 'start';
            }
            setStrategyStatus(id,status);
        });

        $('#strategy_list .restart').click(function(){
            var id = $(this).parent().parent().data('id');
            setStrategyRestart(id);
        });

        $('#strategy_list .edit').click(function(){
            var id = $(this).parent().parent().data('id');
            setStrategyEdit(id);
        });
    });
}


function calcKLineChats(){

    var chartDom = document.getElementById('k_echarts');
    var myChart = echarts.init(chartDom);
    var option;

    const upColor = '#ec0000';
    const upBorderColor = '#8A0000';
    const downColor = '#00da3c';
    const downBorderColor = '#008F28';
    // Each item: open，close，lowest，highest
    const data0 = splitData([
      ['2013/1/24', 2320.26, 2320.26, 2287.3, 2362.94],
      ['2013/1/25', 2300, 2291.3, 2288.26, 2308.38],
      ['2013/1/28', 2295.35, 2346.5, 2295.35, 2346.92],
      ['2013/1/29', 2347.22, 2358.98, 2337.35, 2363.8],
      ['2013/1/30', 2360.75, 2382.48, 2347.89, 2383.76],
      ['2013/1/31', 2383.43, 2385.42, 2371.23, 2391.82],
      ['2013/2/1', 2377.41, 2419.02, 2369.57, 2421.15],
      ['2013/2/4', 2425.92, 2428.15, 2417.58, 2440.38],
      ['2013/2/5', 2411, 2433.13, 2403.3, 2437.42],
      ['2013/2/6', 2432.68, 2434.48, 2427.7, 2441.73],
      ['2013/2/7', 2430.69, 2418.53, 2394.22, 2433.89],
      ['2013/2/8', 2416.62, 2432.4, 2414.4, 2443.03],
      ['2013/2/18', 2441.91, 2421.56, 2415.43, 2444.8],
      ['2013/2/19', 2420.26, 2382.91, 2373.53, 2427.07],
      ['2013/2/20', 2383.49, 2397.18, 2370.61, 2397.94],
      ['2013/2/21', 2378.82, 2325.95, 2309.17, 2378.82],
      ['2013/2/22', 2322.94, 2314.16, 2308.76, 2330.88],
      ['2013/2/25', 2320.62, 2325.82, 2315.01, 2338.78],
      ['2013/2/26', 2313.74, 2293.34, 2289.89, 2340.71],
      ['2013/2/27', 2297.77, 2313.22, 2292.03, 2324.63],
      ['2013/2/28', 2322.32, 2365.59, 2308.92, 2366.16],
      ['2013/3/1', 2364.54, 2359.51, 2330.86, 2369.65],
      ['2013/3/4', 2332.08, 2273.4, 2259.25, 2333.54],
      ['2013/3/5', 2274.81, 2326.31, 2270.1, 2328.14],
      ['2013/3/6', 2333.61, 2347.18, 2321.6, 2351.44],
      ['2013/3/7', 2340.44, 2324.29, 2304.27, 2352.02],
      ['2013/3/8', 2326.42, 2318.61, 2314.59, 2333.67],
      ['2013/3/11', 2314.68, 2310.59, 2296.58, 2320.96],
      ['2013/3/12', 2309.16, 2286.6, 2264.83, 2333.29],
      ['2013/3/13', 2282.17, 2263.97, 2253.25, 2286.33],
      ['2013/3/14', 2255.77, 2270.28, 2253.31, 2276.22],
      ['2013/3/15', 2269.31, 2278.4, 2250, 2312.08],
      ['2013/3/18', 2267.29, 2240.02, 2239.21, 2276.05],
      ['2013/3/19', 2244.26, 2257.43, 2232.02, 2261.31],
      ['2013/3/20', 2257.74, 2317.37, 2257.42, 2317.86],
      ['2013/3/21', 2318.21, 2324.24, 2311.6, 2330.81],
      ['2013/3/22', 2321.4, 2328.28, 2314.97, 2332],
      ['2013/3/25', 2334.74, 2326.72, 2319.91, 2344.89],
      ['2013/3/26', 2318.58, 2297.67, 2281.12, 2319.99],
      ['2013/3/27', 2299.38, 2301.26, 2289, 2323.48],
      ['2013/3/28', 2273.55, 2236.3, 2232.91, 2273.55],
      ['2013/3/29', 2238.49, 2236.62, 2228.81, 2246.87],
      ['2013/4/1', 2229.46, 2234.4, 2227.31, 2243.95],
      ['2013/4/2', 2234.9, 2227.74, 2220.44, 2253.42],
      ['2013/4/3', 2232.69, 2225.29, 2217.25, 2241.34],
      ['2013/4/8', 2196.24, 2211.59, 2180.67, 2212.59],
      ['2013/4/9', 2215.47, 2225.77, 2215.47, 2234.73],
      ['2013/4/10', 2224.93, 2226.13, 2212.56, 2233.04],
      ['2013/4/11', 2236.98, 2219.55, 2217.26, 2242.48],
      ['2013/4/12', 2218.09, 2206.78, 2204.44, 2226.26],
      ['2013/4/15', 2199.91, 2181.94, 2177.39, 2204.99],
      ['2013/4/16', 2169.63, 2194.85, 2165.78, 2196.43],
      ['2013/4/17', 2195.03, 2193.8, 2178.47, 2197.51],
      ['2013/4/18', 2181.82, 2197.6, 2175.44, 2206.03],
      ['2013/4/19', 2201.12, 2244.64, 2200.58, 2250.11],
      ['2013/4/22', 2236.4, 2242.17, 2232.26, 2245.12],
      ['2013/4/23', 2242.62, 2184.54, 2182.81, 2242.62],
      ['2013/4/24', 2187.35, 2218.32, 2184.11, 2226.12],
      ['2013/4/25', 2213.19, 2199.31, 2191.85, 2224.63],
      ['2013/4/26', 2203.89, 2177.91, 2173.86, 2210.58],
      ['2013/5/2', 2170.78, 2174.12, 2161.14, 2179.65],
      ['2013/5/3', 2179.05, 2205.5, 2179.05, 2222.81],
      ['2013/5/6', 2212.5, 2231.17, 2212.5, 2236.07],
      ['2013/5/7', 2227.86, 2235.57, 2219.44, 2240.26],
      ['2013/5/8', 2242.39, 2246.3, 2235.42, 2255.21],
      ['2013/5/9', 2246.96, 2232.97, 2221.38, 2247.86],
      ['2013/5/10', 2228.82, 2246.83, 2225.81, 2247.67],
      ['2013/5/13', 2247.68, 2241.92, 2231.36, 2250.85],
      ['2013/5/14', 2238.9, 2217.01, 2205.87, 2239.93],
      ['2013/5/15', 2217.09, 2224.8, 2213.58, 2225.19],
      ['2013/5/16', 2221.34, 2251.81, 2210.77, 2252.87],
      ['2013/5/17', 2249.81, 2282.87, 2248.41, 2288.09],
      ['2013/5/20', 2286.33, 2299.99, 2281.9, 2309.39],
      ['2013/5/21', 2297.11, 2305.11, 2290.12, 2305.3],
      ['2013/5/22', 2303.75, 2302.4, 2292.43, 2314.18],
      ['2013/5/23', 2293.81, 2275.67, 2274.1, 2304.95],
      ['2013/5/24', 2281.45, 2288.53, 2270.25, 2292.59],
      ['2013/5/27', 2286.66, 2293.08, 2283.94, 2301.7],
      ['2013/5/28', 2293.4, 2321.32, 2281.47, 2322.1],
      ['2013/5/29', 2323.54, 2324.02, 2321.17, 2334.33],
      ['2013/5/30', 2316.25, 2317.75, 2310.49, 2325.72],
      ['2013/5/31', 2320.74, 2300.59, 2299.37, 2325.53],
      ['2013/6/3', 2300.21, 2299.25, 2294.11, 2313.43],
      ['2013/6/4', 2297.1, 2272.42, 2264.76, 2297.1],
      ['2013/6/5', 2270.71, 2270.93, 2260.87, 2276.86],
      ['2013/6/6', 2264.43, 2242.11, 2240.07, 2266.69],
      ['2013/6/7', 2242.26, 2210.9, 2205.07, 2250.63],
      ['2013/6/13', 2190.1, 2148.35, 2126.22, 2190.1]
    ]);
    function splitData(rawData) {
      const categoryData = [];
      const values = [];
      for (var i = 0; i < rawData.length; i++) {
        categoryData.push(rawData[i].splice(0, 1)[0]);
        values.push(rawData[i]);
      }
      return {
        categoryData: categoryData,
        values: values
      };
    }
    function calculateMA(dayCount) {
      var result = [];
      for (var i = 0, len = data0.values.length; i < len; i++) {
        if (i < dayCount) {
          result.push('-');
          continue;
        }
        var sum = 0;
        for (var j = 0; j < dayCount; j++) {
          sum += +data0.values[i - j][1];
        }
        result.push(sum / dayCount);
      }
      return result;
    }
    option = {
      title: {
        text: '上证指数',
        left: 0
      },
      tooltip: {
        trigger: 'axis',
        axisPointer: {
          type: 'cross'
        }
      },
      legend: {
        data: ['日K', 'MA5', 'MA10', 'MA20', 'MA30']
      },
      grid: {
        left: '10%',
        right: '10%',
        bottom: '15%'
      },
      xAxis: {
        type: 'category',
        data: data0.categoryData,
        boundaryGap: false,
        axisLine: { onZero: false },
        splitLine: { show: false },
        min: 'dataMin',
        max: 'dataMax'
      },
      yAxis: {
        scale: true,
        splitArea: {
          show: true
        }
      },
      dataZoom: [
        {
          type: 'inside',
          start: 50,
          end: 100
        },
        {
          show: true,
          type: 'slider',
          top: '90%',
          start: 50,
          end: 100
        }
      ],
      series: [
        {
          name: '日K',
          type: 'candlestick',
          data: data0.values,
          itemStyle: {
            color: upColor,
            color0: downColor,
            borderColor: upBorderColor,
            borderColor0: downBorderColor
          },
          markPoint: {
            label: {
              formatter: function (param) {
                return param != null ? Math.round(param.value) + '' : '';
              }
            },
            data: [
              {
                name: 'Mark',
                coord: ['2013/5/31', 2300],
                value: 2300,
                itemStyle: {
                  color: 'rgb(41,60,85)'
                }
              },
              {
                name: 'highest value',
                type: 'max',
                valueDim: 'highest'
              },
              {
                name: 'lowest value',
                type: 'min',
                valueDim: 'lowest'
              },
              {
                name: 'average value on close',
                type: 'average',
                valueDim: 'close'
              }
            ],
            tooltip: {
              formatter: function (param) {
                return param.name + '<br>' + (param.data.coord || '');
              }
            }
          },
          markLine: {
            symbol: ['none', 'none'],
            data: [
              [
                {
                  name: 'from lowest to highest',
                  type: 'min',
                  valueDim: 'lowest',
                  symbol: 'circle',
                  symbolSize: 10,
                  label: {
                    show: false
                  },
                  emphasis: {
                    label: {
                      show: false
                    }
                  }
                },
                {
                  type: 'max',
                  valueDim: 'highest',
                  symbol: 'circle',
                  symbolSize: 10,
                  label: {
                    show: false
                  },
                  emphasis: {
                    label: {
                      show: false
                    }
                  }
                }
              ],
              {
                name: 'min line on close',
                type: 'min',
                valueDim: 'close'
              },
              {
                name: 'max line on close',
                type: 'max',
                valueDim: 'close'
              }
            ]
          }
        },
        {
          name: 'MA5',
          type: 'line',
          data: calculateMA(5),
          smooth: true,
          lineStyle: {
            opacity: 0.5
          }
        },
        {
          name: 'MA10',
          type: 'line',
          data: calculateMA(10),
          smooth: true,
          lineStyle: {
            opacity: 0.5
          }
        },
        {
          name: 'MA20',
          type: 'line',
          data: calculateMA(20),
          smooth: true,
          lineStyle: {
            opacity: 0.5
          }
        },
        {
          name: 'MA30',
          type: 'line',
          data: calculateMA(30),
          smooth: true,
          lineStyle: {
            opacity: 0.5
          }
        }
      ]
    };

    option && myChart.setOption(option);
}

$(document).ready(function(){
   var tag = $.getUrlParam('tag');
    if(tag == 'cryptocurrency_trade'){
        changeDivH();

        // 获取数据源更新日志
        dataSourceLog();
        setInterval(function(){
            dataSourceLog();
        },3000);

        // 获取策略更新日志
        dataStrategyLog();
        setInterval(function(){
            dataStrategyLog();
        },5000);

        getStrategyList(1);

        calcKLineChats();
    }
});

$(window).resize(function(){
    changeDivH();
});


