From 28fd03d8ba773ded2ba7eba6275f84d159119e26 Mon Sep 17 00:00:00 2001 From: CoderMageFox Date: Wed, 5 Nov 2025 17:11:04 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=80=99=E9=80=89?= =?UTF-8?q?=E5=B8=81=E7=A7=8D=E4=B8=BA0=E6=97=B6=E7=9A=84=E5=89=8D?= =?UTF-8?q?=E7=AB=AF=E8=AD=A6=E5=91=8A=E6=8F=90=E7=A4=BA=20(#515)=20*=20fe?= =?UTF-8?q?at:=20add=20frontend=20warnings=20for=20zero=20candidate=20coin?= =?UTF-8?q?s=20=E5=BD=93=E5=80=99=E9=80=89=E5=B8=81=E7=A7=8D=E6=95=B0?= =?UTF-8?q?=E9=87=8F=E4=B8=BA0=E6=97=B6=EF=BC=8C=E5=9C=A8=E5=89=8D?= =?UTF-8?q?=E7=AB=AF=E6=B7=BB=E5=8A=A0=E8=AF=A6=E7=BB=86=E7=9A=84=E9=94=99?= =?UTF-8?q?=E8=AF=AF=E6=8F=90=E7=A4=BA=E5=92=8C=E8=AF=8A=E6=96=AD=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=20=E4=B8=BB=E8=A6=81=E6=94=B9=E5=8A=A8=EF=BC=9A=201.?= =?UTF-8?q?=20=E5=86=B3=E7=AD=96=E6=97=A5=E5=BF=97=E4=B8=AD=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E5=80=99=E9=80=89=E5=B8=81=E7=A7=8D=E6=95=B0=E9=87=8F?= =?UTF-8?q?=EF=BC=8C=E4=B8=BA0=E6=97=B6=E6=A0=87=E7=BA=A2=E8=AD=A6?= =?UTF-8?q?=E5=91=8A=202.=20=E5=80=99=E9=80=89=E5=B8=81=E7=A7=8D=E4=B8=BA0?= =?UTF-8?q?=E6=97=B6=E6=98=BE=E7=A4=BA=E8=AF=A6=E7=BB=86=E8=AD=A6=E5=91=8A?= =?UTF-8?q?=E5=8D=A1=E7=89=87=EF=BC=8C=E5=8C=85=E5=90=AB=E5=8F=AF=E8=83=BD?= =?UTF-8?q?=E5=8E=9F=E5=9B=A0=E5=92=8C=E8=A7=A3=E5=86=B3=E6=96=B9=E6=A1=88?= =?UTF-8?q?=203.=20=E4=BA=A4=E6=98=93=E5=91=98=E5=88=97=E8=A1=A8=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E6=B7=BB=E5=8A=A0=E4=BF=A1=E5=8F=B7=E6=BA=90=E6=9C=AA?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E7=9A=84=E5=85=A8=E5=B1=80=E8=AD=A6=E5=91=8A?= =?UTF-8?q?=204.=20=E6=9B=B4=E6=96=B0TraderInfo=E7=B1=BB=E5=9E=8B=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=EF=BC=8C=E6=B7=BB=E5=8A=A0use=5Fcoin=5Fpool=E5=92=8Cu?= =?UTF-8?q?se=5Foi=5Ftop=E5=AD=97=E6=AE=B5=20=E8=AF=A6=E7=BB=86=E8=AF=B4?= =?UTF-8?q?=E6=98=8E=EF=BC=9A=20-=20=E5=9C=A8App.tsx=E7=9A=84=E8=B4=A6?= =?UTF-8?q?=E6=88=B7=E7=8A=B6=E6=80=81=E6=91=98=E8=A6=81=E4=B8=AD=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=80=99=E9=80=89=E5=B8=81=E7=A7=8D=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=20-=20=E5=BD=93=E5=80=99=E9=80=89=E5=B8=81=E7=A7=8D=E4=B8=BA0?= =?UTF-8?q?=E6=97=B6=EF=BC=8C=E6=98=BE=E7=A4=BA=E8=AF=A6=E7=BB=86=E7=9A=84?= =?UTF-8?q?=E8=AD=A6=E5=91=8A=E5=8D=A1=E7=89=87=EF=BC=8C=E5=88=97=E5=87=BA?= =?UTF-8?q?=EF=BC=9A=20=20=20*=20=E5=8F=AF=E8=83=BD=E5=8E=9F=E5=9B=A0?= =?UTF-8?q?=EF=BC=88API=E6=9C=AA=E9=85=8D=E7=BD=AE=E3=80=81=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5=E8=B6=85=E6=97=B6=E3=80=81=E6=95=B0=E6=8D=AE=E4=B8=BA?= =?UTF-8?q?=E7=A9=BA=E7=AD=89=EF=BC=89=20=20=20*=20=E8=A7=A3=E5=86=B3?= =?UTF-8?q?=E6=96=B9=E6=A1=88=EF=BC=88=E9=85=8D=E7=BD=AE=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E5=B8=81=E7=A7=8D=E3=80=81=E9=85=8D=E7=BD=AEAPI?= =?UTF-8?q?=E3=80=81=E7=A6=81=E7=94=A8=E9=80=89=E9=A1=B9=E7=AD=89=EF=BC=89?= =?UTF-8?q?=20-=20=E5=9C=A8AITradersPage=E4=B8=AD=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E4=BF=A1=E5=8F=B7=E6=BA=90=E9=85=8D=E7=BD=AE=E6=A3=80=E6=9F=A5?= =?UTF-8?q?=20=20=20*=20=E5=BD=93=E4=BA=A4=E6=98=93=E5=91=98=E5=90=AF?= =?UTF-8?q?=E7=94=A8=E4=BA=86=E5=B8=81=E7=A7=8D=E6=B1=A0=E4=BD=86=E6=9C=AA?= =?UTF-8?q?=E9=85=8D=E7=BD=AEAPI=E6=97=B6=E6=98=BE=E7=A4=BA=E5=85=A8?= =?UTF-8?q?=E5=B1=80=E8=AD=A6=E5=91=8A=20=20=20*=20=E6=8F=90=E4=BE=9B"?= =?UTF-8?q?=E7=AB=8B=E5=8D=B3=E9=85=8D=E7=BD=AE=E4=BF=A1=E5=8F=B7=E6=BA=90?= =?UTF-8?q?"=E5=BF=AB=E6=8D=B7=E6=8C=89=E9=92=AE=20-=20=E4=B8=8D=E6=94=B9?= =?UTF-8?q?=E5=8F=98=E4=BB=BB=E4=BD=95=E5=90=8E=E7=AB=AF=E9=80=BB=E8=BE=91?= =?UTF-8?q?=EF=BC=8C=E7=BA=AFUI=E5=B1=82=E9=9D=A2=E7=9A=84=E7=94=A8?= =?UTF-8?q?=E6=88=B7=E6=8F=90=E7=A4=BA=E6=94=B9=E8=BF=9B=20=E5=BD=B1?= =?UTF-8?q?=E5=93=8D=E8=8C=83=E5=9B=B4=EF=BC=9A=20-=20web/src/App.tsx:=20?= =?UTF-8?q?=E5=86=B3=E7=AD=96=E8=AE=B0=E5=BD=95=E5=8D=A1=E7=89=87=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E8=AD=A6=E5=91=8A=E6=98=BE=E7=A4=BA=20-=20web/src/com?= =?UTF-8?q?ponents/AITradersPage.tsx:=20=E4=BA=A4=E6=98=93=E5=91=98?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E9=A1=B5=E8=AD=A6=E5=91=8A=20-=20web/src/typ?= =?UTF-8?q?es.ts:=20TraderInfo=E7=B1=BB=E5=9E=8B=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=20Co-Authored-By:=20tinkle-community=20=20*=20fix:=20import=20AlertTriangle=20from=20?= =?UTF-8?q?lucide-react=20in=20App.tsx=20=E4=BF=AE=E5=A4=8DTypeScript?= =?UTF-8?q?=E7=BC=96=E8=AF=91=E9=94=99=E8=AF=AF=EF=BC=9ACannot=20find=20na?= =?UTF-8?q?me=20'AlertTriangle'=20Co-Authored-By:=20tinkle-community=20=20---------=20Co-authored-by:=20tinkle-comm?= =?UTF-8?q?unity=20?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/App.tsx | 41 ++++++++++++++++++++++++ web/src/components/AITradersPage.tsx | 47 ++++++++++++++++++++++++++++ web/src/types.ts | 2 ++ 3 files changed, 90 insertions(+) diff --git a/web/src/App.tsx b/web/src/App.tsx index 24166314..6ec4569d 100644 --- a/web/src/App.tsx +++ b/web/src/App.tsx @@ -13,6 +13,7 @@ import { LanguageProvider, useLanguage } from './contexts/LanguageContext' import { AuthProvider, useAuth } from './contexts/AuthContext' import { t, type Language } from './i18n/translations' import { useSystemConfig } from './hooks/useSystemConfig' +import { AlertTriangle } from 'lucide-react' import type { SystemStatus, AccountInfo, @@ -1038,6 +1039,46 @@ function DecisionCard({ 保证金率: {decision.account_state.margin_used_pct.toFixed(1)}% 持仓: {decision.account_state.position_count} + + 候选币种: {decision.candidate_coins?.length || 0} + + + )} + + {/* 候选币种为0的警告提示 */} + {decision.candidate_coins && decision.candidate_coins.length === 0 && ( +
+ +
+
⚠️ 候选币种数量为 0
+
+
可能原因:
+
    +
  • 币种池API未配置或无法访问(请检查信号源设置)
  • +
  • API连接超时或返回数据为空
  • +
  • 未配置自定义币种且API获取失败
  • +
+
+ 解决方案: +
+
    +
  • 在交易员配置中设置自定义币种列表
  • +
  • 或者配置正确的币种池API地址
  • +
  • 或者禁用"使用币种池"和"使用OI Top"选项
  • +
+
+
)} diff --git a/web/src/components/AITradersPage.tsx b/web/src/components/AITradersPage.tsx index 92091d87..f9ddce76 100644 --- a/web/src/components/AITradersPage.tsx +++ b/web/src/components/AITradersPage.tsx @@ -659,6 +659,53 @@ export function AITradersPage({ onTraderSelect }: AITradersPageProps) { + {/* 信号源配置警告 */} + {traders && traders.some(t => (t.use_coin_pool || t.use_oi_top)) && + (!userSignalSource.coinPoolUrl && !userSignalSource.oiTopUrl) && ( +
+ +
+
+ ⚠️ 信号源未配置 +
+
+

+ 您有交易员启用了"使用币种池"或"使用OI Top",但尚未配置信号源API地址。 + 这将导致候选币种数量为0,交易员无法正常工作。 +

+

+ 解决方案: +

+
    +
  • 点击"📡 信号源"按钮配置API地址
  • +
  • 或在交易员配置中禁用"使用币种池"和"使用OI Top"
  • +
  • 或在交易员配置中设置自定义币种列表
  • +
+
+ +
+
+ )} + {/* Configuration Status */}
{/* AI Models */} diff --git a/web/src/types.ts b/web/src/types.ts index af3ea8c3..d1368c01 100644 --- a/web/src/types.ts +++ b/web/src/types.ts @@ -92,6 +92,8 @@ export interface TraderInfo { exchange_id?: string is_running?: boolean custom_prompt?: string + use_coin_pool?: boolean + use_oi_top?: boolean } export interface AIModel {