首页 > 解决方案 > 在 JavaScript 中将报价数据转换为 1 分钟 OHLC(开盘价、最高价、最低价、收盘价)?

问题描述

类似于使用 Javascript 从日期、时间、价格创建 OHLC 数据,如何将基本交易数据转换为 OHLC(或 Open、High、Low、Close)的理论并将其应用于生成 1 分钟 OHLC?除此之外,我在使用提供的代码将纪元时间戳调整为 ISODate 时也遇到了问题。

var data = [{
    "tid": 283945,
    "date": 2018-08-02T04:24:53Z,
    "amount": "0.08180000",
    "price": "501.30"
}, {
    "tid": 283947,
    "date": 2018-08-02T04:24:53Z,
    "amount": "0.06110000",
    "price": "490.66"
},
...
];

function convertToOHLC(data) {
    // What goes here?
}
convertToOHLC(data);

这是以前代码的小提琴:https ://jsfiddle.net/5dfjhnLw/

标签: javascripttrading

解决方案


我创建了一个示例,根据您的要求如何将数据转换为 ohlc:

function convertToOHLC(data) {
    var parsedData = JSON.parse(data),
        pointStart = parsedData[0].date,
        range = [],
        low,
        high,
        ranges = [],
        dataOHLC = [],
        interval = 60 * 1000;

    parsedData.sort(function(a, b) {
        return a.date - b.date
    });

    $.each(parsedData, function(i, el) {
        if (pointStart + interval < el.date) {
            ranges.push(range.slice());
            range = [];
            range.push(el);
            pointStart = pointStart + interval;
        } else {
            range.push(el);
        }

        if (i === parsedData.length - 1) {
            ranges.push(range);
        }
    });

    $.each(ranges, function(i, range) {
        low = range[0].price;
        high = range[0].price;

        $.each(range, function(i, el) {
            low = Math.min(low, el.price);
            high = Math.max(high, el.price);
        });

        dataOHLC.push({
            x: range[0].date + 30 * 1000,
            open: Number(range[0].price),
            high: high,
            low: low,
            close: Number(range[range.length - 1].price)
        });
    });

    return dataOHLC
}

现场演示:https ://jsfiddle.net/BlackLabel/qwvrgy93/


推荐阅读