refactor tests of get_real_amount
This commit is contained in:
parent
c7d1a767f7
commit
1d43dc229b
@ -499,3 +499,74 @@ def result():
|
|||||||
# that inserts a trade of some type and open-status
|
# that inserts a trade of some type and open-status
|
||||||
# return the open-order-id
|
# return the open-order-id
|
||||||
# See tests in rpc/main that could use this
|
# See tests in rpc/main that could use this
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="function")
|
||||||
|
def trades_for_order():
|
||||||
|
return [{'info': {'id': 34567,
|
||||||
|
'orderId': 123456,
|
||||||
|
'price': '0.24544100',
|
||||||
|
'qty': '8.00000000',
|
||||||
|
'commission': '0.00800000',
|
||||||
|
'commissionAsset': 'LTC',
|
||||||
|
'time': 1521663363189,
|
||||||
|
'isBuyer': True,
|
||||||
|
'isMaker': False,
|
||||||
|
'isBestMatch': True},
|
||||||
|
'timestamp': 1521663363189,
|
||||||
|
'datetime': '2018-03-21T20:16:03.189Z',
|
||||||
|
'symbol': 'LTC/ETH',
|
||||||
|
'id': '34567',
|
||||||
|
'order': '123456',
|
||||||
|
'type': None,
|
||||||
|
'side': 'buy',
|
||||||
|
'price': 0.245441,
|
||||||
|
'cost': 1.963528,
|
||||||
|
'amount': 8.0,
|
||||||
|
'fee': {'cost': 0.008, 'currency': 'LTC'}}]
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(scope="function")
|
||||||
|
def trades_for_order2():
|
||||||
|
return [{'info': {'id': 34567,
|
||||||
|
'orderId': 123456,
|
||||||
|
'price': '0.24544100',
|
||||||
|
'qty': '8.00000000',
|
||||||
|
'commission': '0.00800000',
|
||||||
|
'commissionAsset': 'LTC',
|
||||||
|
'time': 1521663363189,
|
||||||
|
'isBuyer': True,
|
||||||
|
'isMaker': False,
|
||||||
|
'isBestMatch': True},
|
||||||
|
'timestamp': 1521663363189,
|
||||||
|
'datetime': '2018-03-21T20:16:03.189Z',
|
||||||
|
'symbol': 'LTC/ETH',
|
||||||
|
'id': '34567',
|
||||||
|
'order': '123456',
|
||||||
|
'type': None,
|
||||||
|
'side': 'buy',
|
||||||
|
'price': 0.245441,
|
||||||
|
'cost': 1.963528,
|
||||||
|
'amount': 4.0,
|
||||||
|
'fee': {'cost': 0.004, 'currency': 'LTC'}},
|
||||||
|
{'info': {'id': 34567,
|
||||||
|
'orderId': 123456,
|
||||||
|
'price': '0.24544100',
|
||||||
|
'qty': '8.00000000',
|
||||||
|
'commission': '0.00800000',
|
||||||
|
'commissionAsset': 'LTC',
|
||||||
|
'time': 1521663363189,
|
||||||
|
'isBuyer': True,
|
||||||
|
'isMaker': False,
|
||||||
|
'isBestMatch': True},
|
||||||
|
'timestamp': 1521663363189,
|
||||||
|
'datetime': '2018-03-21T20:16:03.189Z',
|
||||||
|
'symbol': 'LTC/ETH',
|
||||||
|
'id': '34567',
|
||||||
|
'order': '123456',
|
||||||
|
'type': None,
|
||||||
|
'side': 'buy',
|
||||||
|
'price': 0.245441,
|
||||||
|
'cost': 1.963528,
|
||||||
|
'amount': 4.0,
|
||||||
|
'fee': {'cost': 0.004, 'currency': 'LTC'}}]
|
||||||
|
@ -1285,192 +1285,92 @@ def test_sell_profit_only_disable_loss(default_conf, limit_buy_order, mocker) ->
|
|||||||
|
|
||||||
def test_get_real_amount_quote(default_conf, trades_for_order, mocker):
|
def test_get_real_amount_quote(default_conf, trades_for_order, mocker):
|
||||||
"""
|
"""
|
||||||
Test get_real_amount
|
Test get_real_amount - fee in quote currency
|
||||||
"""
|
"""
|
||||||
|
|
||||||
rv = [{'info': {'id': 34567,
|
mocker.patch('freqtrade.exchange.get_trades_for_order', return_value=trades_for_order)
|
||||||
'orderId': 123456,
|
|
||||||
'price': '0.24544100',
|
|
||||||
'qty': '8.00000000',
|
|
||||||
'commission': '0.00800000',
|
|
||||||
'commissionAsset': 'LTC',
|
|
||||||
'time': 1521663363189,
|
|
||||||
'isBuyer': True,
|
|
||||||
'isMaker': False,
|
|
||||||
'isBestMatch': True},
|
|
||||||
'timestamp': 1521663363189,
|
|
||||||
'datetime': '2018-03-21T20:16:03.189Z',
|
|
||||||
'symbol': 'LTC/ETH',
|
|
||||||
'id': '34567',
|
|
||||||
'order': '123456',
|
|
||||||
'type': None,
|
|
||||||
'side': 'buy',
|
|
||||||
'price': 0.245441,
|
|
||||||
'cost': 1.963528,
|
|
||||||
'amount': 8.0,
|
|
||||||
'fee': {'cost': 0.008, 'currency': 'LTC'}}]
|
|
||||||
mocker.patch('freqtrade.exchange.get_trades_for_order', return_value=rv)
|
|
||||||
|
|
||||||
patch_get_signal(mocker)
|
patch_get_signal(mocker)
|
||||||
patch_RPCManager(mocker)
|
patch_RPCManager(mocker)
|
||||||
patch_coinmarketcap(mocker)
|
patch_coinmarketcap(mocker)
|
||||||
mocker.patch('freqtrade.exchange.validate_pairs', MagicMock(return_value=True))
|
mocker.patch('freqtrade.exchange.validate_pairs', MagicMock(return_value=True))
|
||||||
|
amount = sum(x['amount'] for x in trades_for_order)
|
||||||
trade = Trade(
|
trade = Trade(
|
||||||
pair='LTC/ETH',
|
pair='LTC/ETH',
|
||||||
amount=8,
|
amount=amount,
|
||||||
exchange='binance',
|
exchange='binance',
|
||||||
open_order_id="123456"
|
open_order_id="123456"
|
||||||
)
|
)
|
||||||
freqtrade = FreqtradeBot(default_conf, create_engine('sqlite://'))
|
freqtrade = FreqtradeBot(default_conf, create_engine('sqlite://'))
|
||||||
# Amount - cost
|
# Amount is reduced by "fee"
|
||||||
assert freqtrade.get_real_amount(trade) == 7.992
|
assert freqtrade.get_real_amount(trade) == amount - (amount * 0.001)
|
||||||
|
|
||||||
|
|
||||||
def test_get_real_amount_stake(default_conf, mocker):
|
def test_get_real_amount_stake(default_conf, trades_for_order, mocker):
|
||||||
"""
|
"""
|
||||||
Test get_real_amount
|
Test get_real_amount - fees in Stake currency
|
||||||
"""
|
"""
|
||||||
|
trades_for_order[0]['fee']['currency'] = 'ETH'
|
||||||
rv = [{'info': {'id': 34567,
|
|
||||||
'orderId': 123456,
|
|
||||||
'price': '0.24544100',
|
|
||||||
'qty': '8.00000000',
|
|
||||||
'commission': '0.00800000',
|
|
||||||
'commissionAsset': 'LTC',
|
|
||||||
'time': 1521663363189,
|
|
||||||
'isBuyer': True,
|
|
||||||
'isMaker': False,
|
|
||||||
'isBestMatch': True},
|
|
||||||
'timestamp': 1521663363189,
|
|
||||||
'datetime': '2018-03-21T20:16:03.189Z',
|
|
||||||
'symbol': 'LTC/ETH',
|
|
||||||
'id': '34567',
|
|
||||||
'order': '123456',
|
|
||||||
'type': None,
|
|
||||||
'side': 'buy',
|
|
||||||
'price': 0.245441,
|
|
||||||
'cost': 1.963528,
|
|
||||||
'amount': 8.0,
|
|
||||||
'fee': {'cost': 0.008, 'currency': 'ETH'}}]
|
|
||||||
mocker.patch('freqtrade.exchange.get_trades_for_order', return_value=rv)
|
|
||||||
|
|
||||||
patch_get_signal(mocker)
|
|
||||||
patch_RPCManager(mocker)
|
|
||||||
patch_coinmarketcap(mocker)
|
|
||||||
mocker.patch('freqtrade.exchange.validate_pairs', MagicMock(return_value=True))
|
|
||||||
trade = Trade(
|
|
||||||
pair='IOTA/ETH',
|
|
||||||
amount=8,
|
|
||||||
exchange='binance',
|
|
||||||
open_order_id="123456"
|
|
||||||
)
|
|
||||||
freqtrade = FreqtradeBot(default_conf, create_engine('sqlite://'))
|
|
||||||
# Amount - cost
|
|
||||||
assert freqtrade.get_real_amount(trade) == 8
|
|
||||||
|
|
||||||
|
|
||||||
def test_get_real_amount_BNB(default_conf, mocker):
|
|
||||||
"""
|
|
||||||
Test get_real_amount
|
|
||||||
"""
|
|
||||||
|
|
||||||
rv = [{'info': {'id': 34567,
|
|
||||||
'orderId': 123456,
|
|
||||||
'price': '0.24544100',
|
|
||||||
'qty': '8.00000000',
|
|
||||||
'commission': '0.00800000',
|
|
||||||
'commissionAsset': 'LTC',
|
|
||||||
'time': 1521663363189,
|
|
||||||
'isBuyer': True,
|
|
||||||
'isMaker': False,
|
|
||||||
'isBestMatch': True},
|
|
||||||
'timestamp': 1521663363189,
|
|
||||||
'datetime': '2018-03-21T20:16:03.189Z',
|
|
||||||
'symbol': 'LTC/ETH',
|
|
||||||
'id': '34567',
|
|
||||||
'order': '123456',
|
|
||||||
'type': None,
|
|
||||||
'side': 'buy',
|
|
||||||
'price': 0.245441,
|
|
||||||
'cost': 1.963528,
|
|
||||||
'amount': 8.0,
|
|
||||||
'fee': {'cost': 0.00094518, 'currency': 'BNB'}}]
|
|
||||||
mocker.patch('freqtrade.exchange.get_trades_for_order', return_value=rv)
|
|
||||||
|
|
||||||
patch_get_signal(mocker)
|
|
||||||
patch_RPCManager(mocker)
|
|
||||||
patch_coinmarketcap(mocker)
|
|
||||||
mocker.patch('freqtrade.exchange.validate_pairs', MagicMock(return_value=True))
|
|
||||||
trade = Trade(
|
|
||||||
pair='IOTA/ETH',
|
|
||||||
amount=8,
|
|
||||||
exchange='binance',
|
|
||||||
open_order_id="123456"
|
|
||||||
)
|
|
||||||
freqtrade = FreqtradeBot(default_conf, create_engine('sqlite://'))
|
|
||||||
# Amount - cost
|
|
||||||
assert freqtrade.get_real_amount(trade) == 8
|
|
||||||
|
|
||||||
|
|
||||||
def test_get_real_amount_multi(default_conf, mocker):
|
|
||||||
"""
|
|
||||||
Test get_real_amount
|
|
||||||
"""
|
|
||||||
|
|
||||||
rv = [{'info': {'id': 34567,
|
|
||||||
'orderId': 123456,
|
|
||||||
'price': '0.24544100',
|
|
||||||
'qty': '8.00000000',
|
|
||||||
'commission': '0.00800000',
|
|
||||||
'commissionAsset': 'LTC',
|
|
||||||
'time': 1521663363189,
|
|
||||||
'isBuyer': True,
|
|
||||||
'isMaker': False,
|
|
||||||
'isBestMatch': True},
|
|
||||||
'timestamp': 1521663363189,
|
|
||||||
'datetime': '2018-03-21T20:16:03.189Z',
|
|
||||||
'symbol': 'LTC/ETH',
|
|
||||||
'id': '34567',
|
|
||||||
'order': '123456',
|
|
||||||
'type': None,
|
|
||||||
'side': 'buy',
|
|
||||||
'price': 0.245441,
|
|
||||||
'cost': 1.963528,
|
|
||||||
'amount': 4.0,
|
|
||||||
'fee': {'cost': 0.004, 'currency': 'LTC'}},
|
|
||||||
{'info': {'id': 34567,
|
|
||||||
'orderId': 123456,
|
|
||||||
'price': '0.24544100',
|
|
||||||
'qty': '8.00000000',
|
|
||||||
'commission': '0.00800000',
|
|
||||||
'commissionAsset': 'LTC',
|
|
||||||
'time': 1521663363189,
|
|
||||||
'isBuyer': True,
|
|
||||||
'isMaker': False,
|
|
||||||
'isBestMatch': True},
|
|
||||||
'timestamp': 1521663363189,
|
|
||||||
'datetime': '2018-03-21T20:16:03.189Z',
|
|
||||||
'symbol': 'LTC/ETH',
|
|
||||||
'id': '34567',
|
|
||||||
'order': '123456',
|
|
||||||
'type': None,
|
|
||||||
'side': 'buy',
|
|
||||||
'price': 0.245441,
|
|
||||||
'cost': 1.963528,
|
|
||||||
'amount': 4.0,
|
|
||||||
'fee': {'cost': 0.004, 'currency': 'LTC'}}]
|
|
||||||
mocker.patch('freqtrade.exchange.get_trades_for_order', return_value=rv)
|
|
||||||
|
|
||||||
patch_get_signal(mocker)
|
patch_get_signal(mocker)
|
||||||
patch_RPCManager(mocker)
|
patch_RPCManager(mocker)
|
||||||
patch_coinmarketcap(mocker)
|
patch_coinmarketcap(mocker)
|
||||||
mocker.patch('freqtrade.exchange.validate_pairs', MagicMock(return_value=True))
|
mocker.patch('freqtrade.exchange.validate_pairs', MagicMock(return_value=True))
|
||||||
|
mocker.patch('freqtrade.exchange.get_trades_for_order', return_value=trades_for_order)
|
||||||
|
amount = sum(x['amount'] for x in trades_for_order)
|
||||||
trade = Trade(
|
trade = Trade(
|
||||||
pair='LTC/ETH',
|
pair='LTC/ETH',
|
||||||
amount=8,
|
amount=amount,
|
||||||
exchange='binance',
|
exchange='binance',
|
||||||
open_order_id="123456"
|
open_order_id="123456"
|
||||||
)
|
)
|
||||||
freqtrade = FreqtradeBot(default_conf, create_engine('sqlite://'))
|
freqtrade = FreqtradeBot(default_conf, create_engine('sqlite://'))
|
||||||
# Amount - cost
|
# Amount does not change
|
||||||
assert freqtrade.get_real_amount(trade) == 7.992
|
assert freqtrade.get_real_amount(trade) == amount
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_real_amount_BNB(default_conf, trades_for_order, mocker):
|
||||||
|
"""
|
||||||
|
Test get_real_amount - Fees in BNB
|
||||||
|
"""
|
||||||
|
|
||||||
|
trades_for_order[0]['fee']['currency'] = 'BNB'
|
||||||
|
trades_for_order[0]['fee']['cost'] = 0.00094518
|
||||||
|
|
||||||
|
patch_get_signal(mocker)
|
||||||
|
patch_RPCManager(mocker)
|
||||||
|
patch_coinmarketcap(mocker)
|
||||||
|
mocker.patch('freqtrade.exchange.validate_pairs', MagicMock(return_value=True))
|
||||||
|
mocker.patch('freqtrade.exchange.get_trades_for_order', return_value=trades_for_order)
|
||||||
|
amount = sum(x['amount'] for x in trades_for_order)
|
||||||
|
trade = Trade(
|
||||||
|
pair='LTC/ETH',
|
||||||
|
amount=amount,
|
||||||
|
exchange='binance',
|
||||||
|
open_order_id="123456"
|
||||||
|
)
|
||||||
|
freqtrade = FreqtradeBot(default_conf, create_engine('sqlite://'))
|
||||||
|
# Amount does not change
|
||||||
|
assert freqtrade.get_real_amount(trade) == amount
|
||||||
|
|
||||||
|
|
||||||
|
def test_get_real_amount_multi(default_conf, trades_for_order2, mocker):
|
||||||
|
"""
|
||||||
|
Test get_real_amount with split trades (multiple trades for this order)
|
||||||
|
"""
|
||||||
|
|
||||||
|
patch_get_signal(mocker)
|
||||||
|
patch_RPCManager(mocker)
|
||||||
|
patch_coinmarketcap(mocker)
|
||||||
|
mocker.patch('freqtrade.exchange.validate_pairs', MagicMock(return_value=True))
|
||||||
|
mocker.patch('freqtrade.exchange.get_trades_for_order', return_value=trades_for_order2)
|
||||||
|
amount = float(sum(x['amount'] for x in trades_for_order2))
|
||||||
|
trade = Trade(
|
||||||
|
pair='LTC/ETH',
|
||||||
|
amount=amount,
|
||||||
|
exchange='binance',
|
||||||
|
open_order_id="123456"
|
||||||
|
)
|
||||||
|
freqtrade = FreqtradeBot(default_conf, create_engine('sqlite://'))
|
||||||
|
# Amount is reduced by "fee"
|
||||||
|
assert freqtrade.get_real_amount(trade) == amount - (amount * 0.001)
|
||||||
|
Loading…
Reference in New Issue
Block a user