KantitatifTurk paketi.
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
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 |