a
This commit is contained in:
parent
fe420ad1a4
commit
95abbf50be
|
|
@ -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() {
|
|||
<h2>交易推荐</h2>
|
||||
<div className="header-actions">
|
||||
<div className="order-size-config" style={{ display: 'flex', alignItems: 'center', gap: '10px', marginRight: '10px' }}>
|
||||
<span>默认下单量:</span>
|
||||
<span>默认下单保证金:</span>
|
||||
<span style={{ fontWeight: 'bold', color: '#2ecc71' }}>{defaultOrderSize} USDT</span>
|
||||
<button
|
||||
className="btn-config"
|
||||
onClick={handleSetDefaultOrderSize}
|
||||
style={{ padding: '4px 8px', fontSize: '12px' }}
|
||||
title="点击设置默认下单量"
|
||||
title="点击设置默认下单保证金(实际名义价值 = 保证金 × 杠杆)"
|
||||
>
|
||||
⚙️ 设置
|
||||
</button>
|
||||
|
|
@ -603,7 +609,7 @@ function Recommendations() {
|
|||
fontSize: '13px',
|
||||
opacity: ordering[rec.symbol || rec.id] ? 0.6 : 1
|
||||
}}
|
||||
title={`一键下单 ${defaultOrderSize} USDT`}
|
||||
title={`一键下单(保证金: ${defaultOrderSize} USDT)`}
|
||||
>
|
||||
{ordering[rec.symbol || rec.id] ? '下单中...' : '⚡ 一键下单'}
|
||||
</button>
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user