diff --git a/okx-auto-position/scripts/process_signal.py b/okx-auto-position/scripts/process_signal.py index 77d781f..17f586a 100644 --- a/okx-auto-position/scripts/process_signal.py +++ b/okx-auto-position/scripts/process_signal.py @@ -241,16 +241,6 @@ def format_message(fields, rec, signal_type): if 'error' in rec: return f"⚠️ advisor错误: {rec['error']}" - symbol = fields.get('symbol', '?') - side_cn = fields.get('side', '做多') - side_en = fields.get('side_en', 'long' if side_cn == '做多' else 'short') - trader = fields.get('trader', '?') - - # 锁检查: 同币种只跟一个 trader - allowed, lock_msg = check_signal_lock(symbol, trader, side_en) - if not allowed: - return f"🔒 {lock_msg}" - def _fmt(x, n=4): """格式化数字: 字符串保留原样, 数字 round 到 n 位.""" try: @@ -258,8 +248,11 @@ def format_message(fields, rec, signal_type): except (ValueError, TypeError): return str(x) + symbol = fields.get('symbol', '?') + side_cn = fields.get('side', '做多') emoji = '🟩' if fields.get('side_en') == 'long' else '🟥' leverage = fields.get('leverage', '10') + trader = fields.get('trader', '?') size = fields.get('size', '?') unit = fields.get('unit', '') # 仓位单位: BTC/USDT/张 value = fields.get('value', '?') @@ -760,6 +753,11 @@ def process_signal(text): rr = cc.get('rr_ratio', rec.get('rr', 0)) profit = cc.get('profit_amount', rec.get('tp_pnl', 0)) fee_pct = cc.get('fee_pct', 0) + # 锁检查: 同币种只跟一个 trader (在 execute 之前检查) + side_en = 'long' if 'long' in str(side).lower() or side == '做多' else 'short' + allowed, lock_msg = check_signal_lock(symbol, trader, side_en) + if not allowed: + return f"🔒 {lock_msg}" # 用户要求:所有信号自动执行,只有余额不足才跳过 auto_execute = rec.get('contracts', 0) > 0 # 有可开张数=自动执行