fix(trend): pass empty dict to ccxt create_order for DCA adds

Gate build_gate_order_params returns {} which is falsy; params or None broke trend_market_add with NoneType is not iterable while first-leg place_exchange_order worked.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-06-07 17:52:12 +08:00
parent f5b4513ddb
commit 72f0090fb8
3 changed files with 33 additions and 2 deletions
+3 -1
View File
@@ -105,7 +105,9 @@ def build_strategy_config(
params = m.build_gate_order_params(direction, reduce_only=False)
else:
params = {}
return m.exchange.create_order(ex_sym, "limit", side, float(amount), float(price), params or None)
return m.exchange.create_order(
ex_sym, "limit", side, float(amount), float(price), params if params is not None else {}
)
def replace_tpsl(ex_sym, direction, sl, tp, order_row):
row = order_row or {"symbol": ex_sym, "exchange_symbol": ex_sym, "direction": direction}
+2 -1
View File
@@ -39,7 +39,8 @@ def trend_market_add(cfg: dict, exchange_symbol: str, direction: str, contracts:
params = m.build_okx_order_params(direction, reduce_only=False)
else:
params = {}
return ex.create_order(exchange_symbol, "market", side, float(contracts), None, params or None)
order_params = params if params is not None else {}
return ex.create_order(exchange_symbol, "market", side, float(contracts), None, order_params)
def trend_market_close(cfg: dict, exchange_symbol: str, direction: str, pos_qty: float, leverage: int):
+28
View File
@@ -0,0 +1,28 @@
"""趋势补仓下单:空 params 不得变成 Noneccxt 会报 not iterable)。"""
from __future__ import annotations
import unittest
from unittest.mock import MagicMock
from strategy_trend_exchange import trend_market_add
class TestTrendMarketAddParams(unittest.TestCase):
def test_empty_gate_params_not_passed_as_none(self):
ex = MagicMock()
ex.create_order.return_value = {"id": "1", "average": 0.34}
app = MagicMock()
app.exchange = ex
app.ensure_markets_loaded = MagicMock()
app.build_gate_order_params = MagicMock(return_value={})
cfg = {"app_module": app}
trend_market_add(cfg, "ONDO/USDT:USDT", "long", 23, 10)
args = ex.create_order.call_args
self.assertEqual(args[0][5], {})
self.assertIsNotNone(args[0][5])
if __name__ == "__main__":
unittest.main()