feat(config): 更新前端配置组件以支持基础策略和市场方案展示
在 `GlobalConfig` 组件中引入基础策略和市场方案的概念,优化了策略选择的用户界面。新增基础策略和市场方案的状态显示,提升用户体验。同时,更新了相关逻辑以确保策略的灵活性与可视化效果。此改动为用户提供了更清晰的策略选择与使用说明。
This commit is contained in:
parent
452e40bdf5
commit
cbf778d560
|
|
@ -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>
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user