Hi,
I am trying to run backtests on custom local data. I need to take into account of withholding taxes so custom data is a must. The code I have tried can be found below.
import pandas as pd
import numpy as np
from six import viewkeys
from zipline.api import (
attach_pipeline,
date_rules,
symbols,
order_target_percent,
pipeline_output,
record,
schedule_function,
set_commission,
set_slippage,
slippage,
set_long_only,
)
from zipline.pipeline import Pipeline,CustomFactor
from zipline.pipeline.factors import SimpleMovingAverage, AnnualizedVolatility
import pandas as pd
from datetime import datetime, timedelta
import pytz
import numpy as np
from data import bloomberg, benchmark, preProcess
import matplotlib.pyplot as plt
from zipline.algorithm import TradingAlgorithm
from zipline.finance.trading import TradingEnvironment
from zipline.finance import commission, trading
from zipline.utils.factory import create_simulation_parameters
from zipline.pipeline.data.equity_pricing import USEquityPricing
from zipline.pipeline.loaders.frame import DataFrameLoader
from zipline.utils import tradingcalendar as tcal
from zipline.pipeline.loaders import USEquityPricingLoader
from zipline.pipeline.data import Column
from zipline.pipeline.data import DataSet
from zipline.pipeline.engine import SimplePipelineEngine
from zipline.utils.calendars import get_calendar
panel = pd.read_hdf("panel_Universe.h5") ### panel is a pandas multiindex object
panel.minor_axis = ['last_price','total_last_price','volume','pct_float','market_cap','turnover','free_float_market_cap','close']
### panel has 8 minor axes, I will use only "close" for simplicity
assets = list(panel.items) ### These are the tickers that I want to pass to the Pipeline
close_df = panel.minor_xs('close')
trading_calendar = get_calendar('LSE')
class MyDataSet(DataSet):
close = Column(dtype=float)
free_float_market_cap = Column(dtype=float)
volume = Column(dtype=float)
last_price = Column(dtype=float)
loaders = {MyDataSet.close: DataFrameLoader(MyDataSet.close, close_df)}
def my_dispatcher(column):
return loaders[column]
def choose_loader(column):
return my_dispatcher(column)
engine = SimplePipelineEngine(
get_loader=choose_loader,
calendar=trading_calendar.all_sessions,
asset_finder=assets,
)
This is where I'm stuck since SimplePipelineEngine's asset_finder parameter requires an AssetFinder object which I do not know how to create. Basically I want to map the "assets" above into this AssetFinder object but I got nothing from the documentation.
I would greatly appreciate any help.
Sincerely,