def run(ctx,
        algofile,
        algotext,
        define,
        data_frequency,
        capital_base,
        bundle,
        bundle_timestamp,
        start,
        end,
        output,
        trading_calendar,
        print_algo,
        metrics_set,
        local_namespace,
        blotter):
    """Run a backtest for the given algorithm.
    """
    # check that the start and end dates are passed correctly
    if start is None and end is None:
        # check both at the same time to avoid the case where a user
        # does not pass either of these and then passes the first only
        # to be told they need to pass the second argument also
        ctx.fail(
            "must specify dates with '-s' / '--start' and '-e' / '--end'",
        )
    if start is None:
        ctx.fail("must specify a start date with '-s' / '--start'")
    if end is None:
        ctx.fail("must specify an end date with '-e' / '--end'")

    if (algotext is not None) == (algofile is not None):
        ctx.fail(
            "must specify exactly one of '-f' / '--algofile' or"
            " '-t' / '--algotext'",
        )

    trading_calendar = get_calendar(trading_calendar)

    perf = _run(
        initialize=None,
        handle_data=None,
        before_trading_start=None,
        analyze=None,
        algofile=algofile,
        algotext=algotext,
        defines=define,
        data_frequency=data_frequency,
        capital_base=capital_base,
        bundle=bundle,
        bundle_timestamp=bundle_timestamp,
        start=start,
        end=end,
        output=output,
        trading_calendar=trading_calendar,
        print_algo=print_algo,
        metrics_set=metrics_set,
        local_namespace=local_namespace,
        environ=os.environ,
        blotter=blotter,
        benchmark_returns=None,
    )

    if output == '-':
        click.echo(str(perf))
    elif output != os.devnull:  # make the zipline magic not write any data
        perf.to_pickle(output)

    return perf
def run ( ctx , algofile , algotext , define , data_frequency , capital_base , bundle , bundle_timestamp , start , end , output , trading_calendar , print_algo , metrics_set , local_namespace , blotter ) : if start is None and end is None : ctx . fail ( "must specify dates with '-s' / '--start' and '-e' / '--end'" , ) if start is None : ctx . fail ( "must specify a start date with '-s' / '--start'" ) if end is None : ctx . fail ( "must specify an end date with '-e' / '--end'" ) if ( algotext is not None ) == ( algofile is not None ) : ctx . fail ( "must specify exactly one of '-f' / '--algofile' or" " '-t' / '--algotext'" , ) trading_calendar = get_calendar ( trading_calendar ) perf = _run ( initialize = None , handle_data = None , before_trading_start = None , analyze = None , algofile = algofile , algotext = algotext , defines = define , data_frequency = data_frequency , capital_base = capital_base , bundle = bundle , bundle_timestamp = bundle_timestamp , start = start , end = end , output = output , trading_calendar = trading_calendar , print_algo = print_algo , metrics_set = metrics_set , local_namespace = local_namespace , environ = os . environ , blotter = blotter , benchmark_returns = None , ) if output == '-' : click . echo ( str ( perf ) ) elif output != os . devnull : perf . to_pickle ( output ) return perf
Run a backtest for the given algorithm.