def run_monthly_rebalance(config, testing, filename, benchmark, ticker_weights, title_str, start_date, end_date, equity): config = settings.from_file(config, testing) tickers = [t for t in ticker_weights.keys()] # Set up variables needed for backtest events_queue = queue.Queue() csv_dir = config.CSV_DATA_DIR initial_equity = PriceParser.parse(equity) # Use Yahoo Daily Price Handler price_handler = YahooDailyCsvBarPriceHandler(csv_dir, events_queue, tickers, start_date=start_date, end_date=end_date) # Use the monthly liquidate and rebalance strategy strategy = MonthlyLiquidateRebalanceStrategy(tickers, events_queue) strategy = Strategies(strategy, DisplayStrategy()) # Use the liquidate and rebalance position sizer # with prespecified ticker weights position_sizer = LiquidateRebalancePositionSizer(ticker_weights) # Use an example Risk Manager risk_manager = ExampleRiskManager() # Use the default Portfolio Handler portfolio_handler = PortfolioHandler(initial_equity, events_queue, price_handler, position_sizer, risk_manager) # Use the ExampleCompliance component compliance = ExampleCompliance(config)
def run(cache_name, cache_backend, expire_after, data_source, start, end, config, testing, tickers, filename, n, n_window): # Set up variables needed for backtest events_queue = queue.Queue() initial_equity = PriceParser.parse(500000.00) session = init_session(cache_name, cache_backend, expire_after) period = 86400 # Seconds in a day if len(tickers) == 1: data = web.DataReader(tickers[0], data_source, start, end, session=session) else: data = web.DataReader(tickers, data_source, start, end, session=session) # Use Generic Bar Handler with Pandas Bar Iterator price_event_iterator = PandasBarEventIterator(data, period, tickers[0]) price_handler = GenericPriceHandler(events_queue, price_event_iterator) # Use the Display Strategy strategy1 = DisplayStrategy(n=n, n_window=n_window) strategy2 = BuyAndHoldStrategy(tickers, events_queue) strategy = Strategies(strategy1, strategy2) # Use an example Position Sizer position_sizer = FixedPositionSizer() # Use an example Risk Manager risk_manager = ExampleRiskManager() # Use the default Portfolio Handler portfolio_handler = PortfolioHandler( initial_equity, events_queue, price_handler, position_sizer, risk_manager ) # Use the ExampleCompliance component compliance = ExampleCompliance(config) # Use a simulated IB Execution Handler execution_handler = IBSimulatedExecutionHandler( events_queue, price_handler, compliance ) # Use the default Statistics statistics = SimpleStatistics(config, portfolio_handler) # Set up the backtest backtest = Backtest( price_handler, strategy, portfolio_handler, execution_handler, position_sizer, risk_manager, statistics, initial_equity ) results = backtest.simulate_trading(testing=testing) statistics.save(filename) return results
def run(config, testing, tickers, filename): # Set up variables needed for backtest events_queue = queue.Queue() csv_dir = config.CSV_DATA_DIR initial_equity = PriceParser.parse(500000.00) start_date = datetime.datetime(2006, 11, 1) end_date = datetime.datetime(2016, 10, 12) # Use Yahoo Daily Price Handler price_handler = YahooDailyCsvBarPriceHandler(csv_dir, events_queue, tickers, start_date=start_date, end_date=end_date) # Use the monthly liquidate and rebalance strategy strategy = MonthlyLiquidateRebalanceStrategy(tickers, events_queue) strategy = Strategies(strategy, DisplayStrategy()) # Use the liquidate and rebalance position sizer # with prespecified ticker weights ticker_weights = { "SPY": 0.6, "AGG": 0.4, } position_sizer = LiquidateRebalancePositionSizer(ticker_weights) # Use an example Risk Manager risk_manager = ExampleRiskManager() # Use the default Portfolio Handler portfolio_handler = PortfolioHandler(initial_equity, events_queue, price_handler, position_sizer, risk_manager) # Use the ExampleCompliance component compliance = ExampleCompliance(config) # Use a simulated IB Execution Handler execution_handler = IBSimulatedExecutionHandler(events_queue, price_handler, compliance) # Use the default Statistics title = ["US Equities/Bonds 60/40 ETF Strategy"] benchmark = "SPY" statistics = TearsheetStatistics(config, portfolio_handler, title, benchmark) # Set up the backtest backtest = Backtest(price_handler, strategy, portfolio_handler, execution_handler, position_sizer, risk_manager, statistics, initial_equity) results = backtest.simulate_trading(testing=testing) statistics.save(filename) return results
def run(config, testing, tickers, filename): # Set up variables needed for backtest events_queue = queue.Queue() csv_dir = "/path/to/your/csv/data/" initial_equity = PriceParser.parse(500000.00) # Use DTN IQFeed Intraday Bar Price Handler start_date = datetime.datetime(2013, 1, 1) price_handler = IQFeedIntradayCsvBarPriceHandler(csv_dir, events_queue, tickers, start_date=start_date) # Use the ML Intraday Prediction Strategy model_pickle_file = '/path/to/your/ml_model_lda.pkl' strategy = IntradayMachineLearningPredictionStrategy(tickers, events_queue, model_pickle_file, lags=5) strategy = Strategies(strategy, DisplayStrategy()) # Use the Naive Position Sizer (suggested quantities are followed) position_sizer = NaivePositionSizer() # Use an example Risk Manager risk_manager = ExampleRiskManager() # Use the default Portfolio Handler portfolio_handler = PortfolioHandler(initial_equity, events_queue, price_handler, position_sizer, risk_manager) # Use the ExampleCompliance component compliance = ExampleCompliance(config) # Use a simulated IB Execution Handler execution_handler = IBSimulatedExecutionHandler(events_queue, price_handler, compliance) # Use the Tearsheet Statistics statistics = TearsheetStatistics( config, portfolio_handler, title=["Intraday AREX Machine Learning Prediction Strategy"], periods=int(252 * 6.5 * 60) # Minutely periods ) # Set up the backtest backtest = Backtest(price_handler, strategy, portfolio_handler, execution_handler, position_sizer, risk_manager, statistics, initial_equity) results = backtest.simulate_trading(testing=testing) statistics.save(filename) return results
def run(config, testing, tickers, filename): # Set up variables needed for backtest events_queue = queue.Queue() csv_dir = config.CSV_DATA_DIR initial_equity = PriceParser.parse(100000.00) # Use Yahoo Daily Price Handler start_date = datetime.datetime(2009, 8, 3) end_date = datetime.datetime(2016, 8, 1) price_handler = YahooDailyCsvBarPriceHandler( csv_dir, events_queue, tickers, start_date=start_date, end_date=end_date ) # Use the KalmanPairsTrading Strategy strategy = KalmanPairsTradingStrategy(tickers, events_queue) strategy = Strategies(strategy, DisplayStrategy()) # Use the Naive Position Sizer (suggested quantities are followed) position_sizer = NaivePositionSizer() # Use an example Risk Manager risk_manager = ExampleRiskManager() # Use the default Portfolio Handler portfolio_handler = PortfolioHandler( initial_equity, events_queue, price_handler, position_sizer, risk_manager ) # Use the ExampleCompliance component compliance = ExampleCompliance(config) # Use a simulated IB Execution Handler execution_handler = IBSimulatedExecutionHandler( events_queue, price_handler, compliance ) # Use the Tearsheet Statistics title = ["Kalman Filter Pairs Trade on TLT/IEI"] statistics = TearsheetStatistics( config, portfolio_handler, title ) # Set up the backtest backtest = Backtest( price_handler, strategy, portfolio_handler, execution_handler, position_sizer, risk_manager, statistics, initial_equity ) results = backtest.simulate_trading(testing=testing) statistics.save(filename) return results
def run(config, testing, tickers, filename, start_date, end_date): # Set up variables needed for backtest events_queue = queue.Queue() csv_dir = config.CSV_DATA_DIR initial_equity = PriceParser.parse(500000.00) # Use Yahoo Daily Price Handler price_handler = SqliteDBBarPriceHandler( csv_dir, events_queue, tickers, start_date, end_date ) # Use the Buy and Hold Strategy strategy = CustomStrategy(tickers, events_queue) strategy = Strategies(strategy, DisplayStrategy()) # Use an example Position Sizer position_sizer = CustomPositionSizer() # Use an example Risk Manager risk_manager = ExampleRiskManager() # Use the default Portfolio Handler portfolio_handler = PortfolioHandler( initial_equity, events_queue, price_handler, position_sizer, risk_manager ) # Use the ExampleCompliance component compliance = ExampleCompliance(config) # Use a simulated IB Execution Handler execution_handler = IBSimulatedExecutionHandler( events_queue, price_handler, compliance ) # Use the default Statistics statistics = TearsheetStatistics( config, portfolio_handler, title="" ) # Set up the backtest backtest = Backtest( price_handler, strategy, portfolio_handler, execution_handler, position_sizer, risk_manager, statistics, initial_equity ) results = backtest.simulate_trading(testing=testing) statistics.save(filename) return results
def run(config, testing, tickers, filename): # Set up variables needed for backtest events_queue = queue.Queue() csv_dir = config.CSV_DATA_DIR initial_invst = 1000000.00 initial_equity = PriceParser.parse(initial_invst) # Use Yahoo Daily Price Handler price_handler = YahooDailyCsvBarPriceHandler( csv_dir, events_queue, tickers, ) # Use the KalmanPairsTrading Strategy strategy = KalmanPairsTradingStrategy(tickers, events_queue, initial_invst) strategy = Strategies(strategy, DisplayStrategy()) # Use the Naive Position Sizer (suggested quantities are followed) position_sizer = NaivePositionSizer() # Use an example Risk Manager risk_manager = ExampleRiskManager() # Use the default Portfolio Handler portfolio_handler = PortfolioHandler(initial_equity, events_queue, price_handler, position_sizer, risk_manager) # Use the ExampleCompliance component compliance = ExampleCompliance(config) # Use a simulated IB Execution Handler execution_handler = IBSimulatedExecutionHandler(events_queue, price_handler, compliance) # Use the default Statistics statistics = TearsheetStatistics(config, portfolio_handler, title="") # Set up the backtest backtest = Backtest(price_handler, strategy, portfolio_handler, execution_handler, position_sizer, risk_manager, statistics, initial_equity) results = backtest.simulate_trading(testing=testing) hist = results['cum_returns'] print('==:++==') print(hist.to_csv('6pair.csv', header=['date,total asset'])) statistics.save('output') return results
def run(config, testing, tickers, filename): # Set up variables needed for backtest events_queue = queue.Queue() csv_dir = config.CSV_DATA_DIR initial_equity = PriceParser.parse(500000.00) # Use Yahoo Daily Price Handler start_date = datetime.datetime(2014, 11, 11) end_date = datetime.datetime(2016, 9, 1) price_handler = YahooDailyCsvBarPriceHandler( csv_dir, events_queue, tickers, start_date=start_date, end_date=end_date ) # Use the Cointegration Bollinger Bands trading strategy weights = np.array([1.0, -1.213]) lookback = 15 entry_z = 1.5 exit_z = 0.5 base_quantity = 10000 strategy = CointegrationBollingerBandsStrategy( tickers, events_queue, lookback, weights, entry_z, exit_z, base_quantity ) strategy = Strategies(strategy, DisplayStrategy()) # Use the Naive Position Sizer # where suggested quantities are followed position_sizer = NaivePositionSizer() # Use an example Risk Manager risk_manager = ExampleRiskManager() # Use the default Portfolio Handler portfolio_handler = PortfolioHandler( initial_equity, events_queue, price_handler, position_sizer, risk_manager ) # Use the ExampleCompliance component compliance = ExampleCompliance(config) # Use a simulated IB Execution Handler execution_handler = IBSimulatedExecutionHandler( events_queue, price_handler, compliance ) # Use the Tearsheet Statistics title = ["Aluminium Smelting Strategy - ARNC/UNG"] statistics = TearsheetStatistics( config, portfolio_handler, title ) # Set up the backtest backtest = Backtest( price_handler, strategy, portfolio_handler, execution_handler, position_sizer, risk_manager, statistics, initial_equity ) results = backtest.simulate_trading(testing=testing) statistics.save(filename) return results
def run(config, testing, tickers, filename): # Set up variables needed for backtest events_queue = queue.Queue() csv_dir = config.CSV_DATA_DIR initial_equity = PriceParser.parse(500000.00) # Use Yahoo Daily Price Handler start_date = datetime.datetime(2012, 10, 15) end_date = datetime.datetime(2016, 2, 2) price_handler = YahooDailyCsvBarPriceHandler( csv_dir, events_queue, tickers, start_date=start_date, end_date=end_date ) # Use the Sentdex Sentiment trading strategy sentiment_handler = SentdexSentimentHandler( config.CSV_DATA_DIR, "sentdex_sample.csv", events_queue, tickers=tickers, start_date=start_date, end_date=end_date ) base_quantity = 2000 sent_buy = 6 sent_sell = -1 strategy = SentdexSentimentStrategy( tickers, events_queue, sent_buy, sent_sell, base_quantity ) strategy = Strategies(strategy, DisplayStrategy()) # Use the Naive Position Sizer # where suggested quantities are followed position_sizer = NaivePositionSizer() # Use an example Risk Manager risk_manager = ExampleRiskManager() # Use the default Portfolio Handler portfolio_handler = PortfolioHandler( initial_equity, events_queue, price_handler, position_sizer, risk_manager ) # Use the ExampleCompliance component compliance = ExampleCompliance(config) # Use a simulated IB Execution Handler execution_handler = IBSimulatedExecutionHandler( events_queue, price_handler, compliance ) # Use the Tearsheet Statistics title = ["Sentiment Sentdex Strategy"] statistics = TearsheetStatistics( config, portfolio_handler, title, benchmark="SPY" ) # Set up the backtest backtest = Backtest( price_handler, strategy, portfolio_handler, execution_handler, position_sizer, risk_manager, statistics, initial_equity, sentiment_handler=sentiment_handler ) results = backtest.simulate_trading(testing=testing) statistics.save(filename) return results
def run(config, testing, tickers, filename): # Set up variables needed for backtest pickle_path = "/path/to/your/model/hmm_model_spy.pkl" events_queue = queue.Queue() csv_dir = config.CSV_DATA_DIR initial_equity = PriceParser.parse(500000.00) # Use Yahoo Daily Price Handler start_date = datetime.datetime(2005, 1, 1) end_date = datetime.datetime(2014, 12, 31) price_handler = YahooDailyCsvBarPriceHandler(csv_dir, events_queue, tickers, start_date=start_date, end_date=end_date, calc_adj_returns=True) # Use the Moving Average Crossover trading strategy base_quantity = 10000 strategy = MovingAverageCrossStrategy(tickers, events_queue, base_quantity, short_window=10, long_window=30) strategy = Strategies(strategy, DisplayStrategy()) # Use the Naive Position Sizer # where suggested quantities are followed position_sizer = NaivePositionSizer() # Use regime detection HMM risk manager hmm_model = pickle.load(open(pickle_path, "rb")) risk_manager = RegimeHMMRiskManager(hmm_model) # Use an example Risk Manager #risk_manager = ExampleRiskManager() # Use the default Portfolio Handler portfolio_handler = PortfolioHandler(initial_equity, events_queue, price_handler, position_sizer, risk_manager) # Use the ExampleCompliance component compliance = ExampleCompliance(config) # Use a simulated IB Execution Handler execution_handler = IBSimulatedExecutionHandler(events_queue, price_handler, compliance) # Use the Tearsheet Statistics title = ["Trend Following Regime Detection with HMM"] statistics = TearsheetStatistics(config, portfolio_handler, title, benchmark="SPY") # Set up the backtest backtest = Backtest(price_handler, strategy, portfolio_handler, execution_handler, position_sizer, risk_manager, statistics, initial_equity) results = backtest.simulate_trading(testing=testing) statistics.save(filename) return results
def run(config, testing, tickers, filename, n, n_window): # Set up variables needed for backtest events_queue = queue.Queue() csv_dir = config.CSV_DATA_DIR initial_equity = PriceParser.parse(500000.00) d_tickers = OrderedDict() for ticker in tickers: ticker_path = os.path.join(csv_dir, "%s.csv" % ticker) df = pd.io.parsers.read_csv( ticker_path, header=0, parse_dates=True, dayfirst=True, index_col=1, names=("Ticker", "Time", "Bid", "Ask") ) del df["Ticker"] d_tickers[ticker] = df if len(tickers) == 1: ticker = tickers[0] data = d_tickers[ticker] else: data = pd.Panel.from_dict(d_tickers) data = data.transpose(2, 1, 0) print(data) print("Null:") print(data.isnull().sum()) # Use Generic Tick Handler with Pandas Tick Iterator price_event_iterator = PandasTickEventIterator(data, tickers[0]) price_handler = GenericPriceHandler(events_queue, price_event_iterator) # Use the Display Strategy and ExampleStrategy strategy1 = DisplayStrategy(n=n, n_window=n_window) strategy2 = ExampleStrategy(tickers, events_queue) strategy = Strategies(strategy1, strategy2) # strategy = ExampleStrategy(tickers, events_queue) # Use an example Position Sizer position_sizer = FixedPositionSizer() # Use an example Risk Manager risk_manager = ExampleRiskManager() # Use the default Portfolio Handler portfolio_handler = PortfolioHandler( initial_equity, events_queue, price_handler, position_sizer, risk_manager ) # Use the ExampleCompliance component compliance = ExampleCompliance(config) # Use a simulated IB Execution Handler execution_handler = IBSimulatedExecutionHandler( events_queue, price_handler, compliance ) # Use the default Statistics statistics = SimpleStatistics(config, portfolio_handler) # Set up the backtest backtest = Backtest( price_handler, strategy, portfolio_handler, execution_handler, position_sizer, risk_manager, statistics, initial_equity ) results = backtest.simulate_trading(testing=testing) statistics.save(filename) return results