Esempio n. 1
0
 def order_target_percent(asset,
                          percent,
                          style=OrderStyle.MarketOrder,
                          sec_type='STK',
                          trade_trace_fn=None):
     if percent == 0:
         Order.order_target(asset, 0, style, sec_type, trade_trace_fn)
     else:
         portfolio = API().get_portfolio_info()
         current_percent = portfolio.get_percentage(asset)
         order_cash = (percent -
                       current_percent) * portfolio.net_liquidation
         message_tempalte = """percent=%s, 
                               current_percent=%s, 
                               net_liquidation=%s, 
                               order_cash=%s, 
                               available_funds=%s"""
         message = message_tempalte % (
             percent, current_percent, portfolio.net_liquidation,
             order_cash, portfolio.available_funds)
         Order.get_logger().info(message)
         # if order_cash < portfolio.available_funds:
         try:
             market_price = API().get_market_price(asset)
         except Exception:
             from wrapi.data import Data
             market_price = Data().current(asset)
         amount = int(round(order_cash / market_price))
         return Order.order(asset, amount, style, sec_type, trade_trace_fn)
Esempio n. 2
0
class IBCurrent(AbstractCurrentDataProvider):
    def __init__(self):
        self.api = API()

    def get_data_by_symbol(self, symbol):
        price = self.api.get_market_price(symbol)
        count = 0
        for i in range(5):
            if price < 0:
                count += 1
                if count <= 3:
                    time.sleep(3)
                    continue
                else:
                    raise Exception(
                        'The price is negative for 3 times, price = %s' %
                        price)
            else:
                return price

    def get_current_data(self, symbols):
        try:
            return map(self.get_data_by_symbol, symbols)
        except Exception as e:
            get_logger().error('Trace: ' + traceback.format_exc(), False)
            get_logger().error('Error: get current price from IB failed:' +
                               str(e))
            return None
Esempio n. 3
0
 def get_open_orders(asset=None, include_option=False):
     orders = API().get_open_orders(include_option)
     if asset:
         orders = filter(lambda x: x[1] == asset, orders)
     rows = map(lambda x: x[1:], orders)
     orderids = map(lambda x: int(x[0]), orders)
     fields = ['symbol', 'action', 'quantity']
     return pd.DataFrame(rows, columns=fields, index=orderids)
Esempio n. 4
0
 def save_portfolio_info(strategy_name):
     date = datetime.datetime.now(
         tz=pytz.timezone('US/Eastern')).strftime('%Y-%m-%d')
     dic = PortfolioDAO.read_portfolio_info(strategy_name)
     dic[date] = API().get_portfolio_info().to_dict()
     file_path = PathMgr.get_strategies_portfolio_file(strategy_name)
     ensure_parent_dir_exists(file_path)
     write_to_file(file_path, json.dumps(dic, indent=4, sort_keys=True))
Esempio n. 5
0
 def order_target(asset,
                  amount,
                  style=OrderStyle.MarketOrder,
                  sec_type='STK',
                  trade_trace_fn=None):
     portfolio = API().get_portfolio_info()
     delta_amount = amount - portfolio.positions[asset].amount
     return Order.order(asset, delta_amount, style, sec_type,
                        trade_trace_fn)
Esempio n. 6
0
 def order(asset,
           amount,
           style=OrderStyle.MarketOrder,
           sec_type='STK',
           trade_trace_fn=None):
     # if trade_trace_fn is not None:
     #     trade_trace_fn(asset, amount)
     [order_type, price] = style
     if amount > 0:
         return API().order(asset, sec_type, order_type, amount, 'BUY',
                            price)
     elif amount < 0:
         return API().order(asset, sec_type, order_type, -amount, 'SELL',
                            price)
     else:
         pass
     if trade_trace_fn is not None and amount != 0:
         trade_trace_fn(asset, amount)
Esempio n. 7
0
class IBProvider(AbstractHistoricalDataProvider):

    def __init__(self):
        self.api = API()

    def history(self, symbol, field, window):
        fields_dic = {'open': 1, 'close': 4, 'high': 2, 'low': 3,
                      'price': 4, 'unadj': 4}
        results = self.api.get_historical_data(symbol, window, 'day')
        return map(lambda x: [x[0], x[fields_dic[field]]], results)

    def history_min(self, symbol, window):
        days_window = window/390 + 1
        records = self.api.get_historical_data(symbol, days_window, 'min')
        results = []
        for record in records[-window:]:
            tradetime = record[0]
            if tradetime.hour == 9 and tradetime.minute == 30 and tradetime.second == 0:
                tradetime = datetime.datetime(tradetime.year, tradetime.month, tradetime.day, 9, 30, 1)
            close = record[4]
            results.append([tradetime, close])
        return results
Esempio n. 8
0
 def set_stop_price(asset, stop_price):
     quantity = API().get_portfolio_info().get_quantity(asset)
     return Order.order_target(asset, -quantity,
                               OrderStyle.StopOrder(stop_price))
Esempio n. 9
0
 def cancel_order(order_id):
     API().cancel_order(order_id)
Esempio n. 10
0
 def __init__(self):
     self.api = API()
Esempio n. 11
0
 def portfolio(self):
     return API().get_portfolio_info()