การ Optimization แบบช่วงเวลาเดียว
มีฟังก์ชันสำหรับรัน optimization อยู่ 2 ฟังก์ชัน ได้แก่ optimize.portfolio() และ optimize.portfolio.rebalancing() แบบฝึกหัดนี้จะเน้นการ optimization แบบช่วงเวลาเดียว ส่วนแบบฝึกหัดถัดไปจะใช้ optimize.portfolio.rebalancing() สำหรับการ optimization แบบปรับสมดุลตามรอบ optimize.portfolio() รองรับการ optimization แบบช่วงเวลาเดียว อาร์กิวเมนต์หลักได้แก่ R สำหรับผลตอบแทนของสินทรัพย์, portfolio สำหรับออบเจกต์ที่กำหนดสเปกพอร์ตโฟลิโอ และ optimize_method สำหรับระบุวิธีการ optimization ที่ใช้แก้ปัญหา ในหลายกรณี การกำหนด trace = TRUE จะเป็นประโยชน์ เนื่องจากจะจัดเก็บข้อมูลเพิ่มเติมในแต่ละรอบการวนซ้ำ/ทดลองของการ optimization
วิธีการ optimization ที่รองรับมีดังนี้:
DEoptim: Differential evolutionrandom: Random portfoliosGenSA: Generalized Simulated Annealingpso: Particle swarm optimizationROI: R Optimization Infrastructure สำหรับ linear และ quadratic programming solvers
ควรเลือกวิธีการ optimization ตามประเภทของปัญหาที่กำลังแก้ไข ตัวอย่างเช่น ปัญหาที่สามารถกำหนดในรูปแบบ quadratic programming ควรแก้ด้วย quadratic programming solver ในขณะที่ปัญหาแบบ non-convex ควรแก้ด้วย global solver เช่น DEoptim
ในแบบฝึกหัดนี้ จะกำหนดปัญหา portfolio optimization เพื่อให้ได้ผลตอบแทนเฉลี่ยสูงสุด และลด standard deviation ของพอร์ตโฟลิโอให้น้อยที่สุด โดยใช้ standard deviation risk budget ที่กำหนดให้เปอร์เซ็นต์ความเสี่ยงต่ำสุดอยู่ที่ 5% และสูงสุดอยู่ที่ 10% ภายใต้ข้อจำกัดการลงทุนเต็มจำนวนและการถือครองสินทรัพย์เชิงบวกเท่านั้น เนื่องจาก risk budget objective ต้องใช้ global solver ปัญหานี้จึงจะถูกแก้ด้วย random portfolios โดยชุด random portfolios ที่ชื่อ rp ถูกสร้างขึ้นโดยใช้ 500 permutations สำหรับแบบฝึกหัดนี้
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การวิเคราะห์พอร์ตโฟลิโอระดับกลางใน R
คำแนะนำการฝึกหัด
สเปกพอร์ตโฟลิโอถูกสร้างไว้แล้วและตั้งชื่อว่า port_spec นอกจากนี้ใน workspace ยังมีข้อมูลผลตอบแทน asset_returns อยู่ด้วย
- รัน optimization แบบช่วงเวลาเดียวโดยกำหนด
traceเป็นTRUEและใช้"random"เป็นวิธีการ optimization จากนั้นกำหนดผลลัพธ์ของการ optimization ให้กับตัวแปรชื่อopt - แสดงผลลัพธ์ของการ optimization
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# Run a single period optimization using random portfolios as the optimization method
opt <- optimize.portfolio(R = ___, portfolio = ___, optimize_method = ___, rp = rp, trace = TRUE)
# Print the output of the single-period optimization