2016-07-25 130 views
1

我将许多股票的历史数据从特定日期导入到Java文件中。我的目标是在某些日期使用我建立的Java程序来交易(买卖)部分代码。该程序只能配置为使用一个代码,但现在我想扩展它以使用数千个(超过数千个日期)。double int int int int

我有两个表格,一个包含股票代码以及何时买入/卖出,另一个表格(如下图所示)包含所有价格和历史信息。 使用这两个,如果,在表1我有一个迹象,通过代码x日期,我想能够出售股票x当价格比购买价格降低了80%。为了便于做出这样的决策,对于我可能交易的每一个股票,我有大约十年的历史数据。表二中有数千万行。

我希望能够使用股票代码和日期标识符引用每个列(市值,市盈率,beta ...)。我想操纵我的数据的方式是(在Java中)在特定的日期范围内查找某个特定股票的p/e的最小值和最大值。

我想我应该为每个股票和日期组合创建一个“数字键”。它是股票代码中的每个字符,转换为ASCII,连接并添加到日期。我认为我可以将它们中的每一个用作索引数组的唯一标识符,但后来发现我没有办法弄清楚代码数据何时开始以及何时结束。

什么数据类型会更适合这个?

DataTable

+0

你可能想要一个['Map'](https://docs.oracle.com/javase/8/docs/api/java/util/Map.html) – bradimus

+0

@BasilBourque我有数千万行,但只有2500个代价 – wizlog

回答

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类。

+0

这听起来与我在Access中使用的实现非常相似。谢谢! (在我正确实施它之后,我会给你复选标记。) – wizlog

+0

是的,非常多,但是你不需要有这么大的表格,数据会在桶中。 –

0

数据库

对于大量数据,请使用数据库。像H2 Database Engine这样的好数据库可以完成你想要的任务(搜索,排序,聚合计算),并以优化的方式进行。

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

如果您的部署机器上有很多内存,并且只需要临时数据,那么可以通过让内存中的表保留而不是保留到磁盘来最大限度地提高性能。

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

阿帕奇百科全书CSV

阿帕奇共享CSV是进口/从CSV和制表符分隔的文件导出到/一个方便的图书馆。

我很享受使用它几次成功。简化阅读和解析的繁琐工作。

+0

这是否意味着我可以轻松地从Microsoft Access导入关系数据库? – wizlog