def setUp(self): self.test_sell_event = OrderEvent("CS.D.AUDUSD.TODAY.IP", "SELL", 1) self.test_buy_event = OrderEvent("CS.D.AUDUSD.TODAY.IP", "BOT", 1) self.events_queue = queue.Queue() self.config = settings.from_file(settings.DEFAULT_CONFIG_FILENAME, testing=True) self.igclient = IGClient(self.config)
def refine_orders(self, portfolio, sized_order): """ Uses the Hidden Markov Model with the percentage returns to predict the current regime, either 0 for desirable or 1 for undesirable. Long entry trades will only be carried out in regime 0, but closing trades are allowed in regime 1. """ # Deterime the HMM predicted regime as an integer # equal to 0 (desirable) or 1 (undesirable) price_handler = portfolio.price_handler regime_1, regime_2 = self.determine_regime(price_handler, sized_order) action = sized_order.action # Create the order event, irrespective of the regime. # It will only be returned if the correct conditions # are met below. order_event = OrderEvent(sized_order.ticker, sized_order.action, sized_order.quantity) # If in the desirable regime, let buy and sell orders # works as normal if regime_1 == 0 and regime_2 == 0: print('Regime 0') if self.invested == False: print('Open') if action == "BOT": self.invested == False return [order_event] elif action == "SLD": self.invested == True return [order_event] elif self.invested == True: print('Close') if action == "BOT": self.invested == True return [order_event] elif action == "SLD": self.invested == False return [order_event] # If in the undesirable regime, do not allow any buy orders # and only let close orders through if the strategy is # already invested (from a previous desirable regime) elif regime_1 == 1 or regime_2 == 1: print('Regime 1') if self.invested == False: print('Bad Market Condition, do not invest') if action == "BOT": self.invested == False return [] elif action == "SLD": self.invested == False return [] elif self.invested == True: print('Bad Trade, get out of the trade') if action == "BOT": self.invested == True return [order_event] elif action == "SLD": self.invested == False return [order_event]
def refine_orders(self, portfolio, sized_order): """ This RiskManagerMock object simply lets the sized order through, creates the corresponding OrderEvent object and adds it to a list. """ order_event = OrderEvent(sized_order.ticker, sized_order.action, sized_order.quantity) return [order_event]
def test_place_orders_onto_queue_basic_check(self): """ Tests the "_place_orders_onto_queue" method as a basic sanity check. """ order = OrderEvent("MSFT", "BOT", 100) order_list = [order] self.portfolio_handler._place_orders_onto_queue(order_list) ret_order = self.portfolio_handler.events_queue.get() self.assertEqual(ret_order.ticker, "MSFT") self.assertEqual(ret_order.action, "BOT") self.assertEqual(ret_order.quantity, 100)