| @@ -579,6 +579,25 @@ class FreqtradeBot(object): | ||||
|                         f"(from {order_amount} to {real_amount}) from Trades") | ||||
|         return real_amount | ||||
|  | ||||
|     def get_sell_rate(self, pair: str, refresh: bool) -> float: | ||||
|         """ | ||||
|         Get sell rate - either using get-ticker bid or first bid based on orderbook | ||||
|         The orderbook portion is only used for rpc messaging, which would otherwise fail | ||||
|         for BitMex (has no bid/ask in get_ticker) | ||||
|         or remain static in any other case since it's not updating. | ||||
|         :return: Bid rate | ||||
|         """ | ||||
|         config_ask_strategy = self.config.get('ask_strategy', {}) | ||||
|         if config_ask_strategy.get('use_order_book', False): | ||||
|             logger.debug('Using order book to get sell rate') | ||||
|  | ||||
|             order_book = self.exchange.get_order_book(pair, 1) | ||||
|             rate = order_book['asks'][0][0] | ||||
|  | ||||
|         else: | ||||
|             rate = self.exchange.get_ticker(pair, refresh)['bid'] | ||||
|         return rate | ||||
|  | ||||
|     def handle_trade(self, trade: Trade) -> bool: | ||||
|         """ | ||||
|         Sells the current pair if the threshold is reached and updates the trade record. | ||||
| @@ -615,7 +634,7 @@ class FreqtradeBot(object): | ||||
|  | ||||
|         else: | ||||
|             logger.debug('checking sell') | ||||
|             sell_rate = self.exchange.get_ticker(trade.pair)['bid'] | ||||
|             sell_rate = self.get_sell_rate(trade.pair, True) | ||||
|             if self.check_sell(trade, sell_rate, buy, sell): | ||||
|                 return True | ||||
|  | ||||
| @@ -858,7 +877,8 @@ class FreqtradeBot(object): | ||||
|         """ | ||||
|         profit_rate = trade.close_rate if trade.close_rate else trade.close_rate_requested | ||||
|         profit_trade = trade.calc_profit(rate=profit_rate) | ||||
|         current_rate = self.exchange.get_ticker(trade.pair)['bid'] | ||||
|         # Use cached ticker here - it was updated seconds ago. | ||||
|         current_rate = self.get_sell_rate(trade.pair, False) | ||||
|         profit_percent = trade.calc_profit_percent(profit_rate) | ||||
|         gain = "profit" if profit_percent > 0 else "loss" | ||||
|  | ||||
|   | ||||
| @@ -94,7 +94,7 @@ class RPC(object): | ||||
|                     order = self._freqtrade.exchange.get_order(trade.open_order_id, trade.pair) | ||||
|                 # calculate profit and send message to user | ||||
|                 try: | ||||
|                     current_rate = self._freqtrade.exchange.get_ticker(trade.pair, False)['bid'] | ||||
|                     current_rate = self._freqtrade.get_sell_rate(trade.pair, False) | ||||
|                 except DependencyException: | ||||
|                     current_rate = NAN | ||||
|                 current_profit = trade.calc_profit_percent(current_rate) | ||||
| @@ -125,7 +125,7 @@ class RPC(object): | ||||
|             for trade in trades: | ||||
|                 # calculate profit and send message to user | ||||
|                 try: | ||||
|                     current_rate = self._freqtrade.exchange.get_ticker(trade.pair, False)['bid'] | ||||
|                     current_rate = self._freqtrade.get_sell_rate(trade.pair, False) | ||||
|                 except DependencyException: | ||||
|                     current_rate = NAN | ||||
|                 trade_perc = (100 * trade.calc_profit_percent(current_rate)) | ||||
| @@ -213,7 +213,7 @@ class RPC(object): | ||||
|             else: | ||||
|                 # Get current rate | ||||
|                 try: | ||||
|                     current_rate = self._freqtrade.exchange.get_ticker(trade.pair, False)['bid'] | ||||
|                     current_rate = self._freqtrade.get_sell_rate(trade.pair, False) | ||||
|                 except DependencyException: | ||||
|                     current_rate = NAN | ||||
|                 profit_percent = trade.calc_profit_percent(rate=current_rate) | ||||
| @@ -280,9 +280,9 @@ class RPC(object): | ||||
|             else: | ||||
|                 try: | ||||
|                     if coin == 'USDT': | ||||
|                         rate = 1.0 / self._freqtrade.exchange.get_ticker('BTC/USDT', False)['bid'] | ||||
|                         rate = 1.0 / self._freqtrade.get_sell_rate('BTC/USDT', False) | ||||
|                     else: | ||||
|                         rate = self._freqtrade.exchange.get_ticker(coin + '/BTC', False)['bid'] | ||||
|                         rate = self._freqtrade.get_sell_rate(coin + '/BTC', False) | ||||
|                 except (TemporaryError, DependencyException): | ||||
|                     continue | ||||
|             est_btc: float = rate * balance['total'] | ||||
| @@ -356,7 +356,7 @@ class RPC(object): | ||||
|                     return | ||||
|  | ||||
|             # Get current rate and execute sell | ||||
|             current_rate = self._freqtrade.exchange.get_ticker(trade.pair, False)['bid'] | ||||
|             current_rate = self._freqtrade.get_sell_rate(trade.pair, False) | ||||
|             self._freqtrade.execute_sell(trade, current_rate, SellType.FORCE_SELL) | ||||
|         # ---- EOF def _exec_forcesell ---- | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user