diff --git a/frontend/src/App.vue b/frontend/src/App.vue index e982368..b602c5e 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -149,6 +149,17 @@ function formatNumber(value, digits = 2) { return Number(value ?? 0).toFixed(digits) } +// map the backend's dividend_method to an honest Thai label/flag +function dividendMethodLabel(method) { + if (method === 'dated_ledger') return 'ปันผล (ตามวันจริง)' + if (method === 'dps_annual_proxy') return 'ประมาณการปันผล/หุ้น (DPS)' + return 'ประมาณการปันผล (Proxy)' // final_holdings_yield_proxy or unknown +} +function dividendIsEstimate(method) { + // only dated_ledger rows are real dated cash flows; everything else is an estimate/proxy + return method !== 'dated_ledger' +} + function formatDate(value) { if (!value) return '—' return new Date(value).toLocaleString('en-GB', { @@ -695,12 +706,12 @@ onMounted(async () => { await loadDashboard(); await loadBacktestRuns() })
กำไรจากราคา{{ formatNumber(btResult.price_pnl) }} บาท
-
ประมาณการปันผล*{{ formatNumber(btResult.dividend_income) }} บาท
+
{{ dividendMethodLabel(btResult.dividend_method) }}Proxy{{ formatNumber(btResult.dividend_income) }} บาท
มูลค่าสุดท้าย{{ formatNumber(btResult.final_value) }} บาท
ผลตอบแทนสุทธิ{{ (btResult.net_return * 100).toFixed(2) }}%
Trades: {{ btResult.trades }} · ช่วง {{ btResult.start }} → {{ btResult.end }}
-
*ประมาณจาก dividend yield ของพอร์ตสุดท้าย ไม่ใช่กระแสเงินสดปันผลจริง
+
*{{ dividendIsEstimate(btResult.dividend_method) ? 'ประมาณการปันผล ไม่ใช่กระแสเงินสดปันผลตามวันจริง' : 'ปันผลตามวันจริงจาก ledger (ex-date/per-share)' }}
คำเตือน: ผลนี้ใช้คะแนนปัจจุบันย้อนหลัง จึงเป็น descriptive non-PIT และไม่ใช่หลักฐานประสิทธิภาพกลยุทธ์
พอร์ตสุดท้าย: @@ -712,13 +723,13 @@ onMounted(async () => { await loadDashboard(); await loadBacktestRuns() })
ประวัติการย้อนทดสอบ
- + - +
#ช่วงทุนกำไรราคาประมาณการปันผล (Proxy)ผลตอบแทนรันเมื่อ
#ช่วงทุนกำไรราคาปันผลผลตอบแทนรันเมื่อ
{{ r.id }}{{ r.start }} → {{ r.end }} descriptive non-PIT {{ formatNumber(r.capital) }} {{ formatNumber(r.price_pnl) }}{{ formatNumber(r.dividend_income) }}{{ formatNumber(r.dividend_income) }}Proxy {{ (r.net_return * 100).toFixed(2) }}% {{ r.ran_at ? formatDate(r.ran_at) : '—' }}