好库网 好库网首页 | 我的好库
区块链专栏

文章分类

Ta4j时间序列和条形图 Time Series and Bars

发布者:blockchain
发布日期:2021-2-21 22:25:00   更新日期:2021-2-23 19:13:00
阅读次数:201
评分:4.80
介绍:TimeSeries将固定数量的证券/商品聚合数据包含在内。每个间隔结束均由一个小节表示。 Bar包含一段时间内证券/商品的汇总数据。“聚合”表示Tick对象不包含直接交换数据。它将合并该时间段内运行的所有订单并提取。
正文:

TimeSeries将固定数量的证券/商品聚合数据包含在内。每个间隔结束均由一个小节表示。

Bar包含一段时间内证券/商品的汇总数据。“聚合”表示Tick对象不包含直接交换数据。它将合并该时间段内运行的所有订单并提取:

  • 开盘价
  • 高价
  • 低价
  • 收盘价
  • 成交量

条形图是TimeSeries的基本构建块。然后将时间序列用于回测或实时交易。

从0.12版开始,TimeSeries和Bars支持不同的数据类型来存储数据和计算。从0.12版开始,小节的创建和管理已移至TimeSeries。这意味着可以通过#addBar(…)函数将条形数据直接添加到TimeSeries中。

回测的时间序列

为了回测策略,您需要使用过去的数据填充时间序列。为此,您只需要创建一个TimeSeries并向其中添加数据即可。以下示例显示了如何BaseTimeSeries借助SeriesBuilder创建数据以及如何向系列添加数据:

TimeSeries series = new BaseTimeSeries.SeriesBuilder().withName("my_2017_series").build();

ZonedDateTime endTime = ZonedDateTime.now();
series.addBar(endTime, 105.42, 112.99, 104.01, 111.42, 1337);
series.addBar(endTime.plusDays(1), 111.43, 112.83, 107.77, 107.99, 1234);
series.addBar(endTime.plusDays(2), 107.90, 117.50, 107.90, 115.42, 4242);
    //...

这些示例说明了如何加载时间序列以对策略进行回测。

对于此用例,TimeSeries类提供了辅助方法,以将系列划分为子系列,运行交易策略等。

实时交易的时间序列

实时交易涉及为当前价格建立时间序列。在这种情况下,您只需要初始化系列即可。

TimeSeries series = new BaseTimeSeries("my_live_series");

然后,对于从经纪人/交易所收到的每个刻度/小节,必须将其添加到系列中:

series.addBar(ZonedDateTime.now(), 105.42, 112.99, 104.01, 111.42, 1337));

或者,如果您正在接收定期价格,并希望将其添加到最后一个柱线:

series.addPrice(105.44); // will update the close price of the last bar (and min/max price if necessary)

TimeSeries#addTrade(Number, Number)功能允许您Bar使用价格和数量数据更新系列的最后一个

series.addTrade(price, volume);

您可以使用TimeSeries#addBar(Bar, boolean)函数,如果标志是,那就是系列replaces的最后一个Barbooleantrue

series.addBar(bar, true) // last bar will be replaced

在这种模式下,我们强烈建议您:

  • 使用交易所提供的最新数据初始化您的系列(如上文针对回测所述)。它确保您的交易策略将获得足够的数据以供相关。
  • 调用TimeSeries#setMaximumTickCount(int)系列中方法。它确保您的内存消耗不会无限增加。

警告!为序列设置最大刻度数会将其变成移动的时间序列。在这种模式下,尝试删除tick将返回找到的第一个tick(即内存中最旧的)。它可能涉及近似值,但仅适用于旧ticks。


评论 [发表评论]
账号 密码 还没帐号呢,现在注册一个?

免责声明:好库网所展示的信息由买卖双方自行提供,其真实性、准确性和合法性由信息发布人负责。好库网不提供任何保证,并不承担任何法律责任。