fix bug
This commit is contained in:
@@ -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}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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 = "大盘信号不允许"
|
||||
|
||||
Reference in New Issue
Block a user