diff --git a/frontend/src/App.vue b/frontend/src/App.vue index 10fefd1..cff26f8 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -518,113 +518,14 @@ onMounted(loadDashboard) {{ s['จาก'] }} {{ s['แหล่ง'] }} {{ s['ข้อมูล'] }} - {{ s['dึงมาเมื่อ'] }} + {{ s['dึงมาเมื่อ'] ? formatDate(s['dึงมาเมื่อ']) : '—' }} -
-
-
-
-
01 / สิ่งที่เปลี่ยนไป
-

ความต่างจากปกติ

-
- {{ positiveObservations }}/{{ observationRows.length }} เป็นบวก -
-
- {{ formatNumber(summary.theme_surprise) }}σ - ธีม tourism วิ่ง{{ summary.theme_surprise >= 0 ? 'สูงกว่า' : 'ต่ำกว่า' }}ค่าตามฤดูกาล — เป็น input ไม่ใช่คำสั่งซื้อขาย. -
-
-
-
{{ observation.metric_key.replaceAll('_', ' ') }}
-
-
{{ Number(observation.surprise) >= 0 ? '+' : '' }}{{ formatNumber(observation.surprise) }}σ
-
-
-
- -
-
-
-
02 / ที่มาของข้อมูล
-

เชื่อถือข้อมูลได้ไหม?

-
- {{ displayLabel(summary.data_health.status) }} -
-
-
แหล่งข้อมูล{{ summary.data_health.source_id }}
-
เผยแพร่{{ formatDate(summary.data_health.published_at) }}
-
ดึงข้อมูล{{ formatDate(summary.data_health.retrieved_at) }}
-
Vintage{{ summary.data_health.vintage_id }}
-
ประวัติ{{ summary.data_health.history_points || '—' }} points
-
Parser{{ summary.data_health.parser_version || '—' }}
-
Replay{{ summary.data_health.replayable ? 'มี' : 'ไม่มี' }}
-
Raw hash{{ summary.data_health.raw_payload_hash ? summary.data_health.raw_payload_hash.slice(0, 16) : '—' }}
-
-
ทุกสัญญาณพกที่มา, เวลาเผยแพร่ และ vintage ของมัน ข้อมูลที่ถูกแก้ภายหลังไม่เคยเขียนทับอดีตแบบเงียบ.
-
-
- -
-
-
-
03 / ผลลัพธ์เชิงกำหนด
-

ตารางสัญญาณ

-
-
{{ signalData.strategy_version }} · target weights ไม่ใช่คำสั่งซื้อขาย
-
-
- - - - - - - - - - - - - - -
อันดับหุ้นทิศทางScoreExposureเหตุผลTarget
{{ String(signal.rank).padStart(2, '0') }}{{ signal.symbol }}{{ Math.round(signal.confidence * 100) }}% confidence{{ signal.side }}{{ signal.score >= 0 ? '+' : '' }}{{ formatNumber(signal.score) }}{{ signal.coefficient >= 0 ? '+' : '' }}{{ formatNumber(signal.coefficient) }}{{ code }}{{ signal.target_weight >= 0 ? '+' : '' }}{{ (signal.target_weight * 100).toFixed(1) }}%
-
-
- -
-
-
-
04 / Research run
-

หลักฐานพอจะรองรับ study เชิงพรรณนาไหม?

-
- -
-
-
-
{{ researchRun.result_scope === 'non_pit_descriptive_only' ? 'descriptive only' : displayLabel(researchRun.status) }}
-
{{ researchReason(researchRun) }}
-
Run {{ researchRun.run_id }} · {{ formatDate(researchRun.generated_at) }} · {{ displayLabel(researchRun.result_scope) }}
-
-
-
Independent vintages{{ researchRun.gates.vintages.available_events }} / {{ researchRun.gates.vintages.required_events }} · {{ displayLabel(researchRun.gates.vintages.status) }}
-
ราคา{{ displayLabel(researchRun.gates.prices.quality) || 'ไม่มี' }} · {{ displayLabel(researchRun.gates.prices.status) }}
-
-
-
-
- +{{ windowKey }} sessions - {{ (windowResult.net_return * 100).toFixed(2) }}% net - {{ (windowResult.hit_rate * 100).toFixed(0) }}% hit · {{ windowResult.event_count }} events -
-
-
ยังไม่มี frozen research run. รันการตรวจเพื่อเก็บ input กับ gate decision ปัจจุบัน.
-
- +
@@ -697,9 +598,15 @@ onMounted(loadDashboard)
05 / บันทึกการวิเคราะห์
-

อ่านสัญญาณเป็นสมมติฐาน.

-

ข้อมูล tourism {{ summary.theme_surprise >= 0 ? 'สูงกว่า' : 'ต่ำกว่า' }}ค่าที่คาด เป็นตัวกำหนดว่าหุ้นตัวไหนได้ score บวกหรือลบ ระบบหยุดก่อนสั่ง execution — ยังต้องมีคน review valuation, price-in, liquidity และ risk.

-
Surprise × Exposure × Confidence
+

อ่านสัญญาณเป็นสมมติฐาน (3 ธีม).

+
+
+ {{ t.label_th }} + {{ t.thesis || '—' }} + {{ t.surprise != null ? formatNumber(t.surprise,2) + 'σ' : '—' }} +
+
+
ความต่าง (surprise) × การเข้าถึงธีม × ความเชื่อมั่น
diff --git a/frontend/src/style.css b/frontend/src/style.css index c322812..5f355da 100644 --- a/frontend/src/style.css +++ b/frontend/src/style.css @@ -144,6 +144,12 @@ tbody tr:hover { background: rgba(255,255,255,.025); } .source-name { color: var(--accent); } .combined-cell { color: var(--mint); font-weight: 600; font-family: 'DM Mono', monospace; } +.thesis-list { display: flex; flex-direction: column; gap: 10px; margin: 12px 0; } +.thesis-row { display: flex; gap: 10px; align-items: baseline; padding-bottom: 8px; border-bottom: 1px solid var(--line-weak, rgba(255,255,255,.05)); } +.thesis-theme { min-width: 130px; color: var(--accent); } +.thesis-text { flex: 1; font-size: 12px; color: var(--text-2, #99a); } +.thesis-surprise { font-family: 'DM Mono', monospace; color: var(--mint); } + /* ---- Simulation panel ---- */ .sim-panel { margin-top: 18px; } .sim-controls { display: flex; gap: 12px; align-items: flex-end; flex-wrap: wrap; margin-bottom: 14px; }