e03863d780
Co-authored-by: Cursor <cursoragent@cursor.com>
81 lines
4.8 KiB
HTML
81 lines
4.8 KiB
HTML
<div class="strategy-panel-inner">
|
|
<h2 style="margin:0 0 8px">顺势加仓</h2>
|
|
<details class="tip-collapse strategy-roll-rule-collapse">
|
|
<summary class="tip-collapse-summary">顺势加仓规则说明{% if roll_trend_active %} · 当前有趋势回调计划{% endif %}</summary>
|
|
<div class="tip-collapse-body rule-tip">
|
|
<strong>仅人工加仓</strong>,程序不会自动触发。须先在「实盘下单」有同向持仓。<br>
|
|
做多最多滚仓 <strong>3</strong> 次;止盈<strong>锁定首仓</strong>不变;每次填写<strong>新统一止损</strong>,总风险%按「合并持仓打到新止损≈账户风险」反推张数。<br>
|
|
斐波限价:上沿 H、下沿 L 仅用于算 0.618/0.786 加仓价(多:下沿=止损侧;空:上沿=止损侧)。<br>
|
|
{% if roll_trend_active %}<span style="color:#ff8f8f">当前有运行中的趋势回调计划,请先结束后再滚仓。</span>{% endif %}
|
|
</div>
|
|
</details>
|
|
<form action="{{ url_for('strategy_roll_execute') }}" method="post" class="form-row">
|
|
<select name="symbol" required>
|
|
<option value="">选择持仓币种</option>
|
|
{% for o in roll_monitors %}
|
|
<option value="{{ o.symbol }}">{{ o.symbol }} {{ '多' if o.direction=='long' else '空' }} #{{ o.id }}</option>
|
|
{% endfor %}
|
|
</select>
|
|
<select name="direction">
|
|
<option value="long">做多</option>
|
|
<option value="short">做空</option>
|
|
</select>
|
|
<select name="add_mode">
|
|
<option value="market">市价加仓</option>
|
|
<option value="fib_618">限价 斐波0.618</option>
|
|
<option value="fib_786">限价 斐波0.786</option>
|
|
</select>
|
|
<input name="fib_upper" step="any" placeholder="上沿 H">
|
|
<input name="fib_lower" step="any" placeholder="下沿 L">
|
|
<input name="new_stop_loss" step="any" placeholder="新统一止损" required>
|
|
<input name="risk_percent" type="number" min="0.1" step="0.1" value="{{ default_risk_percent }}" placeholder="总风险%">
|
|
<button type="submit" {% if roll_trend_active %}disabled style="opacity:.5"{% endif %} onclick="return confirm('确认按预览逻辑实盘加仓并更新止损?')">执行滚仓</button>
|
|
</form>
|
|
<details class="tip-collapse strategy-roll-preview-tip">
|
|
<summary class="tip-collapse-summary">滚仓预览接口说明</summary>
|
|
<div class="tip-collapse-body rule-tip">执行前可用开发者工具 POST <code>/strategy/roll/preview</code> 查看 JSON 预览。</div>
|
|
</details>
|
|
|
|
<h3 style="margin:14px 0 8px;font-size:.95rem;color:#b8c4ff">活跃滚仓组</h3>
|
|
<div class="table-wrap">
|
|
<table>
|
|
<tr><th>ID</th><th>币种</th><th>方向</th><th>腿数</th><th>首仓TP</th><th>当前SL</th><th>当前均价</th><th>止盈盈利U</th></tr>
|
|
{% for g in roll_groups %}
|
|
<tr>
|
|
<td>{{ g.id }}</td>
|
|
<td>{{ g.symbol }}</td>
|
|
<td>{{ g.direction }}</td>
|
|
<td>{{ g.leg_count }}</td>
|
|
<td>{% if price_fmt %}{{ price_fmt(g.symbol, g.initial_take_profit) }}{% else %}{{ g.initial_take_profit }}{% endif %}</td>
|
|
<td>{% if price_fmt %}{{ price_fmt(g.symbol, g.current_stop_loss) }}{% else %}{{ g.current_stop_loss }}{% endif %}</td>
|
|
<td>{% if g.avg_entry_display %}{{ g.avg_entry_display }}{% elif g.avg_entry is not none %}{{ g.avg_entry }}{% else %}—{% endif %}</td>
|
|
<td>{% if g.reward_at_tp_usdt is not none %}{{ '%.2f'|format(g.reward_at_tp_usdt) }}{% else %}—{% endif %}</td>
|
|
</tr>
|
|
{% else %}
|
|
<tr><td colspan="8" style="color:#8892b0">暂无</td></tr>
|
|
{% endfor %}
|
|
</table>
|
|
</div>
|
|
|
|
<h3 style="margin:14px 0 8px;font-size:.95rem;color:#b8c4ff">最近滚仓腿</h3>
|
|
<div class="table-wrap">
|
|
<table>
|
|
<tr><th>#</th><th>组</th><th>方式</th><th>张数</th><th>新SL</th><th>当前均价</th><th>止盈盈利U</th><th>状态</th></tr>
|
|
{% for leg in roll_legs %}
|
|
<tr>
|
|
<td>{{ leg.leg_index }}</td>
|
|
<td>{{ leg.roll_group_id }}</td>
|
|
<td>{{ leg.add_mode }}</td>
|
|
<td>{{ leg.amount }}</td>
|
|
<td>{{ leg.new_stop_loss }}</td>
|
|
<td>{% if leg.avg_entry_display %}{{ leg.avg_entry_display }}{% elif leg.avg_entry_after is not none %}{{ leg.avg_entry_after }}{% else %}—{% endif %}</td>
|
|
<td>{% if leg.reward_at_tp_usdt is not none %}{{ '%.2f'|format(leg.reward_at_tp_usdt) }}{% else %}—{% endif %}</td>
|
|
<td>{{ leg.status_label or leg.status }}</td>
|
|
</tr>
|
|
{% else %}
|
|
<tr><td colspan="8" style="color:#8892b0">暂无</td></tr>
|
|
{% endfor %}
|
|
</table>
|
|
</div>
|
|
</div>
|