Merge pull request #11627 from arenstar/ftclient_trades_order_fix

Ftclient trades order fix
This commit is contained in:
Matthias
2025-04-13 13:09:07 +02:00
committed by GitHub
4 changed files with 31 additions and 3 deletions

View File

@@ -200,9 +200,12 @@ def status(rpc: RPC = Depends(get_rpc)):
def trades(
limit: int = Query(500, ge=1, description="Maximum number of different trades to return data"),
offset: int = Query(0, ge=0, description="Number of trades to skip for pagination"),
order_by_id: bool = Query(
True, description="Sort trades by id (default: True). If False, sorts by latest timestamp"
),
rpc: RPC = Depends(get_rpc),
):
return rpc._rpc_trade_history(limit, offset=offset, order_by_id=True)
return rpc._rpc_trade_history(limit, offset=offset, order_by_id=order_by_id)
@router.get("/trade/{tradeid}", response_model=OpenTradeSchema, tags=["info", "trading"])

View File

@@ -255,11 +255,12 @@ class FtRestClient:
"""
return self._get("logs", params={"limit": limit} if limit else {})
def trades(self, limit=None, offset=None):
"""Return trades history, sorted by id
def trades(self, limit=None, offset=None, order_by_id=True):
"""Return trades history, sorted by id (or by latest timestamp if order_by_id=False)
:param limit: Limits trades to the X last trades. Max 500 trades.
:param offset: Offset by this amount of trades.
:param order_by_id: Sort trades by id (default: True). If False, sorts by latest timestamp.
:return: json object
"""
params = {}
@@ -267,6 +268,8 @@ class FtRestClient:
params["limit"] = limit
if offset:
params["offset"] = offset
if order_by_id:
params["order_by_id"] = True
return self._get("trades", params)
def list_open_trades_custom_data(self, key=None, limit=100, offset=0):

View File

@@ -85,6 +85,8 @@ def test_FtRestClient_call_invalid(caplog):
("trades", [], {}),
("trades", [5], {}),
("trades", [5, 5], {}), # With offset
("trades", [5, 5, True], {}), # Explicit order_by_id=True
("trades", [5, 5, False], {}), # order_by_id=False
("trade", [1], {}),
("delete_trade", [1], {}),
("cancel_open_order", [1], {}),
@@ -127,6 +129,10 @@ def test_FtRestClient_call_invalid(caplog):
("pair_candles", ["XRP/USDT", "5m", 500], {"columns": ["close_time,close"]}),
("pair_history", ["XRP/USDT", "5m", "SampleStrategy"], {}),
("pair_history", ["XRP/USDT", "5m"], {"strategy": "SampleStrategy"}),
("trades", [], {"order_by_id": True}),
("trades", [], {"order_by_id": False}),
("trades", [5], {"order_by_id": False}),
("trades", [5, 5], {"order_by_id": True}),
("sysinfo", [], {}),
("health", [], {}),
],

View File

@@ -776,12 +776,28 @@ def test_api_trades(botclient, mocker, fee, markets, is_short):
assert rc.json()["trades_count"] == 2
assert rc.json()["total_trades"] == 2
assert rc.json()["trades"][0]["is_short"] == is_short
# Ensure the trades are sorted by trade_id (the default, see below)
assert rc.json()["trades"][0]["trade_id"] == 2
assert rc.json()["trades"][1]["trade_id"] == 3
rc = client_get(client, f"{BASE_URI}/trades?limit=1")
assert_response(rc)
assert len(rc.json()["trades"]) == 1
assert rc.json()["trades_count"] == 1
assert rc.json()["total_trades"] == 2
# Test ascending order (default)
rc = client_get(client, f"{BASE_URI}/trades?order_by_id=true")
assert_response(rc)
assert rc.json()["trades"][0]["trade_id"] == 2
assert rc.json()["trades"][1]["trade_id"] == 3
# Test descending order
rc = client_get(client, f"{BASE_URI}/trades?order_by_id=false")
assert_response(rc)
assert rc.json()["trades"][0]["trade_id"] == 3
assert rc.json()["trades"][1]["trade_id"] == 2
@pytest.mark.parametrize("is_short", [True, False])
def test_api_trade_single(botclient, mocker, fee, ticker, markets, is_short):