def run(self, prices, timestamp, cash, **kwargs): symbol = "AAPL" orders = Orders() if (prices.loc[timestamp, symbol] * 100) < cash: orders.add_order(symbol, 100) return orders
def run(self, prices, timestamp, cash, data, **kwargs): """ Takes bollinger event data and generates orders """ events = data['events'] if not hasattr(self, 'sell_orders'): self.setup(events) orders = Orders() # Find buy events for this timestamp timestamps = prices.index daily_data = events.loc[timestamp] order_series = daily_data[daily_data > 0] # Sell 5 market days after bought index = timestamps.get_loc(timestamp) if index + 5 >= len(timestamps): sell_datetime = timestamps[-1] else: sell_datetime = timestamps[index + 5] symbols = order_series.index self.sell_orders.loc[sell_datetime, symbols] -= 100 daily_sell_data = self.sell_orders.loc[timestamp] daily_sell_orders = daily_sell_data[daily_sell_data != 0] # Buy and sell in increments of 100 for symbol in daily_sell_orders.index: orders.add_order(symbol, -100) daily_event_data = events.loc[timestamp] daily_buy_orders = daily_event_data[daily_event_data != 0] # Buy and sell in increments of 100 for symbol in daily_buy_orders.index: orders.add_order(symbol, 100) return orders
def test_quickstart(): prophet = Prophet() prophet.set_universe(['AAPL', 'XOM']) prophet.register_data_generators(YahooCloseData(cache_path=CACHE_PATH)) prophet.set_order_generator(OrderGenerator()) backtest = prophet.run_backtest(start=datetime(2010, 1, 1), end=datetime(2014, 11, 21)) prophet.register_portfolio_analyzers(default_analyzers) analysis = prophet.analyze_backtest(backtest) assert round(analysis['sharpe'], 10) == 1.1083876014 assert round(analysis['average_return'], 10) == 0.0010655311 assert round(analysis['cumulative_return'], 10) == 2.2140809296 assert round(analysis['volatility'], 10) == 0.0152607097 today = datetime(2014, 11, 10) expected_orders = Orders(Order(symbol='AAPL', shares=100)) assert prophet.generate_orders(today) == expected_orders
def test_quickstart(): prophet = Prophet() prophet.set_universe(['AAPL', 'XOM']) price_generator = YahooData('Adj Close', 'prices', cache_path=CACHE_PATH) prophet.register_data_generators(price_generator) prophet.set_order_generator(OrderGenerator()) backtest = prophet.run_backtest(start=datetime(2010, 1, 1), end=datetime(2014, 11, 21)) prophet.register_portfolio_analyzers(default_analyzers) analysis = prophet.analyze_backtest(backtest) assert round(analysis['sharpe'], 10) == 1.0967430073 assert round(analysis['average_return'], 10) == 0.0010501702 assert round(analysis['cumulative_return'], 10) == 2.1604345132 assert round(analysis['volatility'], 10) == 0.0152004028 today = datetime(2014, 11, 10) expected_orders = Orders(Order(symbol='AAPL', shares=100)) assert prophet.generate_orders(today) == expected_orders