From b3e97072a9c05f5df152fd8e1a690658e251bf46 Mon Sep 17 00:00:00 2001 From: ZhouYongyou <128128010+zhouyongyou@users.noreply.github.com> Date: Mon, 3 Nov 2025 21:57:55 +0800 Subject: [PATCH] fix: Remove merge conflict markers and add WebSocket limit warnings - Clean up remaining conflict markers in SetMarginMode - Add visual warnings for WebSocket stream limits in UI - Prevent user from exceeding 250 symbols (1024 streams / 4 timeframes) --- trader/binance_futures.go | 7 --- web/src/components/TraderConfigModal.tsx | 71 ++++++++++++++++++++++++ 2 files changed, 71 insertions(+), 7 deletions(-) diff --git a/trader/binance_futures.go b/trader/binance_futures.go index b6471787..f5c9c9b7 100644 --- a/trader/binance_futures.go +++ b/trader/binance_futures.go @@ -214,19 +214,12 @@ func (t *FuturesTrader) SetMarginMode(symbol string, isCrossMargin bool) error { } // 尝试设置仓位模式 -<<<<<<< HEAD - err := t.client.NewChangeMarginTypeService(). - Symbol(symbol). - MarginType(marginType). - Do(context.Background()) -======= err := t.callWithTimeSync("设置仓位模式", func() error { return t.client.NewChangeMarginTypeService(). Symbol(symbol). MarginType(marginType). Do(context.Background()) }) ->>>>>>> pr-313-time-sync marginModeStr := "全仓" if !isCrossMargin { diff --git a/web/src/components/TraderConfigModal.tsx b/web/src/components/TraderConfigModal.tsx index 528f763f..2875ac6b 100644 --- a/web/src/components/TraderConfigModal.tsx +++ b/web/src/components/TraderConfigModal.tsx @@ -1,6 +1,10 @@ import { useState, useEffect } from 'react'; import type { AIModel, Exchange, CreateTraderRequest } from '../types'; +// WebSocket 流數限制常量 +const MAX_SYMBOLS = 250; // Binance WebSocket 限制:1024 流 / 4 時間週期 = 250 幣種 +const WARNING_THRESHOLD = 200; // 接近上限時顯示警告 + // 提取下划线后面的名称部分 function getShortName(fullName: string): string { const parts = fullName.split('_'); @@ -387,6 +391,73 @@ export function TraderConfigModal({ )} + + {/* 幣種數量提示 */} + {selectedCoins.length > 0 && ( +
+ {/* 當前數量顯示 */} +
+ + 已選擇 MAX_SYMBOLS ? 'text-[#F6465D]' : + selectedCoins.length > WARNING_THRESHOLD ? 'text-[#F0B90B]' : + 'text-[#02C076]' + }`}>{selectedCoins.length} 個幣種 + + 上限:{MAX_SYMBOLS} 個 +
+ + {/* 進度條 */} +
+
MAX_SYMBOLS ? 'bg-[#F6465D]' : + selectedCoins.length > WARNING_THRESHOLD ? 'bg-[#F0B90B]' : + 'bg-[#02C076]' + }`} + style={{ width: `${Math.min((selectedCoins.length / MAX_SYMBOLS) * 100, 100)}%` }} + /> +
+ + {/* 警告提示 */} + {selectedCoins.length > WARNING_THRESHOLD && selectedCoins.length <= MAX_SYMBOLS && ( +
+ + + +
+
接近幣種數量上限
+
+ 當前:{selectedCoins.length} 個幣種 × 4 時間週期 = {selectedCoins.length * 4} 個 WebSocket 流 +
+ Binance 限制:1024 流/連接 +
+
+
+ )} + + {/* 錯誤提示 */} + {selectedCoins.length > MAX_SYMBOLS && ( +
+ + + +
+
幣種數量超過上限!
+
+ 超過 {MAX_SYMBOLS} 個幣種會導致: +
+ • WebSocket 流數超過 Binance 限制(1024 流) +
+ • 系統會自動忽略前 {MAX_SYMBOLS} 個之後的幣種 +
+ • 建議減少幣種數量或使用幣池功能 +
+
+
+ )} +
+ )}