تحلیل قیمت سهام در زبان R — راهنمای کاربردی

۱۱۸ بازدید
آخرین به‌روزرسانی: ۱۷ تیر ۱۴۰۲
زمان مطالعه: ۳ دقیقه
تحلیل قیمت سهام در زبان R — راهنمای کاربردی

«تحلیل قیمت سهام» (Stock Market Analysis) از جمله موضوعات داغ روز در حوزه «داده‌کاوی» (Data Mining) و «تحلیل داده» (Data Analysis) به شمار می‌آید. در این مطلب، تحلیل قیمت سهام با استفاده از زبان برنامه‌نویسی R انجام شده است. از «ماتریس واریانس-کواریانس» (Variance-Covariance Matrix) برای نشان دادن واریانس یک متغیر مشخص (قطری) استفاده می‌شود، در حالی که ماتریس کواریانس نشانگر کواریانس بین ترکیب کاملی از متغیرها است.

دلیل استفاده از ماتریس واریانس-کواریانس برای تحلیل قیمت سهام

«ماتریس واریانس-کواریانس» هنگامی که بحث از تحلیل «نوسان» (volatility) بین عناصر یک گروه از داده‌ها می‌شود گزینه‌ای مفید محسوب می‌شود. برای مثال، هنگامی که صحبت از تحلیل «بازده پورتفولیو» (portfolio returns) می‌شود، ماتریس واریانس-کوواریانس دارای کاربردهای قابل توجهی است.

اگر چندین دارایی با کواریانس بالا در یک پورتفولیو قرار بگیرند، نشانگر ریسک بالا است. این امر نشان می‌دهد که دارایی‌های گوناگون با نوسان بالا هم‌زمان تغییر می‌کنند و این همان چیزی است که سرمایه‌گذاران معمولا قصد اجتناب از آن را دارند.

از سوی دیگر، انتخاب دارایی‌هایی که دارای کواریانس منفی هستند برای تنوع بیشتر پورتفولیو پذیرفته است زیرا نوسان دارایی‌ها به طور هم‌زمان به وقوع نمی‌پیوندد.

تولید ماتریس واریانس-کواریانس در R

ابتدا، کتابخانه‌های مورد نیاز نصب می‌شوند.

1#Install Packages
2install.packages("corpcor")
3install.packages("tseries")
4install.packages("quantmod")

سپس، کتابخانه‌های tseries ،corpcor و quantmod در محیط بارگذاری می‌شوند.

1#Load libraries
2library(corpcor)
3library(tseries)

به منظور تامین اهداف این ماتریس واریانس-کواریانس، داده‌های سهام با quantmod به منظور انجام تحلیل پنج سهامی که در ادامه بیان شده استریم (Stream) می‌شوند.

  • AAPL
  • CBS
  • EFX
  • GOOGL
  • VZ

اکنون، به موارد زیر نیاز است:

  1. دانلود کردن قیمت‌های سهام مرتبط برای ۳۰ روز گذشته
  2. تبدیل کردن به بازده‌ روزانه با مشاهده سوابق و تفاوت روزانه برای هر سهام، برای محاسبه ترکیب‌ها
1> #Quantmod
2> aapl = getSymbols("AAPL",type="xts")
3> cbs = getSymbols("CBS",type="xts")
4> efx = getSymbols("EFX",type="xts")
5> googl = getSymbols("GOOGL",type="xts")
6> vz = getSymbols("VZ",type="xts")

اکنون، این موارد درون دیتافریم‌ها ذخیره می‌شوند و تفاوت سوابق را نشان می‌دهند.

1> #Store within dataframes
2> aapl=data.frame(tail(AAPL$AAPL.Close,30))
3> cbs=data.frame(tail(CBS$CBS.Close,30))
4> efx=data.frame(tail(EFX$EFX.Close,30))
5> googl=data.frame(tail(GOOGL$GOOGL.Close,30))
6> vz=data.frame(tail(VZ$VZ.Close,30))
7
8> #Logs and differences
9> aapl<-diff(log(aapl$AAPL.Close),1)
10> cbs<-diff(log(cbs$CBS.Close),1)
11> efx<-diff(log(efx$EFX.Close),1)
12> googl<-diff(log(googl$GOOGL.Close),1)
13> vz<-diff(log(vz$VZ.Close),1)

سپس، هر سهام در یک دیتافریم که portfolio نامیده شده ترکیب می‌شوند.

1> portfolio <- data.frame(aapl, cbs, efx, googl, vz)

اکنون، باید یک ماتریس کواریانس ۵×۵ ساخته شود.

1> #Range Names
2> range.names = c("AAPL", "CBS", "EFX", "GOOGL", "VZ")
3> names(portfolio) = range.names
4> covmatrix = matrix(c(cov(portfolio)),
5+                 nrow=5, ncol=5)
6> dimnames(covmatrix) = list(range.names, range.names)
7> 
8> #Covariance matrix
9> covmatrix
10               AAPL           CBS          EFX         GOOGL            VZ
11AAPL   5.821228e-05 -4.240955e-06 3.545054e-05  6.099968e-05  4.733450e-07
12CBS   -4.240955e-06  2.778983e-04 4.656228e-05  1.597556e-05 -2.651646e-05
13EFX    3.545054e-05  4.656228e-05 2.230373e-04  2.608622e-05  2.325623e-05
14GOOGL  6.099968e-05  1.597556e-05 2.608622e-05  1.613921e-04 -7.482914e-06
15VZ     4.733450e-07 -2.651646e-05 2.325623e-05 -7.482914e-06  1.313256e-04

خروجی بالا حاکی از آن است که نوسان قیمت‌ها هم‌زمان به وقوع می‌پیوندد. برای مثال، می‌توان مشاهده کرد که نوسان بین AAPL و VZ به طور قابل ملاحظه‌ای کمتر از مقدار موجود بین AAPL و GOOGL است، زیرا دو مورد دوم هر دو سهام فناوری هستند.

برآورد انقباضی کواریانس

این مساله همیشه وجود دارد که اگر مشاهدات بسیار کمی در داده‌ها وجود داشته باشد (که مسلما با توجه به اینکه در اینجا از ۳۰ روز از داده‌ها استفاده می‌شود اینچنین است)، ماتریس کواریانس تخمین‌های کواریانس غیر قابل اعتماد خواهد بود.

برای اصلاح این موضوع، می‌توان از چیزی که «برآورد انقباضی» (shrinkage estimate) کواریانس نامیده می‌شود استفاده کرد. این برآوردگر با حصول اطمینان از اینکه ماتریس کواریانس مثبت قطعی است کار می‌کند. به عبارت دیگر، جایی که همه ویژه بردارها واقعی و مثبت هستند. هنگامی که ماتریس کواریانس منقبض می‌شود، خروجی زیر حاصل می‌شود.

1> #Shrinkage estimate of covariance
2> cov.shrink(covmatrix)
3Estimating optimal shrinkage intensity lambda.var (variance vector): 1
Estimating optimal shrinkage intensity lambda (correlation matrix): 0.8531 

               AAPL           CBS           EFX         GOOGL            VZ
AAPL   4.388321e-09 -3.435343e-10  4.139977e-11  5.105568e-10 -2.569910e-10
CBS   -3.435343e-10  4.388321e-09  1.561082e-11 -1.523166e-10 -3.626202e-10
EFX    4.139977e-11  1.561082e-11  4.388321e-09 -1.550852e-10 -5.283354e-11
GOOGL  5.105568e-10 -1.523166e-10 -1.550852e-10  4.388321e-09 -3.192974e-10
VZ    -2.569910e-10 -3.626202e-10 -5.283354e-11 -3.192974e-10  4.388321e-09
attr(,"lambda")
[1] 0.853093
attr(,"lambda.estimated")
[1] TRUE
attr(,"class")
[1] "shrinkage"
attr(,"lambda.var")
[1] 1
attr(,"lambda.var.estimated")
[1] TRUE

ماتریس همبستگی

هنگامی که اطمینان حاصل شد که ماتریس کواریانس قطعی مثبت است، می‌توان آن را به ماتریس همبستگی تبدیل کرد، در واقع تعیین افزونه‌ای برای مواردی که بازده به جای نوسانات با هم حرکت می‌کنند انجام می‌شود.

1> #Transform covariance to correlation matrix
2> cov2cor(covmatrix)
3              AAPL         CBS       EFX       GOOGL           VZ
4AAPL   1.000000000 -0.03334367 0.3111192  0.62933100  0.005413721
5CBS   -0.033343673  1.00000000 0.1870262  0.07543487 -0.138802692
6EFX    0.311119193  0.18702623 1.0000000  0.13749322  0.135886379
7GOOGL  0.629331001  0.07543487 0.1374932  1.00000000 -0.051399037
8VZ     0.005413721 -0.13880269 0.1358864 -0.05139904  1.000000000

نتیجه‌گیری

در این راهنما، چگونگی استریم قیمت‌های سهام با quantmod و ساخت یک ماتریس کواریانس با quantmod آموزش داده شد.

همچنین، چگونگی انقباض یک ماتریس برای حصول اطمینان از اینکه قطعی مثبت است و تبدیل یک ماتریس کواریانس به یک ماتریس همبستگی آموزش داده شد.

اگر نوشته بالا برای شما مفید بوده، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

^^

بر اساس رای ۴ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *