ลองทำ Black-Litterman ด้วย Python

การทำ Portfolio optimization with Python

NUTHDANAI WANGPRATHAM
4 min readMar 24, 2021

Black-Litterman Model คือแบบจำลองสำหรับการทำ จัดสรรค์สินทรัพย์ลงทุน (asset allocation) ที่มีขั้นตอนในการนำมุมมองส่วนตัวของผู้ลงทุนต่อผลตอบแทนและความเสี่ยงในสินทรัพย์ที่ส่งผลต่อดุลยภาพของตลาด โดยถูกต่อยอดมาจากแนวคิดของ Markowitz มีต้นกำเนิดมาจากเอกสารการทำงานภายในของ Goldman Sachโดย Fischer Black และ Robert Litterman ในปี ค.ศ.1992 ถูกใช้ในการทำ Strategic Asset Allocation ที่เป็นการคำนวนน้ำหนักการลงทุนของพอร์ตโฟลิโอในสินทรัพย์หลายๆประเภท โดยมีการปรับสัดส่วนของพอร์ตโฟลิโอหรือที่เราเรียกกันว่าการทำ Rebalancing ตามช่วงเวลาต่างๆ

ขั้นตอนของ Black Litterman ใช้แบบจำลอง Bayesian ซึ่งจะลดผลตอบแทนที่คาดว่าจะได้รับจากมุมมองของนักลงทุนเกี่ยวกับผลตอบแทนของสินทรัพย์ที่มีต่อผลตอบแทนของสินทรัพย์โดยนัยของดุลยภาพของตลาด ขั้นตอนจะคำนวณชุดของผลตอบแทนที่คาดหวังซึ่งใช้ดุลยภาพของตลาด จากนั้นจะรวมกับผลตอบแทนโดยมุมมองของนักลงทุนเพื่อสร้างชุดของผลตอบแทนที่คาดหวัง 𝜇𝐵𝐿 และความแปรปรวนร่วมΣ𝐵𝐿.

นอกเหนือจากความน่าสนใจที่ชัดเจนของความสามารถในการรวมมุมมองของนักลงทุนแล้วยังสามารถนำ Black Litterman มาเพิ่มประสิทธิภาพในการทำ Porfolio optimization เป็นที่ทราบกันดีอยู่แล้วว่าขั้นตอนของการทำ Porfolio optimization ของ Markowitz นั้นมีความอ่อนไหวอย่างมากต่อข้อผิดพลาด(error)ในการประมาณค่าผลตอบแทนที่คาดหวังและ Covariances และข้อผิดพลาดของขั้นตอน Porfolio optimization Markowitz นี้ทำให้พอร์ตการลงทุนไม่เสถียรโดยมีน้ำหนักเปลี่ยนแปลงมากซึ่งแตกต่างอย่างรวดเร็วจากพอร์ตการลงทุนดุลยภาพของตลาดแม้จะมีการเปลี่ยนแปลงเล็กน้อยในตัวแปร อย่างไรก็ตามพารามิเตอร์ด้านหลัง 𝜇𝐵𝐿, Σ𝐵𝐿 ที่คำนวณโดยขั้นตอน Black Litterman นั้นได้มาจากพอร์ตโฟลิโอของตลาดดังนั้นจึงเป็นข้อมูลที่นำไปใช้ได้จริงมากขึ้นสำหรับวัตถุประสงค์ในการเพิ่มประสิทธิภาพพอร์ตโฟลิโอ โดยเฉพาะอย่างยิ่งเมื่อ 𝜇𝐵𝐿,Σ𝐵𝐿 ตามที่ใช้เป็นข้อมูลเข้าของ Markowitz Optimizer พวกเขาจะสร้างน้ำหนักที่เหมาะสมซึ่งแตกต่างจากพอร์ตการลงทุนของตลาดในรูปแบบที่ จำกัด และเฉพาะในขอบเขตของความเชื่อมั่นที่นักลงทุนแสดงออกในมุมมอง ด้วยเหตุนี้พอร์ตการลงทุนที่ได้รับการปรับให้เหมาะสมจึงเป็นพอร์ตการลงทุนที่มีเสถียรภาพมากกว่าการเพิ่มประสิทธิภาพ Markowitz โดยใช้การประมาณตัวอย่าง ในที่สุดด้วยพารามิเตอร์ที่ตั้งไว้อย่างเหมาะสมพอร์ตโฟลิโอ Markowitz คำนวณจากพารามิเตอร์ Black-Litterman เมื่อไม่มีมุมมองของนักลงทุนแบบอัตนัยที่ตรงกันและสามารถกู้คืนพอร์ตการลงทุนดุลยภาพของตลาดได้

สมการ Black Litterman

สมมุติว่าเรามีสินทรัพย์เป็นจำนวน 𝑁 , และมุมมองการลงทุนเป็น 𝐾 อินพุตสำหรับโพรซีเดอร์มีสองชุด อินพุตชุดแรกเกี่ยวข้องกับพารามิเตอร์ของตลาดซึ่ง ได้แก่ :

ตัวแปรบ้างตัวสามารถกำหนดเองได้ตัวอย่างเช่นเราสามารถกำหนดค่ากลัวความเสี่ยง 𝛿=2.5 หรือ 𝛿=2.14 ก็ได้ หรือจะกำหนดให้ 𝛿 เท่ากับความเสี่ยงตลาดซึ่งคำนวณ xcc จาก 𝜇𝑀 และ 𝜎2𝑀 ในการประมาณค่ากลางกับความผันผวนของผลตอบแทนจากพอร์ตการลงทุน

บ้างครั้งเราไม่ใช้ 𝜏 โดยการกำหนด 𝜏 เท่ากับ 1 หรือ ปรับเทียบโมเดลเป็น 𝑡𝑎𝑢 ในแบบจำลอง Black and Litterman ดั่งเดิมแนะนำให้ใช้ตัวเล็กน้อยๆเช่น 𝜏=1/𝑇 เมื่อ T คือ จำนวนช่วงเวลาของข้อมูลที่ใช้

ตัวแปรชุดที่สองที่ขั้นตอนต้องการคือการแสดงมุมมองของนักลงทุน โดยกำหนดผ่าน:

มุมมองแสดงใน 𝑄 และ 𝑃 ดังนี้:

ถ้า k คือจำนวนมุมมองทั้งหมดแทนด้วย 𝑄𝑘 และผลตอบแทนที่คาดหวังของสินทรัพย์ Kแทนด้วย 𝑃𝑘𝑖 ถึง 1 และองค์ประกอบอื่นทั้งหมดของแถวของ k ใน P คือ 0

ถ้ามุมมอง k มีความสัมพันธ์กับ k ระหว่างสินทรัพย์ 𝑖 และ 𝑗 แสดงโดย 𝑄𝑘 คือส่วนต่างของผลตอบแทนระหว่างสินทรัพย์ 𝑖 และ 𝑗 เป็น 𝑃𝑘𝑖 เป็น −1 และสำหรับ underperforming asset, 𝑃𝑘𝑗 เป็น +1 สำหรับองค์ประกอบอื่นของ row 𝑘 ใน 𝑃 เป็็น 0 Ω เเทนค่าความไม่แน่นอนที่ระบุหรืออนุมานจากผู้ใช้หรือจากข้อมูล

ความไม่แน่นอนของมุมมอง Ω ถูกกำหนดโดยผู้ใช้ หรือข้อมูลตลาดหรือจากตัวแปรของ

The Master Formula

ขั้นตอนแรกของกระบวนการคือreverse-optimization ที่อนุมานเวกเตอร์ผลตอบแทน 𝜋 ที่บอกเป็นอนุมานโดยน้ำหนักสมดุล𝑤โดยใช้สูตร:

ากนั้นสามารถหาผลตอบแทนและ covariances ได้จาก Black-Litterman Master Formula ดังนี้

เริ่มที่ Colab กันเลย

IMPORT LIBERLY

สร้างฟังก์ชันเวกเตอร์คอลัมน์เพื่อให้สามารถคูณเวกเตอร์คอลัมน์นั้นง่าย เพราะสมการส่วนใหญ่เป็นเวกเตอร์หรือสมการเมทริกซ์

Import Data

ind_return = pd.read_csv("https://raw.githubusercontent.com/nutdnuy/Portfolio_optimization_with_Python/master/data/ind49_m_ew_rets.csv", header=0, index_col=0)/100ind_return.index = pd.to_datetime(ind_return.index, format="%Y%m").to_period('M')

ขั้นตอนแรกในกระบวนการ Black Litterman คือการทำวิศวกรรมย้อนกลับเวกเตอร์ที่ส่งคืนค่า 𝑝𝑖 จากชุดน้ำหนักพอร์ตโฟลิโอ 𝑤.

หากนักลงทุนไม่มีวิธีเฉพาะเจาะจงในการหาปริมาณที่เกี่ยวข้องอย่างชัดเจนกับมุมมองในเมทริกซ์ 𝑂𝑚𝑒𝑔𝑎 เราอาจทำให้สมมติฐานที่ง่ายขึ้นว่า 𝑂𝑚𝑒𝑔𝑎 เป็นสัดส่วนกับความแปรปรวนของ ก่อนหน้านี้

โดยเฉพาะอย่างยิ่งพวกเขาแนะนำว่า:

เราใช้ฟังก์ชันนี้เพื่อคำนวณผลตอบแทนที่คาดหวัง posterior ดังนี้

ลองเลือก ’Agric’,’Food ‘,’Smoke’,’Rtail’ เพื่อหาผลตอบแทนที่คาดหวัง

Max Sharpe Ratio (MSR) น้ำหนักพอร์ตการลงทุนสามารถคำนวณได้ในรูปแบบที่ชัดเจนหากไม่มีข้อจำกัดเกี่ยวกับสัดส่วน สัดส่วนจะถูกกำหนดโดย

โดยที่ 𝜇𝑒 คือเวกเตอร์ของผลตอบแทนส่วนเกินที่คาดไว้และ Σ คือvariance-covariance matrix.

เราสามารถหาสัดส่วนการลงทุนที่ดีที่สุดได้ดังนี้

เราลองใช้วิธี Black Litterman ให้คำนวณหา Ω จะได้ว่า:

tickers = ['Agric','Food ','Smoke','Rtail'# Absolute view 1: INTC will return 2%# Absolute view 2: PFE will return 4%q = pd.Series({'Agric': 0.07, 'Food ': 0.04, 'Smoke': 0.04, 'Rtail': 0.05})# The Pick Matrix# For View 2, it is for PFEp = pd.DataFrame([# For View 1, this is for INTC{'Agric': 1, 'Food ': 0, 'Smoke': 0, 'Rtail': 0},# For View 2, it is for PFE{'Agric': 0, 'Food ': 1, 'Smoke': 0, 'Rtail': 0},# For View 3,{'Agric': 0, 'Food ': 0, 'Smoke': 1, 'Rtail': 0},# For View 4,{'Agric': 0, 'Food ': 0, 'Smoke': 0, 'Rtail': 1}])# Find the Black Litterman Expected Returnsbl_mu, bl_sigma = bl(w_prior=pd.Series({'Agric': .30, 'Food ': 0.25, 'Smoke': 0.20, 'Rtail': 0.25}), sigma_prior=s, p=p, q=q)# Black Litterman Implied Mubl_mu

posterior returns จะถูกสร้างจากผลตอบแทนตลาดและผลตอบแทนที่นักลงทุนคาดหวัง

คำถามคือน้ำหนักเหล่านี้มีแนวโน้มที่จะให้พอร์ตการลงทุนที่เป็นจริงมากขึ้นหรือไม่? เพื่อตอบคำถามนั้นเราจัดหาผลตอบแทนที่คาดหวังของ Black Litterman และเมทริกซ์ความแปรปรวนร่วมให้กับเครื่องมือเพิ่มประสิทธิภาพ:

เราเห็นว่าสัดส่วนการลงทุนใกล้เคียงใกล้กับ optimization model

ในทางกลับกันนํ้าหนักการลงทุนก็มีส่วนในการกำหนัดสัดส่วนการลงทุนพอร์ตการลงทุน

Relative Views

ในตัวอย่างนี้เราตรวจสอบมุมมองสัมพัทธ์ เรายึดติดกับตัวอย่างหุ้น 2 ตัวที่เรียบง่ายของเรา โปรดจำไว้ว่าผลตอบแทนที่คาดว่าจะได้รับจาก Cap-Weighted implied expected returns คือ:

เราจะเห็นว่าผลตอบแทนที่คาดหวังของ Black Litterman นั้นเป็นการผสมผสานระหว่าง cap-weight implied weights และมุมมองของนักลงทุน ประสิทธิภาพที่เหนือกว่าของ Intel ในimplied returns

ดูเหมือนเป็นน้ำหนักที่สมเหตุสมผลและแสดงให้เห็นถึงพลังของการใช้ขั้นตอน Black Litterman

NOTE BOOK

อ่านตอนอื่นๆได้ที่

  1. การคำนวณผลตอบแทนการลงทุนด้วย Python
  2. การหาความผันผวนของพอร์ตการลงทุนด้วย Python
  3. การหา Max Drawdown ด้วย Python
  4. การวัด การเบี่ยงเบนของผลตอบแทนด้วย Python
  5. การวัด SemiDeviation ด้วย Python
  6. การวัด VaR. และ CVaR. ด้วย Python
  7. รีวิวการใช้ ffn. ใน Python
  8. การหา Top Drawdown ด้วย Python
  9. การหาค่า Sharpe ratio ด้วย Python
  10. การหากลุ่มหลักรัพย์ที่เส้นประสิทธิภาพ Efficient Frontier ด้วย Python
  11. การหา shape ratio สูงสุดและเส้น CML ด้วย Python
  12. การสร้างมูลค่าตลาดแบบถ่วงน้ำหนักด้วย PYTHON
  13. ข้อจำกัดของการกระจายความเสี่ยงและการทำประกันพอร์ตการลงทุน
  14. การจำลอง ผลตอบแทนด้วย RANDOM WALK Generation และ Montecarlo simulation
  15. Sharpe Style Analysis
  16. Factor Investing ด้วย Python
  17. วิเคราะห์ ประเภทกองทุนรวมด้วย Python
  18. การทำ Portfolio optimization
  19. สร้างแนวรับแนวต้านวิเคราะห์หุ้นด้วย Python
  20. ลองทำ Black-Litterman ด้วย Python

Sign up to discover human stories that deepen your understanding of the world.

--

--

NUTHDANAI WANGPRATHAM
NUTHDANAI WANGPRATHAM

Written by NUTHDANAI WANGPRATHAM

I am a learner and have a multipotential life. You can contact me at nutdnuy@gmail.com

No responses yet

Write a response