我将某些日期的许多股票的历史数据从CSV文件导入Java。我的目标是使用Java构建的程序来在某些日期交易(买卖)某些代码。该程序仅配置为使用一个自动收报机,但现在我想扩展它以使用数千个(超过数千个日期)。
我有两张桌子,一张包含自动收报机以及何时买/卖,另一张(如下图所示)包含所有价格和历史信息。 使用这两个,如果在表1中我在 y 日期通过股票代码 x 指示,我希望能够在价格下跌时卖出股票代码x,比如说,80%来自购买价格。为了促进这种决策,对于我可能交易的每个股票代码,我有大约十年的历史数据。我在表2中有数千万行。
我希望能够使用股票代码和日期标识符来引用我的每个列(市值,市盈率,beta ...)。我想以这样的方式操纵我的数据(在Java中)找到特定日期范围内特定股票的最小值和最大值。
我想我应该为每个自动收报机和日期组合创建一个“数字键”。它是自动收报机中的每个字符,转换为ASCII,连接并添加到日期。我以为我可以使用这些中的每一个作为索引数组的唯一标识符,但后来意识到我没有很好的方法来确定代码的数据何时开始以及何时结束。
哪种数据类型更适合这种情况?
答案 0 :(得分:2)
使用HashMap
以及组合自动收报机和日期的密钥会不会更好?
类似的东西:
public class TickerDate {
private final String ticker;
private final Date date;
public TickerDate(String ticker, Date date) {
this.ticker = ticker;
this.date = date;
}
// .. getters
// equals + hashcode
}
在代码中理解起来肯定会更容易。
其他选项是使用Guava中的Table
,您不需要编写上面的TickerDate
类。
答案 1 :(得分:0)
对于大量数据,请使用数据库。像H2 Database Engine这样的良好数据库可以完全按照您的需要进行(搜索,排序,聚合计算),并以优化的方式完成。
H2特别是用纯Java编写的。它可以嵌入您的Java应用程序中,也可以单独用作服务器。
如果您的部署计算机上有大量内存,并且只需要暂时需要数据,则可以通过让H2将表保留在内存中而不是持久保存到磁盘来最大限度地提高性能。
H2可以直接从CSV文件导入。请参阅this tutorial。
Apache Commons CSV是一个方便的库,用于导入/导出CSV和制表符分隔文件。
我很乐意成功使用它几次。简化了阅读和解析的繁琐工作。