Пример #1
0
class Interpreter(object):
    def __init__(self):
        self.trader = Trader()
        self.markets = settings.MARKETS
        self.coins = settings.COINS

    def _balance(self):
        try:
            balance_results = [self.trader.get_balance(i) for i in self.markets]
            balance = dict(zip(self.markets, balance_results))
        except:
            logger.exception("An error occurred when trying to fetch the balance")

        # Log
        totals = {key: 0 for key in self.coins}
        for market in self.markets:
            for coin in self.coins:
                balance_coin = balance.get(market).get(coin).get('free')
                totals[coin] += balance_coin
                logger.info("{}: {} {}".format(market, balance_coin, coin))

        for coin, volume in totals.items():
            logger.info("Total {}: {}".format(coin, volume))

    def _order_info(self, market, coin, order_id):
        order = self.trader.fetch_order(market.upper(), coin.upper(), order_id)
        logger.info("\n{}".format(pprint.pformat(order)))

    def _order_cancel(self, market, coin, order_id):
        cancellation = self.trader.cancel_order(market.upper(), coin.upper(), order_id)
        logger.info("\n{}".format(pprint.pformat(cancellation)))

    def _order_sell(self, market, coin, volume, rate):
        order = self.trader.sell(market.upper(), coin.upper(), volume, rate)
        logger.info("\n{}".format(pprint.pformat(order)))

    def _order_buy(self, market, coin, volume, rate):
        order = self.trader.buy(market.upper(), coin.upper(), volume, rate)
        logger.info("\n{}".format(pprint.pformat(order)))

    def _ticker(self, market, coin):
        ticker = self.trader.fetch_rates(market.upper(), coin.upper())
        logger.info("\n{}".format(ticker))

    def interpret(self, args):
        command = args.command

        if command == "balance":
            self._balance()
        elif command == "order":
            self._order_info(args.market, args.coin, args.order_id)
        elif command == "cancel":
            self._order_cancel(args.market, args.coin, args.order_id)
        elif command == "sell":
            self._order_sell(args.market, args.coin, args.volume, args.rate)
        elif command == "buy":
            self._order_buy(args.market, args.coin, args.volume, args.rate)
        elif command == "ticker":
            self._ticker(args.market, args.coin)
        else:
            logger.error("Unknown command: {}".format(command))