KantitatifTurk 0.0.0.9000

Development Finance

KantitatifTurk paketi.

A. Uraz Akgül
2022-08-07

Türkçe içerikli ve finans alanındaki konulara odaklanacak şekilde tasarladığım {KantitatifTurk} paketinin başlangıç sayılabilecek versiyonunu bugün itibarıyla paylaştım. Hem kendi tarafımdan hem de projeye destek olmak isteyenler tarafından zamanla büyümesini istediğim bu projenin, finans alanına ilgi duyan ve bu alanı R ile birleştirenlere faydalı olmasını dilerim.

Paketi, {devtools} yardımı ile GitHub üzerinden aşağıdaki gibi indirebilirsiniz.

devtools::install_github("rpydaneogrendim/KantitatifTurk")

Paketin yüklenme işlemi tamamlandıktan sonra aşağıdaki gibi çağrılabilir.

Paketin fonksiyonlarını kütüphaneyi çağırmadan aşağıdaki gibi kullanmak da mümkündür.

KantitatifTurk::

İlk kullanılması gereken fonksiyon veri()’dir. Bu fonksiyon yardımı ile veriler tarihsel olarak çekilecek ve varlik_tarihsel adında bir obje yaratılacak. Bu objenin hiçbir şekilde değiştirilmemesi veya silinmemesi gerekiyor. Tarihsel veriler için şimdilik tek kaynak İş Yatırım’dır. Bu da paketin hisseler özelinde olduğu algısı oluşturabilir ancak hisseler dışında da varlıkları hedeflediğim için zamanla veri kaynağını genişleteceğim.

Örnek olarak, 9 adet hissenin 253 günlük tarihsel verilerini çekelim.

veri() fonksiyonu ile ilgili dokümantasyona ulaşmak için aşağıdaki komutu çalıştırabilirsiniz.

?veri
hisseler <- c(
  "THYAO",
  "SISE",
  "SASA",
  "BIMAS",
  "GARAN",
  "TCELL",
  "PETKM",
  "TUPRS",
  "SOKM"
)

veri(
  varlik_kod = hisseler,
  baslangic_tarih = "2021-08-05",
  bitis_tarih = "2022-08-05",
  gorsel = TRUE, # varsayilan
  kaynak = "isyatirim" # varsayilan
)

Görsel olarak incelenebilen varlıkların verileri varlik_tarihsel olarak ortamınızda oluşturulmuştur.

TARIH THYAO SISE SASA BIMAS GARAN TCELL PETKM TUPRS SOKM
2022-07-29 50.40 21.82 44.48 92.10 14.52 16.92 8.98 268.4 14.02
2022-08-01 51.50 23.10 46.50 95.15 14.71 17.25 9.18 273.0 14.68
2022-08-02 52.35 22.86 48.26 93.45 14.68 17.03 9.06 270.8 14.17
2022-08-03 55.00 23.28 49.84 94.05 14.84 17.20 9.07 273.0 13.97
2022-08-04 55.30 23.76 50.05 95.30 15.20 17.30 9.17 270.4 14.60
2022-08-05 58.20 23.40 49.80 95.55 15.68 17.44 9.23 269.0 14.40

İncelenmek istenen varlıkların getirilerine ait özet bilgiye ozet_getiri() fonksiyonu yardımı ile ulaşılabilir.

?ozet_getiri

Bu fonksiyon yardımı ile logaritmik veya aritmetik olarak hesaplanabilen getirilerin minimum, maksimum, ortalama, ortanca ve standart sapma bilgilerine ulaşılabilir.

ozet_getiri(
  getiri = "logaritmik", # varsayilan
  gorsel = TRUE # varsayilan
)
# A tibble: 9 × 6
  KOD   Minimum Maksimum Ortalama Ortanca StandartSapma
  <chr>   <dbl>    <dbl>    <dbl>   <dbl>         <dbl>
1 BIMAS -0.0962   0.0605 0.00178  0.00226        0.0216
2 GARAN -0.0688   0.0946 0.00217  0              0.0208
3 PETKM -0.105    0.0764 0.00188  0.00283        0.0265
4 SASA  -0.105    0.0951 0.00481  0.00328        0.0297
5 SISE  -0.105    0.0950 0.00440  0.00256        0.0266
6 SOKM  -0.105    0.0950 0.000831 0              0.0255
7 TCELL -0.105    0.0699 0.000762 0              0.0232
8 THYAO -0.105    0.0953 0.00602  0.00568        0.0303
9 TUPRS -0.105    0.0863 0.00402  0.00204        0.0289

getiri_risk() fonksiyonu ile varlık getirilerinin yıllıklandırılmış getiri ve risk bilgileri aşağıdaki gibi incelenebilir. Fonksiyon çalıştırıldıktan sonra risk_getiri isminde bir obje yaratacaktır. Getiriler logaritmik veya aritmetik olarak hesaplanabilir.

?getiri_risk
getiri_risk(
  getiri = "aritmetik",
  gun = 252, # varsayilan
  gorsel = TRUE # varsayilan
)

KOD YillikGetiri YillikRisk Oran
BIMAS 0.5081250 0.3407252 1.4913044
GARAN 0.6027357 0.3324938 1.8127726
PETKM 0.5629509 0.4159958 1.3532611
SASA 1.3261321 0.4770458 2.7798841
SISE 1.2007094 0.4222509 2.8435923
SOKM 0.2905614 0.4021772 0.7224710
TCELL 0.2594781 0.3664732 0.7080411
THYAO 1.6377039 0.4825286 3.3940038
TUPRS 1.1192899 0.4584011 2.4417260

maks_dusme_noktasi() fonksiyonu ile varlıkların maksimum düşme noktası (Maximum Drawdown) hesaplanabilir. Fonksiyon tek bir parametre almaktadır. Çalıştırıldıktan sonra maks_dusme_noktalari isminde bir obje oluşturacaktır.

?maks_dusme_noktasi
maks_dusme_noktasi(
  gorsel = TRUE # varsayilan
)

KOD MaksDD
BIMAS -27.92473
GARAN -16.54275
PETKM -31.00848
SASA -26.01054
SISE -33.70972
SOKM -32.73810
TCELL -31.18101
THYAO -24.84076
TUPRS -30.73194

kaydirmali_korelasyon() fonksiyonu ile varlıklar arası korelasyonlar kayan bir şekilde (Rolling Correlation) hesaplanabilir. Fonksiyon, ne kadarlık bir kayma olacağını belirten tek bir parametre ile çalışmaktadır.

?kaydirmali_korelasyon
kaydirmali_korelasyon(
  gun = 90
)

Paketin diğer fonksiyonlarında öngörüyü de dikkate aldım.

dogrusal_regresyon() fonksiyonu, Doğrusal Regresyon yöntemi ile tahmin ve öngörü yapılmasını sağlar. Kullanıcı, güven aralığı ve öngörüsü yapılacak gün uzunluğunu belirleyebilir. Fonksiyon çalıştırıldıktan sonra DR_varlik_ongoru isminde bir obje oluşacaktır.

?dogrusal_regresyon
dogrusal_regresyon(
  guven = 0.95, # varsayilan
  ongoru_gun = 180,
  gorsel = TRUE # varsayilan
)

KOD ONGORU ALT UST
BIMAS 107.47772 98.29485 116.66059
GARAN 20.22989 18.70555 21.75423
PETKM 12.96083 11.26202 14.65964
SASA 66.90545 60.34000 73.47091
SISE 33.25522 29.88172 36.62872
SOKM 14.08098 11.65936 16.50259
TCELL 23.12055 19.02521 27.21590
THYAO 82.56969 75.99628 89.14309
TUPRS 418.84886 389.84658 447.85113

Öngörü için kullanılabilecek diğer bir fonksiyon geometrik_brownian_hareketi() ile varliklarin ileriye yönelik simülasyonu yapılabilir. Öngörüler, elde edilen simüle değerlerin ortanca ya da ortalamasıdır. Bu fonksiyon, varlik_tarihsel veri çerçevesinde bulunan tek bir hisse ile çalıştırılmalıdır. Bir obje oluşturulmamakla beraber sonuçlara görsel üzerinden ulaşılabilir.

?geometrik_brownian_hareketi
geometrik_brownian_hareketi(
  varlik_kod = "TUPRS",
  simulasyon_sayisi = 100, # varsayilan
  gun_sayisi = 90,
  beklenen_getiri = 0, # varsayilan
  volatilite = 0.5, # varsayilan
  is_gunu_sayisi = nrow(varlik_tarihsel),
  ongoru_tipi = "ortanca", # varsayilan
  gorsel = TRUE # varsayilan
)

Öngörü için kullanılabilecek son bir fonksiyon markov_zinciri() ile varliklarin ileriye yönelik yön olasılıkları hesaplanabilir. Fonksiyon, Markov Zinciri yöntemi ile varlığın son hareketinden yola çıkarak belirlenen gün sayısı kadar sonrası için yön olasılıkları hesaplamaktadır. Çalıştırıldıktan sonra görsel olarak sonuçlara ulaşılabileceği gibi markov_olasilik objesinden de faydalanılabilir.

?markov_zinciri
markov_zinciri(
  n_adim = 1, # varsayilan
  gorsel = TRUE # varsayilan
)

GunSonrasi KOD Durum Durum1 Durum2 Olasilik
1 TUPRS Ayni-Dusus Ayni Dusus 0.0000000
1 TUPRS Ayni-Ayni Ayni Ayni 0.0000000
1 TUPRS Dusus-Ayni Dusus Ayni 0.0039841
1 TUPRS Yukselis-Ayni Yukselis Ayni 0.0159363
1 TUPRS Ayni-Yukselis Ayni Yukselis 0.0199203
1 TUPRS Dusus-Dusus Dusus Dusus 0.1752988
1 TUPRS Dusus-Yukselis Dusus Yukselis 0.2430279
1 TUPRS Yukselis-Dusus Yukselis Dusus 0.2509960
1 TUPRS Yukselis-Yukselis Yukselis Yukselis 0.2908367

Son olarak, riske_maruz_deger() fonksiyonu ile şimdilik portföy bazında olmasa da varlıklar bazında riske maruz değerler parametrik veya tarihsel olarak hesaplanabilir. Fonksiyon, ilgili hesaplamaları obje olarak oluşturacaktır. Hata alınmaması için girilen gozlem sayısının varlik_tarihsel veri çerçevesindeki satırdan küçük olmasına dikkat edilmelidir. Örneğin, gözlem sayısı 252 girildiği zaman son 252 günü (getiriler için +1 daha 253) alacağı için satır sayısı 253 veya daha büyük olmalıdır.

?riske_maruz_deger
riske_maruz_deger(
  rmd = "parametrik", # varsayilan
  guven_araligi = 0.99, # varsayilan
  gozlem_sayisi = 252, # varsayilan
  elde_tutma_suresi = 1, # varsayilan
  volatilite = "standartsapma", #varsayilan
  getiri = "logaritmik", #varsayilan
  piyasa_degeri = 100, #varsayilan
  gorsel = TRUE # varsayilan
)

Varlik Parametrik_RMD
THYAO 7.044808
SISE 6.194875
SASA 6.916234
BIMAS 5.020284
GARAN 4.844383
TCELL 5.396344
PETKM 6.165011
TUPRS 6.727724
SOKM 5.925761

URL:

BugReports: