0

我正在阅读“Mastering pandas for Finance”一书。直到涉及 Zipline 模块的地方都非常顺利和有趣,但是现在当我需要在 Jupyter Notebook 中重新创建书籍代码时,我从 Zipline 库中得到了错误。

本书的代码是:

import zipline as zp
import zipline.utils.factory as zpf
import pandas as pd
import pandas_datareader.data as web
import numpy as np

# dates
from datetime import datetime
# zipline has its own method to load data from Yahoo! Finance
data = zpf.load_from_yahoo(stocks=['AAPL'], 
                           indexes={}, 
                           start=datetime(1990, 1, 1),
                           end=datetime(2014, 1, 1), 
                           adjusted=False)

class BuyApple(zp.TradingAlgorithm):
    """ Simple trading algorithm that does nothing
    but buy one share of AAPL every trading period.
    """

    trace=False

    def __init__(self, trace=False):
        BuyApple.trace = trace
        super(BuyApple, self).__init__()

    def initialize(context):
        if BuyApple.trace: print("---> initialize")
        if BuyApple.trace: print(context)
        if BuyApple.trace: print("<--- initialize")

    def handle_data(self, context):
        if BuyApple.trace: print("---> handle_data")
        if BuyApple.trace: print(context)
        self.order("AAPL", 1)
        if BuyApple.trace: print("<-- handle_data")  


result = BuyApple(trace=True).run(data['2000-01-03':'2000-01-07'])

运行后,我得到一长串错误,但 Jupyter Notebook 单元格中的最后一行是:

/Users/***/anaconda/lib/python3.4/site-packages/zipline/finance/commission.py in __repr__(self)
     83             .format(class_name=self.__class__.__name__,
     84                     cost_per_share=self.cost_per_share,
---> 85                     min_trade_cost=self.min_trade_cost)
     86 
     87     def calculate(self, order, transaction):

KeyError: 'cost'

这段代码应该是运行一个很简单的策略,就是每天买AAPL,但是它不起作用。我认为 Zipline 内部有些问题,并且自本书编写以来发生了一些变化。我设法让它运行,但根本没有进行任何交易。它只显示一些与订单无关的数据,因为没有订单,也没有订单,因为我没有实例化类 BuyApple。

我对 Python、pandas 和 Zipline 也是新手,所以如果有人能解释为什么这不起作用,那就太好了。我在 Python 3.4 和 Zipline 1.0.1

4

1 回答 1

0

我正在使用 Python 2.7 和 Zipline 0.7.0 因为我有 32 位操作系统,并且 Zipline 未来的版本都专注于 64 位,所以我无法在我的系统上升级 Zipline。该代码在我的系统上运行良好。也许该代码与旧 Zipline 版本兼容。你在用窗户吗?为什么 lib 和 sitepackages 之间有 Python3.4?我也在使用 Anaconda,但我的路径是 Anaconda/lib/sitepackages/zipline

于 2016-09-09T18:11:06.460 回答