修改前端盈亏比

This commit is contained in:
dekun
2026-05-17 13:26:47 +08:00
parent 92d5f439ac
commit 1642f07dfc
2 changed files with 64 additions and 26 deletions
+32 -13
View File
@@ -1208,6 +1208,20 @@ function calcClientRr(direction, entry, sl, tp){
if(s >= e || t <= e) return null;
return (t - e) / (e - s);
}
function calcClientRrFromPct(slPct, tpPct){
const sl = Number(slPct), tp = Number(tpPct);
if(!Number.isFinite(sl) || !Number.isFinite(tp) || sl <= 0 || tp <= 0) return null;
return tp / sl;
}
function rejectManualOrderRr(rr){
if(rr !== null && rr >= MANUAL_MIN_PLANNED_RR) return false;
alert(`计划盈亏比 ${rr === null ? '无效' : rr.toFixed(2)}:1 低于最低要求 ${MANUAL_MIN_PLANNED_RR}:1,已阻止人工下单。`);
return true;
}
function allowManualOrderSubmit(form){
form.dataset.rrOk = "1";
form.submit();
}
let latestAvailableUsdt = null;
const lastPriceMap = {};
@@ -1422,26 +1436,31 @@ if(addOrderForm){
ev.preventDefault();
const direction = (document.getElementById("order-direction")||{}).value || "long";
const mode = (document.getElementById("sltp-mode")||{}).value || "price";
let sl, tp, entry;
const symbol = ((document.getElementById("order-symbol")||{}).value || "").trim();
if(mode === "pct"){
alert("百分比模式请确认盈亏比后再提交;建议使用价格模式以便校验。");
const rr = calcClientRrFromPct(
(document.getElementById("order-sl-pct")||{}).value,
(document.getElementById("order-tp-pct")||{}).value
);
if(rejectManualOrderRr(rr)) return;
allowManualOrderSubmit(addOrderForm);
return;
}
sl = Number((document.getElementById("order-sl")||{}).value);
tp = Number((document.getElementById("order-tp")||{}).value);
entry = sl;
fetch(`/api/order_defaults?symbol=${encodeURIComponent((document.getElementById("order-symbol")||{}).value||"")}&direction=${encodeURIComponent(direction)}`)
const sl = Number((document.getElementById("order-sl")||{}).value);
const tp = Number((document.getElementById("order-tp")||{}).value);
let entry = sl;
if(!symbol){
if(rejectManualOrderRr(calcClientRr(direction, entry, sl, tp))) return;
allowManualOrderSubmit(addOrderForm);
return;
}
fetch(`/api/order_defaults?symbol=${encodeURIComponent(symbol)}&direction=${encodeURIComponent(direction)}`)
.then(r=>r.json())
.then(data=>{
const px = data.last_price || data.price;
if(px) entry = Number(px);
const rr = calcClientRr(direction, entry, sl, tp);
if(rr === null || rr < MANUAL_MIN_PLANNED_RR){
alert(`计划盈亏比 ${rr === null ? '无效' : rr.toFixed(2)}:1 低于最低要求 ${MANUAL_MIN_PLANNED_RR}:1,已阻止人工下单。`);
return;
}
addOrderForm.dataset.rrOk = "1";
addOrderForm.submit();
if(rejectManualOrderRr(calcClientRr(direction, entry, sl, tp))) return;
allowManualOrderSubmit(addOrderForm);
})
.catch(()=>{ alert("无法校验盈亏比,请稍后重试"); });
});
+32 -13
View File
@@ -1208,6 +1208,20 @@ function calcClientRr(direction, entry, sl, tp){
if(s >= e || t <= e) return null;
return (t - e) / (e - s);
}
function calcClientRrFromPct(slPct, tpPct){
const sl = Number(slPct), tp = Number(tpPct);
if(!Number.isFinite(sl) || !Number.isFinite(tp) || sl <= 0 || tp <= 0) return null;
return tp / sl;
}
function rejectManualOrderRr(rr){
if(rr !== null && rr >= MANUAL_MIN_PLANNED_RR) return false;
alert(`计划盈亏比 ${rr === null ? '无效' : rr.toFixed(2)}:1 低于最低要求 ${MANUAL_MIN_PLANNED_RR}:1,已阻止人工下单。`);
return true;
}
function allowManualOrderSubmit(form){
form.dataset.rrOk = "1";
form.submit();
}
let latestAvailableUsdt = null;
const lastPriceMap = {};
@@ -1439,26 +1453,31 @@ if(addOrderForm){
ev.preventDefault();
const direction = (document.getElementById("order-direction")||{}).value || "long";
const mode = (document.getElementById("sltp-mode")||{}).value || "price";
let sl, tp, entry;
const symbol = ((document.getElementById("order-symbol")||{}).value || "").trim();
if(mode === "pct"){
alert("百分比模式请确认盈亏比后再提交;建议使用价格模式以便校验。");
const rr = calcClientRrFromPct(
(document.getElementById("order-sl-pct")||{}).value,
(document.getElementById("order-tp-pct")||{}).value
);
if(rejectManualOrderRr(rr)) return;
allowManualOrderSubmit(addOrderForm);
return;
}
sl = Number((document.getElementById("order-sl")||{}).value);
tp = Number((document.getElementById("order-tp")||{}).value);
entry = sl;
fetch(`/api/order_defaults?symbol=${encodeURIComponent((document.getElementById("order-symbol")||{}).value||"")}&direction=${encodeURIComponent(direction)}`)
const sl = Number((document.getElementById("order-sl")||{}).value);
const tp = Number((document.getElementById("order-tp")||{}).value);
let entry = sl;
if(!symbol){
if(rejectManualOrderRr(calcClientRr(direction, entry, sl, tp))) return;
allowManualOrderSubmit(addOrderForm);
return;
}
fetch(`/api/order_defaults?symbol=${encodeURIComponent(symbol)}&direction=${encodeURIComponent(direction)}`)
.then(r=>r.json())
.then(data=>{
const px = data.last_price || data.price;
if(px) entry = Number(px);
const rr = calcClientRr(direction, entry, sl, tp);
if(rr === null || rr < MANUAL_MIN_PLANNED_RR){
alert(`计划盈亏比 ${rr === null ? '无效' : rr.toFixed(2)}:1 低于最低要求 ${MANUAL_MIN_PLANNED_RR}:1,已阻止人工下单。`);
return;
}
addOrderForm.dataset.rrOk = "1";
addOrderForm.submit();
if(rejectManualOrderRr(calcClientRr(direction, entry, sl, tp))) return;
allowManualOrderSubmit(addOrderForm);
})
.catch(()=>{ alert("无法校验盈亏比,请稍后重试"); });
});