مقدمه ای بر تجزیه و تحلیل سهام با R

ساخت وبلاگ

تجزیه و تحلیل سهام و سرمایه گذاری موضوعی است که می تواند عمیقاً در برنامه نویسی مورد بررسی قرار گیرد. این شامل زبان R است که در حال حاضر ادبیات، بسته ها و عملکردهای بزرگی در این زمینه توسعه داده است. در این پست، با استفاده از بسته های quantmod و ggplot2 به معرفی مختصری از موضوع می پردازیم.

برای کسانی که در حال شروع هستند، R یک زبان برنامه نویسی و یک محیط یکپارچه متمرکز بر آمار است، اما با کاربردهای فراوان در زمینه های مختلف. دانلود نرم افزار را می توان از اینجا با استفاده از آینه دلخواه خود انجام داد. من همچنین توصیه می کنم RStudio را نصب کنید، که یک رابط با تعداد زیادی منابع اضافی برای R است.

سهام مورد تجزیه و تحلیل در اینجا PBR، از شرکت برزیلی Petrobras، با داده های استخراج شده از Yahoo Finance با استفاده از بسته quantmod خواهد بود. quantmod یک بسته شناخته شده است که برای مدل سازی مالی کمی استفاده می شود. همچنین، ما از بسته ggplot2 برای تجسم داده ها استفاده خواهیم کرد.

آماده سازی محیط

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

rm(list=ls()) install. packages("quantmod") install. packages("ggplot2") library(quantmod) library(ggplot2) 

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

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

بیایید آن را مرحله به مرحله انجام دهیم!

اولین آرگومان PBR نماد سهام یاهو فاینانس است که ما قصد داریم آن را تحلیل کنیم. اگر می خواهید به دنبال سهام یا دارایی دیگری باشید، می توانید نماد آن را در اینجا جستجو کنید.

آرگومان src= "yahoo" منبع داده ها را نشان می دهد. همچنین می توانیم از منابع دیگری مانند Google Finance، FRED، Oanda، پایگاه های داده محلی، CSV و بسیاری دیگر استفاده کنیم.

آرگومان های سوم و چهارم نشان دهنده بازه زمانی است که داده ها در آن استخراج می شوند، با داده هایی در قالب «yyyy-mm-dd».

در نهایت، آرگومان auto. assign = FALSE به ما اجازه می دهد تا مجموعه داده را با نامی که می خواهیم نام گذاری کنیم. در صورتی که درست باشد، نام به طور خودکار نماد مورد نظر ما خواهد بود، یعنی اولین آرگومان.

الحاقیه

اگر Yahoo Finance API کار نمی کند، می توانید قیمت ها را مستقیماً از وب سایت دانلود کنید. فقط باید تیک سهام یا نام شرکت را جستجو کنید. در صفحه دارایی، مانند تصویر زیر، روی "داده های تاریخی" کلیک کنید:

سپس دوره مورد نظر را انتخاب کرده و بر روی “Download Data” کلیک کنید. فایل دانلودی با فرمت csv خواهد بود. اکنون، فقط آن را به دایرکتوری کاری خود منتقل کنید، که با استفاده از دستور getwd() قابل کشف است.

با فایل موجود در پوشه، از دستورات زیر برای خواندن پایه استفاده کنید:

دستور read. csv() فایل را می خواند و به یک شی اختصاص می دهد. سپس، ستون اول پایه را به فرمت تاریخ تبدیل می کنیم. سپس از دستور xts() برای تبدیل پایه از نوع دیتافریم به xts استفاده می کنیم. در نهایت، ستون اول (تاریخ) را حذف می کنیم، زیرا اکنون خطوط قیمت از قبل بر اساس روز نمایه می شوند.

تجسم قیمت ها

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

سر (pbr) دم (pbr) خلاصه (pbr) str (pbr) 
## PBR. باز کردن PBR. PBR بالا. PBR پایین. بستن PBR. حجم PBR. تعدیل شده ## 2012-01-03 26. 993 28. 025 26. 939 26. 11 12754300 24. 2-2-2404. 80 27. 567 26. 46 12351500 24. 86936 ## 2012-01-05 27. 993 28. 057 27. 525 26. 11 8568600 24. 54040 ## 2012-01-06 27. 929 27. 929 27. 280 25. 69 0 8254021-27. 280 # 8254021-27. 280. 7. 748 28. 695 27. 588 26. 88 26046600 25. 26411 ## 2012-01-10 29. 078 29. 461 28. 993 27. 45 16966500 25. 
## PBR. باز کردن PBR. PBR بالا. PBR پایین. بستن PBR. حجم PBR. تعدیل شده ## 2017-05-23 8. 76 8. 91 8. 74 8. 83 22071200 8. 83 ## 2017-05-05-2017. 863100 9. 08 ## 2017-05-25 9. 07 9. 25 8. 81 8. 89 30557400 8. 89 ## 2017-05-26 8. 74 9. 03 8. 72 8. 95 22845300 8. 95 8. 95 ## 2017-05-26 8. 95 8. 95 8. 95 ## 2017-05-26 1082600 8. 70 ## 2017-05-31 8. 67 8. 76 8. 44 8. 48 23066100 8. 48 
## شاخص PBR. PBR باز. PBR بالا. پایین ## حداقل.:2013-01-02 دقیقه.: 2. 88 دقیقه: 2. 97 دقیقه: 2. 71 ## 1st Qu.:2014-02-08 1st Qu.: 7. 05 Qu. 1: 7. 20 Qu. 1: 6. 82 ## Median :2015-03-18 Median :10. 25 Median :10. 40 Mean :10. 40 Mean #12015-03-17 Mean :10. 67 Mean :10. 86 Mean :10. 46 ## 3rd Qu.:2016-04-23 Qu. 3:14. 42 Qu. 3:14. 60 Qu. 3:14. 15 ## Max.:2017-05-31 حداکثر. حداکثر: 20. 83حداکثر: 20. 94:19. 96 ## PBR. بستن PBR. Volume PBR. Adjusted ## Min.: 2. 900 دقیقه: 6046400 دقیقه: 2. 900 ## 1st Qu.: 7. 005 Qu. 1st: 17193900 Qu. 1st: 7. 005 ## Median :10. 210 Median : 24066300 Median :10. 230 ## Mean :10. 621 Mean :10. 621 Mean س 3: 14. 330 ق 3.: 33655150 شماره سوم: 14. 615 ## حداکثر. حداکثر: 20. 650:164885500 حداکثر.: 20. 650 
## یک شی 'xts' در 2013-01-02/2017-05-31 حاوی: ## داده: num [1:1111, 1:6] 18. 9 18. 7 19. 2 19. 2 18. 9.## - attr(*, "dimnames")=فهرست 2 ## ..$ : NULL ## ..$ : chr [1:6] "PBR. Open" "PBR. High" "PBR. Low" "PBR. Close".## فهرست شده توسط اشیاء کلاس: [Date] TZ: UTC ## xts ویژگی ها: ## فهرست 2 ## $ src : chr "yahoo" ## $ به روز شده: POSIXct[1:1]، قالب: "2017-07-16 20:52:31" 

با دستورات head() و tail() می توانیم 6 خط اول و آخر پایه را ببینیم. 6 ستون با: قیمت افتتاحیه، قیمت حداکثر و حداقل، قیمت پایانی، حجم معاملات و قیمت تعدیل شده. با استفاده از دستور summary() آمار توصیفی هر سری قیمت و حجم را تأیید می کنیم. دستور str() ساختار شی را برمی گرداند. در این مورد، یک شی xts، یک سری زمانی است.

اکنون بیایید با استفاده از ستون قیمت تعدیل شده، قیمت های روزانه را ترسیم کنیم، زیرا رویدادهایی مانند تقسیم و توزیع سود سهام را در بر می گیرد که می تواند بر سری تأثیر بگذارد.

ggplot(pbr، aes(x = index(pbr)، y = pbr[, 6])) + geom_line(color = "آبی تیره") + ggtitle ("سری قیمت های پتروبراس") + xlab ("تاریخ") + ylab("قیمت") + موضوع (plot. title = element_text (hjust = 0. 5)) + scale_x_date (date_labels = "%b %y"، date_breaks = "6 ماه") 

ما این گرافیک را با استفاده از دستور ggplot ایجاد کردیم. ابتدا از شی pbr به عنوان سری برای ترسیم استفاده می کنیم. سپس نشان می دهیم که کدام عناصر در محورها قرار می گیرند: index(pbr)، تاریخ در محور x، و ستون قیمت تعدیل شده، pbr[, 6]، در محور y. سپس، عنصری را که قرار است رسم شود، اضافه می کنیم، در این مورد، یک خط آبی: geom_line(color = "blue") .

پس از آن، عنوان و نام محورها را با دستورات ggtitle ("سری قیمت های Petrobras")، xlab ("تاریخ")، ylab ("قیمت") اضافه می کنیم. طبق استاندارد، عنوان نمودار در سمت چپ تراز می شود. برای متمرکز کردن آن، از دستور theme (plot. title = element_text (hjust = 0. 5)) استفاده می شود.

در نهایت، برای آموزنده تر کردن محور زمانی، تیک تاریخ را هر 6 ماه در قالب mmm aa با استفاده از scale_x_date (date_labels = "%b %y"، date_breaks = "6 ماه") قرار می دهیم.

در تحلیل تکنیکال سهام، یک تکنیک بسیار مورد استفاده، نمودار میانگین متحرک در نمودار قیمت است. میانگین متحرک ساده یک میانگین حسابی از آخرین (q) روز از یک سری (x_) در دوره زمانی (t) است. بنابراین، میانگین متحرک (MA^_) توسط:

این شاخص جالب است زیرا به شناسایی روندها و صداهای صاف از قیمت کمک می کند. یعنی هرچه پنجره روز برای محاسبه MA بزرگتر باشد ، پاسخگویی MA به تغییر قیمت کوچکتر است. هرچه پنجره کوچکتر باشد ، MA سریعتر خود را با تغییرات سازگار می کند. اکنون بیایید دو میانگین متحرک برای سری قیمت سهام را محاسبه کنیم ، یکی با پنجره 10 روز و دیگری با 30 روز:

pbr_mm = "2016-01-01") pbr_mm10

ابتدا با استفاده از زیر مجموعه عملکرد () پایه داده ها را از سال 2016 زیر مجموعه می کنیم. سپس ، ما از عملکرد Rollmean () استفاده می کنیم ، که به عنوان آرگومان می گیرد: سری ((x_t) ) ، در این حالت قیمت تنظیم شده. پنجره دوره ها ((q) ) ؛یک استدلال پر کردن اختیاری ، که برای تکمیل روزهایی که امکان محاسبه میانگین متحرک وجود ندارد ، استفاده می شود ، زیرا مقدار کافی روزها نمی گذرد. آرگومان تراز نشان می دهد که آیا میانگین متحرک باید با استفاده از دوره های سمت چپ ، در مرکز یا در سمت راست روز (t ) سری محاسبه شود. سرانجام ، ما MA را به دو ستون جدید در پایگاه داده اولیه اضافه می کنیم.

ما دو MA را با استفاده از 10 و 30 روز پنجره محاسبه کردیم ، مقادیر را با NA پر کردیم و از دوره های سمت چپ استفاده کردیم. پس از آن ، ما می توانیم هر دو سری را در همان گرافیک قیمت ها ترسیم کنیم تا روندها را شناسایی کنیم. یک تئوری موجود در تجزیه و تحلیل فنی همان چیزی است که وقتی دو کارشناسی ارشد کوتاه مدت و بلند مدت از یکدیگر عبور می کنند ، نشانگر خرید یا فروش سهام است. هنگامی که کوتاه مدت MA از بلند مدت به سمت بالا عبور می کند ، یک سیگنال خرید وجود دارد. وقتی برعکس اتفاق می افتد ، یک سیگنال فروش وجود دارد.

ترسیم سری قیمت ها و میانگین های متحرک برای تمام روزهای سال 2016:

ggplot (pbr_mm ، aes (x = index (pbr_mm))) + geom_line (AES (y = pbr_mm [، 6] ، color = "pbr")) + ggtitle ("سری قیمت های پتروبراس") + geom_line (yes (y =pbr_mm $ mm10 ، color = "mm10")) + geom_line (AES (y = pbr_mm $ mm30 ، color = "mm30")) + xlab ("تاریخ") + ylab ("قیمت") + تم (plot. title =Element_Text (hjust = 0. 5) ، panel. border = Element_blank ()) + scale_x_date (date_labels = "٪ b ٪ y" ، date_breaks = "3 ماه") + scale_colour_manual ("سری" ، مقادیر = c ("pbr" = "" "Gray40 "،" MM10 "=" Firebrick4 "،" MM30 "=" DarkCyan ")) 

برای ایجاد نمودار ، خط قیمت ها و خطوط میانگین حرکت را ترسیم می کنیم. در این حالت ، ما هر خط را متفاوت ترسیم می کنیم و نوعی نام مستعار برای رنگ هر یک ایجاد می کنیم. سپس ، ما خط line_colour_manual را اضافه می کنیم ، که رنگ هر نام مستعار را نشان می دهد تا رنگ در افسانه نمودار قابل مشاهده باشد.

با تأیید طرح ، می توان متوجه شد که 14 امتیاز وجود دارد که این سریال از خود عبور می کند و 1 نقطه ای که در آن همپوشانی دارند. به دنبال سیگنال خرید ، ما در 4 از 7 بار موفق بوده ایم. به دنبال نشانه فروش ، ما در 7 بار 5 درست انجام داده ایم. در کل ، ما 9/14 خواهیم بود ، یعنی 64 ٪ موفقیت با یک نشانگر بسیار ساده است. البته این متریک نباید به تنهایی مورد استفاده قرار گیرد ، بسیاری از اطلاعات دیگر باید مورد توجه قرار گیرند.

بازگشت

ما دیده ایم که چگونه قیمت سهام با گذشت زمان تغییر کرده است. اکنون ما تأیید خواهیم کرد که چگونه بازده سهام در همان دوره رفتار کرده است. برای انجام این کار ، ابتدا باید با استفاده از ستون تنظیم شده قیمت ، یک شی جدید با بازده محاسبه شده ایجاد کنیم:

pbr_ret

کاری که ما در اینجا انجام داده ایم استفاده از خصوصیات لگاریتم برای محاسبه بازده ورود به سیستم بود. ما انجام دادیم:

دستور Diff تفاوت تمام مقادیر را در هر بردار یا عنصر محاسبه می کند. با این کار ، ما فقط تفاوت را در لگاریتم های طبیعی قیمت سهام اعمال می کنیم.

علاوه بر این روش ، می توان بازده های متفاوتی را محاسبه کرد. Package QuantMod عملکردهای جالبی برای انجام این کار دارد. در مرحله اول ، انتخاب فقط یک ستون قیمت هر سهام بسیار ساده است. مثلا:

OP (PBR) CL (PBR) AD (PBR) 

هر خط به ترتیب به عنوان خروجی قیمت های باز ، بسته و تنظیم شده را به دست می آورد. همان ستون های دیگر: HI () ، LO () و VO () ، برای حداکثر و حداقل قیمت و حجم معاملات.

برای بازده ، ما به سادگی سازگار و تعریف می کنیم که از کدام ستون ها استفاده می شود ، به عنوان مثال: CLCL () بازده را با استفاده از قیمت های پایانی از دو دوره به ما می دهد. OPCL () منجر به بازده از قیمت بسته شدن نسبت به قیمت افتتاح از همان روز خواهد شد.

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

Dailyretu (PBR) Weeklyretu (PBR) ماهانه (PBR) فصلنامه (PBR) سالانه (PBR) 

همه این دستورات تجزیه و تحلیل و محاسبه را بسیار سریعتر و ساده تر انجام می دهند.

اکنون بیایید برخی از آمارهای اساسی را از بازده های پتروبراس تأیید کنیم.

خلاصه (pbr_ret) ## فهرست pbr. Adusted ## min.: 2013-01-03 دقیقه.: -0. 1852413 ## 1 qu.:2014-02-10 1st Qu.: -0. 0209915 ## مدیان: 2015-03-18 مدیان: -0. 0005999 ## میانگین: 2015-03-18 میانگین:.: 2016-04-24 3rd Qu: 0. 0177905 ## حداکثر.: 2017-05-31 حداکثر.: 0. 1555103 
SD (PBR_RET) ## [1] 0. 03713089 

این نشان می دهد که به طور متوسط سهام عملکرد خوبی نداشته است. اکنون می توانیم بازده ها را ترسیم کنیم و ببینیم که چگونه آنها با گذشت زمان انجام داده اند:

ggplot (pbr_ret ، aes (x = index (pbr_ret) ، y = pbr_ret)) + geom_line (color = "deepskyblue4") + ggtitle ("پتروبراس سری بازگشت") + xlab ("تاریخ") + ylab ("بازگشت")+ تم (plot. title = Element_text (hjust = 0. 5)) + scale_x_date (date_labels = "٪ b ٪ y" ، date_breaks = "6 ماه") 

برای ترسیم این نمودار آخر ، از همان پارامترهای نمودار قیمت ها استفاده کردیم و فقط رنگ خط را تغییر دادیم.

با تجزیه و تحلیل مختصر از گرافیک ، می توان دید که کوچکترین بازگشت این سریال در ماه مه اتفاق افتاده است. به طور خاص ، در 18 ماه مه ، یک روز پس از انتشار خبر با ضبط رئیس جمهور برزیل میشل تمر. در Audios ، وی موافقت كرد كه در ازای سکوت سیاستمداران دستگیر شده ، پرداخت را پرداخت كند. این واقعیت به شدت بر بازار سهام ، به ویژه شرکت های برزیل و دولتی مانند پتروبراس تأثیر گذاشت.

اکنون بیایید نگاهی اندک به بازده سهام در سال 2017 بیندازیم:

pbr_ret17 "2017-01-01") ggplot (pbr_ret17 ، aes (x = index (pbr_ret17) ، y = pbr_ret17) + geom_line (color = "deepskyblue4") + ggtitle ("پتروروبراس سریال در سال 2017") + xlab ("تاریخ") + ylab ("بازگشت") + تم (plot. title = element_text (hjust = 0. 5)) + scale_x_date (date_labels = "٪ b ٪ y" ، date_breaks = "1 ماه") 

خلاصه (PBR_RET17) SD (PBR_RET17) 
## index pbr. Adusted ## min.: 2017-01-03 دقیقه.: -0. 185241 ## اول Qu.:2017-02-08 1st Qu.: -0. 014350 ## Median: 2017-03-17 Median: -0. 002689 ## میانگین: 2017-03-17 میانگین: -0. 001707 ## 3rd que.: 2017-04-24 3rd Qu: 0. 014977 ## حداکثر.: 2017-05-31 حداکثر.: 0. 068795 ## [1] 0. 03089105 

ما با استفاده از زیر مجموعه عملکرد () همه بازده ها را از سال 2017 از هم جدا کردیم. با این کار ، آمار توصیفی هنوز هم بازده میانگین منفی را نشان می دهد. از طرف دیگر ، انحراف استاندارد کوچکتر است ، که نشان دهنده خطر کمتری است. علاوه بر این ، این بازده منفی توسط ، در اکثریت ، با سقوط بزرگ در روز 18 داده می شود.

نتیجه

این همه برای این آموزش ، مردمی است. در پست های آینده وانمود می کنم که تجزیه و تحلیل عمیق تر انجام می دهم و همچنین به نمونه کارها و نظریه ریسک نزدیک می شوم. امیدوارم دوست داشته باشی!

فارکس کاران ایران...
ما را در سایت فارکس کاران ایران دنبال می کنید

برچسب : نویسنده : ناهید طباطبایی بازدید : <-PostHit-> تاريخ : يکشنبه 29 مرداد 1402 ساعت: 18:25