นำโมเดล GARCH ที่ผ่านการตรวจสอบแล้วไปใช้งานจริง

GARCH Models in R

Kris Boudt

Professor of finance and econometrics

การนำไปใช้งานจริง

การกระจายของผลตอบแทนรายวันแต่ละปี

GARCH Models in R

ฟังก์ชันใหม่

  • ใช้ ugarchfilter() เพื่อวิเคราะห์พลวัตล่าสุดของค่าเฉลี่ยและความผันผวน
  • ใช้ ugarchforecast() กับออบเจกต์ ugarchspec (แทนออบเจกต์ ugarchfit()) เพื่อพยากรณ์ค่าเฉลี่ยและความผันผวนในอนาคต
GARCH Models in R

ตัวอย่างกับผลตอบแทน MSFT

  • msftret: ผลตอบแทนรายวันระหว่างปี 1999–2017
  • สมมติว่าการ fit โมเดลใช้ข้อมูลผลตอบแทนถึงสิ้นปี 2010
  • นำโมเดลนี้มาใช้ ณ สิ้นปี 2017 เพื่อวิเคราะห์พลวัตความผันผวนในอดีตและพยากรณ์ความผันผวนในอนาคต
GARCH Models in R

ขั้นตอนที่ 1: กำหนด specification ของโมเดลสุดท้าย

Fit โมเดลที่ดีที่สุดโดยใช้ msftret จนถึงสิ้นปี 2010:

# Specify AR(1)-GJR GARCH model with skewed student t distribution
garchspec <- ugarchspec(mean.model = list(armaOrder = c(1,0)),
 variance.model = list(model = "gjrGARCH"), distribution.model = "sstd")
# Estimate the model
garchfit <- ugarchfit(data = msftret["/2010-12"], spec = garchspec)

กำหนด progarchspec เป็น specification ที่จะใช้งานจริง แล้วใช้คำสั่ง setfixed(progarchspec) <- as.list(coef(garchfit)):

progarchspec <- garchspec
setfixed(progarchspec) <- as.list(coef(garchfit))
GARCH Models in R

ขั้นตอนที่ 2: วิเคราะห์พลวัตค่าเฉลี่ยและความผันผวน

ใช้ฟังก์ชัน ugarchfilter():

garchfilter <- ugarchfilter(data = msftret, spec = progarchspec)
plot(sigma(garchfilter))                                

การกระจายของผลตอบแทนรายวันแต่ละปี

GARCH Models in R

ขั้นตอนที่ 3: พยากรณ์ผลตอบแทนในอนาคต

garchforecast <- ugarchforecast(data = msftret,
                                fitORspec = progarchspec, 
                                n.ahead = 10) # Make predictions for next ten days
cbind(fitted(garchforecast), sigma(garchforecast))
       2017-12-29 2017-12-29
T+1  0.0004781733 0.01124870
T+2  0.0003610470 0.01132550
T+3  0.0003663683 0.01140171
T+4  0.0003661265 0.01147733
T+5  0.0003661375 0.01155238
T+6  0.0003661370 0.01162688
T+7  0.0003661371 0.01170083
T+8  0.0003661371 0.01177424
T+9  0.0003661371 0.01184712
T+10 0.0003661371 0.01191948
GARCH Models in R

การนำไปใช้ในการจำลอง

แทนที่จะนำโมเดลทั้งหมดไปวิเคราะห์ผลตอบแทนที่สังเกตได้ สามารถใช้โมเดลเพื่อจำลอง log-return เทียมได้:

$$ r_{t} = \log(P_{t}) - \log(P_{t-1}) $$

เป็นประโยชน์ในการประเมินความสุ่มของผลตอบแทนในอนาคตและผลกระทบต่อราคา เนื่องจากราคาในอนาคตเท่ากับ:

$$ P_{t + h} = P_{t} \exp(r_{t + 1} + r_{t + 2} + \ldots + r_{t + h}) $$

GARCH Models in R

ขั้นตอนที่ 1: ปรับเทียบโมเดลสำหรับการจำลอง

ใช้ log-return ในการ estimation

# Compute log returns
msftlogret <- diff(log(MSFTprice))[-1]

Estimate โมเดลและกำหนดพารามิเตอร์ให้กับโมเดลสำหรับการจำลอง

garchspec <- ugarchspec(mean.model = list(armaOrder = c(1, 0)),
                        variance.model = list(model = "gjrGARCH"),
                        distribution.model = "sstd")
# Estimate the model
garchfit <- ugarchfit(data = msftlogret, spec = garchspec)

# Set that estimated model as the model to be used in the simulation
simgarchspec <- garchspec
setfixed(simgarchspec) <- as.list(coef(garchfit))
GARCH Models in R

ขั้นตอนที่ 2: รันการจำลองด้วย `ugarchpath()`

การจำลองด้วยฟังก์ชัน ugarchpath() ต้องกำหนด:

  • spec : โมเดล GARCH ที่ระบุครบถ้วน
  • m.sim : จำนวนอนุกรมเวลาของผลตอบแทนจำลองที่ต้องการ
  • n.sim: จำนวนการสังเกตในอนุกรมเวลาจำลอง (เช่น 252)
  • rseed : ตัวเลขใดก็ได้สำหรับกำหนด seed ในการสร้างอนุกรมจำลอง (จำเป็นสำหรับ reproducibility)
simgarch <- ugarchpath(spec = simgarchspec, m.sim = 4,
                       n.sim = 10 * 252, rseed = 12345)
GARCH Models in R

ขั้นตอนที่ 3: วิเคราะห์ผลตอบแทนจำลอง

เมธอด fitted() ให้ผลตอบแทนจำลอง:

simret <- fitted(simgarch)
plot.zoo(simret) 

ผลตอบแทนจำลอง

GARCH Models in R

การวิเคราะห์ความผันผวนจำลอง

plot.zoo(sigma(simgarch))

ความผันผวนจำลอง

GARCH Models in R

การวิเคราะห์ราคาจำลอง

วาดกราฟการจำลอง 4 ชุดของราคาหุ้น 10 ปี โดยกำหนดราคาเริ่มต้นที่ 1:

simprices <- exp(apply(simret, 2, "cumsum"))
matplot(simprices, type = "l", lwd = 3)

ราคาจำลอง

GARCH Models in R

ฝึกใช้ `setfixed()`, `ugarchfilter()`, `ugarchforecast()` และ `ugarchpath()` กันเลย

GARCH Models in R

Preparing Video For Download...