From 6c75b8a36a690d06e989fda4279daf4a3a0c6071 Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 25 Feb 2019 20:16:34 +0100 Subject: [PATCH 1/4] Remove pair market url --- freqtrade/exchange/exchange.py | 10 ---------- freqtrade/freqtradebot.py | 4 ---- freqtrade/rpc/rpc.py | 1 - freqtrade/rpc/telegram.py | 6 +++--- 4 files changed, 3 insertions(+), 18 deletions(-) diff --git a/freqtrade/exchange/exchange.py b/freqtrade/exchange/exchange.py index 42ef46eb8..874ed93aa 100644 --- a/freqtrade/exchange/exchange.py +++ b/freqtrade/exchange/exchange.py @@ -654,16 +654,6 @@ class Exchange(object): except ccxt.BaseError as e: raise OperationalException(e) - def get_pair_detail_url(self, pair: str) -> str: - try: - url_base = self._api.urls.get('www') - base, quote = pair.split('/') - - return url_base + _EXCHANGE_URLS[self._api.id].format(base=base, quote=quote) - except KeyError: - logger.warning('Could not get exchange url for %s', self.name) - return "" - @retrier def get_markets(self) -> List[dict]: try: diff --git a/freqtrade/freqtradebot.py b/freqtrade/freqtradebot.py index d61553305..c51dd4673 100644 --- a/freqtrade/freqtradebot.py +++ b/freqtrade/freqtradebot.py @@ -376,7 +376,6 @@ class FreqtradeBot(object): :return: None """ pair_s = pair.replace('_', '/') - pair_url = self.exchange.get_pair_detail_url(pair) stake_currency = self.config['stake_currency'] fiat_currency = self.config.get('fiat_display_currency', None) time_in_force = self.strategy.order_time_in_force['buy'] @@ -441,7 +440,6 @@ class FreqtradeBot(object): 'type': RPCMessageType.BUY_NOTIFICATION, 'exchange': self.exchange.name.capitalize(), 'pair': pair_s, - 'market_url': pair_url, 'limit': buy_limit_filled_price, 'stake_amount': stake_amount, 'stake_currency': stake_currency, @@ -849,7 +847,6 @@ class FreqtradeBot(object): profit_trade = trade.calc_profit(rate=limit) current_rate = self.exchange.get_ticker(trade.pair)['bid'] profit_percent = trade.calc_profit_percent(limit) - pair_url = self.exchange.get_pair_detail_url(trade.pair) gain = "profit" if profit_percent > 0 else "loss" msg = { @@ -857,7 +854,6 @@ class FreqtradeBot(object): 'exchange': trade.exchange.capitalize(), 'pair': trade.pair, 'gain': gain, - 'market_url': pair_url, 'limit': limit, 'amount': trade.amount, 'open_rate': trade.open_rate, diff --git a/freqtrade/rpc/rpc.py b/freqtrade/rpc/rpc.py index 5aa9bae35..af64c3d67 100644 --- a/freqtrade/rpc/rpc.py +++ b/freqtrade/rpc/rpc.py @@ -103,7 +103,6 @@ class RPC(object): results.append(dict( trade_id=trade.id, pair=trade.pair, - market_url=self._freqtrade.exchange.get_pair_detail_url(trade.pair), date=arrow.get(trade.open_date), open_rate=trade.open_rate, close_rate=trade.close_rate, diff --git a/freqtrade/rpc/telegram.py b/freqtrade/rpc/telegram.py index 3ce7c9167..9caa7288f 100644 --- a/freqtrade/rpc/telegram.py +++ b/freqtrade/rpc/telegram.py @@ -125,7 +125,7 @@ class Telegram(RPC): else: msg['stake_amount_fiat'] = 0 - message = ("*{exchange}:* Buying [{pair}]({market_url})\n" + message = ("*{exchange}:* Buying {pair}\n" "with limit `{limit:.8f}\n" "({stake_amount:.6f} {stake_currency}").format(**msg) @@ -137,7 +137,7 @@ class Telegram(RPC): msg['amount'] = round(msg['amount'], 8) msg['profit_percent'] = round(msg['profit_percent'] * 100, 2) - message = ("*{exchange}:* Selling [{pair}]({market_url})\n" + message = ("*{exchange}:* Selling {pair}\n" "*Limit:* `{limit:.8f}`\n" "*Amount:* `{amount:.8f}`\n" "*Open Rate:* `{open_rate:.8f}`\n" @@ -193,7 +193,7 @@ class Telegram(RPC): messages = [ "*Trade ID:* `{trade_id}`\n" - "*Current Pair:* [{pair}]({market_url})\n" + "*Current Pair:* {pair}\n" "*Open Since:* `{date}`\n" "*Amount:* `{amount}`\n" "*Open Rate:* `{open_rate:.8f}`\n" From 5c3177cc79ab54486af2d226f91b88c2f6405e9d Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 25 Feb 2019 20:16:47 +0100 Subject: [PATCH 2/4] Adapt documentation to remove market_url --- docs/webhook-config.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/webhook-config.md b/docs/webhook-config.md index e5509d6c9..2b5365e32 100644 --- a/docs/webhook-config.md +++ b/docs/webhook-config.md @@ -41,7 +41,6 @@ Possible parameters are: * exchange * pair -* market_url * limit * stake_amount * stake_amount_fiat @@ -56,7 +55,6 @@ Possible parameters are: * exchange * pair * gain -* market_url * limit * amount * open_rate From 79aac473b300a51f2536aa45cb136c0dd7f350ac Mon Sep 17 00:00:00 2001 From: Matthias Date: Mon, 25 Feb 2019 20:17:27 +0100 Subject: [PATCH 3/4] Remove market_url from tests --- freqtrade/tests/exchange/test_exchange.py | 31 ----------------------- freqtrade/tests/rpc/test_rpc.py | 2 -- freqtrade/tests/rpc/test_rpc_telegram.py | 28 +++++--------------- freqtrade/tests/rpc/test_rpc_webhook.py | 3 --- freqtrade/tests/test_freqtradebot.py | 5 ---- 5 files changed, 7 insertions(+), 62 deletions(-) diff --git a/freqtrade/tests/exchange/test_exchange.py b/freqtrade/tests/exchange/test_exchange.py index d904eb2c5..e24d15aed 100644 --- a/freqtrade/tests/exchange/test_exchange.py +++ b/freqtrade/tests/exchange/test_exchange.py @@ -1260,37 +1260,6 @@ def test_name(default_conf, mocker, exchange_name): assert exchange.id == exchange_name -def test_get_pair_detail_url(default_conf, mocker, caplog): - mocker.patch('freqtrade.exchange.Exchange._load_markets', MagicMock(return_value={})) - default_conf['exchange']['name'] = 'binance' - exchange = Exchange(default_conf) - - url = exchange.get_pair_detail_url('TKN/ETH') - assert 'TKN' in url - assert 'ETH' in url - - url = exchange.get_pair_detail_url('LOOONG/BTC') - assert 'LOOONG' in url - assert 'BTC' in url - - default_conf['exchange']['name'] = 'bittrex' - exchange = Exchange(default_conf) - - url = exchange.get_pair_detail_url('TKN/ETH') - assert 'TKN' in url - assert 'ETH' in url - - url = exchange.get_pair_detail_url('LOOONG/BTC') - assert 'LOOONG' in url - assert 'BTC' in url - - default_conf['exchange']['name'] = 'poloniex' - exchange = Exchange(default_conf) - url = exchange.get_pair_detail_url('LOOONG/BTC') - assert '' == url - assert log_has('Could not get exchange url for Poloniex', caplog.record_tuples) - - @pytest.mark.parametrize("exchange_name", EXCHANGES) def test_get_trades_for_order(default_conf, mocker, exchange_name): order_id = 'ABCD-ABCD' diff --git a/freqtrade/tests/rpc/test_rpc.py b/freqtrade/tests/rpc/test_rpc.py index bb685cad5..2de2668e8 100644 --- a/freqtrade/tests/rpc/test_rpc.py +++ b/freqtrade/tests/rpc/test_rpc.py @@ -51,7 +51,6 @@ def test_rpc_trade_status(default_conf, ticker, fee, markets, mocker) -> None: assert { 'trade_id': 1, 'pair': 'ETH/BTC', - 'market_url': 'https://bittrex.com/Market/Index?MarketName=BTC-ETH', 'date': ANY, 'open_rate': 1.099e-05, 'close_rate': None, @@ -72,7 +71,6 @@ def test_rpc_trade_status(default_conf, ticker, fee, markets, mocker) -> None: assert { 'trade_id': 1, 'pair': 'ETH/BTC', - 'market_url': 'https://bittrex.com/Market/Index?MarketName=BTC-ETH', 'date': ANY, 'open_rate': 1.099e-05, 'close_rate': None, diff --git a/freqtrade/tests/rpc/test_rpc_telegram.py b/freqtrade/tests/rpc/test_rpc_telegram.py index 686a92469..9964973e1 100644 --- a/freqtrade/tests/rpc/test_rpc_telegram.py +++ b/freqtrade/tests/rpc/test_rpc_telegram.py @@ -5,7 +5,7 @@ import re from datetime import datetime from random import randint -from unittest.mock import MagicMock, ANY +from unittest.mock import MagicMock import arrow import pytest @@ -183,7 +183,6 @@ def test_status(default_conf, update, mocker, fee, ticker, markets) -> None: mocker.patch.multiple( 'freqtrade.exchange.Exchange', get_ticker=ticker, - get_pair_detail_url=MagicMock(), get_fee=fee, get_markets=markets ) @@ -195,7 +194,6 @@ def test_status(default_conf, update, mocker, fee, ticker, markets) -> None: _rpc_trade_status=MagicMock(return_value=[{ 'trade_id': 1, 'pair': 'ETH/BTC', - 'market_url': 'https://bittrex.com/Market/Index?MarketName=BTC-ETH', 'date': arrow.utcnow(), 'open_rate': 1.099e-05, 'close_rate': None, @@ -270,7 +268,7 @@ def test_status_handle(default_conf, update, ticker, fee, markets, mocker) -> No telegram._status(bot=MagicMock(), update=update) assert msg_mock.call_count == 1 - assert '[ETH/BTC]' in msg_mock.call_args_list[0][0][0] + assert 'ETH/BTC' in msg_mock.call_args_list[0][0][0] def test_status_table_handle(default_conf, update, ticker, fee, markets, mocker) -> None: @@ -721,7 +719,6 @@ def test_forcesell_handle(default_conf, update, ticker, fee, 'exchange': 'Bittrex', 'pair': 'ETH/BTC', 'gain': 'profit', - 'market_url': 'https://bittrex.com/Market/Index?MarketName=BTC-ETH', 'limit': 1.172e-05, 'amount': 90.99181073703367, 'open_rate': 1.099e-05, @@ -776,7 +773,6 @@ def test_forcesell_down_handle(default_conf, update, ticker, fee, 'exchange': 'Bittrex', 'pair': 'ETH/BTC', 'gain': 'loss', - 'market_url': 'https://bittrex.com/Market/Index?MarketName=BTC-ETH', 'limit': 1.044e-05, 'amount': 90.99181073703367, 'open_rate': 1.099e-05, @@ -796,7 +792,6 @@ def test_forcesell_all_handle(default_conf, update, ticker, fee, markets, mocker return_value=15000.0) rpc_mock = mocker.patch('freqtrade.rpc.telegram.Telegram.send_msg', MagicMock()) mocker.patch('freqtrade.rpc.telegram.Telegram._init', MagicMock()) - mocker.patch('freqtrade.exchange.Exchange.get_pair_detail_url', MagicMock()) mocker.patch.multiple( 'freqtrade.exchange.Exchange', get_ticker=ticker, @@ -823,7 +818,6 @@ def test_forcesell_all_handle(default_conf, update, ticker, fee, markets, mocker 'exchange': 'Bittrex', 'pair': 'ETH/BTC', 'gain': 'loss', - 'market_url': ANY, 'limit': 1.098e-05, 'amount': 90.99181073703367, 'open_rate': 1.099e-05, @@ -1100,7 +1094,6 @@ def test_send_msg_buy_notification(default_conf, mocker) -> None: 'type': RPCMessageType.BUY_NOTIFICATION, 'exchange': 'Bittrex', 'pair': 'ETH/BTC', - 'market_url': 'https://bittrex.com/Market/Index?MarketName=BTC-ETH', 'limit': 1.099e-05, 'stake_amount': 0.001, 'stake_amount_fiat': 0.0, @@ -1108,7 +1101,7 @@ def test_send_msg_buy_notification(default_conf, mocker) -> None: 'fiat_currency': 'USD' }) assert msg_mock.call_args[0][0] \ - == '*Bittrex:* Buying [ETH/BTC](https://bittrex.com/Market/Index?MarketName=BTC-ETH)\n' \ + == '*Bittrex:* Buying ETH/BTC\n' \ 'with limit `0.00001099\n' \ '(0.001000 BTC,0.000 USD)`' @@ -1129,7 +1122,6 @@ def test_send_msg_sell_notification(default_conf, mocker) -> None: 'exchange': 'Binance', 'pair': 'KEY/ETH', 'gain': 'loss', - 'market_url': 'https://www.binance.com/tradeDetail.html?symbol=KEY_ETH', 'limit': 3.201e-05, 'amount': 1333.3333333333335, 'open_rate': 7.5e-05, @@ -1141,8 +1133,7 @@ def test_send_msg_sell_notification(default_conf, mocker) -> None: 'sell_reason': SellType.STOP_LOSS.value }) assert msg_mock.call_args[0][0] \ - == ('*Binance:* Selling [KEY/ETH]' - '(https://www.binance.com/tradeDetail.html?symbol=KEY_ETH)\n' + == ('*Binance:* Selling KEY/ETH\n' '*Limit:* `0.00003201`\n' '*Amount:* `1333.33333333`\n' '*Open Rate:* `0.00007500`\n' @@ -1156,7 +1147,6 @@ def test_send_msg_sell_notification(default_conf, mocker) -> None: 'exchange': 'Binance', 'pair': 'KEY/ETH', 'gain': 'loss', - 'market_url': 'https://www.binance.com/tradeDetail.html?symbol=KEY_ETH', 'limit': 3.201e-05, 'amount': 1333.3333333333335, 'open_rate': 7.5e-05, @@ -1167,8 +1157,7 @@ def test_send_msg_sell_notification(default_conf, mocker) -> None: 'sell_reason': SellType.STOP_LOSS.value }) assert msg_mock.call_args[0][0] \ - == ('*Binance:* Selling [KEY/ETH]' - '(https://www.binance.com/tradeDetail.html?symbol=KEY_ETH)\n' + == ('*Binance:* Selling KEY/ETH\n' '*Limit:* `0.00003201`\n' '*Amount:* `1333.33333333`\n' '*Open Rate:* `0.00007500`\n' @@ -1256,7 +1245,6 @@ def test_send_msg_buy_notification_no_fiat(default_conf, mocker) -> None: 'type': RPCMessageType.BUY_NOTIFICATION, 'exchange': 'Bittrex', 'pair': 'ETH/BTC', - 'market_url': 'https://bittrex.com/Market/Index?MarketName=BTC-ETH', 'limit': 1.099e-05, 'stake_amount': 0.001, 'stake_amount_fiat': 0.0, @@ -1264,7 +1252,7 @@ def test_send_msg_buy_notification_no_fiat(default_conf, mocker) -> None: 'fiat_currency': None }) assert msg_mock.call_args[0][0] \ - == '*Bittrex:* Buying [ETH/BTC](https://bittrex.com/Market/Index?MarketName=BTC-ETH)\n' \ + == '*Bittrex:* Buying ETH/BTC\n' \ 'with limit `0.00001099\n' \ '(0.001000 BTC)`' @@ -1284,7 +1272,6 @@ def test_send_msg_sell_notification_no_fiat(default_conf, mocker) -> None: 'exchange': 'Binance', 'pair': 'KEY/ETH', 'gain': 'loss', - 'market_url': 'https://www.binance.com/tradeDetail.html?symbol=KEY_ETH', 'limit': 3.201e-05, 'amount': 1333.3333333333335, 'open_rate': 7.5e-05, @@ -1296,8 +1283,7 @@ def test_send_msg_sell_notification_no_fiat(default_conf, mocker) -> None: 'sell_reason': SellType.STOP_LOSS.value }) assert msg_mock.call_args[0][0] \ - == '*Binance:* Selling [KEY/ETH]' \ - '(https://www.binance.com/tradeDetail.html?symbol=KEY_ETH)\n' \ + == '*Binance:* Selling KEY/ETH\n' \ '*Limit:* `0.00003201`\n' \ '*Amount:* `1333.33333333`\n' \ '*Open Rate:* `0.00007500`\n' \ diff --git a/freqtrade/tests/rpc/test_rpc_webhook.py b/freqtrade/tests/rpc/test_rpc_webhook.py index 002308815..da7aec0a6 100644 --- a/freqtrade/tests/rpc/test_rpc_webhook.py +++ b/freqtrade/tests/rpc/test_rpc_webhook.py @@ -48,7 +48,6 @@ def test_send_msg(default_conf, mocker): 'type': RPCMessageType.BUY_NOTIFICATION, 'exchange': 'Bittrex', 'pair': 'ETH/BTC', - 'market_url': "http://mockedurl/ETH_BTC", 'limit': 0.005, 'stake_amount': 0.8, 'stake_amount_fiat': 500, @@ -73,7 +72,6 @@ def test_send_msg(default_conf, mocker): 'exchange': 'Bittrex', 'pair': 'ETH/BTC', 'gain': "profit", - 'market_url': "http://mockedurl/ETH_BTC", 'limit': 0.005, 'amount': 0.8, 'open_rate': 0.004, @@ -127,7 +125,6 @@ def test_exception_send_msg(default_conf, mocker, caplog): 'type': RPCMessageType.BUY_NOTIFICATION, 'exchange': 'Bittrex', 'pair': 'ETH/BTC', - 'market_url': "http://mockedurl/ETH_BTC", 'limit': 0.005, 'stake_amount': 0.8, 'stake_amount_fiat': 500, diff --git a/freqtrade/tests/test_freqtradebot.py b/freqtrade/tests/test_freqtradebot.py index a0ac6ee99..2f66a5153 100644 --- a/freqtrade/tests/test_freqtradebot.py +++ b/freqtrade/tests/test_freqtradebot.py @@ -1872,7 +1872,6 @@ def test_execute_sell_up(default_conf, ticker, fee, ticker_sell_up, markets, moc 'exchange': 'Bittrex', 'pair': 'ETH/BTC', 'gain': 'profit', - 'market_url': 'https://bittrex.com/Market/Index?MarketName=BTC-ETH', 'limit': 1.172e-05, 'amount': 90.99181073703367, 'open_rate': 1.099e-05, @@ -1919,7 +1918,6 @@ def test_execute_sell_down(default_conf, ticker, fee, ticker_sell_down, markets, 'exchange': 'Bittrex', 'pair': 'ETH/BTC', 'gain': 'loss', - 'market_url': 'https://bittrex.com/Market/Index?MarketName=BTC-ETH', 'limit': 1.044e-05, 'amount': 90.99181073703367, 'open_rate': 1.099e-05, @@ -1974,7 +1972,6 @@ def test_execute_sell_down_stoploss_on_exchange_dry_run(default_conf, ticker, fe 'exchange': 'Bittrex', 'pair': 'ETH/BTC', 'gain': 'loss', - 'market_url': 'https://bittrex.com/Market/Index?MarketName=BTC-ETH', 'limit': 1.08801e-05, 'amount': 90.99181073703367, 'open_rate': 1.099e-05, @@ -2146,7 +2143,6 @@ def test_execute_sell_without_conf_sell_up(default_conf, ticker, fee, 'exchange': 'Bittrex', 'pair': 'ETH/BTC', 'gain': 'profit', - 'market_url': 'https://bittrex.com/Market/Index?MarketName=BTC-ETH', 'limit': 1.172e-05, 'amount': 90.99181073703367, 'open_rate': 1.099e-05, @@ -2194,7 +2190,6 @@ def test_execute_sell_without_conf_sell_down(default_conf, ticker, fee, 'exchange': 'Bittrex', 'pair': 'ETH/BTC', 'gain': 'loss', - 'market_url': 'https://bittrex.com/Market/Index?MarketName=BTC-ETH', 'limit': 1.044e-05, 'amount': 90.99181073703367, 'open_rate': 1.099e-05, From ef264841534811fb7717152200b0e23d08947662 Mon Sep 17 00:00:00 2001 From: Matthias Date: Tue, 26 Feb 2019 21:01:50 +0100 Subject: [PATCH 4/4] Super() should not be called with parameters source: https://realpython.com/python-super/ --- freqtrade/exchange/binance.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/freqtrade/exchange/binance.py b/freqtrade/exchange/binance.py index 60d35f343..127f4e916 100644 --- a/freqtrade/exchange/binance.py +++ b/freqtrade/exchange/binance.py @@ -23,4 +23,4 @@ class Binance(Exchange): # get next-higher step in the limit_range list limit = min(list(filter(lambda x: limit <= x, limit_range))) - return super(Binance, self).get_order_book(pair, limit) + return super().get_order_book(pair, limit)