2

这是我的第一个问题,请原谅我的错误我一直在阅读 Andreas Clenow 的 Trading Evolved,一本关于使用 Python 进行回测和财务的书这是我收到的代码和错误

%matplotlib inline

# Import Zipline functions that we need
from zipline import run_algorithm
from zipline.api import order_target_percent, symbol

# Import date and time zone libraries
from datetime import datetime
import pytz
import pandas as pd

# Import visualization
import matplotlib.pyplot as plt


def initialize(context):
    # Which stock to trade
    context.stock = symbol('AAPL')
    
    # Moving average window
    context.index_average_window = 100
    
def handle_data(context, data):
    # Request history for the stock
    equities_hist = data.history(context.stock, "close", 
                                 context.index_average_window, "1d")
    
    # Check if price is above moving average
    if equities_hist[-1] > equities_hist.mean():
        stock_weight = 1.0
    else:
        stock_weight = 0.0
    
    # Place order
    order_target_percent(context.stock, stock_weight)

def analyze(context, perf):
    fig = plt.figure(figsize=(12, 8))
    
    # First chart
    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)
    
    # Second chart
    ax = fig.add_subplot(312)
    ax.plot(perf['gross_leverage'], 
            label='Exposure', linestyle='-', linewidth=1.0)
    ax.legend()
    ax.grid(True)

    # Third chart
    ax = fig.add_subplot(313)
    ax.plot(perf['returns'], label='Returns', linestyle='-.', linewidth=1.0)
    ax.legend()
    ax.grid(True)

# 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.to_datetime('1996-1-1', utc=True)
#end_date = pd.to_datetime('2018-12-31', utc=True)
start_date = pd.to_datetime('1996-1-1', utc=True)
end_date = pd.to_datetime('2018-12-31', utc=True)


# Fire off the backtest
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' 
) 

我收到的错误是这个

NoBenchmark Traceback (最近一次调用最后一次) _RunAlgoError: No benchmark_specwas provided, and zipline.api.set_benchmarkwas not called in initialize

提前致谢

4

2 回答 2

10

我遇到了同样的问题,对我有用的是将initialize()中的基准设置为 False(您必须从zipline.api 导入set_benchmark

def initialize(context):
    # Which stock to trade
    context.stock = symbol('AAPL')
    
    # Moving average window
    context.index_average_window = 100

    set_benchmark(False)
    
于 2020-08-05T16:52:13.543 回答
0

我遇到了类似的问题(使用以下代码在 jupyter 中运行 zipline

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

def initiatlize(context):
    context.stock = symbol('AAPL')
    set_benchmark(False)
        

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


%zipline --bundle quantopian-quandl --start 2008-1-1 --end 2012-1-1 -o strat.pickle

在执行命令中添加“--no-benchmark”选项解决了这个问题。我仍然有兴趣弄清楚该选项的作用,但那是另一次了。

 %zipline --bundle quantopian-quandl --no-benchmark  --start 2008-1-1 --end 2012-1-1 -o strat.pickle

笔记

我提到的代码是通过https://www.youtube.com/watch?v=J4LTIixReMA上的教程

于 2021-03-13T21:42:39.073 回答