diff --git a/freqtrade/tests/conftest.py b/freqtrade/tests/conftest.py index da48f5fc4..42e883d23 100644 --- a/freqtrade/tests/conftest.py +++ b/freqtrade/tests/conftest.py @@ -103,32 +103,40 @@ def ticker_sell_down(): @pytest.fixture def health(): - return MagicMock(return_value=[{ - 'Currency': 'BTC', - 'IsActive': True, - 'LastChecked': '2017-11-13T20:15:00.00', - 'Notice': None - }, { - 'Currency': 'ETH', - 'IsActive': True, - 'LastChecked': '2017-11-13T20:15:00.00', - 'Notice': None - }, { - 'Currency': 'TRST', - 'IsActive': True, - 'LastChecked': '2017-11-13T20:15:00.00', - 'Notice': None - }, { - 'Currency': 'SWT', - 'IsActive': True, - 'LastChecked': '2017-11-13T20:15:00.00', - 'Notice': None - }, { - 'Currency': 'BCC', - 'IsActive': False, - 'LastChecked': '2017-11-13T20:15:00.00', - 'Notice': None - }]) + return MagicMock(return_value={ + 'ETH/BTC': { + 'Currency': 'BTC', + 'base': 'ETH', + 'quote': 'BTC', + 'active': True, + 'LastChecked': '2017-11-13T20:15:00.00', + 'Notice': None + }, + 'TRST/BTC': { + 'Currency': 'TRST', + 'base': 'TRST', + 'quote': 'BTC', + 'active': True, + 'LastChecked': '2017-11-13T20:15:00.00', + 'Notice': None + }, + 'SWT/BTC': { + 'Currency': 'SWT', + 'base': 'SWT', + 'quote': 'BTC', + 'active': True, + 'LastChecked': '2017-11-13T20:15:00.00', + 'Notice': None + }, + 'BCC/BTC': { + 'Currency': 'BCC', + 'base': 'BCC', + 'quote': 'BTC', + 'active': False, + 'LastChecked': '2017-11-13T20:15:00.00', + 'Notice': None + } + }) @pytest.fixture @@ -150,7 +158,7 @@ def limit_buy_order_old(): return { 'id': 'mocked_limit_buy_old', 'type': 'LIMIT_BUY', - 'pair': 'BTC_ETH', + 'pair': 'ETH/BTC', 'opened': str(arrow.utcnow().shift(minutes=-601).datetime), 'rate': 0.00001099, 'amount': 90.99181073, @@ -163,7 +171,7 @@ def limit_sell_order_old(): return { 'id': 'mocked_limit_sell_old', 'type': 'LIMIT_SELL', - 'pair': 'BTC_ETH', + 'pair': 'ETH/BTC', 'opened': str(arrow.utcnow().shift(minutes=-601).datetime), 'rate': 0.00001099, 'amount': 90.99181073, @@ -176,7 +184,7 @@ def limit_buy_order_old_partial(): return { 'id': 'mocked_limit_buy_old_partial', 'type': 'LIMIT_BUY', - 'pair': 'BTC_ETH', + 'pair': 'ETH/BTC', 'opened': str(arrow.utcnow().shift(minutes=-601).datetime), 'rate': 0.00001099, 'amount': 90.99181073, diff --git a/freqtrade/tests/rpc/test_rpc_telegram.py b/freqtrade/tests/rpc/test_rpc_telegram.py index 2dacf33ce..53e6ec88b 100644 --- a/freqtrade/tests/rpc/test_rpc_telegram.py +++ b/freqtrade/tests/rpc/test_rpc_telegram.py @@ -108,7 +108,7 @@ def test_status_handle(default_conf, update, ticker, mocker): _status(bot=MagicMock(), update=update) assert msg_mock.call_count == 1 - assert '[BTC_ETH]' 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, mocker): @@ -148,7 +148,7 @@ def test_status_table_handle(default_conf, update, ticker, mocker): fields = re.sub('[ ]+', ' ', line[2].strip()).split(' ') assert int(fields[0]) == 1 - assert fields[1] == 'BTC_ETH' + assert fields[1] == 'ETH/BTC' assert msg_mock.call_count == 1 @@ -206,7 +206,7 @@ def test_profit_handle( assert '∙ `0.00006217 BTC (6.20%)`' in msg_mock.call_args_list[-1][0][0] assert '∙ `0.933 USD`' in msg_mock.call_args_list[-1][0][0] - assert '*Best Performing:* `BTC_ETH: 6.20%`' in msg_mock.call_args_list[-1][0][0] + assert '*Best Performing:* `ETH/BTC: 6.20%`' in msg_mock.call_args_list[-1][0][0] def test_forcesell_handle(default_conf, update, ticker, ticker_sell_up, mocker): @@ -239,7 +239,7 @@ def test_forcesell_handle(default_conf, update, ticker, ticker_sell_up, mocker): assert rpc_mock.call_count == 2 assert 'Selling' in rpc_mock.call_args_list[-1][0][0] - assert '[BTC_ETH]' in rpc_mock.call_args_list[-1][0][0] + assert '[ETH/BTC]' in rpc_mock.call_args_list[-1][0][0] assert 'Amount' in rpc_mock.call_args_list[-1][0][0] assert '0.00001172' in rpc_mock.call_args_list[-1][0][0] assert 'profit: 6.11%, 0.00006126' in rpc_mock.call_args_list[-1][0][0] @@ -276,7 +276,7 @@ def test_forcesell_down_handle(default_conf, update, ticker, ticker_sell_down, m assert rpc_mock.call_count == 2 assert 'Selling' in rpc_mock.call_args_list[-1][0][0] - assert '[BTC_ETH]' in rpc_mock.call_args_list[-1][0][0] + assert '[ETH/BTC]' in rpc_mock.call_args_list[-1][0][0] assert 'Amount' in rpc_mock.call_args_list[-1][0][0] assert '0.00001044' in rpc_mock.call_args_list[-1][0][0] assert 'loss: -5.48%, -0.00005492' in rpc_mock.call_args_list[-1][0][0] @@ -294,7 +294,7 @@ def test_exec_forcesell_open_orders(default_conf, ticker, mocker): }), cancel_order=cancel_order_mock) trade = Trade( - pair='BTC_ETH', + pair='ETH/BTC', open_rate=1, exchange='BITTREX', open_order_id='123456789', @@ -403,7 +403,7 @@ def test_performance_handle( _performance(bot=MagicMock(), update=update) assert msg_mock.call_count == 1 assert 'Performance' in msg_mock.call_args_list[0][0][0] - assert 'BTC_ETH\t6.20% (1)' in msg_mock.call_args_list[0][0][0] + assert 'ETH/BTC\t6.20% (1)' in msg_mock.call_args_list[0][0][0] def test_daily_handle(default_conf, update, ticker, limit_buy_order, limit_sell_order, mocker): diff --git a/freqtrade/tests/test_acl_pair.py b/freqtrade/tests/test_acl_pair.py index b70596091..a115c2fb4 100644 --- a/freqtrade/tests/test_acl_pair.py +++ b/freqtrade/tests/test_acl_pair.py @@ -12,22 +12,23 @@ def whitelist_conf(): 'stake_currency': 'BTC', 'exchange': { 'pair_whitelist': [ - 'BTC_ETH', - 'BTC_TKN', - 'BTC_TRST', - 'BTC_SWT', - 'BTC_BCC' + 'ETH/BTC', + 'TKN/BTC', + 'TRST/BTC', + 'SWT/BTC', + 'BCC/BTC' ], 'pair_blacklist': [ - 'BTC_BLK' + 'BLK/BTC' ], }, } def get_market_summaries(): - return [{ - 'MarketName': 'BTC-TKN', + return {'TKN/BTC': { + 'symbol': 'TKN/BTC', + 'MarketName': 'TKN/BTC', 'High': 0.00000919, 'Low': 0.00000820, 'Volume': 74339.61396015, @@ -40,9 +41,11 @@ def get_market_summaries(): 'OpenSellOrders': 15, 'PrevDay': 0.00000821, 'Created': '2014-03-20T06:00:00', - 'DisplayMarketName': '' - }, { - 'MarketName': 'BTC-ETH', + 'DisplayMarketName': '', + 'info': {}, + }, 'ETH/BTC': { + 'symbol': 'ETH/BTC', + 'MarketName': 'ETH/BTC', 'High': 0.00000072, 'Low': 0.00000001, 'Volume': 166340678.42280999, @@ -55,9 +58,11 @@ def get_market_summaries(): 'OpenSellOrders': 18, 'PrevDay': 0.00000002, 'Created': '2014-05-30T07:57:49.637', - 'DisplayMarketName': '' - }, { - 'MarketName': 'BTC-BLK', + 'DisplayMarketName': '', + 'info': {}, + }, 'BLK/BTC': { + 'symbol': 'BLK/BTC', + 'MarketName': 'BLK/BTC', 'High': 0.00000072, 'Low': 0.00000001, 'Volume': 166340678.42280999, @@ -70,18 +75,21 @@ def get_market_summaries(): 'OpenSellOrders': 18, 'PrevDay': 0.00000002, 'Created': '2014-05-30T07:57:49.637', - 'DisplayMarketName': '' - }] + 'DisplayMarketName': '', + 'info': {}, + }} def get_health(): - return [{'Currency': 'ETH', 'IsActive': True}, - {'Currency': 'TKN', 'IsActive': True}, - {'Currency': 'BLK', 'IsActive': True}] + return { + 'ETH/BTC': {'Currency': 'ETH', 'base': 'ETH', 'quote': 'BTC', 'active': True}, + 'TKN/BTC': {'Currency': 'TKN', 'base': 'TKN', 'quote': 'BTC', 'active': True}, + 'BLK/BTC': {'Currency': 'BLK', 'base': 'BLK', 'quote': 'BTC', 'active': True} + } def get_health_empty(): - return [] + return {} def test_refresh_market_pair_not_in_whitelist(mocker): @@ -90,9 +98,9 @@ def test_refresh_market_pair_not_in_whitelist(mocker): mocker.patch.multiple('freqtrade.main.exchange', get_wallet_health=get_health) refreshedwhitelist = refresh_whitelist( - conf['exchange']['pair_whitelist'] + ['BTC_XXX']) + conf['exchange']['pair_whitelist'] + ['XXX/BTC']) # List ordered by BaseVolume - whitelist = ['BTC_ETH', 'BTC_TKN'] + whitelist = ['ETH/BTC', 'TKN/BTC'] # Ensure all except those in whitelist are removed assert whitelist == refreshedwhitelist @@ -104,7 +112,7 @@ def test_refresh_whitelist(mocker): get_wallet_health=get_health) refreshedwhitelist = refresh_whitelist(conf['exchange']['pair_whitelist']) # List ordered by BaseVolume - whitelist = ['BTC_ETH', 'BTC_TKN'] + whitelist = ['ETH/BTC', 'TKN/BTC'] # Ensure all except those in whitelist are removed assert whitelist == refreshedwhitelist @@ -117,7 +125,7 @@ def test_refresh_whitelist_dynamic(mocker): mocker.patch.multiple('freqtrade.main.exchange', get_market_summaries=get_market_summaries) # argument: use the whitelist dynamically by exchange-volume - whitelist = ['BTC_TKN', 'BTC_ETH'] + whitelist = ['TKN/BTC', 'ETH/BTC'] refreshedwhitelist = refresh_whitelist( gen_pair_whitelist(conf['stake_currency'])) assert whitelist == refreshedwhitelist diff --git a/freqtrade/tests/test_analyze.py b/freqtrade/tests/test_analyze.py index 2e75b0624..35cbbd3f7 100644 --- a/freqtrade/tests/test_analyze.py +++ b/freqtrade/tests/test_analyze.py @@ -113,7 +113,7 @@ def test_get_signal_handles_exceptions(mocker): def test_parse_ticker_dataframe(ticker_history, ticker_history_without_bv): - columns = ['close', 'high', 'low', 'open', 'date', 'volume'] + columns = ['date', 'open', 'high', 'low', 'close', 'volume'] # Test file with BV data dataframe = parse_ticker_dataframe(ticker_history) diff --git a/freqtrade/tests/test_dataframe.py b/freqtrade/tests/test_dataframe.py index 9af42a30e..22a0115de 100644 --- a/freqtrade/tests/test_dataframe.py +++ b/freqtrade/tests/test_dataframe.py @@ -4,7 +4,7 @@ import pandas import freqtrade.optimize from freqtrade import analyze -_pairs = ['BTC_ETH'] +_pairs = ['ETH/BTC'] def load_dataframe_pair(pairs): diff --git a/freqtrade/tests/test_main.py b/freqtrade/tests/test_main.py index ba7f8108f..3cd2eedc0 100644 --- a/freqtrade/tests/test_main.py +++ b/freqtrade/tests/test_main.py @@ -11,7 +11,7 @@ from sqlalchemy import create_engine import freqtrade.main as main import freqtrade.tests.conftest as tt # test tools from freqtrade import DependencyException, OperationalException -from freqtrade.exchange import Exchanges +import freqtrade.exchange as exchange from freqtrade.main import (_process, check_handle_timedout, create_trade, execute_sell, get_target_bid, handle_trade, init) from freqtrade.misc import State, get_state @@ -100,7 +100,7 @@ def test_process_trade_creation(default_conf, ticker, limit_buy_order, health, m assert trade.stake_amount == default_conf['stake_amount'] assert trade.is_open assert trade.open_date is not None - assert trade.exchange == Exchanges.BITTREX.name + assert trade.exchange == 'BITTREX' assert trade.open_rate == 0.00001099 assert trade.amount == 90.99181073703367 @@ -174,15 +174,18 @@ def test_create_trade(default_conf, ticker, limit_buy_order, mocker): # Save state of current whitelist whitelist = copy.deepcopy(default_conf['exchange']['pair_whitelist']) + exchange.init(default_conf) + init(default_conf, create_engine('sqlite://')) create_trade(0.001, int(default_conf['ticker_interval'])) trade = Trade.query.first() + assert trade is not None assert trade.stake_amount == 0.001 assert trade.is_open assert trade.open_date is not None - assert trade.exchange == Exchanges.BITTREX.name + assert trade.exchange == exchange.get_name().upper() # Simulate fulfilled LIMIT_BUY order for trade trade.update(limit_buy_order) @@ -250,8 +253,8 @@ def test_create_trade_no_pairs_after_blacklist(default_conf, ticker, mocker): with pytest.raises(DependencyException, match=r'.*No pair in whitelist.*'): conf = copy.deepcopy(default_conf) - conf['exchange']['pair_whitelist'] = ["BTC_ETH"] - conf['exchange']['pair_blacklist'] = ["BTC_ETH"] + conf['exchange']['pair_whitelist'] = ["ETH/BTC"] + conf['exchange']['pair_blacklist'] = ["ETH/BTC"] mocker.patch.dict('freqtrade.main._CONF', conf) create_trade(default_conf['stake_amount'], int(default_conf['ticker_interval'])) @@ -454,7 +457,7 @@ def test_check_handle_timedout_buy(default_conf, ticker, limit_buy_order_old, mo init(default_conf, create_engine('sqlite://')) trade_buy = Trade( - pair='BTC_ETH', + pair='ETH/BTC', open_rate=0.00001099, exchange='BITTREX', open_order_id='123456789', @@ -503,7 +506,7 @@ def test_check_handle_timedout_sell(default_conf, ticker, limit_sell_order_old, init(default_conf, create_engine('sqlite://')) trade_sell = Trade( - pair='BTC_ETH', + pair='ETH/BTC', open_rate=0.00001099, exchange='BITTREX', open_order_id='123456789', @@ -552,7 +555,7 @@ def test_check_handle_timedout_partial(default_conf, ticker, limit_buy_order_old init(default_conf, create_engine('sqlite://')) trade_buy = Trade( - pair='BTC_ETH', + pair='ETH/BTC', open_rate=0.00001099, exchange='BITTREX', open_order_id='123456789', @@ -617,7 +620,7 @@ def test_execute_sell_up(default_conf, ticker, ticker_sell_up, mocker): assert rpc_mock.call_count == 2 assert 'Selling' in rpc_mock.call_args_list[-1][0][0] - assert '[BTC_ETH]' in rpc_mock.call_args_list[-1][0][0] + assert '[ETH/BTC]' in rpc_mock.call_args_list[-1][0][0] assert 'Amount' in rpc_mock.call_args_list[-1][0][0] assert 'Profit' in rpc_mock.call_args_list[-1][0][0] assert '0.00001172' in rpc_mock.call_args_list[-1][0][0] @@ -655,7 +658,7 @@ def test_execute_sell_down(default_conf, ticker, ticker_sell_down, mocker): assert rpc_mock.call_count == 2 assert 'Selling' in rpc_mock.call_args_list[-1][0][0] - assert '[BTC_ETH]' in rpc_mock.call_args_list[-1][0][0] + assert '[ETH/BTC]' in rpc_mock.call_args_list[-1][0][0] assert 'Amount' in rpc_mock.call_args_list[-1][0][0] assert '0.00001044' in rpc_mock.call_args_list[-1][0][0] assert 'loss: -5.48%, -0.00005492' in rpc_mock.call_args_list[-1][0][0] @@ -688,7 +691,7 @@ def test_execute_sell_without_conf_sell_down(default_conf, ticker, ticker_sell_d assert rpc_mock.call_count == 2 assert 'Selling' in rpc_mock.call_args_list[-1][0][0] - assert '[BTC_ETH]' in rpc_mock.call_args_list[-1][0][0] + assert '[ETH/BTC]' in rpc_mock.call_args_list[-1][0][0] assert '0.00001044' in rpc_mock.call_args_list[-1][0][0] assert 'loss: -5.48%, -0.00005492' in rpc_mock.call_args_list[-1][0][0] @@ -719,7 +722,7 @@ def test_execute_sell_without_conf_sell_up(default_conf, ticker, ticker_sell_up, assert rpc_mock.call_count == 2 assert 'Selling' in rpc_mock.call_args_list[-1][0][0] - assert '[BTC_ETH]' in rpc_mock.call_args_list[-1][0][0] + assert '[ETH/BTC]' in rpc_mock.call_args_list[-1][0][0] assert 'Amount' in rpc_mock.call_args_list[-1][0][0] assert '0.00001172' in rpc_mock.call_args_list[-1][0][0] assert '(profit: 6.11%, 0.00006126)' in rpc_mock.call_args_list[-1][0][0] diff --git a/freqtrade/tests/test_persistence.py b/freqtrade/tests/test_persistence.py index 401de7acb..8ff8f22ae 100644 --- a/freqtrade/tests/test_persistence.py +++ b/freqtrade/tests/test_persistence.py @@ -2,7 +2,6 @@ import os import pytest from sqlalchemy import create_engine -from freqtrade.exchange import Exchanges from freqtrade.persistence import Trade, init, clean_dry_run_db @@ -117,10 +116,10 @@ def test_update_with_bittrex(limit_buy_order, limit_sell_order): """ trade = Trade( - pair='BTC_ETH', + pair='ETH/BTC', stake_amount=0.001, fee=0.0025, - exchange=Exchanges.BITTREX, + exchange="BITTREX", ) assert trade.open_order_id is None assert trade.open_rate is None @@ -144,10 +143,10 @@ def test_update_with_bittrex(limit_buy_order, limit_sell_order): def test_calc_open_close_trade_price(limit_buy_order, limit_sell_order): trade = Trade( - pair='BTC_ETH', + pair='ETH/BTC', stake_amount=0.001, fee=0.0025, - exchange=Exchanges.BITTREX, + exchange="BITTREX", ) trade.open_order_id = 'something' @@ -166,10 +165,10 @@ def test_calc_open_close_trade_price(limit_buy_order, limit_sell_order): def test_calc_close_trade_price_exception(limit_buy_order): trade = Trade( - pair='BTC_ETH', + pair='ETH/BTC', stake_amount=0.001, fee=0.0025, - exchange=Exchanges.BITTREX, + exchange="BITTREX", ) trade.open_order_id = 'something' @@ -179,10 +178,10 @@ def test_calc_close_trade_price_exception(limit_buy_order): def test_update_open_order(limit_buy_order): trade = Trade( - pair='BTC_ETH', + pair='ETH/BTC', stake_amount=1.00, fee=0.1, - exchange=Exchanges.BITTREX, + exchange="BITTREX", ) assert trade.open_order_id is None @@ -201,10 +200,10 @@ def test_update_open_order(limit_buy_order): def test_update_invalid_order(limit_buy_order): trade = Trade( - pair='BTC_ETH', + pair='ETH/BTC', stake_amount=1.00, fee=0.1, - exchange=Exchanges.BITTREX, + exchange="BITTREX" ) limit_buy_order['type'] = 'invalid' with pytest.raises(ValueError, match=r'Unknown order type'): @@ -213,10 +212,10 @@ def test_update_invalid_order(limit_buy_order): def test_calc_open_trade_price(limit_buy_order): trade = Trade( - pair='BTC_ETH', + pair='ETH/BTC', stake_amount=0.001, fee=0.0025, - exchange=Exchanges.BITTREX, + exchange="BITTREX", ) trade.open_order_id = 'open_trade' trade.update(limit_buy_order) # Buy @ 0.00001099 @@ -230,10 +229,10 @@ def test_calc_open_trade_price(limit_buy_order): def test_calc_close_trade_price(limit_buy_order, limit_sell_order): trade = Trade( - pair='BTC_ETH', + pair='ETH/BTC', stake_amount=0.001, fee=0.0025, - exchange=Exchanges.BITTREX, + exchange="BITTREX", ) trade.open_order_id = 'close_trade' trade.update(limit_buy_order) # Buy @ 0.00001099 @@ -251,10 +250,10 @@ def test_calc_close_trade_price(limit_buy_order, limit_sell_order): def test_calc_profit(limit_buy_order, limit_sell_order): trade = Trade( - pair='BTC_ETH', + pair='ETH/BTC', stake_amount=0.001, fee=0.0025, - exchange=Exchanges.BITTREX, + exchange="BITTREX", ) trade.open_order_id = 'profit_percent' trade.update(limit_buy_order) # Buy @ 0.00001099 @@ -285,10 +284,10 @@ def test_calc_profit(limit_buy_order, limit_sell_order): def test_calc_profit_percent(limit_buy_order, limit_sell_order): trade = Trade( - pair='BTC_ETH', + pair='ETH/BTC', stake_amount=0.001, fee=0.0025, - exchange=Exchanges.BITTREX, + exchange="BITTREX", ) trade.open_order_id = 'profit_percent' trade.update(limit_buy_order) # Buy @ 0.00001099