Проблемы с установкой Zipline / Trading Evolved Первая ошибка тестирования - PullRequest
0 голосов
/ 01 августа 2020

Я пытался правильно установить Zipline. Я следовал инструкциям в главе 7 книги Андреаса Кленова и столкнулся с проблемами с первой программой тестирования на истории. Чтобы устранить ошибку в моем коде, я загрузил код книг, который должен работать.

%matplotlib inline

from zipline import run_algorithm
from zipline.api import order_target_percent,symbol

from datetime import datetime
import pytz

import matplotlib.pyplot as plt

#debug
import pandas as pd

def initialize(context):
    context.stock = symbol('AAPL')
    context.index_average_window = 100
    
def handle_data(context, data):
    equities_hist = data.history(context.stock, "close", 
                                 context.index_average_window, "1d")
    if equities_hist[-1] > equities_hist.mean():
        stock_weight = 1.0
    else:
        stock_weight = 0.0
    order_target_percent(context.stock, stock_weight)

def analyze(context, perf):
    fig = plt.figure(figsize=(12, 8))
    ax = fig.add_subplot(311)
    ax.set_title('Strategy Results')
    ax.semilogy(perf['portfolio_value'], linestyle='-', 
                label='Equity Curve', linewidth=3.0)
    ax.legend()
    ax.grid(False)
    ax = fig.add_subplot(312)
    ax.plot(perf['gross_leverage'], 
            label='Exposure', linestyle='-', linewidth=1.0)
    ax.legend()
    ax.grid(True)
    ax = fig.add_subplot(313)
    ax.plot(perf['returns'], label='Returns', linestyle='-.', linewidth=1.0)
    ax.legend()
    ax.grid(True)

start_date=datetime(1996,1,1,tzinfo=pytz.UTC)

end_date=datetime(2018,12,31,tzinfo=pytz.UTC)

results = run_algorithm(
    start=start_date, 
    end=end_date, 
    initialize=initialize, 
    analyze=analyze, 
    handle_data=handle_data, 
    capital_base=10000, 
    data_frequency='daily',
    bundle='quandl') 

Я получаю следующие сообщения об ошибках

AssertionError                            Traceback (most recent call last)
<ipython-input-8-b9def796232e> in <module>
      9     capital_base=10000,
     10     data_frequency='daily',
---> 11     bundle='quandl'
     12 ) 

~\Anaconda3202007\envs\zip35\lib\site-packages\zipline\utils\run_algo.py in run_algorithm(start, end, initialize, capital_base, handle_data, before_trading_start, analyze, data_frequency, bundle, bundle_timestamp, trading_calendar, metrics_set, benchmark_returns, default_extension, extensions, strict_extensions, environ, blotter)
    405         environ=environ,
    406         blotter=blotter,
--> 407         benchmark_spec=benchmark_spec,
    408     )
    409 

~\Anaconda3202007\envs\zip35\lib\site-packages\zipline\utils\run_algo.py in _run(handle_data, initialize, before_trading_start, analyze, algofile, algotext, defines, data_frequency, capital_base, bundle, bundle_timestamp, start, end, output, trading_calendar, print_algo, metrics_set, local_namespace, environ, blotter, benchmark_spec)
    201                 trading_calendar=trading_calendar,
    202                 capital_base=capital_base,
--> 203                 data_frequency=data_frequency,
    204             ),
    205             metrics_set=metrics_set,

~\Anaconda3202007\envs\zip35\lib\site-packages\zipline\finance\trading.py in __init__(self, start_session, end_session, trading_calendar, capital_base, emission_rate, data_frequency, arena)
     36                  arena='backtest'):
     37 
---> 38         assert type(start_session) == pd.Timestamp
     39         assert type(end_session) == pd.Timestamp
     40 

AssertionError:

Поскольку код работал для автор и я еще не получили рабочий код из zipline, я предполагаю, что это проблема установки. Следуя инструкциям по установке zipline по этой ссылке https://pythonprogramming.net/zipline-local-install-python-programming-for-finance/, я проверил пакеты C, которые должны были быть необходимы в Anaconda Navigator, и обнаружил, что wrapt, cython и cordereddict не были установлены, и установил их через AN.

Я получаю ту же самую ошибку утверждения.

Поэтому я решил попробовать другой более простой фрагмент кода из ссылки Py4fi выше для тестирования установки.

%load_ext zipline
from zipline.api import order, record, symbol


def initialize(context):
    pass

def handle_data(context, data):
    order(symbol('AAPL'), 10)
    record(AAPL=data.current(symbol('AAPL'), 'price'))

%zipline --bundle quantopian-quandl --start 2000-1-1 --end 2012-1-1 -o backtest.pickle

В этом случае я получаю следующую ошибку:

NoBenchmark                               Traceback (most recent call last)
~\Anaconda3202007\envs\zip35\lib\site-packages\zipline\utils\run_algo.py in _run(handle_data, initialize, before_trading_start, analyze, algofile, algotext, defines, data_frequency, capital_base, bundle, bundle_timestamp, start, end, output, trading_calendar, print_algo, metrics_set, local_namespace, environ, blotter, benchmark_spec)
    215                 'algo_filename': getattr(algofile, 'name', '<algorithm>'),
--> 216                 'script': algotext,
    217             }

RunAlgoError: No ``benchmark_spec`` was provided, and ``zipline.api.set_benchmark`` was not called in ``initialize``.

BTW - Я работаю на Windows.

Любые советы приветствуются.

Ответы [ 2 ]

1 голос
/ 04 августа 2020

Чтобы заставить это работать, мне пришлось сделать 3 вещи, но я все еще получаю предупреждения во время выполнения, но графики выглядят хорошо.

Возможно ли, что эти ошибки являются результатом не всех установленных пакетов ?

Нет. 1 - Чтобы устранить ошибку утверждения - я нашел следующее в другом сообщении. # изменен на pd.Timestamp, так как zipline показывал ошибки #Import pandas import pandas as pd

# Set start and end date
# start_date=datetime(1996, 1, 1, tzinfo=pytz.UTC)
# end_date=datetime(2018, 12, 31, tzinfo=pytz.UTC)

start_date = pd.Timestamp('1996-1-1', tz='utc')
# changed to 303272018 as data does not exist past this
end_date = pd.Timestamp('2018-03-27', tz='utc')

No. 2 - Затем я вернулся к ошибке теста, добавив set_benchmark к функции инициализации, чтобы устранить ошибку

# added this to get benchmark spec error to go away
# tried SPY but apparently this is not a symbol in the quandl bundle
zipline.api.set_benchmark(symbol('AAPL'))

Нет. 3. - Пришлось изменить дату окончания на 27/03/2018, поскольку данные quandl не собираются до 31/12/2018

# changed to 303272018 as data does not exist past this
end_date = pd.Timestamp('2018-03-27', tz='utc')

Предупреждающие сообщения

C: \ Users \ tbrug \ Anaconda3202007 \ envs \ zip35 \ lib \ site-packages \ empyrical \ stats.py: 711: RuntimeWarning: обнаружено недопустимое значение в true_divide out = out, C: \ Users \ tbrug \ Anaconda3202007 \ envs \ zip35 \ lib \ site-packages \ empyrical \ stats.py: 797: RuntimeWarning: обнаружено недопустимое значение в true_divide np.divide (average_annual_return, Annualized_downside_risk, out = out)

0 голосов
/ 14 августа 2020

У меня те же проблемы, что и у вас.

Просто игнорируйте предупреждения. Вы можете поместить следующее в верхней части записной книжки:

import warnings
warnings.filterwarnings('ignore')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...