コード例 #1
0
 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]
コード例 #3
0
 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]
コード例 #4
0
 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)