<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def order(self, signal, symbol, quantity=0, **kwargs):
 """ Send an order for the selected instrument :Parameters: direction : string Order Type (BUY/SELL, EXIT/FLATTEN) symbol : string instrument symbol quantity : int Order quantiry :Optional: limit_price : float In case of a LIMIT order, this is the LIMIT PRICE expiry : int Cancel this order if not filled after *n* seconds (default 60 seconds) order_type : string Type of order: Market (default), LIMIT (default when limit_price is passed), MODIFY (required passing or orderId) orderId : int If modifying an order, the order id of the modified order target : float Target (exit) price initial_stop : float Price to set hard stop stop_limit: bool Flag to indicate if the stop should be STOP or STOP LIMIT. Default is ``False`` (STOP) trail_stop_at : float Price at which to start trailing the stop trail_stop_type : string Type of traiing stop offset (amount, percent). Default is ``percent`` trail_stop_by : float Offset of trailing stop distance from current price fillorkill: bool Fill entire quantiry or none at all iceberg: bool Is this an iceberg (hidden) order tif: str Time in force (DAY, GTC, IOC, GTD). default is ``DAY`` """

        self.log_algo.debug('ORDER: %s %4d %s %s', signal,
                            quantity, symbol, kwargs)
        if signal.upper() == "EXIT" or signal.upper() == "FLATTEN":
            position = self.get_positions(symbol)
            if position['position'] == 0:
                return

            kwargs['symbol'] = symbol
            kwargs['quantity'] = abs(position['position'])
            kwargs['direction'] = "BUY" if position['position'] < 0 else "SELL"

            # print("EXIT", kwargs)

            try:
                self.record({symbol+'_POSITION': 0})
            except Exception as e:
                pass

            if not self.backtest:
                self._create_order(**kwargs)

        else:
            if quantity == 0:
                return

            kwargs['symbol'] = symbol
            kwargs['quantity'] = abs(quantity)
            kwargs['direction'] = signal.upper()

            # print(signal.upper(), kwargs)

            # record
            try:
                quantity = abs(quantity)
                if kwargs['direction'] != "BUY":
                    quantity = -quantity
                self.record({symbol+'_POSITION': quantity})
            except Exception as e:
                pass

            if not self.backtest:
                self._create_order(**kwargs)