a
This commit is contained in:
parent
fe420ad1a4
commit
95abbf50be
|
|
@ -22,7 +22,7 @@ function Recommendations() {
|
||||||
const [bookmarking, setBookmarking] = useState({}) // 记录正在标记的推荐ID
|
const [bookmarking, setBookmarking] = useState({}) // 记录正在标记的推荐ID
|
||||||
const [ordering, setOrdering] = useState({}) // 记录正在下单的推荐ID
|
const [ordering, setOrdering] = useState({}) // 记录正在下单的推荐ID
|
||||||
|
|
||||||
// 获取默认下单量(按账号存储)
|
// 获取默认下单保证金(按账号存储,单位:USDT)
|
||||||
const getDefaultOrderSize = () => {
|
const getDefaultOrderSize = () => {
|
||||||
try {
|
try {
|
||||||
const key = `ats_default_order_size_${accountId}`;
|
const key = `ats_default_order_size_${accountId}`;
|
||||||
|
|
@ -36,10 +36,10 @@ function Recommendations() {
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
// ignore
|
// ignore
|
||||||
}
|
}
|
||||||
return 1; // 默认1U
|
return 1; // 默认1U保证金
|
||||||
};
|
};
|
||||||
|
|
||||||
// 设置默认下单量(按账号存储)
|
// 设置默认下单保证金(按账号存储,单位:USDT)
|
||||||
const setDefaultOrderSize = (size) => {
|
const setDefaultOrderSize = (size) => {
|
||||||
try {
|
try {
|
||||||
const key = `ats_default_order_size_${accountId}`;
|
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 entryPrice = parseFloat(rec.suggested_limit_price || rec.planned_entry_price);
|
||||||
const stopLossPrice = parseFloat(rec.suggested_stop_loss);
|
const stopLossPrice = parseFloat(rec.suggested_stop_loss);
|
||||||
const direction = rec.direction;
|
const direction = rec.direction;
|
||||||
const notionalUsdt = defaultOrderSize;
|
|
||||||
const leverage = rec.suggested_leverage || 10;
|
const leverage = rec.suggested_leverage || 10;
|
||||||
|
|
||||||
|
// defaultOrderSize 是保证金(USDT),需要转换为名义价值
|
||||||
|
const marginUsdt = defaultOrderSize; // 保证金
|
||||||
|
const notionalUsdt = marginUsdt * leverage; // 名义价值 = 保证金 × 杠杆
|
||||||
|
const quantity = notionalUsdt / entryPrice; // 数量 = 名义价值 / 入场价
|
||||||
|
|
||||||
if (!window.confirm(
|
if (!window.confirm(
|
||||||
`确认下单?\n` +
|
`确认下单?\n` +
|
||||||
`交易对: ${rec.symbol}\n` +
|
`交易对: ${rec.symbol}\n` +
|
||||||
`方向: ${direction === 'BUY' ? '做多' : '做空'}\n` +
|
`方向: ${direction === 'BUY' ? '做多' : '做空'}\n` +
|
||||||
`入场价: ${entryPrice} USDT\n` +
|
`入场价: ${entryPrice} USDT\n` +
|
||||||
`止损价: ${stopLossPrice} USDT\n` +
|
`止损价: ${stopLossPrice} USDT\n` +
|
||||||
`下单量: ${notionalUsdt} USDT\n` +
|
`保证金: ${marginUsdt} USDT\n` +
|
||||||
`杠杆: ${leverage}x`
|
`杠杆: ${leverage}x\n` +
|
||||||
|
`名义价值: ${notionalUsdt.toFixed(2)} USDT\n` +
|
||||||
|
`数量: ${quantity.toFixed(4)}`
|
||||||
)) {
|
)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -370,7 +376,7 @@ function Recommendations() {
|
||||||
entryPrice,
|
entryPrice,
|
||||||
stopLossPrice,
|
stopLossPrice,
|
||||||
direction,
|
direction,
|
||||||
notionalUsdt,
|
notionalUsdt, // 传递名义价值给后端
|
||||||
leverage
|
leverage
|
||||||
);
|
);
|
||||||
alert(`下单成功!\n订单ID: ${result.order_id}\n交易ID: ${result.trade_id || 'N/A'}`);
|
alert(`下单成功!\n订单ID: ${result.order_id}\n交易ID: ${result.trade_id || 'N/A'}`);
|
||||||
|
|
@ -388,7 +394,7 @@ function Recommendations() {
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleSetDefaultOrderSize = () => {
|
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;
|
if (newSize === null) return;
|
||||||
const size = parseFloat(newSize);
|
const size = parseFloat(newSize);
|
||||||
if (!Number.isFinite(size) || size <= 0) {
|
if (!Number.isFinite(size) || size <= 0) {
|
||||||
|
|
@ -397,7 +403,7 @@ function Recommendations() {
|
||||||
}
|
}
|
||||||
if (setDefaultOrderSize(size)) {
|
if (setDefaultOrderSize(size)) {
|
||||||
setDefaultOrderSizeState(size);
|
setDefaultOrderSizeState(size);
|
||||||
alert(`默认下单量已设置为 ${size} USDT`);
|
alert(`默认下单保证金已设置为 ${size} USDT`);
|
||||||
} else {
|
} else {
|
||||||
alert('设置失败');
|
alert('设置失败');
|
||||||
}
|
}
|
||||||
|
|
@ -409,13 +415,13 @@ function Recommendations() {
|
||||||
<h2>交易推荐</h2>
|
<h2>交易推荐</h2>
|
||||||
<div className="header-actions">
|
<div className="header-actions">
|
||||||
<div className="order-size-config" style={{ display: 'flex', alignItems: 'center', gap: '10px', marginRight: '10px' }}>
|
<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>
|
<span style={{ fontWeight: 'bold', color: '#2ecc71' }}>{defaultOrderSize} USDT</span>
|
||||||
<button
|
<button
|
||||||
className="btn-config"
|
className="btn-config"
|
||||||
onClick={handleSetDefaultOrderSize}
|
onClick={handleSetDefaultOrderSize}
|
||||||
style={{ padding: '4px 8px', fontSize: '12px' }}
|
style={{ padding: '4px 8px', fontSize: '12px' }}
|
||||||
title="点击设置默认下单量"
|
title="点击设置默认下单保证金(实际名义价值 = 保证金 × 杠杆)"
|
||||||
>
|
>
|
||||||
⚙️ 设置
|
⚙️ 设置
|
||||||
</button>
|
</button>
|
||||||
|
|
@ -603,7 +609,7 @@ function Recommendations() {
|
||||||
fontSize: '13px',
|
fontSize: '13px',
|
||||||
opacity: ordering[rec.symbol || rec.id] ? 0.6 : 1
|
opacity: ordering[rec.symbol || rec.id] ? 0.6 : 1
|
||||||
}}
|
}}
|
||||||
title={`一键下单 ${defaultOrderSize} USDT`}
|
title={`一键下单(保证金: ${defaultOrderSize} USDT)`}
|
||||||
>
|
>
|
||||||
{ordering[rec.symbol || rec.id] ? '下单中...' : '⚡ 一键下单'}
|
{ordering[rec.symbol || rec.id] ? '下单中...' : '⚡ 一键下单'}
|
||||||
</button>
|
</button>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user