เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

ปรับแต่งข้อจำกัดและวัตถุประสงค์

ในแบบฝึกหัดนี้ เราตั้งสมมติฐานว่าการปรับแต่งข้อจำกัดและ/หรือวัตถุประสงค์จะช่วยให้ประสิทธิภาพดีขึ้น ดังนั้นจะเพิ่มวัตถุประสงค์แบบ risk budget เพื่อกำหนดสัดส่วนการมีส่วนร่วมต่อความเสี่ยง (percentage contribution to risk) ขั้นต่ำและสูงสุดของแต่ละสินทรัพย์ โดยต่อยอดจาก portfolio specification ที่สร้างไว้แล้ว ปัญหา optimization นี้มีความซับซ้อนมากขึ้น จึงต้องใช้ global solver ซึ่งจะใช้ random portfolios เป็นวิธีการ optimize

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

การวิเคราะห์พอร์ตโฟลิโอระดับกลางใน R

ดูคอร์ส

คำแนะนำการฝึกหัด

  • เพิ่มวัตถุประสงค์แบบ risk budget ชื่อ risk_budget ลงใน port_spec โดยกำหนดให้ความเสี่ยงวัดจาก standard deviation ตั้งค่าสัดส่วนความเสี่ยงขั้นต่ำที่ 5% และสูงสุดที่ 10%
  • รันการ optimize แบบ rebalancing รายไตรมาส โดยตั้งค่า training period และ rolling window ให้ใช้ข้อมูล 5 ปี แล้วกำหนดผลลัพธ์ให้กับตัวแปรชื่อ opt_rebal_rb
  • แสดงกราฟน้ำหนัก (weights)
  • แสดงกราฟสัดส่วนการมีส่วนร่วมต่อความเสี่ยงของแต่ละองค์ประกอบ (component percentage contribution to risk)
  • คำนวณผลตอบแทนของพอร์ตโฟลิโอโดยใช้ Return.portfolio() แล้วกำหนดผลลัพธ์ให้กับตัวแปรชื่อ returns_rb

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ

ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์


# Add a risk budge objective
port_spec <- add.objective(portfolio = ___, 
                           type = ___, 
                           name = ___, 
                           min_prisk = ___, 
                           max_prisk = ___)

# Run the optimization
opt_rebal_rb <- optimize.portfolio.rebalancing(R = ___, 
                                               portfolio = ___, 
                                               optimize_method = "random", rp = rp,
                                               trace = TRUE,
                                               rebalance_on = ___, 
                                               training_period = ___,
                                               rolling_window = ___)

# Chart the weights


# Chart the percentage contribution to risk
chart.RiskBudget(___, match.col = "StdDev", risk.type = ___)

# Compute the portfolio returns
returns_rb <- Return.portfolio(R = ___, weights = ___)
colnames(returns_rb) <- "risk_budget"
แก้ไขและรันโค้ด