0

首先,这是我的环境

aiohttp==3.7.4.post0
alembic==1.7.1
alpaca-trade-api==1.2.3
alpha-vantage==2.3.1
async-timeout==3.0.1
attrs==21.2.0
backcall==0.2.0
bcolz==1.2.1
beautifulsoup4==4.9.3
Bottleneck==1.3.2
certifi==2021.5.30
chardet==4.0.0
charset-normalizer==2.0.4
click==8.0.1
colorama==0.4.4
cycler==0.10.0
decorator==5.1.0
empyrical==0.5.5
entrypoints==0.3
exchange-calendars==3.2
h5py==2.10.0
html5lib==1.1
IbPy2==0.8.0
idna==3.2
idna-ssl==1.1.0
importlib-metadata==4.8.1
importlib-resources==5.2.2
intervaltree==3.1.0
ipykernel==5.5.5
ipython==7.16.1
ipython-genutils==0.2.0
iso3166==1.0.1
iso4217==1.6.20180829
jedi==0.18.0
joblib==1.0.1
jupyter-client==7.0.2
jupyter-core==4.7.1
kiwisolver==1.3.1
korean-lunar-calendar==0.2.1
Logbook==1.5.3
lru-dict==1.1.7
lxml==4.6.3
Mako==1.1.5
MarkupSafe==2.0.1
matplotlib==3.3.4
msgpack==1.0.2
multidict==5.1.0
multipledispatch==0.6.0
nest-asyncio==1.5.1
networkx==1.11
numexpr==2.7.1
numpy==1.19.5
pandas==1.1.5
pandas-datareader==0.10.0
pandas-market-calendars==2.0
parso==0.8.2
patsy==0.5.1
pickleshare==0.7.5
Pillow==8.3.2
polling==0.3.1
prompt-toolkit==3.0.20
psycopg2==2.8.6
pyfolio @ git+https://github.com/quantopian/pyfolio@4b901f6d73aa02ceb6d04b7d83502e5c6f2e81aa
Pygments==2.10.0
pyluach==1.3.0
pyparsing==2.4.7
python-dateutil==2.8.2
python-interface==1.6.1
pytz==2021.1
pywin32==301
PyYAML==5.3.1
pyzmq==22.2.1
ratelimit==2.2.1
requests==2.26.0
scikit-learn==0.24.2
scipy==1.5.4
seaborn==0.11.2
six==1.16.0
sortedcontainers==2.4.0
soupsieve==2.2.1
SQLAlchemy==1.3.24
statsmodels==0.12.2
tables==3.6.1
threadpoolctl==2.2.0
toolz==0.11.1
tornado==6.1
trading-calendars==2.1.1
traitlets==4.3.3
typing-extensions==3.10.0.2
urllib3==1.26.6
wcwidth==0.2.5
webencodings==0.5.1
websocket-client==1.2.1
websockets==8.1
yahoofinancials==1.6
yarl==1.6.3
-e git+https://github.com/shlomikushchi/zipline-trader.git@acc6dde7f07a80647fe76dcdd406d30c2d24260f#egg=zipline_trader
zipp==3.5.0

我正在尝试使用 TSX 日历在 TSX 股票市场上工作。

extension.py.zipline

import pandas as pd
import zipline
from zipline.data.bundles import register
from zipline.data.bundles.csvdir import csvdir_equities



start_session = pd.Timestamp('2021-06-16', tz='utc')
end_session = pd.Timestamp('2021-08-30', tz='utc')


register(
    'csvdir',
    csvdir_equities(
        ['daily'],
        'C:/Users/patrickcob/toronto',
    ),
    calendar_name='XTSE', # TSX equities
    start_session=start_session,
    end_session=end_session
)

然后,这是我在 python 中的回测程序

import pytz
import pandas as pd
from datetime import datetime
import matplotlib.pyplot as plt
import pandas_datareader.data as yahoo_reader
import trading_calendars as tcals
from zipline.utils.calendars import get_calendar
from zipline.api import order_target, symbol
from zipline.data import bundles
from zipline import run_algorithm


def get_benchmark(symbol=None, start=None, end=None):
    bm = yahoo_reader.DataReader(symbol,
                                 'yahoo',
                                 pd.Timestamp(start),
                                 pd.Timestamp(end))['Close']
    bm.index = bm.index.tz_localize('America/Toronto')
    return bm.pct_change(periods=1).fillna(0)


def initialize(context):
    context.equity = symbol("RY")


def handle_data(context, data):
    order_target(context.equity, 2778)


def before_trading_start(context, data):
    pass


def analyze(context, perf):
    ax1 = plt.subplot(211)
    perf.portfolio_value.plot(ax=ax1)
    ax2 = plt.subplot(212, sharex=ax1)
    perf.sym.plot(ax=ax2, color='r')
    plt.gcf().set_size_inches(18, 8)
    plt.legend(['Algo', 'Benchmark'])
    plt.ylabel("Returns", color='black', size=25)


if __name__ == '__main__':
    bundle_name = 'csvdir'
    bundle_data = bundles.load(bundle_name)

    # Set the trading calendar
    trading_calendar = tcals.get_calendar('XTSE')
    #Convertir le UTC en timezone Toronto
    tz = pytz.timezone('America/Toronto')
    
    starttime = datetime(2021, 6, 16, tzinfo=pytz.UTC)
    endtime = datetime(2021, 9, 15, tzinfo=pytz.UTC)
    
    new_starttime = starttime.astimezone(tz)
    new_endtime = endtime.astimezone(tz)
    
    start = pd.Timestamp(datetime(2021, 6, 16, tzinfo=pytz.UTC))
    end = pd.Timestamp(datetime(2021, 9, 15, tzinfo=pytz.UTC))

    r = run_algorithm(start=start,
                      end=end,
                      initialize=initialize,
                      capital_base=100000,
                      handle_data=handle_data,
                      benchmark_returns=get_benchmark(symbol="TSX",
                                                      start=start.date().isoformat(),
                                                      end=end.date().isoformat()),
                      bundle='csvdir',
                      broker=None,
                      state_filename="./demo.state",
                      trading_calendar=trading_calendar,
                      before_trading_start=before_trading_start,
                      #                   analyze=analyze,
                      data_frequency='daily'
                      )
    fig, axes = plt.subplots(1, 1, figsize=(16, 5), sharex=True)
    r.algorithm_period_return.plot(color='blue')
    r.benchmark_period_return.plot(color='red')

    plt.legend(['Algo', 'Benchmark'])
    plt.ylabel("Returns", color='black', size=20)
    plt.show()

我怎样才能使这项工作?我有很多错误,包括 Start Session Invalid、Date error、CSVDIR Env variable not set...等。到目前为止,Zipline-Trader 1.6 似乎无法与自定义日历一起使用......

4

0 回答 0