有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

不带int的数组的java双反求

我正在从CSV文件将许多股票在特定日期的历史数据导入Java。我的目标是使用我用Java编写的程序在特定日期交易(买卖)这些股票。该程序仅配置为使用一个ticker,但现在我希望将其扩展为使用数千个(超过数千个日期)

我有两张表,一张包含股票行情和何时买入/卖出,另一张(如下图所示)包含所有价格和历史信息。 使用这两种方法,如果在表1中,我有一个指示是在y日期通过tickerx,我希望能够在价格比购买价格下跌80%时出售ticker x。为了促进这种决策,对于我可能交易的每一种股票,我都有大约十年的历史数据。我在表2中有数千万行

我希望能够参考我的每个专栏(市值、市盈率、贝塔系数…)使用股票代码和日期标识符。我想用这样一种方式来操作我的数据,即(在Java中)找到特定日期范围内特定股票代码的市盈率的最小值和最大值

我想我应该为每个股票代码和日期组合创建一个“数字键”。它是股票代码中的每个字符,转换为ASCII,连接并添加到日期。我原以为可以将它们中的每一个用作数组索引的唯一标识符,但后来意识到,我无法很好地确定股票行情数据的开始和结束时间

哪种数据类型更适合这种情况

DataTable


共 (2) 个答案

  1. # 1 楼答案

    数据库

    对于大量数据,请使用数据库。像H2 Database Engine这样的好数据库是为了做你想做的事情(搜索、排序、聚合计算),并以优化的方式进行

    H2是用纯Java编写的。它可以嵌入Java应用程序中,也可以单独用作服务器

    如果部署计算机上有很多内存,并且只需要暂时使用数据,那么可以通过让H2将表保留在内存中而不是保留到磁盘来最大限度地提高性能

    H2可以直接从CSV文件导入。见this tutorial

    Apache Commons CSV

    Apache Commons CSV是一个方便的库,用于导入/导出CSV和制表符分隔的文件

    我很喜欢成功地使用它几次。简化了阅读和解析的繁琐工作

  2. # 2 楼答案

    使用HashMap和一个结合了ticker和date的键不是更好吗

    比如:

    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的^{},您不需要编写上面的TickerDate