feat(config): 更新前端配置组件以支持基础策略和市场方案展示

在 `GlobalConfig` 组件中引入基础策略和市场方案的概念,优化了策略选择的用户界面。新增基础策略和市场方案的状态显示,提升用户体验。同时,更新了相关逻辑以确保策略的灵活性与可视化效果。此改动为用户提供了更清晰的策略选择与使用说明。
This commit is contained in:
薇薇安 2026-02-22 19:30:36 +08:00
parent 452e40bdf5
commit cbf778d560

View File

@ -986,10 +986,18 @@ const GlobalConfig = () => {
}
return cur === exp
}
let currentPreset = null
// / scheme_
let currentBasePreset = null
// bear/normal/bull/conservative MARKET_SCHEME 便
let currentMarketSchemeDisplay = null
const schemeDisplayMap = { bear: '熊市', normal: '正常', bull: '牛市', conservative: '保守' }
let scheme = ''
if (configs && Object.keys(configs).length > 0 && presets) {
try {
// 1. scheme preset
for (const [presetKey, preset] of Object.entries(presets)) {
if (presetKey.startsWith('scheme_')) continue
const keysToCheck = preset.signatureKeys && preset.signatureKeys.length > 0
? preset.signatureKeys
: Object.keys(preset.configs)
@ -1003,14 +1011,19 @@ const GlobalConfig = () => {
if (!valueMatches(cur, exp, key)) { match = false; break }
}
if (match && keysToCheck.length > 0) {
currentPreset = presetKey
currentBasePreset = presetKey
break
}
}
// 2. MARKET_SCHEME
const schemeVal = configs['MARKET_SCHEME']?.value ?? configs['MARKET_SCHEME']
scheme = typeof schemeVal === 'string' ? schemeVal.toLowerCase().trim() : ''
currentMarketSchemeDisplay = schemeDisplayMap[scheme] || (scheme ? scheme : null)
} catch (e) {
console.error('detectCurrentPreset error:', e)
}
}
const currentSchemePresetKey = scheme && schemeDisplayMap[scheme] ? `scheme_${scheme}` : null
const presetUiMeta = {
altcoin: { group: 'altcoin', tag: '当前推荐' },
@ -1198,18 +1211,29 @@ const GlobalConfig = () => {
<section className="global-section preset-section">
<div className="preset-header">
<h3>快速切换方案</h3>
<div className="current-preset-status">
<span className="status-label">当前方案</span>
<span className={`status-badge ${currentPreset ? 'preset' : 'custom'}`}>
{currentPreset && presets && presets[currentPreset] ? presets[currentPreset].name : '自定义'}
</span>
<div className="current-preset-status" style={{ display: 'flex', flexWrap: 'wrap', gap: '12px 24px', alignItems: 'center' }}>
<div>
<span className="status-label">基础策略</span>
<span className={`status-badge ${currentBasePreset ? 'preset' : 'custom'}`}>
{currentBasePreset && presets && presets[currentBasePreset] ? presets[currentBasePreset].name : '自定义'}
</span>
</div>
<div>
<span className="status-label">市场方案</span>
<span className={`status-badge ${currentMarketSchemeDisplay ? 'preset' : 'custom'}`}>
{currentMarketSchemeDisplay || '未设置'}
</span>
</div>
</div>
</div>
<div className="preset-guide">
<div className="preset-guide-title">使用说明</div>
<ul className="preset-guide-list">
<li>
<strong>日常使用</strong>山寨币策略当前推荐即可已与当前策略4H 中性关闭RSI/止盈/止损/盈亏比对齐
<strong>基础策略 + 市场方案</strong>基础策略山寨币/备选决定整体风控风格市场方案熊市/正常/牛市/保守在其上叠加止损仓位4H 过滤等调整二者配合使用
</li>
<li>
<strong>日常使用</strong>山寨币策略当前推荐+ 按行情选市场方案即可
</li>
<li>
<strong>若几乎不出单</strong>可临时把 <code>AUTO_TRADE_ALLOW_4H_NEUTRAL</code> 打开会增加 4H 震荡单信号质量下降
@ -1237,7 +1261,7 @@ const GlobalConfig = () => {
return (
<button
key={k}
className={`preset-btn ${currentPreset === k ? 'active' : ''}`}
className={`preset-btn ${(k.startsWith('scheme_') ? currentSchemePresetKey === k : currentBasePreset === k) ? 'active' : ''}`}
onClick={() => {
if (typeof applyPreset === 'function') {
applyPreset(k)
@ -1251,7 +1275,7 @@ const GlobalConfig = () => {
{meta.tag ? (
<span className={`preset-tag preset-tag--${meta.group}`}>{meta.tag}</span>
) : null}
{currentPreset === k ? <span className="active-indicator"></span> : null}
{(k.startsWith('scheme_') ? currentSchemePresetKey === k : currentBasePreset === k) ? <span className="active-indicator"></span> : null}
</div>
<div className="preset-desc">{preset.desc}</div>
</button>