Zipline Bundle вчерашние данные

Я создаю собственный базовый пакет Yahoo, добавляя следующее в файл extenstion.py в каталоге $ZIPLINE_ROOT:

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

он работает, пока не дойдет до даты четверга (08.12.2016):

 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 за те дни.

Спасибо -


person user1772250    schedule 10.12.2016    source источник


Ответы (1)


Это связано с тем, что эталонная доходность недоступна и доступна только на основе T-2, включая торговый день. (IE: если вы запустите его в понедельник утром, тогда данные за четверг будут доступны, и вы сможете запустить симуляцию до пятницы), если вы запустите его в субботу/воскресенье, последний возможный день для эталонного теста — среда, а последний день симуляции четверг.

возможные решения:

  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 для эталона

person user1772250    schedule 12.12.2016