summaryrefslogtreecommitdiff
path: root/web
diff options
context:
space:
mode:
authorJSDurand <mmemmew@gmail.com>2026-10-21 15:28:20 +0800
committerJSDurand <mmemmew@gmail.com>2026-10-21 15:28:20 +0800
commit75dd524fadc022d9e6845f41f19203c3d5a951cd (patch)
treeb08ec82fe4358c5f9ea047794bb1ff888b35d64d /web
parent5c00355c2ccd94195bdb90e1c1e6f51acbcdd7a5 (diff)
add VPS snapshot pipeline, run.sh, and data-repair fixesHEADmaster
- fetch_tw_daily.sh: --snapshot mode (one file per trading day, merged by symbol), retries, validation of numeric fields - cron_daily.sh (VPS): lock, pruning, e-mail alerts on failure - sync_from_vps.sh (Mac): rsync snapshots and merge into per-stock CSVs - run.sh: pick data files for a symbol, build, analyse, open the page - lib.sh: LC_ALL=C; fetch.sh: small fixes - data.rs: repair rows whose open/close fall outside high/low - template: horizontal hover lines in the RSI and KD panels Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Diffstat (limited to 'web')
-rw-r--r--web/template.html8
1 files changed, 8 insertions, 0 deletions
diff --git a/web/template.html b/web/template.html
index 45fa874..966a584 100644
--- a/web/template.html
+++ b/web/template.html
@@ -206,6 +206,14 @@ function render() {
const c = D.candles[hover];
s += `<line class="guide" x1="${M.l}" x2="${W-M.r}" y1="${py(c.Close)}" y2="${py(c.Close)}"/>` +
`<text x="${W-M.r+4}" y="${py(c.Close)+4}" style="fill:${css('--fg')};font-weight:600">${fmt(c.Close)}</text>`;
+ // same horizontal crosshair for the indicator panels, at the hovered bar's values
+ for (const [p, arr, color] of [[R, D.rsi, css('--accent')], [K, D.k, css('--line1')], [K, D.d, css('--line2')]]) {
+ const v = arr[hover];
+ if (v == null) continue;
+ const y = ind(p, v);
+ s += `<line x1="${M.l}" x2="${W-M.r}" y1="${y}" y2="${y}" stroke="${color}" stroke-width="1" stroke-dasharray="4 3"/>` +
+ `<text x="${W-M.r+4}" y="${y+4}" style="fill:${color};font-weight:600">${fmt(v, 1)}</text>`;
+ }
}
svg.innerHTML = s;
updateInfo();