mirror of
https://github.com/freqtrade/freqtrade.git
synced 2024-11-10 10:21:59 +00:00
Add test for #9346, showing current behavior
This commit is contained in:
parent
2c20464983
commit
24dfd9b93b
|
@ -2302,6 +2302,101 @@ def test_recalc_trade_from_orders(fee):
|
|||
assert pytest.approx(trade.open_trade_value) == o1_trade_val + o2_trade_val + o3_trade_val
|
||||
|
||||
|
||||
@pytest.mark.usefixtures("init_persistence")
|
||||
def test_recalc_trade_from_orders_kucoin():
|
||||
# Taken from https://github.com/freqtrade/freqtrade/issues/9346
|
||||
o1_amount = 11511963.8634448908
|
||||
o2_amount = 11750101.7743937783
|
||||
o3_amount = 23262065.6378386617 # Exit amount - barely doesn't even out
|
||||
|
||||
res = o1_amount + o2_amount - o3_amount
|
||||
assert res > 0.0
|
||||
assert res < 0.1
|
||||
o1_rate = 0.000029901
|
||||
o2_rate = 0.000029295
|
||||
o3_rate = 0.000029822
|
||||
|
||||
o1_cost = o1_amount * o1_rate
|
||||
|
||||
trade = Trade(
|
||||
pair='FLOKI/USDT',
|
||||
stake_amount=o1_cost,
|
||||
open_date=dt_now() - timedelta(hours=2),
|
||||
amount=o1_amount,
|
||||
fee_open=0.001,
|
||||
fee_close=0.001,
|
||||
exchange='binance',
|
||||
open_rate=o1_rate,
|
||||
max_rate=o1_rate,
|
||||
leverage=1,
|
||||
)
|
||||
# Check with 1 order
|
||||
order1 = Order(
|
||||
ft_order_side='buy',
|
||||
ft_pair=trade.pair,
|
||||
ft_is_open=False,
|
||||
status="closed",
|
||||
symbol=trade.pair,
|
||||
order_type="market",
|
||||
side="buy",
|
||||
price=o1_rate,
|
||||
average=o1_rate,
|
||||
filled=o1_amount,
|
||||
remaining=0,
|
||||
cost=o1_cost,
|
||||
order_date=trade.open_date,
|
||||
order_filled_date=trade.open_date,
|
||||
)
|
||||
trade.orders.append(order1)
|
||||
order2 = Order(
|
||||
ft_order_side='buy',
|
||||
ft_pair=trade.pair,
|
||||
ft_is_open=False,
|
||||
status="closed",
|
||||
symbol=trade.pair,
|
||||
order_type="market",
|
||||
side="buy",
|
||||
price=o2_rate,
|
||||
average=o2_rate,
|
||||
filled=o2_amount,
|
||||
remaining=0,
|
||||
cost=o2_amount * o2_rate,
|
||||
order_date=trade.open_date,
|
||||
order_filled_date=trade.open_date,
|
||||
)
|
||||
trade.orders.append(order2)
|
||||
trade.recalc_trade_from_orders()
|
||||
assert trade.amount == o1_amount + o2_amount
|
||||
profit = trade.calculate_profit(o3_rate)
|
||||
assert profit.profit_abs == pytest.approx(3.90069871)
|
||||
assert profit.profit_ratio == pytest.approx(0.00566035)
|
||||
|
||||
order3 = Order(
|
||||
ft_order_side='sell',
|
||||
ft_pair=trade.pair,
|
||||
ft_is_open=False,
|
||||
status="closed",
|
||||
symbol=trade.pair,
|
||||
order_type="market",
|
||||
side="sell",
|
||||
price=o3_rate,
|
||||
average=o3_rate,
|
||||
filled=o3_amount,
|
||||
remaining=0,
|
||||
cost=o2_amount * o2_rate,
|
||||
order_date=trade.open_date,
|
||||
order_filled_date=trade.open_date,
|
||||
)
|
||||
|
||||
trade.orders.append(order3)
|
||||
trade.update_trade(order3)
|
||||
# assert trade.amount == o1_amount + o2_amount
|
||||
assert trade.is_open is False
|
||||
# The below values are wrong.
|
||||
assert trade.amount == 8e-09
|
||||
assert trade.close_profit_abs == -8270.49735089
|
||||
|
||||
|
||||
@pytest.mark.parametrize('is_short', [True, False])
|
||||
def test_recalc_trade_from_orders_ignores_bad_orders(fee, is_short):
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user