对冲2.7收益率统计系统 支持多组账号统计

Author: Zero, Date: 2016-07-18 10:42:28
Tags: Tool

对冲2.7收益率统计系统 支持多组账号统计, 添加偶数长度的交易所即可开始统计, 每两个为一组进行添加 币价会取第一个交易所的买一做为参考值


//

function main() {
    if (exchanges.length == 0 || exchanges.length % 2 !== 0) {
        throw "交易所参数必须是2的整数";
    }
    var cfg = {
        __isStock: true,
        tooltip: {
            xDateFormat: '%Y-%m-%d %H:%M:%S, %A'
        },
        title: {
            text: '多平台收益率统计'
        },
        subtitle: {
            text: '正在统计...'
        },
        xAxis: {
            type: 'datetime'
        },
        legend: {
            enabled: true,
        },
        rangeSelector: {
            buttons: [{
                type: 'hour',
                count: 1,
                text: '1h'
            }, {
                type: 'hour',
                count: 3,
                text: '3h'
            }, {
                type: 'hour',
                count: 8,
                text: '8h'
            }, {
                type: 'all',
                text: 'All'
            }],
            selected: 0,
            inputEnabled: false
        },
        series: []
    };
    var i = 0;
    for (i = 0; i < exchanges.length; i += 2) {
        cfg.series.push({
            name: exchanges[i].GetLabel() + '/' + exchanges[i + 1].GetLabel(),
            data: [],
            tooltip: {
                valueDecimals: 4
            }
        });
    }
    var chart = Chart(cfg);
    var counter = 0;
    var getAccounts = function() {
        var accounts = [];
        for (var i = 0; i < exchanges.length; i++) {
            accounts.push(_C(exchanges[i].GetAccount));
        }
        return accounts;
    };
    var initAccounts = getAccounts();
    if (InitMode == 1) {
        Log("初始总资金手动指定为, 钱: ", InitBalance, "币:", InitStocks);
    } else {
        InitBalance = 0;
        InitStocks = 0;
        for (var i = 0; i < initAccounts.length; i++) {
            InitBalance += initAccounts[i].Balance + initAccounts[i].FrozenBalance;
            InitStocks += initAccounts[i].Stocks + initAccounts[i].FrozenStocks;
        }
        Log("初始总资金自动指定为, 钱: ", InitBalance, "币:", InitStocks);
    }
    while (true) {
        if (counter > 0) {
            Sleep(Interval * 1000);
        }
        counter++;
        var tbl = {
            type: 'table',
            title: '账户信息',
            cols: ['交易所', '当前组收益', '初始钱', '初始币', '当前钱', '当前币'],
            rows: []
        };
        var ticker = _C(exchange.GetTicker);
        var accounts = getAccounts();
        var ts = new Date().getTime();
        var allBalance = 0;
        var allStocks = 0;
        for (i = 0; i < accounts.length; i += 2) {
            var profit = (accounts[i].Balance + accounts[i].FrozenBalance + accounts[i + 1].Balance + accounts[i + 1].FrozenBalance) - (initAccounts[i].Balance + initAccounts[i].FrozenBalance + initAccounts[i + 1].Balance + initAccounts[i + 1].FrozenBalance) + (((accounts[i].Stocks + accounts[i].FrozenStocks + accounts[i + 1].Stocks + accounts[i + 1].FrozenStocks) - (initAccounts[i].Stocks + initAccounts[i].FrozenStocks + initAccounts[i + 1].Stocks + initAccounts[i + 1].FrozenStocks)) * ticker.Buy);
            chart.add(i / 2, [ts, _N(profit)]);
            for (var j = i; j < (i+2); j++) {
                tbl.rows.push([exchanges[j].GetLabel(), j % 2 == 0 ? _N(profit, 4) : '--', initAccounts[j].Balance + (initAccounts[j].FrozenBalance > 0 ? ' ( 冻结: ' + initAccounts[j].FrozenBalance + ' )' : ''), initAccounts[j].Stocks+ (initAccounts[j].FrozenStocks > 0 ? ' ( 冻结: ' + initAccounts[j].FrozenStocks + ' )' : ''), accounts[j].Balance+ (accounts[j].FrozenBalance > 0 ? ' ( 冻结: ' + accounts[j].FrozenBalance + ' )' : ''), accounts[j].Stocks+ (accounts[j].FrozenStocks > 0 ? ' ( 冻结: ' + accounts[j].FrozenStocks + ' )' : '')]);
                allBalance += accounts[j].Balance + accounts[j].FrozenBalance;
                allStocks += accounts[j].Stocks + accounts[j].FrozenStocks;
            }
        }
        cfg.subtitle.text = "初始总钱: " + _N(InitBalance) + ", 初始总币: " + _N(InitStocks) + ", 当前总钱: " + _N(allBalance) + ", 当前总币: " + _N(allStocks) + ", 买一价: " + ticker.Last + ", 总利润: " + _N((allBalance-InitBalance) + ((allStocks-InitStocks) * ticker.Buy)) + " 元";
        chart.update(cfg);
        LogStatus('`' + JSON.stringify(tbl) + '`');
    }
}

Related

More