// frontend/src/components/StrategySettings.tsx import React from 'react'; export interface StrategyParams { strategy_mode: 'consensus' | 'ema_cross' | 'breakout' | 'patterns' | 'opening_breakout' | 'dynamic'; stop_loss_pct: number; profit_target_pct: number; trailing_stop_mode: 'atr' | 'flat' | 'none'; trailing_stop_atr_mult: number; rsi_threshold_buy: number; risk_per_trade_pct: number; max_position_size_pct: number; position_sizing_mode: 'atr' | 'flat'; commission_per_share: number; slippage_rate: number; market_open_focus: boolean; } interface StrategySettingsProps { params: StrategyParams; onChange: (newParams: StrategyParams) => void; onReset: () => void; aiAutoPilot: boolean; onToggleAutoPilot: (val: boolean) => void; } export const StrategySettings: React.FC = ({ params, onChange, onReset, aiAutoPilot, onToggleAutoPilot }) => { const handleChange = (key: keyof StrategyParams, value: any) => { onChange({ ...params, [key]: value }); }; return (
{/* AI Auto-Pilot Card */}
🤖 AI 智能托管 / 自动调参 {aiAutoPilot && ( 已激活 )}
{/* Switch Switch */}

{aiAutoPilot ? "机器学习调优中。算法自动分析开盘高频阻力与相对成交量,调配仓位与止损,保护本金并稳健止盈。" : "开启后,系统将自动基于近期历史特征运行微型 Walk-Forward 调优,代替手动参数设置。" }

手动参数与风控 (Strategy Parameters)

{/* 开盘突击模式 Checkbox */}
{aiAutoPilot && (
🔒 AI 智能托管进行中
)} {/* 策略选择 */}
{/* 左列:止损止盈 */}
{/* 止损设置 */}
最大硬止损比例 {(params.stop_loss_pct * 100).toFixed(1)}%
handleChange('stop_loss_pct', parseFloat(e.target.value))} style={{ accentColor: 'var(--color-green)' }} />
{/* 止盈设置 */}
硬性止盈目标 {(params.profit_target_pct * 100).toFixed(1)}%
handleChange('profit_target_pct', parseFloat(e.target.value))} style={{ accentColor: 'var(--color-green)' }} />
{/* RSI 阈值 */}
买入超买 RSI 过滤 RSI < {params.rsi_threshold_buy}
handleChange('rsi_threshold_buy', parseInt(e.target.value))} style={{ accentColor: 'var(--color-green)' }} />
{/* 右列:追踪止损与仓位控制 */}
{/* 追踪止损模式 */}
{/* ATR 乘数 */} {params.trailing_stop_mode === 'atr' && (
ATR 追踪宽度乘数 {params.trailing_stop_atr_mult.toFixed(1)} * ATR
handleChange('trailing_stop_atr_mult', parseFloat(e.target.value))} style={{ accentColor: 'var(--color-green)' }} />
)} {/* 仓位管理模式 */}
{/* 风险占比 (只在 ATR 模式展示) */} {params.position_sizing_mode === 'atr' && (
单笔交易允许最大亏损比例 {(params.risk_per_trade_pct * 100).toFixed(1)}%
handleChange('risk_per_trade_pct', parseFloat(e.target.value))} style={{ accentColor: 'var(--color-green)' }} />
)} {/* 最大持仓比例上限 */}
单只股票最大持仓资金比 {(params.max_position_size_pct * 100).toFixed(0)}%
handleChange('max_position_size_pct', parseFloat(e.target.value))} style={{ accentColor: 'var(--color-green)' }} />
{/* 交易摩擦与费用设置 */}
{/* 左列:佣金费率 */}
每股交易佣金 (Commission per Share) {params.commission_per_share === 0 ? '免佣金 ($0.00)' : `$${params.commission_per_share.toFixed(3)}`}
handleChange('commission_per_share', parseFloat(e.target.value))} style={{ accentColor: 'var(--color-green)' }} />
{/* 右列:滑点损耗 */}
滑点损耗比例 (Slippage Rate) {params.slippage_rate === 0 ? '无滑点损耗 (0%)' : `${(params.slippage_rate * 100).toFixed(2)}%`}
handleChange('slippage_rate', parseFloat(e.target.value))} style={{ accentColor: 'var(--color-green)' }} />
); };