"""ZT 按已同步的仓位及实际成本管理止盈峰值。""" from libs.grid_take_profit import GridTrailingTracker class ZTProfitTracker(GridTrailingTracker): def __init__(self, step: float = 1.0): super().__init__(step) self._bases: dict[str, tuple] = {} def sync_positions(self, positions, state) -> None: # 与交易线程串行执行;提交委托本身不会改变这里的基准。 current = {} for position in positions: code = position.stock_code row = state.get_by_code(code) if position.volume <= 0 or not row: continue bucket = 'added' if row.get('added_qty', 0) > 0 else 'base' cost = row.get('added_price', 0) if bucket == 'added' else position.open_price current[code] = (bucket, cost, row.get(f'{bucket}_order_local_id', ''), row.get(f'{bucket}_created_at', '')) for code in self._bases.keys() | current.keys(): if code in state.blocked_codes: continue if self._bases.get(code) != current.get(code): self.clear(code) if code in current: self._bases[code] = current[code] else: self._bases.pop(code, None)