Libro

90/10 Portfolio ของ Warren Buffett: portfolio สองบรรทัดที่ทำงานอย่างไรในโลกจำลอง 20 ปี

Buffett แนะนำให้ภรรยาถือหุ้นดัชนี 90% และพันธบัตรระยะสั้น 10% บทความนี้อธิบายเหตุผลของแต่ละส่วน แล้วทดสอบสัดส่วนนี้เทียบกับ 60/40 และหุ้นล้วนในโลกจำลองที่กำหนด seed ไว้ เพื่อดูว่าอะไรที่สัดส่วนทำได้ และอะไรที่ทำไม่ได้

กราฟมูลค่าพอร์ตสะสม 20 ปีของพอร์ต 90/10 60/40 และหุ้นล้วน จากข้อมูลจำลอง

ข้อมูลจำลอง (seed 42) ตัวเลขและกราฟทั้งหมดในบทความนี้มาจาก simulation ที่สร้างด้วยสคริปต์ ไม่ใช่ข้อมูลตลาดจริง จุดประสงค์คือดูกลไกของสัดส่วน ไม่ใช่พยากรณ์ผลตอบแทน

นักลงทุนจำนวนมากยิ่งอยู่ในตลาดนานยิ่งหากลยุทธ์ที่ซับซ้อนขึ้น ทั้ง market timing, sector rotation และการเลือกหุ้นรายตัว แต่คำแนะนำที่ Warren Buffett ทิ้งไว้ให้ผู้ดูแลมรดกของครอบครัวกลับสั้นแค่สองบรรทัด: หุ้นดัชนี S&P 500 ต้นทุนต่ำ 90% และพันธบัตรรัฐบาลระยะสั้น 10%

สัดส่วนนี้ถูกเรียกต่อมาว่า 90/10 Portfolio จุดเด่นไม่ได้อยู่ที่ตัวเลข 90 แต่อยู่ที่การตัดสินใจล่วงหน้าว่าจะไม่ตัดสินใจอีก: ไม่เลือกหุ้น ไม่ทำ market timing และ rebalance ตามกำหนดเท่านั้น

บทความนี้อธิบายที่มาและแก่นของแนวคิด จากนั้นทดสอบสัดส่วน 90/10 เทียบกับ 60/40 และหุ้นล้วน 100/0 ในโลกจำลอง 20 ปีที่กำหนดสมมติฐานไว้ชัดเจน แล้วสรุปว่าสัดส่วนนี้เหมาะกับใครและไม่เหมาะกับใคร

1. ที่มา: คำสั่งเสียในจดหมายถึงผู้ถือหุ้นปี 2013

Buffett เขียนถึงแผนสำหรับทรัสต์ที่จะดูแลภรรยาไว้ในจดหมายถึงผู้ถือหุ้น Berkshire Hathaway ประจำปี 2013 (เผยแพร่เดือนกุมภาพันธ์ 2014) ใจความว่า

คำแนะนำของผมถึงผู้ดูแลทรัสต์เรียบง่ายที่สุดเท่าที่จะเป็นได้: นำเงินสด 10% ไปไว้ในพันธบัตรรัฐบาลระยะสั้น และอีก 90% ไว้ใน index fund S&P 500 ที่มีต้นทุนต่ำมาก ผมเชื่อว่าผลระยะยาวของทรัสต์จากนโยบายนี้จะดีกว่าผลที่นักลงทุนส่วนใหญ่ได้รับ ไม่ว่าจะเป็นกองทุนบำนาญ สถาบัน หรือบุคคล ที่จ้างผู้จัดการค่าธรรมเนียมสูง

ข้อความต้นฉบับเป็นภาษาอังกฤษ (Berkshire Hathaway, 2013 Annual Letter to Shareholders, หน้า 20) คำแปลด้านบนเป็นของผู้เขียนบทความ สิ่งที่น่าสังเกตคือ Buffett ไม่ได้บอกว่าสัดส่วนนี้ให้ผลตอบแทนสูงสุด เขาบอกว่า ดีกว่าสิ่งที่คนส่วนใหญ่ทำ ซึ่งเป็นข้ออ้างที่ถ่อมตัวกว่ามาก และตรวจสอบได้ง่ายกว่า

2. แก่นแนวคิดของ 90/10

2.1 เครื่องยนต์: หุ้นดัชนีต้นทุนต่ำ 90%

ส่วนที่ทำให้ portfolio เติบโตคือหุ้น และเหตุผลที่เลือก ดัชนี แทนการเลือกหุ้นเองมีสามข้อ

  • ต้นทุน index fund คิดค่าธรรมเนียมต่ำกว่า active fund มาก ส่วนต่างนี้ compound ไปตลอดอายุการลงทุน

  • diversification ถือบริษัทหลายร้อยแห่งพร้อมกัน ความเสี่ยงของบริษัทใดบริษัทหนึ่งจึงไม่ทำให้ portfolio พัง

  • ไม่ต้องตัดสินใจ ไม่มีวันที่ต้องถามว่า “ควรขายตัวนี้หรือยัง” ซึ่งเป็นจุดที่นักลงทุนรายย่อยเสียผลตอบแทนมากที่สุด

2.2 สมอเรือ: พันธบัตรระยะสั้น 10%

ส่วน 10% ไม่ได้มีไว้เพิ่มผลตอบแทน แต่มีไว้ให้ อยู่รอด ในช่วงที่หุ้นตกหนัก ถ้าทรัสต์ต้องถอนเงินปีละ 4% ของ portfolio เงินสำรอง 10% จะพอใช้ประมาณ 2.5 ปีโดยไม่ต้องขายหุ้นตอนราคาตก ตัวเลขนี้เป็นเลขคณิตล้วน ไม่ใช่ผลจาก simulation

ประเด็นสำคัญคือทั้งสองส่วนทำหน้าที่คนละอย่าง การถาม “ทำไมไม่ถือพันธบัตรมากกว่านี้” จึงต้องตอบด้วยคำถามกลับว่าผู้ลงทุนมีเวลากี่ปี และต้องถอนเงินเมื่อไร

3. สูตรจัด portfolio และเงื่อนไขการทดสอบ (Allocation Rule & Simulation Settings)

กฎของ portfolio มีบรรทัดเดียว: ถือหุ้นดัชนีเป็นสัดส่วน ww ของ portfolio และพันธบัตรระยะสั้น 1−w1-w ระหว่างปีปล่อยให้สัดส่วนลอยตามราคา และทุกสิ้นปีปรับกลับมาที่ ww อีกครั้ง มูลค่า portfolio ในแต่ละเดือนจึงเป็น

Vt=Vt−1(1+wt−1 rteq+(1−wt−1) rtbill),wt=w เมื่อ t mod 12=0V_t = V_{t-1}\left(1 + w_{t-1}\, r^{\text{eq}}_t + (1 - w_{t-1})\, r^{\text{bill}}_t\right), \qquad w_{t} = w \text{ เมื่อ } t \bmod 12 = 0

โดย w=0.9w = 0.9 สำหรับ 90/10, 0.60.6 สำหรับ 60/40 และ 1.01.0 สำหรับหุ้นล้วน ฟังก์ชันที่ใช้จริงในสคริปต์คือ

generate.pyPython
def portfolio(w_eq):
    """Annual rebalancing back to the target weight; returns the monthly wealth path starting at 1."""
    wealth, ve, vb = [1.0], w_eq, 1 - w_eq
    for m in range(n):
        ve *= 1 + equity[m]
        vb *= 1 + bills[m]
        total = ve + vb
        if (m + 1) % 12 == 0:
            ve, vb = total * w_eq, total * (1 - w_eq)
        wealth.append(total)
    return np.array(wealth)

เงื่อนไขทั้งหมดของการทดสอบอยู่ในตารางที่ 1 ข้อที่ต่างจากการทดสอบกับข้อมูลจริงมากที่สุดคือแถว “ข้อมูล”: ที่นี่ผลตอบแทนรายเดือนถูกสุ่มจาก distribution ที่กำหนดไว้ ไม่ใช่ราคาปิดของดัชนี

เงื่อนไข

รายละเอียด

ช่วงเวลา

20 ปี (240 เดือน) ความถี่รายเดือน

ข้อมูล

ข้อมูลจำลอง หุ้น: Student-t distribution (df 4) ปรับให้ค่าเฉลี่ย 7% ต่อปี standard deviation 16% ต่อปี; พันธบัตรระยะสั้น: 2% ต่อปีบวก noise เล็กน้อย; seed 42

เงินเริ่มต้น / สกุลเงิน

1 หน่วย ไม่มีสกุลเงินและไม่มีผลของอัตราแลกเปลี่ยน

ค่าธรรมเนียม / slippage / ภาษี

ไม่คิด (ตัวเลขทุกตัวจึงสูงกว่าที่ทำได้จริง)

สินทรัพย์

สองชนิด: “หุ้นดัชนี” และ “พันธบัตรระยะสั้น” ที่สุ่มอิสระต่อกัน

กฎเข้า–ออก / rebalancing

ถือตลอด rebalance กลับสัดส่วนเป้าหมายทุก 12 เดือน

portfolio ที่เปรียบเทียบ

90/10, 60/40, 100/0 (หุ้นล้วน)

risk-free rate ที่ใช้คำนวณ Sharpe และ Sortino

ค่าเฉลี่ยผลตอบแทนพันธบัตรใน simulation 1.99% ต่อปี

ตารางที่ 1: เงื่อนไขของ simulation สองสินทรัพย์ที่ใช้ตลอดบทความ ทุกค่าอ่านจาก output.json ที่สคริปต์เขียนออกมา

สคริปต์ฉบับเต็มอยู่ที่ scripts/articles/portfolio-90-10/generate.py รันซ้ำด้วย seed เดิมจะได้ตัวเลขเดิมทุกหลัก

4. ผลลัพธ์และการวิเคราะห์ (Results & Analysis)

Metric

90/10

60/40

100/0

ผลตอบแทนสะสม 20 ปี

226.5%

160.1%

249.7%

CAGR

6.1%

4.9%

6.5%

Standard deviation ต่อปี

15.2%

10.2%

16.9%

Max drawdown

-28.9%

-18.9%

-32.1%

ช่วง drawdown ยาวสุด (เดือน)

79

78

80

MAR (CAGR ÷ ขนาดของ MDD)

0.21

0.26

0.20

Sharpe (rf 1.99%)

0.33

0.33

0.34

Sortino

0.47

0.46

0.48

ผลตอบแทน 12 เดือนแย่สุด

-20.5%

-13.5%

-22.8%

สัดส่วนช่วง 12 เดือนที่ติดลบ

35%

33%

36%

ตารางที่ 2: metric ของสาม portfolio จาก simulation seed 42 ไม่หักต้นทุน (ข้อมูลจำลอง)

กราฟเส้นสามเส้นแสดงมูลค่า portfolio สะสม 20 ปี หุ้นล้วนจบสูงสุด 90/10 ตามมาติด ๆ และ 60/40 ต่ำกว่าอย่างชัดเจน
ภาพที่ 1: มูลค่า portfolio สะสมของ 90/10, 60/40 และหุ้นล้วน เริ่มที่ 1 หน่วย ตลอด 20 ปีของข้อมูลจำลอง

เส้น 90/10 กับหุ้นล้วนเดินเกาะกันเกือบตลอดทาง ส่วน 60/40 แยกออกตั้งแต่ปีแรก ๆ ภาพนี้สร้างด้วย Matplotlib จากเส้นทางมูลค่าในสคริปต์เดียวกัน

กราฟพื้นที่แสดง drawdown ของสาม portfolio หลุมลึกสุดของหุ้นล้วนและ 90/10 ใกล้เคียงกัน ส่วน 60/40 ตื้นกว่า แต่ทั้งสามใช้เวลาฟื้นตัวใกล้เคียงกัน
ภาพที่ 2: Drawdown จากจุดสูงสุดก่อนหน้าของสาม portfolio (ข้อมูลจำลอง seed 42)

ข้อค้นพบ

  1. ผลตอบแทน: CAGR ของหุ้นล้วน 6.5% สูงกว่า 90/10 ที่ 6.1% เพียงเล็กน้อย ขณะที่ 60/40 อยู่ที่ 4.9% ผลตอบแทนสะสมจึงเรียงเป็น 249.7%, 226.5% และ 160.1% การยอมแบ่ง 10% ไปพันธบัตรทำให้เสีย compound return ไปไม่มาก (Small Cost of the Anchor)

  2. ความลึกของหลุม: Max drawdown ของ 90/10 อยู่ที่ -28.9% เทียบกับ -32.1% ของหุ้นล้วน พันธบัตร 10% ลดความลึกได้เพียงราวหนึ่งในสิบของหลุม ซึ่งตรงกับสัดส่วนที่ถือ ถ้าอยากให้หลุมตื้นลงอย่างมีนัยสำคัญต้องไปทาง 60/40 ที่ -18.9%

  3. ความยาวของหลุม: ช่วง drawdown ยาวสุดของทั้งสาม portfolio อยู่ที่ 79, 78 และ 80 เดือน แทบไม่ต่างกัน สัดส่วนพันธบัตรเปลี่ยนความลึก แต่ไม่เปลี่ยน เวลา ที่ต้องรอ เพราะจังหวะเวลาถูกกำหนดโดยหุ้นซึ่งเป็นส่วนที่ผันผวน

  4. risk-adjusted return: Sharpe ของสาม portfolio อยู่ที่ 0.33, 0.33 และ 0.34 แทบเท่ากัน นี่ไม่ใช่เรื่องบังเอิญ ใน simulation พันธบัตรให้ผลตอบแทนเท่ากับ risk-free rate พอดี การผสมสินทรัพย์เสี่ยงกับ risk-free asset จึงเลื่อนไปตามเส้นตรงเดียวกัน (Capital Allocation Line) และไม่เปลี่ยน Sharpe ส่วน MAR ซึ่งวัดต่อความลึกของหลุมกลับให้ 60/40 สูงสุดที่ 0.26 เทียบกับ 0.21 และ 0.20

  5. ปีที่เลวร้าย: ช่วง 12 เดือนที่แย่ที่สุดของ 90/10 คือ -20.5% ใกล้กับหุ้นล้วนที่ -22.8% และประมาณ 35% ของช่วง 12 เดือนทั้งหมดติดลบ ใครที่ทนตัวเลขแบบนี้ไม่ไหวในปีแรก ๆ จะไม่ได้อยู่ถึงปีที่ 20

ข้อควรระวังที่สำคัญที่สุด: ตัวเลขเหล่านี้เป็นผลของสมมติฐานในตารางที่ 1 เปลี่ยน seed หรือเปลี่ยนค่าเฉลี่ยและ volatility ตัวเลขจะเปลี่ยนทุกตัว สิ่งที่คงอยู่คือความสัมพันธ์เชิงโครงสร้าง: สัดส่วนพันธบัตรลดความลึกของหลุมตามสัดส่วน ไม่ย่นเวลาฟื้นตัว และไม่เปลี่ยน Sharpe เมื่อพันธบัตรให้ผลเท่า risk-free rate

5. บทสรุป: 90/10 เหมาะกับใคร และไม่เหมาะกับใคร

  • ความเรียบง่ายคือกลไก ไม่ใช่จุดขาย กฎหนึ่งบรรทัดกับการ rebalance ปีละครั้งตัดการตัดสินใจเกือบทั้งหมดออกไป ซึ่งเป็นที่มาของความผิดพลาดส่วนใหญ่

  • เป็นการเดิมพันกับหุ้นเกือบเต็มตัว ใน simulation นี้ 90/10 ให้ผลตอบแทนและความเสี่ยงใกล้หุ้นล้วนมาก ใครที่คิดว่า “มีพันธบัตร 10% แล้วปลอดภัย” ควรดูภาพที่ 2 อีกครั้ง

  • สมอ 10% มีไว้ให้ไม่ต้องขายหุ้นตอนตก ไม่ได้มีไว้ลด volatility คุณค่าของมันอยู่ที่ cash flow ไม่ใช่ metric ในตารางที่ 2

  • ต้องมีเวลาและความอดทนเป็นสิบปี ช่วง drawdown ที่ยาวราวหกปีครึ่งใน simulation หมายความว่าผู้ลงทุนต้องทนเห็น portfolio ต่ำกว่าจุดสูงสุดเดิมเป็นเวลานาน

  • ไม่เหมาะกับคนที่ต้องใช้เงินก้อนภายใน 5–10 ปี หรือคนที่รู้ตัวว่าจะขายเมื่อ portfolio ติดลบเกิน 20% สำหรับกลุ่มนี้ 60/40 หรือสัดส่วนที่ระมัดระวังกว่าให้ MAR สูงกว่าใน simulation และสำคัญกว่านั้นคือมีโอกาสอยู่รอดจนถึงปลายทางมากกว่า

สัดส่วน 90/10 จึงไม่ใช่สูตรสำเร็จ แต่เป็นคำตอบของคำถามเฉพาะ: คนที่มีเวลายาว ไม่ต้องถอนเงินเร็ว และไม่อยากตัดสินใจ ควรทำอะไร Buffett ตอบคำถามนั้นให้ครอบครัวของเขา ผู้อ่านต้องตอบคำถามของตัวเองก่อนจึงจะรู้ว่าตัวเลข 90 ใช่สำหรับตนหรือไม่

หนังสือที่ช่วยศึกษาต่อ

รายละเอียดและข้อสังเกตรายเล่มอยู่ในหน้าหนังสือท้ายบทความ

แหล่งอ้างอิงและการทำซ้ำ

  • Berkshire Hathaway Inc., 2013 Annual Report, Chairman's Letter to Shareholders, หน้า 20 (เผยแพร่ 28 กุมภาพันธ์ 2014) ที่มาของคำแนะนำ 90/10

  • simulation, กราฟ และตัวเลขทุกตัว: scripts/articles/portfolio-90-10/generate.py (numpy, matplotlib เวอร์ชันตาม requirements.txt) seed 42 ผลเขียนลง public/articles/portfolio-90-10/output.json และบทความอ่านตัวเลขจากไฟล์นั้นโดยตรง

  • ความสัมพันธ์ระหว่างการผสมสินทรัพย์เสี่ยงกับ risk-free asset และ Sharpe ที่คงที่ ดูหัวข้อ Capital Allocation Line ในตำราการลงทุนระดับเบื้องต้นทั่วไป

แล้วพบกันในบทความต่อไปครับ

บทความนี้อ่านจบได้ในตัวเอง หนังสือด้านบนคือจุดต่อยอดสำหรับผู้ที่ต้องการศึกษาลึกขึ้น