我正在阅读“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