1

我通过将以下内容添加到 $ZIPLINE_ROOT 目录中的 extenstion.py 来创建一个自定义的基本 yahoo 包:

equities = {
    'AAPL',
    'QQQ',
}
register(
    'test-bundle',  # name this whatever you like
    yahoo_equities(equities),
)

当我运行捆绑摄取时,一切都很好。

zipline ingest -b test-bundle

zipline bundles

产生输出(我刚刚运行它一秒钟)

test-bundle 2016-12-10 20:13:11.014192

太好了,一切都按预期工作。

当我使用一些基本策略运行 zipline 2 周时:

 zipline run -f ./test_algo.py --start 2016-12-01 --end 2016-12-9 -o output.pickle --bundle test-bundle

它运行,直到它到达星期四(2016 年 12 月 8 日)日期:

 Traceback (most recent call last):
 File "/usr/local/lib64/python3.5/site-packages/pandas/core/indexing.py", line 1325, in _has_valid_type error()
 File "/usr/local/lib64/python3.5/site-packages/pandas/core/indexing.py", line 1320, in error (key, self.obj._get_axis_name(axis)))
  KeyError: 'the label [2016-12-08 00:00:00+00:00] is not in the [index]'

  During handling of the above exception, another exception occurred:
  .... zipline stack trace

但如果我运行它:

 zipline run -f ./test_algo.py --start 2016-12-01 --end 2016-12-7 -o output.pickle --bundle test-bundle

然后我得到预期的成功输出:

 [2016-12-10 20:17:11.519059] INFO: Performance: Simulated 5 trading days out of 5.
 [2016-12-10 20:17:11.519495] INFO: Performance: first open: 2016-12-01 14:31:00+00:00
 [2016-12-10 20:17:11.519770] INFO: Performance: last close: 2016-12-07 21:00:00+00:00

知道为什么我的捆绑包正在下载到 T-2 数据。我预计会看到 12/8 和 12/9 的数据,市场在正常情况下是开放的,我在 yahoo Finance 中看到了那些日子的数据。

谢谢 -

4

1 回答 1

1

这是因为基准回报不可用,只能从 T-2 基础上获得,包括交易日。(即:如果您在星期一早上运行它,那么星期四的数据将可用,并且您可以在星期五之前运行模拟)如果您在星期六/星期日运行它,基准测试的最后一天是星期三,而最近的模拟日是星期四。

可能的解决方案:

  1. 修改 Zipline 以便能够关闭基准
  2. 修改 Zipline 以使用捆绑中的任何代码作为基准(以及仅默认股票指数)

当前解决方法:

修改:./zipline/gens/tradesimulation.py

并设置:

 def handle_benchmark(date, benchmark_source=self.benchmark_source):
     algo.perf_tracker.all_benchmark_returns[date] = 1

这样它就不会检查是否有数据,并且总是返回 1 作为基准

于 2016-12-12T16:54:28.680 回答