diff --git a/.gitignore b/.gitignore index d0cd8e131a..934fd19861 100644 --- a/.gitignore +++ b/.gitignore @@ -76,3 +76,5 @@ TAGS .ipynb_checkpoints/ .gdb_history + +.vscode diff --git a/zipline/utils/run_algo.py b/zipline/utils/run_algo.py index db33b549bb..533ca88f4e 100644 --- a/zipline/utils/run_algo.py +++ b/zipline/utils/run_algo.py @@ -71,7 +71,8 @@ def _run(handle_data, print_algo, metrics_set, local_namespace, - environ): + environ, + data_frame_loaders): """Run a backtest for the given algorithm. This is shared between the cli and :func:`zipline.run_algo`. @@ -168,9 +169,12 @@ def _run(handle_data, def choose_loader(column): if column in USEquityPricing.columns: return pipeline_loader - raise ValueError( - "No PipelineLoader registered for column %s." % column - ) + elif data_frame_loaders and column in data_frame_loaders: + return data_frame_loaders[column] + else: + raise ValueError( + "No PipelineLoader registered for column %s." % column + ) else: env = TradingEnvironment(environ=environ) choose_loader = None @@ -285,7 +289,8 @@ def run_algorithm(start, default_extension=True, extensions=(), strict_extensions=True, - environ=os.environ): + environ=os.environ, + data_frame_loaders=None): """Run a trading algorithm. Parameters @@ -344,6 +349,9 @@ def run_algorithm(start, environ : mapping[str -> str], optional The os environment to use. Many extensions use this to get parameters. This defaults to ``os.environ``. + loaders : iterable{PipelineLoader}, optional + A dictionary containing custom loaders to include data from external sources + in a pipeline. Returns ------- @@ -396,4 +404,5 @@ def run_algorithm(start, metrics_set=metrics_set, local_namespace=False, environ=environ, + data_frame_loaders=data_frame_loaders )