Isolate CTP in worker process and improve strategy roll UX.

Split vn.py into qihuo-ctp worker with IPC client bridge, keep CTP connected during breaks with cached account fallback, speed up strategy page loads, and allow off-session breakout roll submissions.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-07-01 12:35:47 +08:00
parent 08d55411aa
commit 9cd81a3ea7
17 changed files with 2214 additions and 227 deletions
+13
View File
@@ -109,6 +109,7 @@
var breakEl = document.getElementById('roll-break-price');
var execHint = document.getElementById('roll-exec-hint');
var btnExec = document.getElementById('btn-roll-exec');
var btnPreview = document.getElementById('btn-roll-preview');
if (!modeEl) return;
var mode = modeEl.value || 'market';
var isBreak = mode === 'breakout';
@@ -120,6 +121,12 @@
if (btnExec) {
btnExec.textContent = mode === 'market' ? '执行滚仓' : '提交监控';
}
if (btnPreview) {
btnPreview.disabled = !inTradingSession && !isBreak;
btnPreview.title = (!inTradingSession && !isBreak)
? '休盘期间请切换为突破加仓'
: '';
}
}
function syncRollRiskHint() {
@@ -196,6 +203,7 @@
var rollPayload = null;
var rollMonitorSel = document.getElementById('roll-monitor-select');
var rollModeSel = document.getElementById('roll-add-mode');
var inTradingSession = {{ 'true' if trading_session else 'false' }};
if (rollModeSel) rollModeSel.addEventListener('change', syncRollModeUi);
if (rollMonitorSel) rollMonitorSel.addEventListener('change', syncRollRiskHint);
@@ -214,6 +222,7 @@
}
showPreview(rollPrev, formatRoll(d.preview), true, false);
btnRollE.hidden = false;
syncRollModeUi();
}).finally(function () {
btnRollP.disabled = false;
});
@@ -224,6 +233,10 @@
var payload = rollPayload || formData(rollForm);
var mode = (payload.add_mode || 'market');
if (mode === 'market') {
if (!inTradingSession) {
alert('休盘期间请切换为「突破加仓」后提交监控');
return;
}
if (!confirm('确认执行市价滚仓?')) return;
startRollCountdown(btnRollE, payload);
return;