248 lines
10 KiB
HTML
248 lines
10 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="zh-CN">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
<title>多账户交易中控</title>
|
|
<link rel="stylesheet" href="/assets/app.css" />
|
|
</head>
|
|
<body>
|
|
<div class="app-shell">
|
|
<header class="app-header">
|
|
<div class="brand">交易中控 <span>manual_trading_hub</span></div>
|
|
<nav class="top-nav">
|
|
<a href="/monitor" id="nav-monitor">监控区</a>
|
|
<a href="/trade" id="nav-trade">下单区</a>
|
|
<a href="/settings" id="nav-settings">系统设置</a>
|
|
</nav>
|
|
</header>
|
|
|
|
<div id="page-monitor" class="page">
|
|
<div class="page-head">
|
|
<h1>监控区</h1>
|
|
</div>
|
|
<details class="hint-box">
|
|
<summary>说明:数据来源与复盘链接</summary>
|
|
<div class="hint-body">
|
|
持仓与余额来自子代理;关键位、机器人单、趋势计划来自各实例 Flask(须 PM2 运行 crypto_*)。<br />
|
|
「交易复盘」在新标签打开该实例 /records。其它电脑访问中控时,请在 hub 的 <code>.env</code> 设置
|
|
<code>HUB_PUBLIC_ORIGIN=http://服务器内网IP</code>。
|
|
</div>
|
|
</details>
|
|
<div class="toolbar">
|
|
<button type="button" id="btn-monitor-refresh">立即刷新</button>
|
|
<label class="chk-label">
|
|
<input type="checkbox" id="auto-monitor" checked /> 每 5 秒自动刷新
|
|
</label>
|
|
<button type="button" id="btn-close-all" class="danger">全局紧急全平</button>
|
|
<span class="toolbar-spacer"></span>
|
|
<span id="monitor-updated" class="toolbar-meta"></span>
|
|
</div>
|
|
<div id="monitor-grid" class="grid-monitor"></div>
|
|
</div>
|
|
|
|
<div id="page-trade" class="page hidden">
|
|
<div class="page-head">
|
|
<h1>下单区</h1>
|
|
</div>
|
|
<div class="trade-bar">
|
|
<label for="trade-account">交易账户</label>
|
|
<select id="trade-account"></select>
|
|
</div>
|
|
<div class="tabs">
|
|
<button type="button" data-tab="order" class="active">人工下单</button>
|
|
<button type="button" data-tab="key">关键位</button>
|
|
<button type="button" data-tab="trend">趋势回调</button>
|
|
</div>
|
|
<div id="trade-meta" class="trade-meta" style="display:none"></div>
|
|
|
|
<div id="panel-order" class="form-panel card">
|
|
<div class="card-head"><strong>人工下单</strong></div>
|
|
<div class="card-body">
|
|
<form id="form-order" class="form-grid">
|
|
<div class="field">
|
|
<label>合约</label>
|
|
<input name="symbol" placeholder="BTC / BTCUSDT" required />
|
|
</div>
|
|
<div class="field">
|
|
<label>方向</label>
|
|
<select name="direction" required>
|
|
<option value="">请选择</option>
|
|
<option value="long">做多</option>
|
|
<option value="short">做空</option>
|
|
</select>
|
|
</div>
|
|
<div class="field">
|
|
<label>止盈止损</label>
|
|
<select name="sltp_mode" id="order-sltp-mode">
|
|
<option value="price">价格</option>
|
|
<option value="pct">百分比</option>
|
|
</select>
|
|
</div>
|
|
<div class="field">
|
|
<label>单型</label>
|
|
<select name="trade_style" required>
|
|
<option value="trend">趋势单</option>
|
|
<option value="swing">波段单</option>
|
|
</select>
|
|
</div>
|
|
<div class="field">
|
|
<label>杠杆</label>
|
|
<input name="leverage" type="number" min="1" step="1" placeholder="可选" />
|
|
</div>
|
|
<div class="field field-check">
|
|
<input type="checkbox" name="breakeven_enabled" value="1" id="order-be" checked />
|
|
<label for="order-be">移动保本</label>
|
|
</div>
|
|
<div class="field">
|
|
<label>止损</label>
|
|
<input name="sl" id="order-sl" step="any" required />
|
|
</div>
|
|
<div class="field">
|
|
<label>止盈</label>
|
|
<input name="tgt" id="order-tp" step="any" required />
|
|
</div>
|
|
<div class="field" id="wrap-sl-pct" style="display:none">
|
|
<label>止损 %</label>
|
|
<input name="sl_pct" id="order-sl-pct" type="number" step="0.01" />
|
|
</div>
|
|
<div class="field" id="wrap-tp-pct" style="display:none">
|
|
<label>止盈 %</label>
|
|
<input name="tp_pct" id="order-tp-pct" type="number" step="0.01" />
|
|
</div>
|
|
<div class="form-actions">
|
|
<button type="submit" class="primary">开仓(以损定仓)</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="panel-key" class="form-panel card hidden">
|
|
<div class="card-head"><strong>添加关键位</strong></div>
|
|
<div class="card-body">
|
|
<form id="form-key" class="form-grid">
|
|
<div class="field">
|
|
<label>合约</label>
|
|
<input name="symbol" placeholder="BTC / BTCUSDT" required />
|
|
</div>
|
|
<div class="field">
|
|
<label>类型</label>
|
|
<select name="type" required>
|
|
<option value="箱体突破">箱体突破</option>
|
|
<option value="收敛突破">收敛突破</option>
|
|
<option value="斐波回调0.618">斐波回调0.618</option>
|
|
<option value="斐波回调0.786">斐波回调0.786</option>
|
|
<option value="关键阻力位">关键阻力位</option>
|
|
<option value="关键支撑位">关键支撑位</option>
|
|
</select>
|
|
</div>
|
|
<div class="field">
|
|
<label>方向</label>
|
|
<select name="direction" required>
|
|
<option value="">请选择</option>
|
|
<option value="long">做多</option>
|
|
<option value="short">做空</option>
|
|
</select>
|
|
</div>
|
|
<div class="field">
|
|
<label>上沿 / 阻力</label>
|
|
<input name="upper" step="any" required />
|
|
</div>
|
|
<div class="field">
|
|
<label>下沿 / 支撑</label>
|
|
<input name="lower" step="any" required />
|
|
</div>
|
|
<div class="field">
|
|
<label>模式</label>
|
|
<select name="sl_tp_mode" id="key-sl-tp-mode">
|
|
<option value="standard">标准突破</option>
|
|
<option value="box_1p5">箱体1R·止盈1.5H</option>
|
|
<option value="trend_manual">趋势单·自填止盈</option>
|
|
</select>
|
|
</div>
|
|
<div class="field" id="wrap-key-manual-tp" style="display:none">
|
|
<label>趋势止盈价</label>
|
|
<input name="manual_take_profit" id="key-manual-tp" step="any" />
|
|
</div>
|
|
<div class="field field-check">
|
|
<input type="checkbox" name="breakeven_enabled" value="1" id="key-be-cb" />
|
|
<label for="key-be-cb">移动保本</label>
|
|
</div>
|
|
<div class="form-actions">
|
|
<button type="submit" class="primary">添加关键位</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="panel-trend" class="form-panel card hidden">
|
|
<div class="card-head"><strong>趋势回调</strong></div>
|
|
<div class="card-body">
|
|
<form id="form-trend" class="form-grid">
|
|
<div class="field">
|
|
<label>合约</label>
|
|
<input name="symbol" placeholder="BTC / ETHUSDT" required />
|
|
</div>
|
|
<div class="field">
|
|
<label>方向</label>
|
|
<select name="direction" id="trend-direction" required>
|
|
<option value="">请选择</option>
|
|
<option value="long">做多</option>
|
|
<option value="short">做空</option>
|
|
</select>
|
|
</div>
|
|
<div class="field">
|
|
<label>杠杆</label>
|
|
<input name="leverage" type="number" min="1" step="1" required />
|
|
</div>
|
|
<div class="field">
|
|
<label>风险 %</label>
|
|
<input name="risk_percent" type="number" min="0.1" step="0.1" value="5" />
|
|
</div>
|
|
<div class="field">
|
|
<label>止损价</label>
|
|
<input name="sl" step="any" required />
|
|
</div>
|
|
<div class="field">
|
|
<label id="trend-add-label">补仓上沿价</label>
|
|
<input name="add_upper" id="trend-add-upper" step="any" required />
|
|
</div>
|
|
<div class="field">
|
|
<label>止盈价</label>
|
|
<input name="take_profit" step="any" required />
|
|
</div>
|
|
<div class="form-actions">
|
|
<button type="submit" class="primary">生成预览</button>
|
|
</div>
|
|
</form>
|
|
<div id="trend-preview-box" style="margin-top:16px;display:none"></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="page-settings" class="page hidden">
|
|
<div class="page-head">
|
|
<h1>系统设置</h1>
|
|
</div>
|
|
<details class="hint-box">
|
|
<summary>配置说明</summary>
|
|
<div class="hint-body">
|
|
保存后写入 <code>hub_settings.json</code>。Flask / Agent 填本机地址即可;复盘链接可留空(由 Flask 地址自动生成)。<br />
|
|
<code>HUB_DISABLED_IDS</code> 可强制关闭账户;<code>HUB_BRIDGE_TOKEN</code> 与实例一致,或实例 <code>APP_AUTH_DISABLED=true</code>。
|
|
</div>
|
|
</details>
|
|
<p id="settings-meta-line" class="trade-meta"></p>
|
|
<div class="toolbar">
|
|
<button type="button" id="btn-settings-save" class="primary">保存设置</button>
|
|
<button type="button" id="btn-settings-add">添加交易所</button>
|
|
<button type="button" id="btn-settings-reload">重新加载</button>
|
|
</div>
|
|
<div id="settings-list" class="settings-cards"></div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="toast"></div>
|
|
<script src="/assets/app.js"></script>
|
|
</body>
|
|
</html>
|