diff --git a/frontend/src/components/Recommendations.jsx b/frontend/src/components/Recommendations.jsx index 0563cd7..0e59fd6 100644 --- a/frontend/src/components/Recommendations.jsx +++ b/frontend/src/components/Recommendations.jsx @@ -22,7 +22,7 @@ function Recommendations() { const [bookmarking, setBookmarking] = useState({}) // 记录正在标记的推荐ID const [ordering, setOrdering] = useState({}) // 记录正在下单的推荐ID - // 获取默认下单量(按账号存储) + // 获取默认下单保证金(按账号存储,单位:USDT) const getDefaultOrderSize = () => { try { const key = `ats_default_order_size_${accountId}`; @@ -36,10 +36,10 @@ function Recommendations() { } catch (e) { // ignore } - return 1; // 默认1U + return 1; // 默认1U保证金 }; - // 设置默认下单量(按账号存储) + // 设置默认下单保证金(按账号存储,单位:USDT) const setDefaultOrderSize = (size) => { try { const key = `ats_default_order_size_${accountId}`; @@ -348,17 +348,23 @@ function Recommendations() { const entryPrice = parseFloat(rec.suggested_limit_price || rec.planned_entry_price); const stopLossPrice = parseFloat(rec.suggested_stop_loss); const direction = rec.direction; - const notionalUsdt = defaultOrderSize; const leverage = rec.suggested_leverage || 10; + // defaultOrderSize 是保证金(USDT),需要转换为名义价值 + const marginUsdt = defaultOrderSize; // 保证金 + const notionalUsdt = marginUsdt * leverage; // 名义价值 = 保证金 × 杠杆 + const quantity = notionalUsdt / entryPrice; // 数量 = 名义价值 / 入场价 + if (!window.confirm( `确认下单?\n` + `交易对: ${rec.symbol}\n` + `方向: ${direction === 'BUY' ? '做多' : '做空'}\n` + `入场价: ${entryPrice} USDT\n` + `止损价: ${stopLossPrice} USDT\n` + - `下单量: ${notionalUsdt} USDT\n` + - `杠杆: ${leverage}x` + `保证金: ${marginUsdt} USDT\n` + + `杠杆: ${leverage}x\n` + + `名义价值: ${notionalUsdt.toFixed(2)} USDT\n` + + `数量: ${quantity.toFixed(4)}` )) { return; } @@ -370,7 +376,7 @@ function Recommendations() { entryPrice, stopLossPrice, direction, - notionalUsdt, + notionalUsdt, // 传递名义价值给后端 leverage ); alert(`下单成功!\n订单ID: ${result.order_id}\n交易ID: ${result.trade_id || 'N/A'}`); @@ -388,7 +394,7 @@ function Recommendations() { }; const handleSetDefaultOrderSize = () => { - const newSize = window.prompt(`设置默认下单量(USDT)\n当前值: ${defaultOrderSize} USDT`, String(defaultOrderSize)); + const newSize = window.prompt(`设置默认下单保证金(USDT)\n当前值: ${defaultOrderSize} USDT\n\n注意:这是保证金,实际名义价值 = 保证金 × 杠杆`, String(defaultOrderSize)); if (newSize === null) return; const size = parseFloat(newSize); if (!Number.isFinite(size) || size <= 0) { @@ -397,7 +403,7 @@ function Recommendations() { } if (setDefaultOrderSize(size)) { setDefaultOrderSizeState(size); - alert(`默认下单量已设置为 ${size} USDT`); + alert(`默认下单保证金已设置为 ${size} USDT`); } else { alert('设置失败'); } @@ -409,13 +415,13 @@ function Recommendations() {