feat: add tabular key monitor rule reference on all exchanges
Replace the pipe-separated rule blurb with a detailed five-column table driven by .env-backed gate parameters for easier trading reference. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -133,6 +133,7 @@ from key_monitor_lib import (
|
|||||||
detect_rs_box_break,
|
detect_rs_box_break,
|
||||||
format_auto_amp_line,
|
format_auto_amp_line,
|
||||||
format_auto_confirm_line,
|
format_auto_confirm_line,
|
||||||
|
key_monitor_rule_template_context,
|
||||||
notify_interval_elapsed,
|
notify_interval_elapsed,
|
||||||
resolve_rs_break_for_alert,
|
resolve_rs_break_for_alert,
|
||||||
rs_break_from_direction,
|
rs_break_from_direction,
|
||||||
@@ -6125,12 +6126,20 @@ def render_main_page(page="trade"):
|
|||||||
opens_today=opens_today,
|
opens_today=opens_today,
|
||||||
hard_limit=DAILY_OPEN_HARD_LIMIT,
|
hard_limit=DAILY_OPEN_HARD_LIMIT,
|
||||||
)
|
)
|
||||||
key_gate_rule_text = (
|
key_rule_ctx = key_monitor_rule_template_context(
|
||||||
f"【箱体/收敛】{KLINE_TIMEFRAME} 两根闭合K|突破越过关键位 > {KEY_BREAKOUT_AMP_MIN_PCT}%|"
|
kline_timeframe=KLINE_TIMEFRAME,
|
||||||
f"确认K收于箱外|量能>前{KEY_VOLUME_MA_BARS}均量×{KEY_VOLUME_RATIO_MIN}|"
|
key_breakout_amp_min_pct=KEY_BREAKOUT_AMP_MIN_PCT,
|
||||||
f"RR>{KEY_AUTO_MIN_PLANNED_RR}|日成交前{KEY_DAILY_VOLUME_RANK_MAX}|"
|
key_volume_ma_bars=KEY_VOLUME_MA_BARS,
|
||||||
f"【假突破·BTC/ETH】做空填高点/做多填低点,外侧 0.1% 挂限价,止损 0.5%,RR 1.5,有效期 {FALSE_BREAKOUT_VALIDITY_HOURS}h|"
|
key_volume_ratio_min=KEY_VOLUME_RATIO_MIN,
|
||||||
f"【阻力/支撑】填上/下沿,5m 收盘突破任一侧即提醒 {KEY_ALERT_MAX_TIMES} 次(间隔 {KEY_ALERT_INTERVAL_MINUTES} 分),不选方向、不自动开仓"
|
key_auto_min_planned_rr=KEY_AUTO_MIN_PLANNED_RR,
|
||||||
|
key_daily_volume_rank_max=KEY_DAILY_VOLUME_RANK_MAX,
|
||||||
|
key_confirm_breakout_bar=KEY_CONFIRM_BREAKOUT_BAR,
|
||||||
|
key_confirm_bar=KEY_CONFIRM_BAR,
|
||||||
|
key_alert_max_times=KEY_ALERT_MAX_TIMES,
|
||||||
|
key_alert_interval_minutes=KEY_ALERT_INTERVAL_MINUTES,
|
||||||
|
key_stop_outside_breakout_pct=KEY_STOP_OUTSIDE_BREAKOUT_PCT,
|
||||||
|
key_trend_stop_outside_pct=KEY_TREND_STOP_OUTSIDE_PCT,
|
||||||
|
false_breakout_validity_hours=FALSE_BREAKOUT_VALIDITY_HOURS,
|
||||||
)
|
)
|
||||||
strategy_extra = {}
|
strategy_extra = {}
|
||||||
if page in ("strategy", "strategy_trend", "strategy_roll", "strategy_records"):
|
if page in ("strategy", "strategy_trend", "strategy_roll", "strategy_records"):
|
||||||
@@ -6209,7 +6218,7 @@ def render_main_page(page="trade"):
|
|||||||
max_active_positions=MAX_ACTIVE_POSITIONS,
|
max_active_positions=MAX_ACTIVE_POSITIONS,
|
||||||
manual_min_planned_rr=MANUAL_MIN_PLANNED_RR,
|
manual_min_planned_rr=MANUAL_MIN_PLANNED_RR,
|
||||||
key_auto_min_planned_rr=KEY_AUTO_MIN_PLANNED_RR,
|
key_auto_min_planned_rr=KEY_AUTO_MIN_PLANNED_RR,
|
||||||
key_gate_rule_text=key_gate_rule_text,
|
key_rule_ctx=key_rule_ctx,
|
||||||
kline_timeframe=KLINE_TIMEFRAME,
|
kline_timeframe=KLINE_TIMEFRAME,
|
||||||
**strategy_extra,
|
**strategy_extra,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -132,6 +132,7 @@ from key_monitor_lib import (
|
|||||||
detect_rs_box_break,
|
detect_rs_box_break,
|
||||||
format_auto_amp_line,
|
format_auto_amp_line,
|
||||||
format_auto_confirm_line,
|
format_auto_confirm_line,
|
||||||
|
key_monitor_rule_template_context,
|
||||||
notify_interval_elapsed,
|
notify_interval_elapsed,
|
||||||
resolve_rs_break_for_alert,
|
resolve_rs_break_for_alert,
|
||||||
rs_break_from_direction,
|
rs_break_from_direction,
|
||||||
@@ -6218,12 +6219,20 @@ def render_main_page(page="trade"):
|
|||||||
opens_today=opens_today,
|
opens_today=opens_today,
|
||||||
hard_limit=DAILY_OPEN_HARD_LIMIT,
|
hard_limit=DAILY_OPEN_HARD_LIMIT,
|
||||||
)
|
)
|
||||||
key_gate_rule_text = (
|
key_rule_ctx = key_monitor_rule_template_context(
|
||||||
f"【箱体/收敛】{KLINE_TIMEFRAME} 两根闭合K|突破越过关键位 > {KEY_BREAKOUT_AMP_MIN_PCT}%|"
|
kline_timeframe=KLINE_TIMEFRAME,
|
||||||
f"确认K收于箱外|量能>前{KEY_VOLUME_MA_BARS}均量×{KEY_VOLUME_RATIO_MIN}|"
|
key_breakout_amp_min_pct=KEY_BREAKOUT_AMP_MIN_PCT,
|
||||||
f"RR>{KEY_AUTO_MIN_PLANNED_RR}|日成交前{KEY_DAILY_VOLUME_RANK_MAX}|"
|
key_volume_ma_bars=KEY_VOLUME_MA_BARS,
|
||||||
f"【假突破·BTC/ETH】做空填高点/做多填低点,外侧 0.1% 挂限价,止损 0.5%,RR 1.5,有效期 {FALSE_BREAKOUT_VALIDITY_HOURS}h|"
|
key_volume_ratio_min=KEY_VOLUME_RATIO_MIN,
|
||||||
f"【阻力/支撑】填上/下沿,5m 收盘突破任一侧即提醒 {KEY_ALERT_MAX_TIMES} 次(间隔 {KEY_ALERT_INTERVAL_MINUTES} 分),不选方向、不自动开仓"
|
key_auto_min_planned_rr=KEY_AUTO_MIN_PLANNED_RR,
|
||||||
|
key_daily_volume_rank_max=KEY_DAILY_VOLUME_RANK_MAX,
|
||||||
|
key_confirm_breakout_bar=KEY_CONFIRM_BREAKOUT_BAR,
|
||||||
|
key_confirm_bar=KEY_CONFIRM_BAR,
|
||||||
|
key_alert_max_times=KEY_ALERT_MAX_TIMES,
|
||||||
|
key_alert_interval_minutes=KEY_ALERT_INTERVAL_MINUTES,
|
||||||
|
key_stop_outside_breakout_pct=KEY_STOP_OUTSIDE_BREAKOUT_PCT,
|
||||||
|
key_trend_stop_outside_pct=KEY_TREND_STOP_OUTSIDE_PCT,
|
||||||
|
false_breakout_validity_hours=FALSE_BREAKOUT_VALIDITY_HOURS,
|
||||||
)
|
)
|
||||||
strategy_extra = {}
|
strategy_extra = {}
|
||||||
if page in ("strategy", "strategy_trend", "strategy_roll", "strategy_records"):
|
if page in ("strategy", "strategy_trend", "strategy_roll", "strategy_records"):
|
||||||
@@ -6305,7 +6314,7 @@ def render_main_page(page="trade"):
|
|||||||
max_active_positions=MAX_ACTIVE_POSITIONS,
|
max_active_positions=MAX_ACTIVE_POSITIONS,
|
||||||
manual_min_planned_rr=MANUAL_MIN_PLANNED_RR,
|
manual_min_planned_rr=MANUAL_MIN_PLANNED_RR,
|
||||||
key_auto_min_planned_rr=KEY_AUTO_MIN_PLANNED_RR,
|
key_auto_min_planned_rr=KEY_AUTO_MIN_PLANNED_RR,
|
||||||
key_gate_rule_text=key_gate_rule_text,
|
key_rule_ctx=key_rule_ctx,
|
||||||
kline_timeframe=KLINE_TIMEFRAME,
|
kline_timeframe=KLINE_TIMEFRAME,
|
||||||
exchange_pnl_sync=exchange_pnl_sync,
|
exchange_pnl_sync=exchange_pnl_sync,
|
||||||
**strategy_extra,
|
**strategy_extra,
|
||||||
|
|||||||
@@ -132,6 +132,7 @@ from key_monitor_lib import (
|
|||||||
detect_rs_box_break,
|
detect_rs_box_break,
|
||||||
format_auto_amp_line,
|
format_auto_amp_line,
|
||||||
format_auto_confirm_line,
|
format_auto_confirm_line,
|
||||||
|
key_monitor_rule_template_context,
|
||||||
notify_interval_elapsed,
|
notify_interval_elapsed,
|
||||||
resolve_rs_break_for_alert,
|
resolve_rs_break_for_alert,
|
||||||
rs_break_from_direction,
|
rs_break_from_direction,
|
||||||
@@ -6218,12 +6219,20 @@ def render_main_page(page="trade"):
|
|||||||
opens_today=opens_today,
|
opens_today=opens_today,
|
||||||
hard_limit=DAILY_OPEN_HARD_LIMIT,
|
hard_limit=DAILY_OPEN_HARD_LIMIT,
|
||||||
)
|
)
|
||||||
key_gate_rule_text = (
|
key_rule_ctx = key_monitor_rule_template_context(
|
||||||
f"【箱体/收敛】{KLINE_TIMEFRAME} 两根闭合K|突破越过关键位 > {KEY_BREAKOUT_AMP_MIN_PCT}%|"
|
kline_timeframe=KLINE_TIMEFRAME,
|
||||||
f"确认K收于箱外|量能>前{KEY_VOLUME_MA_BARS}均量×{KEY_VOLUME_RATIO_MIN}|"
|
key_breakout_amp_min_pct=KEY_BREAKOUT_AMP_MIN_PCT,
|
||||||
f"RR>{KEY_AUTO_MIN_PLANNED_RR}|日成交前{KEY_DAILY_VOLUME_RANK_MAX}|"
|
key_volume_ma_bars=KEY_VOLUME_MA_BARS,
|
||||||
f"【假突破·BTC/ETH】做空填高点/做多填低点,外侧 0.1% 挂限价,止损 0.5%,RR 1.5,有效期 {FALSE_BREAKOUT_VALIDITY_HOURS}h|"
|
key_volume_ratio_min=KEY_VOLUME_RATIO_MIN,
|
||||||
f"【阻力/支撑】填上/下沿,5m 收盘突破任一侧即提醒 {KEY_ALERT_MAX_TIMES} 次(间隔 {KEY_ALERT_INTERVAL_MINUTES} 分),不选方向、不自动开仓"
|
key_auto_min_planned_rr=KEY_AUTO_MIN_PLANNED_RR,
|
||||||
|
key_daily_volume_rank_max=KEY_DAILY_VOLUME_RANK_MAX,
|
||||||
|
key_confirm_breakout_bar=KEY_CONFIRM_BREAKOUT_BAR,
|
||||||
|
key_confirm_bar=KEY_CONFIRM_BAR,
|
||||||
|
key_alert_max_times=KEY_ALERT_MAX_TIMES,
|
||||||
|
key_alert_interval_minutes=KEY_ALERT_INTERVAL_MINUTES,
|
||||||
|
key_stop_outside_breakout_pct=KEY_STOP_OUTSIDE_BREAKOUT_PCT,
|
||||||
|
key_trend_stop_outside_pct=KEY_TREND_STOP_OUTSIDE_PCT,
|
||||||
|
false_breakout_validity_hours=FALSE_BREAKOUT_VALIDITY_HOURS,
|
||||||
)
|
)
|
||||||
strategy_extra = {}
|
strategy_extra = {}
|
||||||
if page in ("strategy", "strategy_trend", "strategy_roll", "strategy_records"):
|
if page in ("strategy", "strategy_trend", "strategy_roll", "strategy_records"):
|
||||||
@@ -6305,7 +6314,7 @@ def render_main_page(page="trade"):
|
|||||||
max_active_positions=MAX_ACTIVE_POSITIONS,
|
max_active_positions=MAX_ACTIVE_POSITIONS,
|
||||||
manual_min_planned_rr=MANUAL_MIN_PLANNED_RR,
|
manual_min_planned_rr=MANUAL_MIN_PLANNED_RR,
|
||||||
key_auto_min_planned_rr=KEY_AUTO_MIN_PLANNED_RR,
|
key_auto_min_planned_rr=KEY_AUTO_MIN_PLANNED_RR,
|
||||||
key_gate_rule_text=key_gate_rule_text,
|
key_rule_ctx=key_rule_ctx,
|
||||||
kline_timeframe=KLINE_TIMEFRAME,
|
kline_timeframe=KLINE_TIMEFRAME,
|
||||||
exchange_pnl_sync=exchange_pnl_sync,
|
exchange_pnl_sync=exchange_pnl_sync,
|
||||||
**strategy_extra,
|
**strategy_extra,
|
||||||
|
|||||||
@@ -132,6 +132,7 @@ from key_monitor_lib import (
|
|||||||
detect_rs_box_break,
|
detect_rs_box_break,
|
||||||
format_auto_amp_line,
|
format_auto_amp_line,
|
||||||
format_auto_confirm_line,
|
format_auto_confirm_line,
|
||||||
|
key_monitor_rule_template_context,
|
||||||
notify_interval_elapsed,
|
notify_interval_elapsed,
|
||||||
resolve_rs_break_for_alert,
|
resolve_rs_break_for_alert,
|
||||||
rs_break_from_direction,
|
rs_break_from_direction,
|
||||||
@@ -5764,12 +5765,20 @@ def render_main_page(page="trade"):
|
|||||||
opens_today=opens_today,
|
opens_today=opens_today,
|
||||||
hard_limit=DAILY_OPEN_HARD_LIMIT,
|
hard_limit=DAILY_OPEN_HARD_LIMIT,
|
||||||
)
|
)
|
||||||
key_gate_rule_text = (
|
key_rule_ctx = key_monitor_rule_template_context(
|
||||||
f"【箱体/收敛】{KLINE_TIMEFRAME} 两根闭合K|突破越过关键位 > {KEY_BREAKOUT_AMP_MIN_PCT}%|"
|
kline_timeframe=KLINE_TIMEFRAME,
|
||||||
f"确认K收于箱外|量能>前{KEY_VOLUME_MA_BARS}均量×{KEY_VOLUME_RATIO_MIN}|"
|
key_breakout_amp_min_pct=KEY_BREAKOUT_AMP_MIN_PCT,
|
||||||
f"RR>{KEY_AUTO_MIN_PLANNED_RR}|日成交前{KEY_DAILY_VOLUME_RANK_MAX}|"
|
key_volume_ma_bars=KEY_VOLUME_MA_BARS,
|
||||||
f"【假突破·BTC/ETH】做空填高点/做多填低点,外侧 0.1% 挂限价,止损 0.5%,RR 1.5,有效期 {FALSE_BREAKOUT_VALIDITY_HOURS}h|"
|
key_volume_ratio_min=KEY_VOLUME_RATIO_MIN,
|
||||||
f"【阻力/支撑】填上/下沿,5m 收盘突破任一侧即提醒 {KEY_ALERT_MAX_TIMES} 次(间隔 {KEY_ALERT_INTERVAL_MINUTES} 分),不选方向、不自动开仓"
|
key_auto_min_planned_rr=KEY_AUTO_MIN_PLANNED_RR,
|
||||||
|
key_daily_volume_rank_max=KEY_DAILY_VOLUME_RANK_MAX,
|
||||||
|
key_confirm_breakout_bar=KEY_CONFIRM_BREAKOUT_BAR,
|
||||||
|
key_confirm_bar=KEY_CONFIRM_BAR,
|
||||||
|
key_alert_max_times=KEY_ALERT_MAX_TIMES,
|
||||||
|
key_alert_interval_minutes=KEY_ALERT_INTERVAL_MINUTES,
|
||||||
|
key_stop_outside_breakout_pct=KEY_STOP_OUTSIDE_BREAKOUT_PCT,
|
||||||
|
key_trend_stop_outside_pct=KEY_TREND_STOP_OUTSIDE_PCT,
|
||||||
|
false_breakout_validity_hours=FALSE_BREAKOUT_VALIDITY_HOURS,
|
||||||
)
|
)
|
||||||
strategy_extra = {}
|
strategy_extra = {}
|
||||||
if page in ("strategy", "strategy_trend", "strategy_roll", "strategy_records"):
|
if page in ("strategy", "strategy_trend", "strategy_roll", "strategy_records"):
|
||||||
@@ -5844,7 +5853,7 @@ def render_main_page(page="trade"):
|
|||||||
journal_chart_default_tf2=JOURNAL_CHART_DEFAULT_TF2,
|
journal_chart_default_tf2=JOURNAL_CHART_DEFAULT_TF2,
|
||||||
journal_chart_default_limit=JOURNAL_CHART_DEFAULT_LIMIT,
|
journal_chart_default_limit=JOURNAL_CHART_DEFAULT_LIMIT,
|
||||||
journal_chart_default_anchor=JOURNAL_CHART_DEFAULT_ANCHOR,
|
journal_chart_default_anchor=JOURNAL_CHART_DEFAULT_ANCHOR,
|
||||||
key_gate_rule_text=key_gate_rule_text,
|
key_rule_ctx=key_rule_ctx,
|
||||||
funds_fmt=format_funds_u,
|
funds_fmt=format_funds_u,
|
||||||
exchange_display=EXCHANGE_DISPLAY_NAME,
|
exchange_display=EXCHANGE_DISPLAY_NAME,
|
||||||
max_active_positions=MAX_ACTIVE_POSITIONS,
|
max_active_positions=MAX_ACTIVE_POSITIONS,
|
||||||
|
|||||||
@@ -293,3 +293,46 @@ def format_auto_confirm_line(confirm_ok: bool, cfm_close, edge_price, direction:
|
|||||||
f"第二根确认:{'通过' if confirm_ok else '不通过'}"
|
f"第二根确认:{'通过' if confirm_ok else '不通过'}"
|
||||||
f"(确认收盘 {cfm_close},须收于{side},关键位 {edge_price})"
|
f"(确认收盘 {cfm_close},须收于{side},关键位 {edge_price})"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def key_monitor_rule_template_context(
|
||||||
|
*,
|
||||||
|
kline_timeframe: str,
|
||||||
|
key_breakout_amp_min_pct: float,
|
||||||
|
key_volume_ma_bars: int,
|
||||||
|
key_volume_ratio_min: float,
|
||||||
|
key_auto_min_planned_rr: float,
|
||||||
|
key_daily_volume_rank_max: int,
|
||||||
|
key_confirm_breakout_bar: int,
|
||||||
|
key_confirm_bar: int,
|
||||||
|
key_alert_max_times: int,
|
||||||
|
key_alert_interval_minutes: int,
|
||||||
|
key_stop_outside_breakout_pct: float,
|
||||||
|
key_trend_stop_outside_pct: float,
|
||||||
|
false_breakout_validity_hours: int,
|
||||||
|
) -> dict[str, Any]:
|
||||||
|
"""关键位监控页规则说明表格(Jinja key_rule_ctx)。"""
|
||||||
|
from false_breakout_key_monitor_lib import (
|
||||||
|
FALSE_BREAKOUT_OFFSET_PCT,
|
||||||
|
FALSE_BREAKOUT_RR,
|
||||||
|
FALSE_BREAKOUT_SL_PCT,
|
||||||
|
)
|
||||||
|
|
||||||
|
return {
|
||||||
|
"tf": (kline_timeframe or "5m").strip(),
|
||||||
|
"amp_min_pct": key_breakout_amp_min_pct,
|
||||||
|
"vol_ma_bars": key_volume_ma_bars,
|
||||||
|
"vol_ratio_min": key_volume_ratio_min,
|
||||||
|
"min_rr": key_auto_min_planned_rr,
|
||||||
|
"vol_rank_max": key_daily_volume_rank_max,
|
||||||
|
"breakout_bar": key_confirm_breakout_bar,
|
||||||
|
"confirm_bar": key_confirm_bar,
|
||||||
|
"alert_max": key_alert_max_times,
|
||||||
|
"alert_interval_min": key_alert_interval_minutes,
|
||||||
|
"stop_outside_pct": key_stop_outside_breakout_pct,
|
||||||
|
"trend_stop_outside_pct": key_trend_stop_outside_pct,
|
||||||
|
"fb_offset_pct": FALSE_BREAKOUT_OFFSET_PCT,
|
||||||
|
"fb_sl_pct": FALSE_BREAKOUT_SL_PCT,
|
||||||
|
"fb_rr": FALSE_BREAKOUT_RR,
|
||||||
|
"fb_valid_hours": false_breakout_validity_hours,
|
||||||
|
}
|
||||||
|
|||||||
@@ -872,6 +872,36 @@ html[data-theme="light"] .tip-collapse-body.rule-tip {
|
|||||||
color: #4a6078 !important;
|
color: #4a6078 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
html[data-theme="light"] .key-rule-table th,
|
||||||
|
html[data-theme="light"] .key-rule-table td {
|
||||||
|
border-color: #d0dae4 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme="light"] .key-rule-table th {
|
||||||
|
background: #eef3f8 !important;
|
||||||
|
color: #4a6078 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme="light"] .key-rule-table td {
|
||||||
|
color: #142232 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme="light"] .key-rule-table .key-rule-type {
|
||||||
|
color: #142232 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme="light"] .key-rule-table .key-rule-sub {
|
||||||
|
color: #006e9a !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme="light"] .key-rule-foot {
|
||||||
|
color: #6a7588 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
html[data-theme="light"] .key-rule-foot code {
|
||||||
|
color: #006e9a !important;
|
||||||
|
}
|
||||||
|
|
||||||
/* ── 关键位折叠行(亮色)── */
|
/* ── 关键位折叠行(亮色)── */
|
||||||
html[data-theme="light"] .key-row-collapse {
|
html[data-theme="light"] .key-row-collapse {
|
||||||
background: #f6f9fc !important;
|
background: #f6f9fc !important;
|
||||||
|
|||||||
@@ -29,6 +29,17 @@
|
|||||||
.key-row-collapse.key-history-failed{border-color:rgba(232,160,144,.4);background:rgba(36,22,24,.95)}
|
.key-row-collapse.key-history-failed{border-color:rgba(232,160,144,.4);background:rgba(36,22,24,.95)}
|
||||||
.key-row-collapse.key-history-failed .key-row-collapse-summary{color:#e8cfc8}
|
.key-row-collapse.key-history-failed .key-row-collapse-summary{color:#e8cfc8}
|
||||||
.key-row-collapse.key-history-failed .key-history-brief,.key-row-collapse.key-history-failed .key-history-outcome-badge{color:#e8a090;background:rgba(232,160,144,.1);border:1px solid rgba(232,160,144,.28)}
|
.key-row-collapse.key-history-failed .key-history-brief,.key-row-collapse.key-history-failed .key-history-outcome-badge{color:#e8a090;background:rgba(232,160,144,.1);border:1px solid rgba(232,160,144,.28)}
|
||||||
|
.key-rule-table-wrap{overflow-x:auto;margin:0 -2px}
|
||||||
|
.key-rule-table{width:100%;min-width:720px;border-collapse:collapse;font-size:.72rem;line-height:1.45}
|
||||||
|
.key-rule-table th,.key-rule-table td{border:1px solid #2a3348;padding:7px 9px;vertical-align:top;text-align:left}
|
||||||
|
.key-rule-table th{background:rgba(0,0,0,.28);color:#9ab;font-weight:600;white-space:nowrap}
|
||||||
|
.key-rule-table td{color:#c5cde0}
|
||||||
|
.key-rule-table .key-rule-type{color:#fff;font-weight:600;line-height:1.35}
|
||||||
|
.key-rule-table .key-rule-sub{color:#8fc8ff;font-size:.66rem;font-weight:500}
|
||||||
|
.key-rule-list{margin:0;padding-left:1.15em}
|
||||||
|
.key-rule-list li{margin:3px 0}
|
||||||
|
.key-rule-foot{margin:8px 0 0;font-size:.68rem;color:#8892b0;line-height:1.4}
|
||||||
|
.key-rule-foot code{font-size:.66rem;color:#8fc8ff}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
{% macro key_direction_label(k) -%}
|
{% macro key_direction_label(k) -%}
|
||||||
@@ -115,7 +126,9 @@
|
|||||||
</form>
|
</form>
|
||||||
<details class="tip-collapse key-rule-collapse">
|
<details class="tip-collapse key-rule-collapse">
|
||||||
<summary class="tip-collapse-summary">关键位监控规则说明</summary>
|
<summary class="tip-collapse-summary">关键位监控规则说明</summary>
|
||||||
<div class="tip-collapse-body rule-tip">{{ key_gate_rule_text }}</div>
|
<div class="tip-collapse-body rule-tip">
|
||||||
|
{% include 'key_monitor_rule_tips.html' %}
|
||||||
|
</div>
|
||||||
</details>
|
</details>
|
||||||
<div class="panel-scroll pos-list key-panel-scroll">
|
<div class="panel-scroll pos-list key-panel-scroll">
|
||||||
{% for k in key %}
|
{% for k in key %}
|
||||||
|
|||||||
@@ -0,0 +1,140 @@
|
|||||||
|
{% set r = key_rule_ctx %}
|
||||||
|
<div class="key-rule-table-wrap">
|
||||||
|
<table class="key-rule-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>监控类型</th>
|
||||||
|
<th>方向与填写</th>
|
||||||
|
<th>触发 / 门控条件</th>
|
||||||
|
<th>止盈止损</th>
|
||||||
|
<th>执行方式</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td class="key-rule-type">箱体突破<br><span class="key-rule-sub">收敛突破</span></td>
|
||||||
|
<td>
|
||||||
|
<ul class="key-rule-list">
|
||||||
|
<li><strong>方向</strong>:必选做多 / 做空</li>
|
||||||
|
<li><strong>上沿 H / 下沿 L</strong>:箱体或收敛结构上下界(H > L)</li>
|
||||||
|
<li><strong>方案</strong>:标准突破 / 箱体1R·止盈1.5H / 趋势单(自填止盈)</li>
|
||||||
|
<li><strong>移动保本</strong>:添加时可勾选</li>
|
||||||
|
</ul>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<ul class="key-rule-list">
|
||||||
|
<li>周期 <strong>{{ r.tf }}</strong>,取两根<strong>已闭合</strong> K(突破棒索引 {{ r.breakout_bar }}、确认棒 {{ r.confirm_bar }})</li>
|
||||||
|
<li>突破棒收盘越过关键位幅度 <strong>> {{ r.amp_min_pct }}%</strong></li>
|
||||||
|
<li>确认棒收盘须收于箱外(不得回到 [L, H] 内)</li>
|
||||||
|
<li>突破棒成交量 > 前 <strong>{{ r.vol_ma_bars }}</strong> 根均量 × <strong>{{ r.vol_ratio_min }}</strong></li>
|
||||||
|
<li>24h 成交额排名 ≤ <strong>{{ r.vol_rank_max }}</strong></li>
|
||||||
|
<li>按确认收盘 E 计算计划盈亏比 <strong>> {{ r.min_rr }} : 1</strong></li>
|
||||||
|
</ul>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<ul class="key-rule-list">
|
||||||
|
<li><strong>标准突破</strong>:SL = 突破 K 极值外 {{ r.stop_outside_pct }}%;TP = E ± 1×箱体高度 H</li>
|
||||||
|
<li><strong>箱体1R·止盈1.5H</strong>:SL = E ∓ 1×H;TP = E ∓ 1.5×H</li>
|
||||||
|
<li><strong>趋势单</strong>:SL = 突破 K 极值外 {{ r.trend_stop_outside_pct }}%;TP = 表单自填价</li>
|
||||||
|
</ul>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<ul class="key-rule-list">
|
||||||
|
<li>门控全部通过 → <strong>自动市价开仓</strong>(须开启实盘、持仓未达上限)</li>
|
||||||
|
<li>开仓后写入「下单监控」,本条从关键位列表移除</li>
|
||||||
|
<li>持仓已满时不可再添加箱体 / 收敛类型</li>
|
||||||
|
</ul>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="key-rule-type">斐波回调<br><span class="key-rule-sub">0.618 / 0.786</span></td>
|
||||||
|
<td>
|
||||||
|
<ul class="key-rule-list">
|
||||||
|
<li><strong>方向</strong>:必选做多 / 做空</li>
|
||||||
|
<li><strong>上沿 H / 下沿 L</strong>:斐波波段高低点</li>
|
||||||
|
<li>系统按比率自动计算挂单价 E、止损 SL、止盈 TP</li>
|
||||||
|
</ul>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<ul class="key-rule-list">
|
||||||
|
<li><strong>做多</strong>:E = H − ratio×(H−L),SL = L,TP = H</li>
|
||||||
|
<li><strong>做空</strong>:E = L + ratio×(H−L),SL = H,TP = L</li>
|
||||||
|
<li>计划 RR 须 <strong>> {{ r.min_rr }} : 1</strong> 方可挂单</li>
|
||||||
|
<li>标记价先触达止盈侧(多:≥H;空:≤L)→ 计划失效撤单</li>
|
||||||
|
</ul>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<ul class="key-rule-list">
|
||||||
|
<li>SL / TP 由斐波公式固定,见左列</li>
|
||||||
|
<li>成交后按仓位挂交易所 TP/SL</li>
|
||||||
|
</ul>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<ul class="key-rule-list">
|
||||||
|
<li>添加后<strong>挂限价单</strong>,等待成交</li>
|
||||||
|
<li>成交 → 写入下单监控;未成交可手动删除</li>
|
||||||
|
</ul>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="key-rule-type">假突破<br><span class="key-rule-sub">BTC / ETH</span></td>
|
||||||
|
<td>
|
||||||
|
<ul class="key-rule-list">
|
||||||
|
<li><strong>币种</strong>:仅 BTC、ETH</li>
|
||||||
|
<li><strong>做空</strong>:关键价位填<strong>高点</strong></li>
|
||||||
|
<li><strong>做多</strong>:关键价位填<strong>低点</strong></li>
|
||||||
|
<li>同币种同时仅允许一条假突破监控</li>
|
||||||
|
</ul>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<ul class="key-rule-list">
|
||||||
|
<li>限价挂在关键价<strong>外侧 {{ r.fb_offset_pct }}%</strong></li>
|
||||||
|
<li>止损幅度 <strong>{{ r.fb_sl_pct }}%</strong>,计划 RR = <strong>{{ r.fb_rr }} : 1</strong></li>
|
||||||
|
<li>挂单有效期 <strong>{{ r.fb_valid_hours }} 小时</strong>,过期自动结案</li>
|
||||||
|
</ul>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<ul class="key-rule-list">
|
||||||
|
<li>系统按方向自动算 E / SL / TP(RR {{ r.fb_rr }})</li>
|
||||||
|
<li>可勾选移动保本</li>
|
||||||
|
</ul>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<ul class="key-rule-list">
|
||||||
|
<li>添加后<strong>立即挂限价单</strong></li>
|
||||||
|
<li>成交 → 下单监控;过期 / 手动删除 → 关键位历史</li>
|
||||||
|
</ul>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="key-rule-type">关键阻力位<br><span class="key-rule-sub">关键支撑位</span></td>
|
||||||
|
<td>
|
||||||
|
<ul class="key-rule-list">
|
||||||
|
<li><strong>方向</strong>:自动「双向」,无需选择</li>
|
||||||
|
<li><strong>上沿</strong>:阻力 / 箱体上界</li>
|
||||||
|
<li><strong>下沿</strong>:支撑 / 箱体下界</li>
|
||||||
|
</ul>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<ul class="key-rule-list">
|
||||||
|
<li>{{ r.tf }} 最近一根<strong>已闭合</strong> K 收盘严格突破上沿(>)或下沿(<)</li>
|
||||||
|
<li>上沿优先:同一根 K 不会双向同时触发</li>
|
||||||
|
</ul>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<ul class="key-rule-list">
|
||||||
|
<li>无自动止盈止损(仅提醒,不开仓)</li>
|
||||||
|
</ul>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<ul class="key-rule-list">
|
||||||
|
<li><strong>企业微信提醒</strong>,最多 <strong>{{ r.alert_max }}</strong> 次</li>
|
||||||
|
<li>两次提醒间隔 ≥ <strong>{{ r.alert_interval_min }}</strong> 分钟</li>
|
||||||
|
<li>提醒完成或手动删除后记入历史</li>
|
||||||
|
</ul>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<p class="key-rule-foot">参数来自本实例 <code>.env</code>(如 <code>KEY_BREAKOUT_AMP_MIN_PCT</code>、<code>KEY_AUTO_MIN_PLANNED_RR</code> 等);修改后须重启实例生效。</p>
|
||||||
Reference in New Issue
Block a user