From ffa89857d5d0ff947666123e600e73a2cf2c6182 Mon Sep 17 00:00:00 2001 From: 0xYYBB | ZYY | Bobo <128128010+zhouyongyou@users.noreply.github.com> Date: Mon, 10 Nov 2025 11:55:40 +0800 Subject: [PATCH] feat(web): improve trader config UX for initial balance and prompt templates (#629 #630) (#673) - Add onBlur validation for initial_balance input to enforce minimum of 100 - Add detailed prompt template descriptions with i18n support - Fix Traditional Chinese to Simplified Chinese - Extract hardcoded Chinese text to i18n translation system - Add translation keys for all prompt templates and descriptions Fixes #629, Fixes #630 --- web/src/components/TraderConfigModal.tsx | 87 +++++++++++++++++++++--- web/src/i18n/translations.ts | 50 ++++++++++++++ 2 files changed, 126 insertions(+), 11 deletions(-) diff --git a/web/src/components/TraderConfigModal.tsx b/web/src/components/TraderConfigModal.tsx index b5f48cf6..183f8fbb 100644 --- a/web/src/components/TraderConfigModal.tsx +++ b/web/src/components/TraderConfigModal.tsx @@ -417,6 +417,13 @@ export function TraderConfigModal({ Number(e.target.value) ) } + onBlur={(e) => { + // Force minimum value on blur + const value = Number(e.target.value) + if (value < 100) { + handleInputChange('initial_balance', 100) + } + }} className="w-full px-3 py-2 bg-[#0B0E11] border border-[#2B3139] rounded text-[#EAECEF] focus:border-[#F0B90B] focus:outline-none" min="100" step="0.01" @@ -617,7 +624,7 @@ export function TraderConfigModal({ {/* 系统提示词模板选择 */}
+ + {/* 動態描述區域 */} +
+
+ {(() => { + const titleKeyMap: Record = { + default: 'promptDescDefault', + adaptive: 'promptDescAdaptive', + adaptive_relaxed: 'promptDescAdaptiveRelaxed', + Hansen: 'promptDescHansen', + nof1: 'promptDescNof1', + taro_long_prompts: 'promptDescTaroLong', + } + const key = titleKeyMap[formData.system_prompt_template] + return key + ? t(key, language) + : t('promptDescDefault', language) + })()} +
+
+ {(() => { + const contentKeyMap: Record = { + default: 'promptDescDefaultContent', + adaptive: 'promptDescAdaptiveContent', + adaptive_relaxed: 'promptDescAdaptiveRelaxedContent', + Hansen: 'promptDescHansenContent', + nof1: 'promptDescNof1Content', + taro_long_prompts: 'promptDescTaroLongContent', + } + const key = contentKeyMap[formData.system_prompt_template] + return key + ? t(key, language) + : t('promptDescDefaultContent', language) + })()} +
+

选择预设的交易策略模板(包含交易哲学、风控原则等)

diff --git a/web/src/i18n/translations.ts b/web/src/i18n/translations.ts index c81deb86..0b9ae9de 100644 --- a/web/src/i18n/translations.ts +++ b/web/src/i18n/translations.ts @@ -280,6 +280,33 @@ export const translations = { altcoinLeverageValidation: 'Altcoin leverage must be between 1-20x', invalidSymbolFormat: 'Invalid symbol format: {symbol}, must end with USDT', + // System Prompt Templates + systemPromptTemplate: 'System Prompt Template', + promptTemplateDefault: 'Default Stable', + promptTemplateAdaptive: 'Conservative Strategy', + promptTemplateAdaptiveRelaxed: 'Aggressive Strategy', + promptTemplateHansen: 'Hansen Strategy', + promptTemplateNof1: 'NoF1 English Framework', + promptTemplateTaroLong: 'Taro Long Position', + promptDescDefault: '📊 Default Stable Strategy', + promptDescDefaultContent: + 'Maximize Sharpe ratio, balanced risk-reward, suitable for beginners and stable long-term trading', + promptDescAdaptive: '🛡️ Conservative Strategy (v6.0.0)', + promptDescAdaptiveContent: + 'Strict risk control, BTC mandatory confirmation, high win rate priority, suitable for conservative traders', + promptDescAdaptiveRelaxed: '⚡ Aggressive Strategy (v6.0.0)', + promptDescAdaptiveRelaxedContent: + 'High-frequency trading, BTC optional confirmation, pursue trading opportunities, suitable for volatile markets', + promptDescHansen: '🎯 Hansen Strategy', + promptDescHansenContent: + 'Hansen custom strategy, maximize Sharpe ratio, for professional traders', + promptDescNof1: '🌐 NoF1 English Framework', + promptDescNof1Content: + 'Hyperliquid exchange specialist, English prompts, maximize risk-adjusted returns', + promptDescTaroLong: '📈 Taro Long Position Strategy', + promptDescTaroLongContent: + 'Data-driven decisions, multi-dimensional validation, continuous learning evolution, long position specialist', + // Loading & Error loading: 'Loading...', loadingError: '⚠️ Failed to load AI learning data', @@ -1043,6 +1070,29 @@ export const translations = { altcoinLeverageValidation: '山寨币杠杆必须在1-20倍之间', invalidSymbolFormat: '无效的币种格式:{symbol},必须以USDT结尾', + // System Prompt Templates + systemPromptTemplate: '系统提示词模板', + promptTemplateDefault: '默认稳健', + promptTemplateAdaptive: '保守策略', + promptTemplateAdaptiveRelaxed: '激进策略', + promptTemplateHansen: 'Hansen 策略', + promptTemplateNof1: 'NoF1 英文框架', + promptTemplateTaroLong: 'Taro 长仓', + promptDescDefault: '📊 默认稳健策略', + promptDescDefaultContent: '最大化夏普比率,平衡风险收益,适合新手和长期稳定交易', + promptDescAdaptive: '🛡️ 保守策略 (v6.0.0)', + promptDescAdaptiveContent: '严格风控,BTC 强制确认,高胜率优先,适合保守型交易者', + promptDescAdaptiveRelaxed: '⚡ 激进策略 (v6.0.0)', + promptDescAdaptiveRelaxedContent: + '高频交易,BTC 可选确认,追求交易机会,适合波动市场', + promptDescHansen: '🎯 Hansen 策略', + promptDescHansenContent: 'Hansen 定制策略,最大化夏普比率,专业交易者专用', + promptDescNof1: '🌐 NoF1 英文框架', + promptDescNof1Content: + 'Hyperliquid 交易所专用,英文提示词,风险调整回报最大化', + promptDescTaroLong: '📈 Taro 长仓策略', + promptDescTaroLongContent: '数据驱动决策,多维度验证,持续学习进化,长仓专用', + // Loading & Error loading: '加载中...', loadingError: '⚠️ 加载AI学习数据失败',