From 8edc3eb5fb8a6c4dc62f455f12d237c0d670b3d9 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 23 Feb 2020 15:39:12 +0100 Subject: [PATCH] Use generator to generate sell price scaffold testing --- freqtrade/freqtradebot.py | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/freqtrade/freqtradebot.py b/freqtrade/freqtradebot.py index 2c9a960a4..22a73a273 100644 --- a/freqtrade/freqtradebot.py +++ b/freqtrade/freqtradebot.py @@ -619,6 +619,15 @@ class FreqtradeBot: return trades_closed + def _order_book_gen(self, pair: str, side: str, order_book_max: int = 1, + order_book_min: int = 1): + """ + Helper generator to query orderbook in loop (used for early sell-order placing) + """ + order_book = self.exchange.get_order_book(pair, order_book_max) + for i in range(order_book_min, order_book_max + 1): + yield order_book[side][i - 1][0] + def get_sell_rate(self, pair: str, refresh: bool) -> float: """ Get sell rate - either using get-ticker bid or first bid based on orderbook @@ -639,9 +648,10 @@ class FreqtradeBot: 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') + rate = next(self._order_book_gen(pair, f"{config_ask_strategy['price_side']}s")) - order_book = self.exchange.get_order_book(pair, 1) - rate = order_book[f"{config_ask_strategy['price_side']}s"][0][0] + # order_book = self.exchange.get_order_book(pair, 1) + # rate = order_book[f"{config_ask_strategy['price_side']}s"][0][0] else: rate = self.exchange.fetch_ticker(pair)[config_ask_strategy['price_side']] @@ -674,12 +684,12 @@ class FreqtradeBot: order_book_min = config_ask_strategy.get('order_book_min', 1) order_book_max = config_ask_strategy.get('order_book_max', 1) - order_book = self.exchange.get_order_book(trade.pair, order_book_max) - + order_book = self._order_book_gen(trade.pair, f"{config_ask_strategy['price_side']}s", + order_book_min=order_book_min, + order_book_max=order_book_max) for i in range(order_book_min, order_book_max + 1): - order_book_rate = order_book['asks'][i - 1][0] - logger.debug(' order book asks top %s: %0.8f', i, order_book_rate) - sell_rate = order_book_rate + sell_rate = next(order_book) + logger.debug(' order book asks top %s: %0.8f', i, sell_rate) if self._check_and_execute_sell(trade, sell_rate, buy, sell): return True