From ba1bd93afa04661de092b788bf6aa9d474344381 Mon Sep 17 00:00:00 2001 From: yanweidong Date: Sat, 5 Sep 2026 14:30:16 +0800 Subject: [PATCH] fix bug --- py-client/libs/grid_take_profit.py | 5 ----- py-client/strategy/trend/open.py | 3 +-- py-client/strategy/trend/order.py | 4 ++-- py-client/strategy/trend/positions.py | 15 ++++----------- 4 files changed, 7 insertions(+), 20 deletions(-) diff --git a/py-client/libs/grid_take_profit.py b/py-client/libs/grid_take_profit.py index 786e9d8..e2e74ca 100644 --- a/py-client/libs/grid_take_profit.py +++ b/py-client/libs/grid_take_profit.py @@ -73,8 +73,3 @@ class GridTrailingTracker: with self._lock: self._peaks.pop(position_key, None) - def retain(self, position_keys) -> None: - """删除已不在券商持仓中的峰值,避免同代码重新开仓继承旧状态。""" - active = set(position_keys) - with self._lock: - self._peaks = {key: value for key, value in self._peaks.items() if key in active} diff --git a/py-client/strategy/trend/open.py b/py-client/strategy/trend/open.py index 255c76b..08d9492 100644 --- a/py-client/strategy/trend/open.py +++ b/py-client/strategy/trend/open.py @@ -81,7 +81,6 @@ def do_open(run: Runtime, code: str, volume: int, signal_key: str, price: float) """生成本地订单号并按最新价提交开仓委托。""" order_id = run.orders.new_order_id() request = PlaceOrderRequest( - run.client, OP_BUY, code, volume, @@ -89,7 +88,7 @@ def do_open(run: Runtime, code: str, volume: int, signal_key: str, price: float) signal_key, kind="base", ) - if not run.orders.place(request): + if not run.orders.place(run.client,request): raise RuntimeError("订单提交失败") run.open_watch.forget(code) diff --git a/py-client/strategy/trend/order.py b/py-client/strategy/trend/order.py index b69bb5a..57130d6 100644 --- a/py-client/strategy/trend/order.py +++ b/py-client/strategy/trend/order.py @@ -88,7 +88,7 @@ class OrderBook: self.busy_keys = busy_keys logging.info("[Order] 刷新完成,跟踪=%d,处理中=%d,撤销=%d", len(data), len(busy_keys), canceled) - def place(self, request: PlaceOrderRequest) -> bool: + def place(self, client: Client, request: PlaceOrderRequest) -> bool: """按最新价提交委托,并立即写入本地方向锁。""" side = ORDER_SIDE_BY_OFFSET.get(str(request.op), "") if not side: @@ -103,7 +103,7 @@ class OrderBook: self.busy_cache.set(key, True, timeout=self.lock_timeout_sec) try: - result = request.client.passorder( + result = client.passorder( op_type=request.op, stock_code=request.code, volume=request.volume, diff --git a/py-client/strategy/trend/positions.py b/py-client/strategy/trend/positions.py index bc6205e..1227adc 100644 --- a/py-client/strategy/trend/positions.py +++ b/py-client/strategy/trend/positions.py @@ -31,17 +31,10 @@ def manage_positions( market_ok: bool, available: float, ) -> None: - """处理所有真实持仓,并在本轮内统一控制补仓预算。""" - active_keys = { - _position_key(runtime, position.stock_code) - for position in positions - if position.volume > 0 and position.stock_code - } - runtime.profit_tracker.retain(active_keys) - remaining_cash = max(0.0, available) - + # 遍历处理每个持仓 for position in positions: try: + available = max(0,0,available) code = position.stock_code tick = ticks.get(code) if code in runtime.account_cfg.excluded_codes: @@ -77,9 +70,9 @@ def manage_positions( position=position, tick=tick, pnl_rate=pnl_rate, - available=remaining_cash, + available=available, ) - remaining_cash -= loss_decision.reserved_cash + available = available - loss_decision.reserved_cash loss_add_action = loss_decision.message or "未触发" elif runtime.account_cfg.enable_loss_add_position: loss_add_action = "大盘信号不允许"