diff --git a/app/web/static/index.html b/app/web/static/index.html index 211ca41..81f29f0 100644 --- a/app/web/static/index.html +++ b/app/web/static/index.html @@ -37,6 +37,11 @@ .clr-up{color:#f56c6c;} .clr-down{color:#67c23a;} .attn{color:#e6a23c;padding:3px 0;} .tblk h3{margin:0 0 10px;font-size:14px;color:#409EFF;font-weight:600;} + .op-row{display:flex;align-items:flex-start;gap:12px;padding:6px 0;border-bottom:1px solid #262626;} + .op-row:last-child{border-bottom:none;} + .op-btn{flex:none;width:150px;} + .op-btn .el-button{width:100%;} + .op-row .d{color:#999;font-size:12px;line-height:1.5;padding-top:3px;} @@ -223,15 +228,31 @@

组合操作

-
- {{ ov.buy_halt?'恢复买入':'暂停买入' }} - {{ ov.exec_halt?'结束休假':'休假模式' }} - 降仓… - 升仓… - 清仓某行业… - 一键清仓(紧急) +
对整个组合的手动动作。带「…」的会先弹窗让你填数值;危险动作要二次确认。
+
+ {{ ov.buy_halt?'恢复买入':'暂停买入' }} + 停止一切新增买入,并撤销在途买入指令;卖出与止损不受影响。当前:{{ ov.buy_halt?'已暂停买入':'买入正常' }}。 +
+
+ {{ ov.exec_halt?'结束休假':'休假模式' }} + 所有自动动作暂停,只保留对账与日报(长假或手动接管时用)。当前:{{ ov.exec_halt?'休假中':'正常运行' }}。 +
+
+ 降仓… + 按占总规模的百分比整体减少敞口。优先级:停新买 → 清弱票 → 收利润 → 等比微减。 +
+
+ 升仓… + 按占总规模的百分比整体提高敞口。来源:持仓补到目标 + 候选池新票建仓。 +
+
+ 清仓某行业… + 卖光指定行业的全部持仓。{{ ov.sector_ready?'':'(行业数据未就绪,暂不可用)' }} +
+
+ 一键清仓(紧急) + 全部持仓按最快节奏卖出、不做择时优化。用于紧急离场,需二次确认。
-
暂停买入不影响卖出与止损;一键清仓会把全部持仓按最快节奏卖出、不做择时优化。

设置

@@ -252,6 +273,7 @@ 保存修改 ({{ dirtyCount }}) 放弃 改「自主档位」或「总仓上限」会即时生效;调低总仓上限可能触发降仓提议。 + 补仓(浮亏时逢跌补仓):「补仓上限」设为 0 即关闭补仓;「补仓评估档」是触发补仓的浮亏档位(如 -0.08,-0.15);到「深档确认」及更深的补仓永远要你点头。
@@ -1105,8 +1127,13 @@ createApp({ const heldPositions = computed(() => (positions.value || []).filter(p => (p.total_qty || 0) > 0)); const settingKeys = ['PMS_TOTAL_SCALE', 'PMS_PORTFOLIO_CAP', 'PMS_STOCK_CAP', - 'PMS_MAX_NAMES', 'PMS_CASH_RESERVE', 'PMS_AUTONOMY']; - const traderParams = computed(() => (params.value || []).filter(p => settingKeys.includes(p.key))); + 'PMS_MAX_NAMES', 'PMS_CASH_RESERVE', + 'PMS_DCA_MAX_RATIO', 'PMS_DCA_TRIGGERS', 'PMS_DCA_DEEP_CONFIRM', + 'PMS_FILL_MAX_LOSS', 'PMS_AUTONOMY']; + const traderParams = computed(() => { + const ix = {}; settingKeys.forEach((k, i) => ix[k] = i); + return (params.value || []).filter(p => settingKeys.includes(p.key)).sort((a, b) => ix[a.key] - ix[b.key]); + }); const attention = computed(() => { const o = ov.value || {}, out = [];