حزمة tasi 2.0 📦
tasi هي حزمة قمت بتطويرها لجلب بيانات السوق السعودي المنشورة لعامة الناس على موقع السوق السعودي. هدفها تسهيل وتبسيط سير عمل تحليل بيانات السوق وتطوير المؤشرات والتحليلات الفنية. الإصدار الأول من هذه الحزمة كان مقتصرا على جلب الأسعار اليومية لأسهم الشركات فقط. لكن مع مرور الوقت قررت أن اوسع أمكانيات هذه الحزمة إلى جلب القوائم المالية ايضا وتنسيق البيانات بصيغة ومعيار يتناسب مع الحزم المتخصص في تحليل التسلسلات الزمنية.
ما الجديد في الحزمة
جلب بيانات مؤشرات القطاعات
الآن بإمكانك جلب ليس فقط اسعار الؤشر العام بل حتى مؤشرات القطاعات التجارية ايضا. تم إضافة حوالي اكثر من عشرين دالة لجلب تلك المؤشرات. جميع الدوال تبدأ بـget_
ثم أسم القطاع. كل ما عليك فعله هو تحديد المدة الزمنية فقط. إليك هذا المثال
# Install the package if you have not
# devtools::install_github("Hussain-Alsalman/tasi")
library("tasi")
library("magrittr")
library("ggplot2")
library("dplyr")
library("tidyquant")
# Basic Example
get_capitals(start_date = "2020-01-01", end_date = "2021-11-27") %>%
head()
## date high open low close totalVolume totalTurnover
## 476 2020-01-01 4423.98 4332.37 4371.88 4410.43 4422290 93,012,358.61
## 475 2020-01-02 4483.10 4410.43 4451.19 4461.49 6559384 116,314,994.75
## 474 2020-01-05 4444.04 4461.49 4356.14 4373.23 6900081 155,820,965.02
## 473 2020-01-06 4375.32 4373.23 4274.97 4278.48 6359870 126,953,206.07
## 472 2020-01-07 4374.45 4278.48 4264.59 4298.68 6229559 141,720,681.00
## 471 2020-01-08 4362.64 4298.68 4227.44 4296.50 6365297 135,112,493.24
## noOfTrades
## 476 7045
## 475 7789
## 474 11095
## 473 10206
## 472 9581
## 471 9872
# More sophisticated Example
bnk_df <- get_banks(start_date = "2021-06-01", end_date = "2021-11-30") %>%
mutate(date = lubridate::ymd(date))
ggplot(bnk_df,mapping = aes(x = date, y = close)) +
geom_candlestick(mapping = aes(open =open,
high= high,
low = low,
close = close)) +
scale_x_date(date_labels = "%b-%d-%Y",date_breaks = "month") +
theme_bw() +
geom_smooth() +
labs(title = "Bank Industry performance over June-Nov 2021 period",
subtitle = "Rapid recovery was corrected during the month of November")
تعديل سعر السهم ليتضمن الارباح الموزعة
من العمليات الشائعة في تحليل الأسهم هو حساب عوائد السهم خلال فترة زمنية معينة (معدل التغير في سعر السهم). لكن ذلك لا يعكس العائد الكلي للسهم لأن معظم الشركات تقوم بتوزيع الأرباح للمساهمين مما يشكل عائد إضافي للمستثمر. لذلك قمت بتطوير دالة تقوم بتعديل سعر السهم ليعكس ايضا الارباح الموزعة. إليك هذا المثال
library("tasi")
comp_symbol <- 1180 #NCB Bank.
comp <- get_company_records(start_date = "2020-01-01",
end_date = "2021-11-27",
company_symbol = comp_symbol
)
comp %>%
df_to_xts() %>% # converting it to xts format
head()
## Open High Low Volume Close
## 2020-01-01 49.25 49.25 48.60 361128 48.65
## 2020-01-02 48.65 48.85 48.25 627781 48.80
## 2020-01-05 47.20 48.50 47.20 952211 47.40
## 2020-01-06 47.20 47.45 46.60 2101193 46.90
## 2020-01-07 47.00 47.25 46.45 1300968 46.50
## 2020-01-08 46.20 46.30 45.80 1306755 46.30
comp %>% add_adj_price(comp_symbol) %>% head()
## Open High Low Volume Close Adjusted
## 2020-01-01 49.25 49.25 48.60 361128 48.65 45.85164
## 2020-01-02 48.65 48.85 48.25 627781 48.80 45.99302
## 2020-01-05 47.20 48.50 47.20 952211 47.40 44.67354
## 2020-01-06 47.20 47.45 46.60 2101193 46.90 44.20230
## 2020-01-07 47.00 47.25 46.45 1300968 46.50 43.82531
## 2020-01-08 46.20 46.30 45.80 1306755 46.30 43.63682
جلب بيانات الأسهم على طريقة
quantmod::getSymbols
من حزم R الشهيرة جدا في عالم تحليل سوق المال هي quantmod
. هذه الحزمة توفر الكثير من الأدوات التحليلية الرائعة لكنها لا تعمل بشكل سلس مع بيانات الأسواق الغير امريكية. لذلك قمت بتطوير دالة مماثلة لـ getSymbols()
للسوق السعودي. إليك هذا المثال
library("quantmod")
library("tasi")
tasi::getSymbols(start_date = "2021-01-01",
end_date = "2021-11-27",
symbol_vector = c(2222,1180,1010))
#make sure to prefix the company symbol num by "T"
chart_Series(T2222)
جلب القوائم المالية
لعل هذه الميزة هي الأقوى بين المزايا في الحزمة الجديد. هناك الكثير من المعدٌلات والنِسَب المالية التي يحتاج المستثمر حسابها ليحدد مدى كفاءة تشغيل الشركة أو مدى ربحيتها او معدل تغير سبل التمويل لديها. كل هذه المعلومات وغيرها يمكن العثور عليها في القوائم المالية لكن ذلك يتطلب الكثير من البحث اليدوي. لذلك قمت بتطوير عدة دوال تبسط هذه العملية. إليك هذا المثال
library("tasi")
library("kableExtra")
get_income_statement(company_symbol = 1010,
period_type = "y" # "q" for quarterly and "y" for yearly
) %>%
head() %>%
kbl(table.attr = "style='direction: ltr'")
statement_of_income | Y_2020 | Y_2019 | Y_2018 | Y_2017 |
---|---|---|---|---|
Special Commission Income | 9813394000 | 10371426000 | 8332365000 | 7425107000 |
Special Commission Expenses | 1599789000 | 2534411000 | 1646601000 | 1490030000 |
Net Special Commission Income | 8213605000 | 7837015000 | 6685764000 | 5935077000 |
Fees from Services | 1873555000 | 2030745000 | 1711052000 | 1510314000 |
Exchange Income | 412614000 | 342658000 | 337043000 | 290207000 |
Trading Income | 218297000 | 132806000 | 2717000 | 21815000 |
جلب القوائم المالية الأخرى من صيغة XBRL
لقد سبق وتحدث بشكل مفصل عن صيغة XBRL الخاصة بالتقارير المالية يمكنك الأطلاع على التدوينة هنا. هذه الصيغة تمكننا من جلب معلومات اضافية من التقارير الربعية والسنوية بالأيضاحات ومعلومات مدققي المحاسبة. إليك هذا المثال
library("tasi")
library("kableExtra")
# NOTE!!! This function will ask you to choose from available statements if you leave statement_type unfilled.
get_statement_xbrl(company_symbol = 2350,
period = "Q1-2021",
statement_type = "StatementOfFinancialPositionCurrentNonCurrent") %>%
.[c(1:3,6:10),] %>%
kbl(table.attr = "style='direction: ltr'")
[300200] Statement of financial position, current/ non-current | ||||
---|---|---|---|---|
Start Date | 2021-01-01 | 2020-01-01 | 2020-01-01 | Note No. |
End Date | 2021-03-31 | 2020-03-31 | 2020-12-31 | Note No. |
Statement of financial position [abstract] | ||||
Bank balances and cash | 884,724 | 533,923 | 564,726 | |
Short-term deposits | 952,500 | 1,282,500 | 615,000 | |
Trade accounts receivable | 2,844,837 | 2,108,162 | 2,643,059 | |
Prepayments | 80,083 | 79,143 | 96,028 | |
Inventories | 1,319,617 | 1,219,801 | 1,280,975 |
هذه الصيغة تمكننا من استخراج معلومات معينة وإجراء حسابات متخصصة مثل معدل دوران الأصول asset turnover ratio لقياس مدى كفاءة الشركة في توظيف مواردها. إليك هذا المثال :
balance_sheet <- get_statement_xbrl(company_symbol = 2350,
period = "Q1-2021",
statement_type = "StatementOfFinancialPositionCurrentNonCurrent")
income_statement <- get_statement_xbrl(company_symbol = 2350,
period = "Q1-2021",
statement_type = "StatementOfIncomeNatureOfExpense")
colnames(income_statement) <- c("Term", "Q1_2021", "Q1_2020")
colnames(balance_sheet) <- c("Term", "Q1_2021", "Q1_2020", "FY_2020")
sales <- income_statement[stringr::str_detect(string = income_statement$Term,"Sales of goods"),2:3]
assets <- balance_sheet[stringr::str_detect(string = balance_sheet$Term,"Total assets"),2:3]
sales <- sales %>% gsub(x = .,",","") %>% as.numeric()
assets <- assets %>% gsub(x = .,",","") %>% as.numeric()
names(sales) <- c("Q1_2021", "Q1_2020")
names(assets) <- c("Q1_2021", "Q1_2020")
# Asset turn over is
print("Asset Turnover ratio Q/Q")
## [1] "Asset Turnover ratio Q/Q"
unlist(sales)/unlist(assets)
## Q1_2021 Q1_2020
## 0.07950360 0.05407454
جرب بنفسك
كامل الكود تجده هنا
comments powered by Disqus