示例#1
0
    def __init__(self):
        self._stock_levels = {}
        self._sides = item.initialise_sides(self._stock_levels)
        self._drinks = item.initialise_drinks(self._stock_levels)
        self._ingredients = item.initialise_ingredients(self._stock_levels)
        self._buns = item.initialise_buns(self._stock_levels)
        self._order_manager = OrderManager()
        self._lookup = {}
        obj_list = (*self._sides, *self._drinks, *self._ingredients,
                    *self._buns)
        for obj in obj_list:
            self._lookup[obj.name] = obj

        standard_burger_buns = [self.get_object_by_name("Sesame bun")] * 2
        standard_burger_fillings = [
            self.get_object_by_name(name)
            for name in ("Beef Patty", "Cheddar Cheese", "Tomato Sauce")
        ]
        standard_wrap_fillings = [
            self.get_object_by_name(name)
            for name in ("Chicken Patty", "Tomato", "Lettuce")
        ]

        self._standard_burger = Burger(standard_burger_fillings,
                                       standard_burger_buns)
        self._standard_wrap = Wrap(standard_wrap_fillings)
示例#2
0
文件: tests.py 项目: LMuter/StockTool
    def setUp(self):
        self.order_manager = OrderManager()

        self.person_1 = new_person(
                {'username': '******', 'name': 'Name1', 'surname': 'Surname1', 'password': '******',
                 'passwordRetype': 'test123', 'email': '*****@*****.**'})

        self.person_1.number_of_stocks = 5
        self.person_1.save()

        self.person_2 = new_person(
                {'username': '******', 'name': 'Name2', 'surname': 'Surname2', 'password': '******',
                 'passwordRetype': 'test123', 'email': '*****@*****.**'})

        self.person_3 = new_person(
                {'username': '******', 'name': 'Name3', 'surname': 'Surname3', 'password': '******',
                 'passwordRetype': 'test123', 'email': '*****@*****.**'})

        self.bidding_round = BiddingRound.objects.create(is_active=True)

        stock_order_1 = StockOrder()
        stock_order_1.owner = self.person_1
        stock_order_1.order_type = BUY
        stock_order_1.order_price_per_share = 8.5
        stock_order_1.order_amount_of_shares = 10
        stock_order_1.bidding_round = self.bidding_round

        stock_order_2 = StockOrder()
        stock_order_2.owner = self.person_1
        stock_order_2.order_type = BUY
        stock_order_2.order_price_per_share = 7.5
        stock_order_2.order_amount_of_shares = 5
        stock_order_2.bidding_round = self.bidding_round

        stock_order_3 = StockOrder()
        stock_order_3.owner = self.person_1
        stock_order_3.order_type = BUY
        stock_order_3.order_price_per_share = 6.5
        stock_order_3.order_amount_of_shares = 15
        stock_order_3.bidding_round = self.bidding_round

        stock_order_arch = StockOrder()
        stock_order_arch.owner = self.person_1
        stock_order_arch.order_type = SELL
        stock_order_arch.order_price_per_share = 5
        stock_order_arch.order_amount_of_shares = 100
        stock_order_arch.bidding_round = self.bidding_round
        stock_order_arch.is_archived = True

        self.order_1_person_1 = self.order_manager.place_order(stock_order_1)
        self.order_2_person_1 = self.order_manager.place_order(stock_order_2)
        self.order_3_person_1 = self.order_manager.place_order(stock_order_3)
        self.order_archived_person_1 = create_stock_order(stock_order_arch)

        self.order_1_person_2 = StockOrder.objects.create(owner=self.person_2)
        self.order_2_person_2 = StockOrder.objects.create(owner=self.person_2)

        self.order_1_person_3 = StockOrder.objects.create(owner=self.person_2)
示例#3
0
def main():

    try:
        market = sys.argv[1]
    except IndexError:
        market = 'not a currency pair'

    if market not in constants.MARKETS:
        while True:
            market = str(
                input(
                    "Please specify which currency pair to use (btcusd, ltcusd, etc)."
                ))
            if market in constants.MARKETS:
                break

    running = True

    md = MarketDataInterface(market)
    ts = TradingStrategy(market)
    om = OrderManager(market)

    while running:
        action = ts.get_final_strategy()
        price = (md.get_ticker_data(False))['value']
        order_details = om.get_order_status(id)

        if action['action'] == "buy":
            result = om.buy(pair=market, risk=action['risk'], price=price)
            order_details = om.get_order_status(result)
            if result[0]:
                logging.info('Successfully bought {0}{1} at {2}{3}'.format(
                    order_details['actual_amount'], market[:3],
                    order_details['actual_end_price'], market[-3:]))
            else:
                logging.info('Buy failed')

        elif action['action'] == "sell":
            result = om.sell(pair=market, risk=action['risk'], price=price)
            order_details = om.get_order_status(result)
            if result:
                logging.info('Successfully sold {0}{1} at {2}{3}'.format(
                    order_details['amount'], market[:3],
                    order_details['price'], market[-3:]))
            else:
                logging.info('Sell failed')

        elif action['action'] == "wait":
            logging.info('Waited {}s, did not trade'.format(
                settings.MAIN_TIMER))

        else:
            running = False
            logging.error('Unsupported action')

        time.sleep(settings.MAIN_TIMER)
        if not running:
            print('order error')
示例#4
0
    def test_checker(self):
        #we expect the first order created to have an id of 0
        self.x = OrderManager()

        assert self.x.id_exists('0') == False

        self.x.create_new_order()

        assert self.x.id_exists('0') == True
    def __init__(self):
        # 股票 -> 策略
        self.strategy_instance = StrategyFactory().create()
        # 股票 -> 仓位
        self.stock_position_dic = {}
        # 订单管理
        self.order_manager = OrderManager(self.stock_position_dic)

        self.quote_manager = QuoteManager()

        self.cumPNL = 0
示例#6
0
    def test_setters(self):
        self.x = OrderManager()

        id1 = self.x.create_new_order()

        assert len(self.x.orders) == 1
        assert type(self.x.orders[0]) == Order
        assert type(self.x.get_order_by_id(id1)) == Order

        id2 = self.x.create_new_order()

        assert len(self.x.orders) == 2
示例#7
0
    def test_invalid_cases(self):
        self.x = OrderManager()

        with pytest.raises(TypeError):
            self.x.get_order_by_id('1.1')

        with pytest.raises(TypeError):
            self.x.get_order_by_id(1.1)

        with pytest.raises(KeyError):
            self.x.get_order_by_id('1')

        assert self.x.id_exists('a') == False
示例#8
0
 def process_order(self, order, delay=0):
     order_manager = OrderManager(self)
     is_acknowledged = order_manager.acknowledge_order(order)
     time.sleep(delay)
     if is_acknowledged:
         print("order is acknowledged")
         print(order.acknowledged)
         print(order.rejected)
         print(order_manager.warehouses)
         order_manager.ship_order(order=order)
     else:
         print("There is no inventory for this order")
         print(order.acknowledged)
         print(order.rejected)
         print(order_manager.warehouses)
    def setUp(self):
        self.lp_2_gateway = deque()
        self.ob_2_ts = deque()
        self.ts_2_om = deque()
        self.ms_2_om = deque()
        self.om_2_ts = deque()
        self.gw_2_om = deque()
        self.om_2_gw = deque()

        self.liquidityProvider = LiquidityProvider(self.lp_2_gateway)
        self.bookBuilder = OrderBook(self.lp_2_gateway, self.ob_2_ts)
        self.tradingStrategy = TradingStrategy(self.ob_2_ts, self.ts_2_om,
                                               self.om_2_ts)
        self.marketSimulator = MarketSimulator(self.om_2_gw, self.gw_2_om)
        self.orderManager = OrderManager(self.ts_2_om, self.om_2_ts,
                                         self.om_2_gw, self.gw_2_om)
示例#10
0
    def __init__(self, exchange):
        self.exchange = exchange
        self.orderManager = OrderManager()
        self.logger.info("Initiate Price Arbitrage Algo")
        self._buildFxTree() # build fx tree for all possible conversions
        # build list of leaves
        root = self.tree.root  # get root
        w = Walker()  # tree walker
        # unwrap nested tuple returned by Walker to a flat list of FXPair
        def unwrapWalkerToFlatList(x):
            if isinstance(x, tuple):
                if len(x) == 0: return []
                s = []
                for t in x:
                    s.extend(unwrapWalkerToFlatList(t))
                return s
            else:
                if x.getFXPair() is None: return [] # skip root element
                else: return [x.getFXPair()]

        self.conversion_paths = {} # all conversion paths for the pair <pair: [pair1, pair2...]>
        # build list of all conversion paths
        for k in FXNode.treeNodesWithSamePair.keys():  # iterate all pairs
            alternative_list = FXNode.treeNodesWithSamePair[k]  # get list of leaves representing same pair but with different conversion path
            paths = []
            for c in alternative_list:  # iterate all leaves (same pair but different paths)
                if not c.is_leaf:
                    continue  # iterate only leaves
                path = unwrapWalkerToFlatList(w.walk(root, c))  # get path from root to this leaf
                paths.append(path) # list of lists

            if not k in self.conversion_paths.keys():
                self.conversion_paths[k] = list(paths)
            else:
                self.conversion_paths[k].append(list(paths))

        # set event triggers
        self.exchange.setEventHandler(tradeHandler=self.updateTradeHandler, orderHandler=self.updateOrderHandler)
示例#11
0
    def __init__(self, *args, **kwargs):
        super(TestOrderManager, self).__init__(*args, **kwargs)
        self.server = app.test_client()
        self.order_manager = OrderManager(self.server)
        self.test_data_key = "1"
        self.test_data = {"Toppings": "beef", "Sizes": "Large"}
        self.test_data_key2 = "2"
        self.test_data2 = {"Toppings": "Chicken", "Sizes": "Small"}
        self.test_data_key3 = "3"
        self.test_data3 = {"Toppings": "Fish", "Sizes": "Medium"}

        #reset what is on the test_client first due to other test
        r = self.server.get(self.order_manager._URL).get_json()
        for k in r.keys():
            self.server.delete(self.order_manager._URL, json=k)

        #initialize the server and push the test_data first
        #use dumps because it is more consistent with the ordermanager adding method
        self.server.post(self.order_manager._URL,
                         json={self.test_data_key: json.dumps(self.test_data)})
        self.server.post(
            self.order_manager._URL,
            json={self.test_data_key2: json.dumps(self.test_data2)})
示例#12
0
def main():
    lp_2_gateway = deque()
    ob_2_ts = deque()
    ts_2_om = deque()
    om_2_ts = deque()
    gw_2_om = deque()
    om_2_gw = deque()

    lp = LiquidityProvider(lp_2_gateway)
    ob = OrderBook(lp_2_gateway, ob_2_ts)
    ts = TradingStrategy(ob_2_ts, ts_2_om, om_2_ts)
    ms = MarketSimulator(om_2_gw, gw_2_om)
    om = OrderManager(ts_2_om, om_2_ts, om_2_gw, gw_2_om)

    lp.read_tick_data_from_data_source()

    while len(lp_2_gateway) > 0:
        ob.handle_order_from_gateway()
        ts.handle_input_from_bb()
        om.handle_input_from_ts()
        ms.handle_order_from_gw()
        om.handle_input_from_market()
        ts.handle_response_from_om()
        lp.read_tick_data_from_data_source()
示例#13
0
def main():

    parser = argparse.ArgumentParser()
    parser.add_argument('market',
                        type=str,
                        choices=constants.MARKETS,
                        help='currency pair - btcusd, ltcusd, etc')
    market = (parser.parse_args()).market

    logging.info('the market {} was chosen'.format(market))

    ts = TradingStrategy(market)
    om = OrderManager(market)
    md = MarketDataInterface(market)

    running = True

    while running:
        action = ts.get_final_strategy()
        price = Decimal(str((md.get_ticker_data(False))[3]))

        time = datetime.datetime.now()
        if abs((time - datetime.datetime.strptime(
                md.get_ticker_data(False)[2],
                '%Y-%m-%d %H:%M:%S')).seconds) > 600:
            logging.error('database is out of date, exiting')
            running = False

        balance = om.get_balance()
        if None in balance.values():
            logging.info('failed to get account balance')

        try:
            if action['action'] == 'buy':
                amount = (Decimal(str(action['risk'])) *
                          Decimal(balance['second_available']) / price)
            elif action['action'] == 'sell':
                amount = (Decimal(str(action['risk'])) *
                          Decimal(balance['available']))
            else:
                amount = Decimal('0')
        except TypeError:
            logging.exception('could not determine amount')
            amount = Decimal('0')

        if action['action'] in ['buy', 'sell']:
            if market[-3:] in ['usd', 'eur']:
                if (amount * price) < constants.EUR_USD_MIN_TRANSACTION_SIZE:
                    action['action'] = 'wait'
                    amount = Decimal('0')
                    logging.info(
                        'do not have minimum amount ({}) to trade'.format(
                            constants.EUR_USD_MIN_TRANSACTION_SIZE))
                price = price.quantize(Decimal('.01'))

                if market[:3] in ['xrp', 'usd', 'eur']:
                    amount = amount.quantize(Decimal('.00001'))
                else:
                    amount = amount.quantize(Decimal('.00000001'))

            elif market[-3:] == 'btc':
                if (amount * price) < constants.BTC_MIN_TRANSACTION_SIZE:
                    action['action'] = 'wait'
                    amount = Decimal('0')
                    logging.info(
                        'do not have minimum amount ({}) to trade'.format(
                            constants.BTC_MIN_TRANSACTION_SIZE))
                price = price.quantize(Decimal('.00000001'))

        if action['action'] == 'buy':
            sleep(1)
            order_id = om.buy(price=price, amount=amount)
            if order_id:
                logging.info(
                    'successfully bought {amount}{currency_one} at {price}{currency_two} each'
                    .format(amount=amount,
                            currency_one=market[:3],
                            price=price,
                            currency_two=market[-3:]))

        elif action['action'] == 'sell':
            sleep(1)
            order_id = om.sell(price=price, amount=amount)
            if order_id:
                logging.info(
                    'successfully sold {amount}{currency_one} at {price}{currency_two} each'
                    .format(amount=amount,
                            currency_one=market[:3],
                            price=price,
                            currency_two=market[-3:]))

        elif action['action'] == 'wait':
            logging.info('waiting {}s, did not trade'.format(
                settings.MAIN_TIMER))

        else:
            running = False
            logging.error(
                'exiting trader - unsupported action (supported actions: buy, sell, wait), {}'
                .format(action))

        sleep(1)
        open_orders = om.get_open_orders()
        if open_orders:
            for order in open_orders:
                time = datetime.datetime.now().timestamp()
                sleep(1)
                if datetime.datetime.strptime(
                        order['datetime'],
                        '%Y-%m-%d %H:%M:%S').timestamp() < time - 21600:
                    om.cancel_order(order['id'])

        sleep(settings.MAIN_TIMER)
        logging.info('waited {}s to trade again'.format(settings.MAIN_TIMER))
示例#14
0
 def setUp(self):
     self.order_manager = OrderManager()
示例#15
0
#COMMISSION      = .0                        # Cost in dollars per share traded
#COMMISSION_MIN  = .0                        # Minimum cost in dollars per stock traded
#COMMISSION_MAX  = .0                        # Maximum cost in percent of trade value
#SLIPPAGE        = .0                        # Average slippage in price due to market volatility

# Create QuoteManager object
quote_manager = QuoteManager(DB_FILEPATH)

# Create AccountManager object
my_account = AccountManager(START_BALANCE, MARGIN_PERCENT, quote_manager)

# Create OrderManager object
order_manager = OrderManager(quote_manager,
                             my_account,
                             slippage=SLIPPAGE,
                             commission_min=COMMISSION_MIN,
                             commission=COMMISSION,
                             commission_max=COMMISSION_MAX)

# Create an order_history DataFrame
order_history = {}

# Load signals data
signals = pd.read_csv(SIGNALS_PATH, index_col=0)
signal_dates = [date.replace('-', '_') for date in signals.index]

# Load GDX component symbols
gdx_symbols = pd.read_csv(GDX_CSV_PATH).symbol
gdx_symbols = gdx_symbols[gdx_symbols.isin(signals.columns)]

# Skip days until START_DAY is found
示例#16
0
    def test_init(self):
        self.x = OrderManager()

        assert type(self.x._orders) == dict
        assert self.x._up_to_id == 0
示例#17
0
 def test_get_signature(self):
     om = OrderManager('btcusd')
     self.assertDictEqual(om._OrderManager__get_signature(),
                          {'key': 'abcdefghijklmnopqrstuvwxyz123456',
                           'signature': '7728462B38496C189AFAED03A0C51FAB7D2358FA0FE1995C976FF755E794489D',
                           'nonce': '1563871382'})
示例#18
0
                # process_order(signal_dict)
                # data.db_append_history(signal_dict)
                # print('Signal "%s" zpracovan s nasledujicimi parametry:' % signal_dict['puvodni_zprava'])
                # print("Operace: ", signal_dict['operace'])
                # print("Mnozstvi:", int(signal_dict['mnozstvi'])*int(signal_dict['nasobeni']))
                # print("Cena (signal/skutecnost): %d/%d" % (signal_dict['cena'], signal_dict['skutecna_cena']))
                # print("Vysledek: %s - ID: %d" % (signal_dict['vysledek'], signal_dict['order_id']))
        except Exception as loop_error:
            tg_client.send_message("me", "CHYBA: %s" % loop_error)
            raise


if __name__ == "__main__":
    print("Spoustim pripojeni k API")
    try:
        tg_client, tws_client = get_clients()

        orderman = OrderManager(tws_client, tws_queue)

        tg_client.start()
        # TODO: Vytvorit sjednocenou inicializacni metodu obsahujici server clock a ID printout
        while tws_client.is_error():
            print(tws_client.get_error())
        tws_client.refresh_next_id()
    except Exception as e:
        print("[CHYBA!]: Nepovedlo se pripojit k TWS nebo Telegramu")
        traceback.print_exc()

    the_loop()