From 3e8e8a55faae7f42765c38593de933cc01496c89 Mon Sep 17 00:00:00 2001 From: Matthias Date: Wed, 10 Oct 2018 20:58:21 +0200 Subject: [PATCH 01/20] Enable analytical telegram commands when stopped --- freqtrade/rpc/rpc.py | 10 ++------- freqtrade/tests/rpc/test_rpc.py | 8 -------- freqtrade/tests/rpc/test_rpc_telegram.py | 26 ++++-------------------- 3 files changed, 6 insertions(+), 38 deletions(-) diff --git a/freqtrade/rpc/rpc.py b/freqtrade/rpc/rpc.py index 7031086d8..d653ea176 100644 --- a/freqtrade/rpc/rpc.py +++ b/freqtrade/rpc/rpc.py @@ -84,9 +84,7 @@ class RPC(object): """ # Fetch open trade trades = Trade.query.filter(Trade.is_open.is_(True)).all() - if self._freqtrade.state != State.RUNNING: - raise RPCException('trader is not running') - elif not trades: + if not trades: raise RPCException('no active trade') else: results = [] @@ -118,9 +116,7 @@ class RPC(object): def _rpc_status_table(self) -> DataFrame: trades = Trade.query.filter(Trade.is_open.is_(True)).all() - if self._freqtrade.state != State.RUNNING: - raise RPCException('trader is not running') - elif not trades: + if not trades: raise RPCException('no active order') else: trades_list = [] @@ -385,8 +381,6 @@ class RPC(object): Handler for performance. Shows a performance statistic from finished trades """ - if self._freqtrade.state != State.RUNNING: - raise RPCException('trader is not running') pair_rates = Trade.session.query(Trade.pair, sql.func.sum(Trade.close_profit).label('profit_sum'), diff --git a/freqtrade/tests/rpc/test_rpc.py b/freqtrade/tests/rpc/test_rpc.py index efc136777..88bf5e9ad 100644 --- a/freqtrade/tests/rpc/test_rpc.py +++ b/freqtrade/tests/rpc/test_rpc.py @@ -40,10 +40,6 @@ def test_rpc_trade_status(default_conf, ticker, fee, markets, mocker) -> None: patch_get_signal(freqtradebot, (True, False)) rpc = RPC(freqtradebot) - freqtradebot.state = State.STOPPED - with pytest.raises(RPCException, match=r'.*trader is not running*'): - rpc._rpc_trade_status() - freqtradebot.state = State.RUNNING with pytest.raises(RPCException, match=r'.*no active trade*'): rpc._rpc_trade_status() @@ -81,10 +77,6 @@ def test_rpc_status_table(default_conf, ticker, fee, markets, mocker) -> None: patch_get_signal(freqtradebot, (True, False)) rpc = RPC(freqtradebot) - freqtradebot.state = State.STOPPED - with pytest.raises(RPCException, match=r'.*trader is not running*'): - rpc._rpc_status_table() - freqtradebot.state = State.RUNNING with pytest.raises(RPCException, match=r'.*no active order*'): rpc._rpc_status_table() diff --git a/freqtrade/tests/rpc/test_rpc_telegram.py b/freqtrade/tests/rpc/test_rpc_telegram.py index 182c1d2e7..3072d1cfe 100644 --- a/freqtrade/tests/rpc/test_rpc_telegram.py +++ b/freqtrade/tests/rpc/test_rpc_telegram.py @@ -250,9 +250,10 @@ def test_status_handle(default_conf, update, ticker, fee, markets, mocker) -> No telegram = Telegram(freqtradebot) freqtradebot.state = State.STOPPED + # Status is also enabled when stopped telegram._status(bot=MagicMock(), update=update) assert msg_mock.call_count == 1 - assert 'trader is not running' in msg_mock.call_args_list[0][0][0] + assert 'no active trade' in msg_mock.call_args_list[0][0][0] msg_mock.reset_mock() freqtradebot.state = State.RUNNING @@ -295,9 +296,10 @@ def test_status_table_handle(default_conf, update, ticker, fee, markets, mocker) telegram = Telegram(freqtradebot) freqtradebot.state = State.STOPPED + # Status table is also enabled when stopped telegram._status_table(bot=MagicMock(), update=update) assert msg_mock.call_count == 1 - assert 'trader is not running' in msg_mock.call_args_list[0][0][0] + assert 'no active order' in msg_mock.call_args_list[0][0][0] msg_mock.reset_mock() freqtradebot.state = State.RUNNING @@ -895,26 +897,6 @@ def test_performance_handle(default_conf, update, ticker, fee, assert 'ETH/BTC\t6.20% (1)' in msg_mock.call_args_list[0][0][0] -def test_performance_handle_invalid(default_conf, update, mocker) -> None: - patch_coinmarketcap(mocker) - patch_exchange(mocker) - msg_mock = MagicMock() - mocker.patch.multiple( - 'freqtrade.rpc.telegram.Telegram', - _init=MagicMock(), - _send_msg=msg_mock - ) - freqtradebot = FreqtradeBot(default_conf) - patch_get_signal(freqtradebot, (True, False)) - telegram = Telegram(freqtradebot) - - # Trader is not running - freqtradebot.state = State.STOPPED - telegram._performance(bot=MagicMock(), update=update) - assert msg_mock.call_count == 1 - assert 'not running' in msg_mock.call_args_list[0][0][0] - - def test_count_handle(default_conf, update, ticker, fee, markets, mocker) -> None: patch_coinmarketcap(mocker) patch_exchange(mocker) From 792d2dbe3222e388f15088cfc6301fb0b0d408de Mon Sep 17 00:00:00 2001 From: Matthias Date: Wed, 10 Oct 2018 21:29:40 +0200 Subject: [PATCH 02/20] Hide "dust" from /balance --- freqtrade/rpc/telegram.py | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/freqtrade/rpc/telegram.py b/freqtrade/rpc/telegram.py index b6ad047b5..996137728 100644 --- a/freqtrade/rpc/telegram.py +++ b/freqtrade/rpc/telegram.py @@ -307,11 +307,14 @@ class Telegram(RPC): result = self._rpc_balance(self._config.get('fiat_display_currency', '')) output = '' for currency in result['currencies']: - output += "*{currency}:*\n" \ - "\t`Available: {available: .8f}`\n" \ - "\t`Balance: {balance: .8f}`\n" \ - "\t`Pending: {pending: .8f}`\n" \ - "\t`Est. BTC: {est_btc: .8f}`\n".format(**currency) + if currency['est_btc'] > 0.0001: + output += "*{currency}:*\n" \ + "\t`Available: {available: .8f}`\n" \ + "\t`Balance: {balance: .8f}`\n" \ + "\t`Pending: {pending: .8f}`\n" \ + "\t`Est. BTC: {est_btc: .8f}`\n".format(**currency) + else: + output += "*{currency}*: not showing <1$ amount \n".format(**currency) output += "\n*Estimated Value*:\n" \ "\t`BTC: {total: .8f}`\n" \ From 701978a4b1e8ee2238ded16d7a5276957cb05403 Mon Sep 17 00:00:00 2001 From: Matthias Date: Wed, 10 Oct 2018 22:01:22 +0200 Subject: [PATCH 03/20] Add test for dust hiding --- freqtrade/rpc/telegram.py | 2 +- freqtrade/tests/rpc/test_rpc_telegram.py | 17 ++++++++++++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/freqtrade/rpc/telegram.py b/freqtrade/rpc/telegram.py index 996137728..040f053f1 100644 --- a/freqtrade/rpc/telegram.py +++ b/freqtrade/rpc/telegram.py @@ -314,7 +314,7 @@ class Telegram(RPC): "\t`Pending: {pending: .8f}`\n" \ "\t`Est. BTC: {est_btc: .8f}`\n".format(**currency) else: - output += "*{currency}*: not showing <1$ amount \n".format(**currency) + output += "*{currency}:* not showing <1$ amount \n".format(**currency) output += "\n*Estimated Value*:\n" \ "\t`BTC: {total: .8f}`\n" \ diff --git a/freqtrade/tests/rpc/test_rpc_telegram.py b/freqtrade/tests/rpc/test_rpc_telegram.py index 182c1d2e7..892c851bd 100644 --- a/freqtrade/tests/rpc/test_rpc_telegram.py +++ b/freqtrade/tests/rpc/test_rpc_telegram.py @@ -507,7 +507,12 @@ def test_telegram_balance_handle(default_conf, update, mocker) -> None: 'total': 10.0, 'free': 10.0, 'used': 0.0 - } + }, + 'XRP': { + 'total': 1.0, + 'free': 1.0, + 'used': 0.0 + } } def mock_ticker(symbol, refresh): @@ -517,7 +522,12 @@ def test_telegram_balance_handle(default_conf, update, mocker) -> None: 'ask': 10000.00, 'last': 10000.00, } - + elif symbol == 'XRP/BTC': + return { + 'bid': 0.00001, + 'ask': 0.00001, + 'last': 0.00001, + } return { 'bid': 0.1, 'ask': 0.1, @@ -548,7 +558,8 @@ def test_telegram_balance_handle(default_conf, update, mocker) -> None: assert '*USDT:*' in result assert 'Balance:' in result assert 'Est. BTC:' in result - assert 'BTC: 14.00000000' in result + assert 'BTC: 12.00000000' in result + assert '*XRP:* not showing <1$ amount' in result def test_balance_handle_empty_response(default_conf, update, mocker) -> None: From 93503d60517a8bf74ea1e9483051cc2dc22c2167 Mon Sep 17 00:00:00 2001 From: pyup-bot Date: Sat, 13 Oct 2018 14:33:06 +0200 Subject: [PATCH 04/20] Update ccxt from 1.17.375 to 1.17.376 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index a5f22fec2..0ce7f65cb 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -ccxt==1.17.375 +ccxt==1.17.376 SQLAlchemy==1.2.12 python-telegram-bot==11.1.0 arrow==0.12.1 From 4b9d04a2ca33c15c7f8dd492c48e8df775234d06 Mon Sep 17 00:00:00 2001 From: pyup-bot Date: Sun, 14 Oct 2018 14:33:06 +0200 Subject: [PATCH 05/20] Update ccxt from 1.17.376 to 1.17.381 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 0ce7f65cb..81c508014 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -ccxt==1.17.376 +ccxt==1.17.381 SQLAlchemy==1.2.12 python-telegram-bot==11.1.0 arrow==0.12.1 From b278dcd6db22cd749341603945c7686f04a4f0e7 Mon Sep 17 00:00:00 2001 From: pyup-bot Date: Mon, 15 Oct 2018 14:33:06 +0200 Subject: [PATCH 06/20] Update ccxt from 1.17.381 to 1.17.383 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 81c508014..4b2d474ca 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -ccxt==1.17.381 +ccxt==1.17.383 SQLAlchemy==1.2.12 python-telegram-bot==11.1.0 arrow==0.12.1 From b546f0302e549db70d129db0a3caa4877a83f678 Mon Sep 17 00:00:00 2001 From: pyup-bot Date: Tue, 16 Oct 2018 14:33:06 +0200 Subject: [PATCH 07/20] Update ccxt from 1.17.383 to 1.17.388 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 4b2d474ca..918a56891 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -ccxt==1.17.383 +ccxt==1.17.388 SQLAlchemy==1.2.12 python-telegram-bot==11.1.0 arrow==0.12.1 From 5134736c61a08bc0d5b5048ee154e543acb14c0a Mon Sep 17 00:00:00 2001 From: pyup-bot Date: Wed, 17 Oct 2018 14:34:07 +0200 Subject: [PATCH 08/20] Update ccxt from 1.17.388 to 1.17.392 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 918a56891..202d41abe 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -ccxt==1.17.388 +ccxt==1.17.392 SQLAlchemy==1.2.12 python-telegram-bot==11.1.0 arrow==0.12.1 From 14e58169750a510d668a5e44d20d3272258a1e3c Mon Sep 17 00:00:00 2001 From: pyup-bot Date: Wed, 17 Oct 2018 14:34:09 +0200 Subject: [PATCH 09/20] Update urllib3 from 1.23 to 1.24 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 202d41abe..b47c02865 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,7 +4,7 @@ python-telegram-bot==11.1.0 arrow==0.12.1 cachetools==2.1.0 requests==2.19.1 -urllib3==1.23 +urllib3==1.24 wrapt==1.10.11 pandas==0.23.4 scikit-learn==0.20.0 From d953190ca5e73fd249f18ecb65e027d305bcff71 Mon Sep 17 00:00:00 2001 From: pyup-bot Date: Wed, 17 Oct 2018 14:34:10 +0200 Subject: [PATCH 10/20] Update pytest from 3.8.2 to 3.9.1 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index b47c02865..86a654ffb 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,7 +12,7 @@ scipy==1.1.0 jsonschema==2.6.0 numpy==1.15.2 TA-Lib==0.4.17 -pytest==3.8.2 +pytest==3.9.1 pytest-mock==1.10.0 pytest-asyncio==0.9.0 pytest-cov==2.6.0 From c69b87914d6666797353c0d48f1fd2c7ec386c82 Mon Sep 17 00:00:00 2001 From: pyup-bot Date: Fri, 19 Oct 2018 14:35:07 +0200 Subject: [PATCH 11/20] Update ccxt from 1.17.392 to 1.17.393 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 86a654ffb..9359dc1a7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -ccxt==1.17.392 +ccxt==1.17.393 SQLAlchemy==1.2.12 python-telegram-bot==11.1.0 arrow==0.12.1 From 71814ae2d6806c2afefe09f8745dc656168cfd95 Mon Sep 17 00:00:00 2001 From: pyup-bot Date: Fri, 19 Oct 2018 14:35:09 +0200 Subject: [PATCH 12/20] Update requests from 2.19.1 to 2.20.0 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 9359dc1a7..e750cf893 100644 --- a/requirements.txt +++ b/requirements.txt @@ -3,7 +3,7 @@ SQLAlchemy==1.2.12 python-telegram-bot==11.1.0 arrow==0.12.1 cachetools==2.1.0 -requests==2.19.1 +requests==2.20.0 urllib3==1.24 wrapt==1.10.11 pandas==0.23.4 From 202b1d1f0bef02ad6f373babb9d995d774a1ab98 Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 21 Oct 2018 09:21:32 +0200 Subject: [PATCH 13/20] fix #1289 - we should not modify decimal context --- freqtrade/persistence.py | 6 +---- freqtrade/tests/optimize/test_backtesting.py | 2 +- freqtrade/tests/rpc/test_rpc_telegram.py | 6 ++--- freqtrade/tests/test_freqtradebot.py | 10 ++++---- freqtrade/tests/test_persistence.py | 26 ++++++++++---------- 5 files changed, 23 insertions(+), 27 deletions(-) diff --git a/freqtrade/persistence.py b/freqtrade/persistence.py index c26d74015..02267ac21 100644 --- a/freqtrade/persistence.py +++ b/freqtrade/persistence.py @@ -4,7 +4,7 @@ This module contains the class to persist trades into SQLite import logging from datetime import datetime -from decimal import Decimal, getcontext +from decimal import Decimal from typing import Any, Dict, Optional import arrow @@ -241,7 +241,6 @@ class Trade(_DECL_BASE): logger.info('Updating trade (id=%d) ...', self.id) - getcontext().prec = 8 # Bittrex do not go above 8 decimal if order_type == 'limit' and order['side'] == 'buy': # Update open rate and actual amount self.open_rate = Decimal(order['price']) @@ -278,7 +277,6 @@ class Trade(_DECL_BASE): If rate is not set self.fee will be used :return: Price in BTC of the open trade """ - getcontext().prec = 8 buy_trade = (Decimal(self.amount) * Decimal(self.open_rate)) fees = buy_trade * Decimal(fee or self.fee_open) @@ -296,7 +294,6 @@ class Trade(_DECL_BASE): If rate is not set self.close_rate will be used :return: Price in BTC of the open trade """ - getcontext().prec = 8 if rate is None and not self.close_rate: return 0.0 @@ -336,7 +333,6 @@ class Trade(_DECL_BASE): :param fee: fee to use on the close rate (optional). :return: profit in percentage as float """ - getcontext().prec = 8 open_trade_price = self.calc_open_trade_price() close_trade_price = self.calc_close_trade_price( diff --git a/freqtrade/tests/optimize/test_backtesting.py b/freqtrade/tests/optimize/test_backtesting.py index a17867b3a..3ea0f240c 100644 --- a/freqtrade/tests/optimize/test_backtesting.py +++ b/freqtrade/tests/optimize/test_backtesting.py @@ -534,7 +534,7 @@ def test_backtest(default_conf, fee, mocker) -> None: expected = pd.DataFrame( {'pair': [pair, pair], - 'profit_percent': [0.00029975, 0.00056708], + 'profit_percent': [0.00029977, 0.00056716], 'profit_abs': [1.49e-06, 7.6e-07], 'open_time': [Arrow(2018, 1, 29, 18, 40, 0).datetime, Arrow(2018, 1, 30, 3, 30, 0).datetime], diff --git a/freqtrade/tests/rpc/test_rpc_telegram.py b/freqtrade/tests/rpc/test_rpc_telegram.py index 708ed4478..45e01aa57 100644 --- a/freqtrade/tests/rpc/test_rpc_telegram.py +++ b/freqtrade/tests/rpc/test_rpc_telegram.py @@ -725,7 +725,7 @@ def test_forcesell_handle(default_conf, update, ticker, fee, 'open_rate': 1.099e-05, 'current_rate': 1.172e-05, 'profit_amount': 6.126e-05, - 'profit_percent': 0.06110514, + 'profit_percent': 0.0611052, 'stake_currency': 'BTC', 'fiat_currency': 'USD', } == last_msg @@ -778,7 +778,7 @@ def test_forcesell_down_handle(default_conf, update, ticker, fee, 'open_rate': 1.099e-05, 'current_rate': 1.044e-05, 'profit_amount': -5.492e-05, - 'profit_percent': -0.05478343, + 'profit_percent': -0.05478342, 'stake_currency': 'BTC', 'fiat_currency': 'USD', } == last_msg @@ -823,7 +823,7 @@ def test_forcesell_all_handle(default_conf, update, ticker, fee, markets, mocker 'open_rate': 1.099e-05, 'current_rate': 1.098e-05, 'profit_amount': -5.91e-06, - 'profit_percent': -0.00589292, + 'profit_percent': -0.00589291, 'stake_currency': 'BTC', 'fiat_currency': 'USD', } == msg diff --git a/freqtrade/tests/test_freqtradebot.py b/freqtrade/tests/test_freqtradebot.py index cad2f654d..383b07864 100644 --- a/freqtrade/tests/test_freqtradebot.py +++ b/freqtrade/tests/test_freqtradebot.py @@ -804,7 +804,7 @@ def test_handle_trade(default_conf, limit_buy_order, limit_sell_order, trade.update(limit_sell_order) assert trade.close_rate == 0.00001173 - assert trade.close_profit == 0.06201057 + assert trade.close_profit == 0.06201058 assert trade.calc_profit() == 0.00006217 assert trade.close_date is not None @@ -1231,7 +1231,7 @@ def test_execute_sell_up(default_conf, ticker, fee, ticker_sell_up, markets, moc 'open_rate': 1.099e-05, 'current_rate': 1.172e-05, 'profit_amount': 6.126e-05, - 'profit_percent': 0.06110514, + 'profit_percent': 0.0611052, 'stake_currency': 'BTC', 'fiat_currency': 'USD', } == last_msg @@ -1277,7 +1277,7 @@ def test_execute_sell_down(default_conf, ticker, fee, ticker_sell_down, markets, 'open_rate': 1.099e-05, 'current_rate': 1.044e-05, 'profit_amount': -5.492e-05, - 'profit_percent': -0.05478343, + 'profit_percent': -0.05478342, 'stake_currency': 'BTC', 'fiat_currency': 'USD', } == last_msg @@ -1324,7 +1324,7 @@ def test_execute_sell_without_conf_sell_up(default_conf, ticker, fee, 'open_rate': 1.099e-05, 'current_rate': 1.172e-05, 'profit_amount': 6.126e-05, - 'profit_percent': 0.06110514, + 'profit_percent': 0.0611052, } == last_msg @@ -1370,7 +1370,7 @@ def test_execute_sell_without_conf_sell_down(default_conf, ticker, fee, 'open_rate': 1.099e-05, 'current_rate': 1.044e-05, 'profit_amount': -5.492e-05, - 'profit_percent': -0.05478343, + 'profit_percent': -0.05478342, } == last_msg diff --git a/freqtrade/tests/test_persistence.py b/freqtrade/tests/test_persistence.py index 7584537e2..5e0647dff 100644 --- a/freqtrade/tests/test_persistence.py +++ b/freqtrade/tests/test_persistence.py @@ -113,7 +113,7 @@ def test_update_with_bittrex(limit_buy_order, limit_sell_order, fee): trade.update(limit_sell_order) assert trade.open_order_id is None assert trade.close_rate == 0.00001173 - assert trade.close_profit == 0.06201057 + assert trade.close_profit == 0.06201058 assert trade.close_date is not None @@ -129,16 +129,16 @@ def test_calc_open_close_trade_price(limit_buy_order, limit_sell_order, fee): trade.open_order_id = 'something' trade.update(limit_buy_order) - assert trade.calc_open_trade_price() == 0.001002500 + assert trade.calc_open_trade_price() == 0.0010024999999225068 trade.update(limit_sell_order) - assert trade.calc_close_trade_price() == 0.0010646656 + assert trade.calc_close_trade_price() == 0.0010646656050132426 # Profit in BTC assert trade.calc_profit() == 0.00006217 # Profit in percent - assert trade.calc_profit_percent() == 0.06201057 + assert trade.calc_profit_percent() == 0.06201058 @pytest.mark.usefixtures("init_persistence") @@ -207,10 +207,10 @@ def test_calc_open_trade_price(limit_buy_order, fee): trade.update(limit_buy_order) # Buy @ 0.00001099 # Get the open rate price with the standard fee rate - assert trade.calc_open_trade_price() == 0.001002500 + assert trade.calc_open_trade_price() == 0.0010024999999225068 # Get the open rate price with a custom fee rate - assert trade.calc_open_trade_price(fee=0.003) == 0.001003000 + assert trade.calc_open_trade_price(fee=0.003) == 0.001002999999922468 @pytest.mark.usefixtures("init_persistence") @@ -226,14 +226,14 @@ def test_calc_close_trade_price(limit_buy_order, limit_sell_order, fee): trade.update(limit_buy_order) # Buy @ 0.00001099 # Get the close rate price with a custom close rate and a regular fee rate - assert trade.calc_close_trade_price(rate=0.00001234) == 0.0011200318 + assert trade.calc_close_trade_price(rate=0.00001234) == 0.0011200318470471794 # Get the close rate price with a custom close rate and a custom fee rate - assert trade.calc_close_trade_price(rate=0.00001234, fee=0.003) == 0.0011194704 + assert trade.calc_close_trade_price(rate=0.00001234, fee=0.003) == 0.0011194704275749754 # Test when we apply a Sell order, and ask price with a custom fee rate trade.update(limit_sell_order) - assert trade.calc_close_trade_price(fee=0.005) == 0.0010619972 + assert trade.calc_close_trade_price(fee=0.005) == 0.0010619972701635854 @pytest.mark.usefixtures("init_persistence") @@ -281,17 +281,17 @@ def test_calc_profit_percent(limit_buy_order, limit_sell_order, fee): trade.update(limit_buy_order) # Buy @ 0.00001099 # Get percent of profit with a custom rate (Higher than open rate) - assert trade.calc_profit_percent(rate=0.00001234) == 0.1172387 + assert trade.calc_profit_percent(rate=0.00001234) == 0.11723875 # Get percent of profit with a custom rate (Lower than open rate) - assert trade.calc_profit_percent(rate=0.00000123) == -0.88863827 + assert trade.calc_profit_percent(rate=0.00000123) == -0.88863828 # Test when we apply a Sell order. Sell higher than open rate @ 0.00001173 trade.update(limit_sell_order) - assert trade.calc_profit_percent() == 0.06201057 + assert trade.calc_profit_percent() == 0.06201058 # Test with a custom fee rate on the close trade - assert trade.calc_profit_percent(fee=0.003) == 0.0614782 + assert trade.calc_profit_percent(fee=0.003) == 0.06147824 def test_clean_dry_run_db(default_conf, fee): From 677a9e56afd83141f7e2a3a6cc5acc2737fdffaa Mon Sep 17 00:00:00 2001 From: Matthias Date: Sun, 21 Oct 2018 09:23:07 +0200 Subject: [PATCH 14/20] remove skipped test (refresh_whitelist is tested in test_acl_pair) --- freqtrade/tests/test_freqtradebot.py | 5 ----- 1 file changed, 5 deletions(-) diff --git a/freqtrade/tests/test_freqtradebot.py b/freqtrade/tests/test_freqtradebot.py index 383b07864..6b13da35f 100644 --- a/freqtrade/tests/test_freqtradebot.py +++ b/freqtrade/tests/test_freqtradebot.py @@ -167,11 +167,6 @@ def test_gen_pair_whitelist_not_supported(mocker, default_conf, tickers) -> None freqtrade._gen_pair_whitelist(base_currency='BTC') -@pytest.mark.skip(reason="Test not implemented") -def test_refresh_whitelist() -> None: - pass - - def test_get_trade_stake_amount(default_conf, ticker, limit_buy_order, fee, mocker) -> None: patch_RPCManager(mocker) patch_exchange(mocker) From ee697d609cce6a81f55b5b02cdf10eebdf39d43a Mon Sep 17 00:00:00 2001 From: pyup-bot Date: Sun, 21 Oct 2018 14:34:06 +0200 Subject: [PATCH 15/20] Update ccxt from 1.17.393 to 1.17.395 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index e750cf893..70759fc6f 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -ccxt==1.17.393 +ccxt==1.17.395 SQLAlchemy==1.2.12 python-telegram-bot==11.1.0 arrow==0.12.1 From 91dc8644bfb99f2eedd83c5563149f11ab610aa0 Mon Sep 17 00:00:00 2001 From: wingsgb Date: Mon, 22 Oct 2018 14:30:01 +1300 Subject: [PATCH 16/20] Update hyperopt.md --- docs/hyperopt.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/hyperopt.md b/docs/hyperopt.md index 7444d32b7..d1f363733 100644 --- a/docs/hyperopt.md +++ b/docs/hyperopt.md @@ -20,8 +20,8 @@ We recommend you start by taking a look at `hyperopt.py` file located in [freqtr ### Configure your Guards and Triggers There are two places you need to change to add a new buy strategy for testing: -- Inside [populate_buy_trend()](https://github.com/freqtrade/freqtrade/blob/develop/freqtrade/optimize/hyperopt.py#L278-L294). -- Inside [hyperopt_space()](https://github.com/freqtrade/freqtrade/blob/develop/freqtrade/optimize/hyperopt.py#L218-L229) +- Inside [populate_buy_trend()](https://github.com/freqtrade/freqtrade/blob/develop/freqtrade/optimize/hyperopt.py#L231-L264). +- Inside [hyperopt_space()](https://github.com/freqtrade/freqtrade/blob/develop/freqtrade/optimize/hyperopt.py#L213-L224) and the associated methods `indicator_space`, `roi_space`, `stoploss_space`. There you have two different type of indicators: 1. `guards` and 2. `triggers`. From 764aed2c37dee6b1676c9b96c9b8bd27fe8e7487 Mon Sep 17 00:00:00 2001 From: pyup-bot Date: Mon, 22 Oct 2018 14:34:08 +0200 Subject: [PATCH 17/20] Update ccxt from 1.17.395 to 1.17.399 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 70759fc6f..a33a388d2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -ccxt==1.17.395 +ccxt==1.17.399 SQLAlchemy==1.2.12 python-telegram-bot==11.1.0 arrow==0.12.1 From 49d1687229627d820c5ee999bd8644ca43df6c23 Mon Sep 17 00:00:00 2001 From: pyup-bot Date: Tue, 23 Oct 2018 14:33:09 +0200 Subject: [PATCH 18/20] Update ccxt from 1.17.399 to 1.17.402 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index a33a388d2..69868ab27 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -ccxt==1.17.399 +ccxt==1.17.402 SQLAlchemy==1.2.12 python-telegram-bot==11.1.0 arrow==0.12.1 From 59545013c1150a2e27a0bfd14c745d270cc4b7cd Mon Sep 17 00:00:00 2001 From: pyup-bot Date: Tue, 23 Oct 2018 14:33:10 +0200 Subject: [PATCH 19/20] Update numpy from 1.15.2 to 1.15.3 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 69868ab27..15929c089 100644 --- a/requirements.txt +++ b/requirements.txt @@ -10,7 +10,7 @@ pandas==0.23.4 scikit-learn==0.20.0 scipy==1.1.0 jsonschema==2.6.0 -numpy==1.15.2 +numpy==1.15.3 TA-Lib==0.4.17 pytest==3.9.1 pytest-mock==1.10.0 From b90392f9be285c823b90ed9ab473ba0348986f70 Mon Sep 17 00:00:00 2001 From: pyup-bot Date: Tue, 23 Oct 2018 14:33:12 +0200 Subject: [PATCH 20/20] Update pytest from 3.9.1 to 3.9.2 --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 15929c089..461125418 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,7 +12,7 @@ scipy==1.1.0 jsonschema==2.6.0 numpy==1.15.3 TA-Lib==0.4.17 -pytest==3.9.1 +pytest==3.9.2 pytest-mock==1.10.0 pytest-asyncio==0.9.0 pytest-cov==2.6.0