diff --git a/okx-auto-position/scripts/process_signal.py b/okx-auto-position/scripts/process_signal.py index bb5efb1..b4d374e 100644 --- a/okx-auto-position/scripts/process_signal.py +++ b/okx-auto-position/scripts/process_signal.py @@ -787,14 +787,25 @@ def process_signal(text): trader_pnl=float(fields.get('pnl', '0').replace(',', '')), raw_text=text, outcome='pushed') elif signal_type == 'add': - # 加仓信号: 推消息但不自动下单 (你已有同向持仓时容易重复) - msg = format_message(fields, rec, signal_type) - _tracker_record(trader=trader, symbol=symbol, side=side, - leverage=int(leverage) if leverage else 10, - trader_size=float(fields.get('size', '0').replace(',', '')), - trader_entry=float(fields.get('entry', '0').replace(',', '')), - trader_pnl=float(fields.get('pnl', '0').replace(',', '')), - raw_text=text, outcome='pushed_add') + # 加仓信号: 走 execute_order 自动加 (advisor 内部会检查余额, 不足返回 0 张) + exec_result = execute_order(symbol, side, leverage, rec) + if exec_result and 'error' not in exec_result and rec.get('contracts', 0) > 0: + msg = format_execution_result(fields, rec, exec_result) + _tracker_record(trader=trader, symbol=symbol, side=side, + leverage=int(leverage) if leverage else 10, + trader_size=float(fields.get('size', '0').replace(',', '')), + trader_entry=float(fields.get('entry', '0').replace(',', '')), + trader_pnl=float(fields.get('pnl', '0').replace(',', '')), + raw_text=text, outcome='auto_executed_add') + else: + # 余额不足/执行失败 → 推消息不执行 + msg = format_message(fields, rec, signal_type) + _tracker_record(trader=trader, symbol=symbol, side=side, + leverage=int(leverage) if leverage else 10, + trader_size=float(fields.get('size', '0').replace(',', '')), + trader_entry=float(fields.get('entry', '0').replace(',', '')), + trader_pnl=float(fields.get('pnl', '0').replace(',', '')), + raw_text=text, outcome='pushed_add_insufficient') else: # 需要确认或减仓信号 msg = format_message(fields, rec, signal_type)