gpt4 book ai didi

javascript - 在 JavaScript 中将数据转换为 OHLC(开盘价、最高价、最低价、收盘价)?

转载 作者:行者123 更新时间:2023-11-29 16:45:21 24 4
gpt4 key购买 nike

类似于create an OHLC data from Date, time, price using C# ,如何将基本交易数据转换为 OHLC(或开盘价、最高价、最低价、收盘价)的理论并将其应用于这种不同的情况?

var data = [{
"tid": 283945,
"date": 1384934366,
"amount": "0.08180000",
"price": "501.30"
}, {
"tid": 283947,
"date": 1384934066,
"amount": "0.06110000",
"price": "490.66"
},
...
];

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

这是 fiddle :https://jsfiddle.net/5dfjhnLw/

最佳答案

这是将数据转换为 OHLC 的工作函数:

function convertToOHLC(data) {
data.sort((a, b) => d3.ascending(a.date, b.date));
var result = [];
var format = d3.timeFormat("%Y-%m-%d");
data.forEach(d => d.date = format(new Date(d.date * 1000)));
var allDates = [...new Set(data.map(d => d.date))];
allDates.forEach(d => {
var tempObject = {};
var filteredData = data.filter(e => e.date === d);
tempObject.date = d;
tempObject.open = filteredData[0].price;
tempObject.close = filteredData[filteredData.length - 1].price;
tempObject.high = d3.max(filteredData, e => e.price);
tempObject.low = d3.min(filteredData, e => e.price);
result.push(tempObject);
});
return result;
};

这是您更新的 fiddle :https://jsfiddle.net/mg9v89r2/

一步一步的解释:

首先,我们按日期对原始数据数组进行排序:

data.sort((a, b) => d3.ascending(a.date, b.date));

当我们稍后处理openclose 时,这是一个重要的步骤。

之后,我们将毫秒转换为日期,作为字符串:

var format = d3.timeFormat("%Y-%m-%d");
data.forEach(d => d.date = format(new Date(d.date * 1000)));

这样做,我们可以过滤属于给定日期的所有对象。首先,我们在您的数据中创建一个包含所有不同日期的数组:

var allDates = [...new Set(data.map(d => d.date))];

对于该数组的每一天,我们将调用一个函数来填充一个名为 results 的空数组:

allDates.forEach(d => {
var tempObject = {};
var filteredData = data.filter(e => e.date === d);
tempObject.date = d;
tempObject.open = filteredData[0].price;
tempObject.close = filteredData[filteredData.length - 1].price;
tempObject.high = d3.max(filteredData, e => e.price);
tempObject.low = d3.min(filteredData, e => e.price);
result.push(tempObject);
});

在上面的 forEach 中,我们创建了一个空对象,并为我们的 allDates 数组中的每一天过滤数据:

var filteredData = data.filter(e => e.date === d);

并用它填充一个临时对象:

var tempObject = {};
tempObject.date = d;
tempObject.open = filteredData[0].price;
tempObject.close = filteredData[filteredData.length - 1].price;
tempObject.high = d3.max(filteredData, e => e.price);
tempObject.low = d3.min(filteredData, e => e.price);

每次迭代后,我们将该临时对象推送到results:

result.push(tempObject);

最后,我们返回结果

令人惊讶的是,您 fiddle 中的庞大数据数组只有 2 天的数据。

关于javascript - 在 JavaScript 中将数据转换为 OHLC(开盘价、最高价、最低价、收盘价)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42064703/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com