ลองทำ Black-Litterman ด้วย Python
การทำ Portfolio optimization with Python
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
อ่านตอนอื่นๆได้ที่
- การคำนวณผลตอบแทนการลงทุนด้วย Python
- การหาความผันผวนของพอร์ตการลงทุนด้วย Python
- การหา Max Drawdown ด้วย Python
- การวัด การเบี่ยงเบนของผลตอบแทนด้วย Python
- การวัด SemiDeviation ด้วย Python
- การวัด VaR. และ CVaR. ด้วย Python
- รีวิวการใช้ ffn. ใน Python
- การหา Top Drawdown ด้วย Python
- การหาค่า Sharpe ratio ด้วย Python
- การหากลุ่มหลักรัพย์ที่เส้นประสิทธิภาพ Efficient Frontier ด้วย Python
- การหา shape ratio สูงสุดและเส้น CML ด้วย Python
- การสร้างมูลค่าตลาดแบบถ่วงน้ำหนักด้วย PYTHON
- ข้อจำกัดของการกระจายความเสี่ยงและการทำประกันพอร์ตการลงทุน
- การจำลอง ผลตอบแทนด้วย RANDOM WALK Generation และ Montecarlo simulation
- Sharpe Style Analysis
- Factor Investing ด้วย Python
- วิเคราะห์ ประเภทกองทุนรวมด้วย Python
- การทำ Portfolio optimization
- สร้างแนวรับแนวต้านวิเคราะห์หุ้นด้วย Python
- ลองทำ Black-Litterman ด้วย Python