在 JavaScript 中将报价数据转换为 1 分钟 OHLC(开盘价、最高价、最低价、收盘价)?
Convert tick data to 1 minute OHLC (Open, High, Low, Close) in JavaScript?
类似于,如何将基本交易数据转换为OHLC(或开盘价,最高价,最低价,收盘价)的理论应用于生成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);
这是之前代码的 fiddle:https://jsfiddle.net/5dfjhnLw/
我创建了一个示例,根据您的要求如何将数据转换为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
}
类似于
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);
这是之前代码的 fiddle:https://jsfiddle.net/5dfjhnLw/
我创建了一个示例,根据您的要求如何将数据转换为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
}