From 215ded2e0a6544c802b51abc84fc2e5c39c3b255 Mon Sep 17 00:00:00 2001 From: misagh Date: Mon, 17 Dec 2018 21:30:58 +0100 Subject: [PATCH 1/5] returning last candle close price for a pair --- freqtrade/exchange/__init__.py | 6 ++++++ freqtrade/tests/exchange/test_exchange.py | 3 +++ 2 files changed, 9 insertions(+) diff --git a/freqtrade/exchange/__init__.py b/freqtrade/exchange/__init__.py index e883175e7..4a827fcb5 100644 --- a/freqtrade/exchange/__init__.py +++ b/freqtrade/exchange/__init__.py @@ -164,6 +164,12 @@ class Exchange(object): else: return None + def last_kline_close(self, pair: str): + if pair in self._klines: + return self._klines[pair].iloc[-1]['close'] + else: + return None + def set_sandbox(self, api, exchange_config: dict, name: str): if exchange_config.get('sandbox'): if api.urls.get('test'): diff --git a/freqtrade/tests/exchange/test_exchange.py b/freqtrade/tests/exchange/test_exchange.py index 647440223..6299d8dc8 100644 --- a/freqtrade/tests/exchange/test_exchange.py +++ b/freqtrade/tests/exchange/test_exchange.py @@ -814,6 +814,9 @@ def test_refresh_tickers(mocker, default_conf, caplog) -> None: assert isinstance(exchange.klines(pair), DataFrame) assert len(exchange.klines(pair)) > 0 + # test last kline close price + assert exchange.last_kline_close('XRP/ETH') == 4 + # test caching exchange.refresh_tickers(['IOTA/ETH', 'XRP/ETH'], '5m') From a45ec1ed1c7f38ec85d10ec919712e51bea9952c Mon Sep 17 00:00:00 2001 From: misagh Date: Fri, 21 Dec 2018 10:20:01 +0100 Subject: [PATCH 2/5] adding copy as a parameter to klines --- freqtrade/exchange/__init__.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/freqtrade/exchange/__init__.py b/freqtrade/exchange/__init__.py index 4a827fcb5..9ea963c65 100644 --- a/freqtrade/exchange/__init__.py +++ b/freqtrade/exchange/__init__.py @@ -158,17 +158,12 @@ class Exchange(object): """exchange ccxt id""" return self._api.id - def klines(self, pair: str) -> DataFrame: + def klines(self, pair: str, copy=True) -> DataFrame: if pair in self._klines: return self._klines[pair].copy() else: return None - def last_kline_close(self, pair: str): - if pair in self._klines: - return self._klines[pair].iloc[-1]['close'] - else: - return None def set_sandbox(self, api, exchange_config: dict, name: str): if exchange_config.get('sandbox'): From a13b30b2de1eb4860a9a47fecdb036837c8616c1 Mon Sep 17 00:00:00 2001 From: misagh Date: Fri, 21 Dec 2018 10:21:31 +0100 Subject: [PATCH 3/5] removing test --- freqtrade/exchange/__init__.py | 1 - freqtrade/tests/exchange/test_exchange.py | 3 --- 2 files changed, 4 deletions(-) diff --git a/freqtrade/exchange/__init__.py b/freqtrade/exchange/__init__.py index 9ea963c65..181e60e8c 100644 --- a/freqtrade/exchange/__init__.py +++ b/freqtrade/exchange/__init__.py @@ -164,7 +164,6 @@ class Exchange(object): else: return None - def set_sandbox(self, api, exchange_config: dict, name: str): if exchange_config.get('sandbox'): if api.urls.get('test'): diff --git a/freqtrade/tests/exchange/test_exchange.py b/freqtrade/tests/exchange/test_exchange.py index 6299d8dc8..647440223 100644 --- a/freqtrade/tests/exchange/test_exchange.py +++ b/freqtrade/tests/exchange/test_exchange.py @@ -814,9 +814,6 @@ def test_refresh_tickers(mocker, default_conf, caplog) -> None: assert isinstance(exchange.klines(pair), DataFrame) assert len(exchange.klines(pair)) > 0 - # test last kline close price - assert exchange.last_kline_close('XRP/ETH') == 4 - # test caching exchange.refresh_tickers(['IOTA/ETH', 'XRP/ETH'], '5m') From 34e3af6ad41225fc532b265240aae18f9d84654c Mon Sep 17 00:00:00 2001 From: misagh Date: Fri, 21 Dec 2018 10:35:17 +0100 Subject: [PATCH 4/5] do not copy DF if copy is false --- freqtrade/exchange/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/freqtrade/exchange/__init__.py b/freqtrade/exchange/__init__.py index 181e60e8c..98522b98a 100644 --- a/freqtrade/exchange/__init__.py +++ b/freqtrade/exchange/__init__.py @@ -160,7 +160,7 @@ class Exchange(object): def klines(self, pair: str, copy=True) -> DataFrame: if pair in self._klines: - return self._klines[pair].copy() + return self._klines[pair].copy() if copy else self._klines[pair] else: return None From 7243da3afe573dcb26275f62aeb7482b22ccf957 Mon Sep 17 00:00:00 2001 From: misagh Date: Sat, 22 Dec 2018 19:03:42 +0100 Subject: [PATCH 5/5] tests added for klines copy=True --- freqtrade/tests/exchange/test_exchange.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/freqtrade/tests/exchange/test_exchange.py b/freqtrade/tests/exchange/test_exchange.py index 647440223..29154bc39 100644 --- a/freqtrade/tests/exchange/test_exchange.py +++ b/freqtrade/tests/exchange/test_exchange.py @@ -814,6 +814,13 @@ def test_refresh_tickers(mocker, default_conf, caplog) -> None: assert isinstance(exchange.klines(pair), DataFrame) assert len(exchange.klines(pair)) > 0 + # klines function should return a different object on each call + # if copy is "True" + assert exchange.klines(pair) is not exchange.klines(pair) + assert exchange.klines(pair) is not exchange.klines(pair, copy=True) + assert exchange.klines(pair, copy=True) is not exchange.klines(pair, copy=True) + assert exchange.klines(pair, copy=False) is exchange.klines(pair, copy=False) + # test caching exchange.refresh_tickers(['IOTA/ETH', 'XRP/ETH'], '5m')