当前位置: 首页 > 知识库问答 >
问题:

在JavaScript中将数据转换为OHLC(打开、高、低、关闭)?

蒋畅
2023-03-14

与使用C#从日期、时间、价格创建OHLC数据类似,如何将基本贸易数据转换为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);

这是小提琴:https://jsfiddle.net/5dfjhnLw/

共有1个答案

任繁
2023-03-14

这是一个将数据转换为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;
};

这是你最新的小提琴:https://jsfiddle.net/mg9v89r2/

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

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

当我们以后处理打开关闭时,这是一个重要的步骤。

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

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);
});

在上面的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);

每次迭代后,我们将临时对象推入结果

result.push(tempObject);

最后,我们返回结果

令人惊讶的是,你手中的巨大数据阵列只有2天的数据

 类似资料:
  • 我在S3有一些遗留数据,我想使用Spark 2和Java API将它们转换成parquet格式。 我有所需的Avro模式(. avsc文件)及其使用Avro编译器生成的Java类,我想使用这些模式以Parque格式存储数据。输入数据不是任何标准格式,但我有一个库,可以将遗留文件中的每一行转换为Avro类。 是否可以将数据作为

  • 有没有jQuery或javascript库生成给定json数据的动态表?我不想定义列,库应该读取json散列中的键并生成列。 当然,我可以自己遍历json数据并生成html表。我只是想知道是否有这样的库存在,我可以简单地重复使用。

  • 问题内容: 如何在不使用任何第三方库的情况下将JavaScript中的“ 1”转换为“0001”。我已经使用spritf在php中完成了此操作: 问题答案: 这是一个聪明的小把戏(我想我以前在SO上看到过): 如果子字符串的第二个参数为负数,则JavaScript比某些语言宽容得多,因此它会“正确地溢出”(或根据视图的方式错误地溢出): 也就是说,上面的内容: 1->“ 0001” 12345->

  • 问题内容: 我有一个包含几个整数的数组。我已经向数组添加了一些值,但是现在我需要通过jQuery的方法将此数组发送到页面。如何将其转换为JSON对象进行发送? 问题答案: 并致电: 注意: _JSON对象现在是大多数现代Web浏览器(IE 8及更高版本)的一部分。

  • 问题内容: 我如何以这种格式转换PHP数组 到以下格式的Javascript数组? 问题答案: 安全声明: 您不再需要以下内容 如果您没有PHP 5.2,则可以使用以下代码:

  • 我有一个如下的文本文件 我需要像下面的格式一样转换成json 对于javascript应用程序。