Ejemplo n.º 1
0
 def _get_new_price(self, order_type, price):
     margin = self._options.margin + self._get_random_margin_jitter(self._options.margin_jitter)
     if order_type == Order.TYPE_SELL:
         return normalize_value(price + price * margin, self._options.pair.second.places)
     if order_type == Order.TYPE_BUY:
         return normalize_value(price - price * margin, self._options.pair.second.places)
     raise Exception('unknown order type %s' % order_type)
Ejemplo n.º 2
0
 def _get_completed_orders(self, pair):
     try:
         orders = yield self._trade_api.get_completed_orders(_currency_pair_to_string(pair))
         orders = sorted((Order(int(order['id']), Order.TYPE_SELL if order['type'] == 'sell' else Order.TYPE_BUY,
                                normalize_value(order['amount'], pair.first.places),
                                normalize_value(order['price'], pair.second.places), None, order['completed'])
                          for order in orders), key=lambda order: order.completed, reverse=True)
     except Exception as e:
         logger.warn('Cannot get completed orders: %s', e)
     else:
         self._events.on_next(events.CompletedOrdersEvent(pair, orders))
Ejemplo n.º 3
0
 def _get_price(self, pair):
     try:
         price = yield self._public_api.get_price(_currency_pair_to_string(pair))
     except Exception as e:
         logger.warn('Cannot get price: %s', e)
     else:
         self._events.on_next(events.PriceEvent(pair, normalize_value(price, pair.second.places)))
Ejemplo n.º 4
0
 def _get_balance(self, currency):
     try:
         balance = yield self._trade_api.get_balance(currency.name.lower())
     except Exception as e:
         logger.warn('Cannot get balance: %s', e)
     else:
         amount = normalize_value(balance, currency.places)
         self._events.on_next(events.BalanceEvent(currency, amount))
Ejemplo n.º 5
0
 def _get_random_margin_jitter(self, jitter):
     return normalize_value(Decimal(uniform(-float(jitter), float(jitter))), 4)
Ejemplo n.º 6
0
 def _send_balance_events(self, balance):
     for currency in CURRENCIES:
         amount = balance.get(currency.name.lower())
         if amount is not None:
             self._commands.on_next(events.BalanceEvent(currency, normalize_value(amount, currency.places)))