ยินดีต้อนรับ!

การบริหารความเสี่ยงเชิงปริมาณด้วย Python

Dr. Jamsheed Shorish

Computational Economist

เกี่ยวกับฉัน

  • นักเศรษฐศาสตร์เชิงคำนวณ
  • เชี่ยวชาญด้าน:
    • การกำหนดราคาสินทรัพย์
    • เทคโนโลยีการเงิน ("FinTech")
    • การประยุกต์ใช้คอมพิวเตอร์ในเศรษฐศาสตร์และการเงิน
  • ผู้ร่วมสอน "การวิเคราะห์เศรษฐกิจของเศรษฐกิจดิจิทัล" ที่ ANU
  • Shorish Research (เบลเยียม): การประยุกต์ใช้ทางธุรกิจเชิงคำนวณ
การบริหารความเสี่ยงเชิงปริมาณด้วย Python

การบริหารความเสี่ยงเชิงปริมาณคืออะไร?

  • การบริหารความเสี่ยงเชิงปริมาณ: การศึกษา ความไม่แน่นอนที่วัดได้
  • ความไม่แน่นอน:
    • ผลลัพธ์ในอนาคตยังไม่เป็นที่ทราบ
    • ผลลัพธ์ส่งผลต่อการตัดสินใจวางแผน
  • การบริหารความเสี่ยง: ลดผลกระทบจากผลลัพธ์ที่ไม่พึงประสงค์
  • ความไม่แน่นอนที่วัดได้: ระบุปัจจัยเพื่อวัดความเสี่ยง
    • ตัวอย่าง: ประกันอัคคีภัย — ปัจจัยใดทำให้เกิดไฟไหม้ได้มากขึ้น?
  • คอร์สนี้: มุ่งเน้นความเสี่ยงที่เกี่ยวข้องกับ พอร์ตโฟลิโอทางการเงิน
การบริหารความเสี่ยงเชิงปริมาณด้วย Python

การบริหารความเสี่ยงและวิกฤตการเงินโลก

  • วิกฤตเศรษฐกิจครั้งใหญ่ (2007 - 2010)
    • การสูญเสียการเติบโตทั่วโลกมากกว่า 2 ล้านล้านดอลลาร์
    • สหรัฐอเมริกา: ความมั่งคั่งของครัวเรือนลดลงเกือบ 10 ล้านล้านดอลลาร์
    • ตลาดหุ้นสหรัฐฯ สูญเสียมูลค่าประมาณ 8 ล้านล้านดอลลาร์
  • วิกฤตการเงินโลก (2007-2009)
    • มูลค่าสินทรัพย์พื้นฐานเปลี่ยนแปลงในวงกว้าง
    • ความไม่แน่นอนอย่างมากเกี่ยวกับผลตอบแทนในอนาคต
    • ความผันผวนของผลตอบแทนสินทรัพย์สูง
    • การบริหารความเสี่ยงมีความสำคัญต่อความสำเร็จหรือความล้มเหลว
การบริหารความเสี่ยงเชิงปริมาณด้วย Python

ทบทวนสั้น ๆ: พอร์ตโฟลิโอทางการเงิน

  • พอร์ตโฟลิโอทางการเงิน
    • กลุ่มสินทรัพย์ที่มีผลตอบแทนในอนาคตไม่แน่นอน
    • หุ้น
    • พันธบัตร
    • การถือครองสกุลเงินต่างประเทศ ('forex')
    • ออปชันหุ้น
  • ความท้าทาย: วัดความเสี่ยงเพื่อบริหารความไม่แน่นอน
    • ตัดสินใจลงทุนอย่างเหมาะสมที่สุด
    • เพิ่มผลตอบแทนพอร์ตโฟลิโอสูงสุด ภายใต้ระดับความเสี่ยงที่ยอมรับได้
การบริหารความเสี่ยงเชิงปริมาณด้วย Python

การวัดผลตอบแทน

  • ผลตอบแทนพอร์ตโฟลิโอ: ผลรวมถ่วงน้ำหนักของผลตอบแทนสินทรัพย์แต่ละรายการ
    • ไลบรารีวิเคราะห์ข้อมูล Pandas
    • DataFrame prices
    • เมธอด .pct_change()
    • เมธอด .dot() ของ returns
prices = pandas.read_csv("portfolio.csv")

returns = prices.pct_change()
weights = (weight_1, weight_2, ...)
portfolio_returns = returns.dot(weights)
การบริหารความเสี่ยงเชิงปริมาณด้วย Python

การวัดความเสี่ยง

  • ความผันผวนของผลตอบแทนพอร์ตโฟลิโอ = ความเสี่ยง
  • คำนวณความผันผวนผ่าน เมทริกซ์ความแปรปรวนร่วม
  • ใช้เมธอด .cov() ของ DataFrame จาก returns แล้วปรับให้เป็นรายปี

 

 

covariance = returns.cov()*252

print(covariance)

ตัวอย่างเมทริกซ์ความแปรปรวนร่วมระหว่างสินทรัพย์ 4 รายการ

การบริหารความเสี่ยงเชิงปริมาณด้วย Python

การวัดความเสี่ยง

  • ความผันผวนของผลตอบแทนพอร์ตโฟลิโอ = ความเสี่ยง
  • คำนวณความผันผวนผ่าน เมทริกซ์ความแปรปรวนร่วม
  • ใช้เมธอด .cov() ของ DataFrame จาก returns แล้วปรับให้เป็นรายปี
  • แนวทแยงหลัก ของ covariance คือค่าความแปรปรวนของสินทรัพย์แต่ละรายการ  

   

covariance = returns.cov()*252

print(covariance)

ตัวอย่างเมทริกซ์ความแปรปรวนร่วมที่เน้นค่าความแปรปรวนบนแนวทแยงหลัก

การบริหารความเสี่ยงเชิงปริมาณด้วย Python

การวัดความเสี่ยง

  • ความผันผวนของผลตอบแทนพอร์ตโฟลิโอ = ความเสี่ยง
  • คำนวณความผันผวนผ่าน เมทริกซ์ความแปรปรวนร่วม
  • ใช้เมธอด .cov() ของ DataFrame จาก returns แล้วปรับให้เป็นรายปี
  • แนวทแยงหลัก ของ covariance คือค่าความแปรปรวนของสินทรัพย์แต่ละรายการ
  • แนวทแยงรอง ของ covariance คือค่าความแปรปรวนร่วมระหว่างสินทรัพย์
covariance = returns.cov()*252

print(covariance)

ตัวอย่างเมทริกซ์ความแปรปรวนร่วมที่เน้นค่าความแปรปรวนร่วมบนแนวทแยงรอง

การบริหารความเสี่ยงเชิงปริมาณด้วย Python

ความเสี่ยงของพอร์ตโฟลิโอ

  • ขึ้นอยู่กับ weights ของสินทรัพย์ในพอร์ตโฟลิโอ
  • ความแปรปรวนของพอร์ตโฟลิโอ $\sigma_p^2$ คือ $$ \sigma_p^2 := w^T \cdot \textnormal{Cov}_p \cdot w $$
  • การคูณเมทริกซ์สามารถคำนวณได้โดยใช้ตัวดำเนินการ @ ใน Python
  • โดยทั่วไปใช้ส่วนเบี่ยงเบนมาตรฐานแทนค่าความแปรปรวน
weights = [0.25, 0.25, 0.25, 0.25] # Assumes four assets in portfolio

portfolio_variance = np.transpose(weights) @ covariance @ weights
portfolio_volatility = np.sqrt(portfolio_variance)
การบริหารความเสี่ยงเชิงปริมาณด้วย Python

อนุกรมเวลาของความผันผวน

  • คำนวณความผันผวนของพอร์ตโฟลิโอตามช่วงเวลาได้เช่นกัน
  • ใช้ 'window' เพื่อคำนวณความผันผวนในช่วงเวลาที่กำหนด (เช่น สัปดาห์ หรือ 30 วัน)
  • Series.rolling() ใช้สร้าง window
  • สังเกต แนวโน้ม ความผันผวนและเหตุการณ์รุนแรงที่อาจเกิดขึ้น
windowed = portfolio_returns.rolling(30)

volatility = windowed.std()*np.sqrt(252) volatility.plot() .set_ylabel("Standard Deviation...")

กราฟ rolling window 30 วันของความผันผวนผลตอบแทนรายปี

การบริหารความเสี่ยงเชิงปริมาณด้วย Python

มาฝึกกันเถอะ!

การบริหารความเสี่ยงเชิงปริมาณด้วย Python

Preparing Video For Download...