Mengubah header data saham yang diambil dari Quantmod

By | July 30, 2024
903 Views

Package Quantmod seringkali digunakan sebagai pengolah data saham alias trading saham. Quantmod nenggunakan datasource dari yahoo. Beragam analisis teknikal seperti Simple Moving Average, Exponential moving average, Bollinger band, Momentum, ROC, MACD, RSI. Namun saya tidak akan membahas itu semuanya, walaupun kalau kalian menggunakan jasa broker online, maka analisis teknikal tersebut sudah ada secara default.

Disini saya hanya menggunakan Quantmod untuk menarik data dari yahoo untuk disimpan dalam file excel, namun yang bikin sedikit ribet yaitu nama header tiap kolom mengikuti nama kode emitennya.

library(quantmod)
start_date<-as.Date("2019-01-01")
end_date<-as.Date("2019-12-31")
emiten = "TLKM.JK"
SAHAM= getSymbols(emiten, 
                  from=start_date,
                  to=end_date, 
                  src='yahoo',auto.assign=FALSE) 

print(head(SAHAM,5))

Hasilnya yaitu

           TLKM.JK.Open TLKM.JK.High TLKM.JK.Low TLKM.JK.Close TLKM.JK.Volume TLKM.JK.Adjusted
2019-01-01         3750         3750        3750          3750              0         3519.844
2019-01-02         3750         3760        3700          3730       31355300         3501.072
2019-01-03         3710         3770        3690          3740       83842400         3510.458
2019-01-04         3690         3740        3690          3710       73936900         3482.299
2019-01-07         3760         3790        3750          3770       83678100         3538.617

Begitu pun kalau kita mengganti kode emiten yang lainnya (BBCA)

           BBCA.JK.Open BBCA.JK.High BBCA.JK.Low BBCA.JK.Close BBCA.JK.Volume BBCA.JK.Adjusted
2019-01-01        26000        26000       26000         26000              0         25246.75
2019-01-02        26000        26225       26000         26200        7191200         25440.96
2019-01-03        26000        26100       25575         25900       14471600         25149.65
2019-01-04        25875        26025       25625         26025       10293000         25271.03
2019-01-07        26325        26625       26225         26225       14687600         25465.24

Walaupun sih untuk mengakses price sebuah data diatas ada 3 yaitu (misalkan harga close) menggunakan

  1. function Cl();   Cl(SAHAM)
  2. akses langsung no kolomnya; SAHAM[,4] #kolom ke 4
  3. ataupun menggunakan akses operator $ SAHAM$TLKM.JK.Close #package DPLYR

Hal diatas kurang menarik kalau suatu saat dataset tersebut akan dimasukan ke sebuah rumus di R menggunakan notasi Close ~ Open+High+Low

Tentu akan dibuat beda-beda untuk setiap emiten, hal ini menjadi sangat merepotkan, misalkan untuk TLKM akan ditulis lengkap seperti berikut

TLKM.JK.Close ~ TLKM.JK.Open + TLKM.JK.High + TLKM.JK.Low

kalau saham BBCA pun juga  demikian!

Bagaimana mengubah nama header tiap kolom menjadi Open, High, Low, dan Close?

Untuk mengubah nama header tersebut secara otomatis yaitu dengan menghilangkan kode emitennya, cukup menggunakan perintah gsub()

gsub(pattern, replacement, x, ignore.case = FALSE, perl = FALSE, fixed = FALSE, useBytes = FALSE)
  • pattern: string to be matched, supports regular expression
  • replacement: string for replacement
  • x: string or string vector
  • perl: logical. Should perl-compatible regexps be used? Has priority over extended
  • fixed: logical. If TRUE, pattern is a string to be matched as is. Overrides all conflicting arguments
  • useBytes: logical. If TRUE the matching is done byte-by-byte rather than character-by-character

mari kita terapkan saja langsung

#untuk ganti nama kolom
colnames(SAHAM) = gsub(pattern = paste(emiten,".",sep=""), 
                                 replacement = "", 
                                 x = colnames(SAHAM), 
                                 fixed = TRUE)

print(head(SAHAM,10))

Hasilnya untuk saham TLKM

           Open High  Low Close    Volume Adjusted
2019-01-01 3750 3750 3750  3750         0 3519.844
2019-01-02 3750 3760 3700  3730  31355300 3501.072
2019-01-03 3710 3770 3690  3740  83842400 3510.458
2019-01-04 3690 3740 3690  3710  73936900 3482.299
2019-01-07 3760 3790 3750  3770  83678100 3538.617
2019-01-08 3770 3800 3750  3800  67963700 3566.775
2019-01-09 3820 3830 3730  3730  98529400 3501.072
2019-01-10 3760 3800 3740  3800 126396700 3566.775
2019-01-11 3820 3860 3800  3860 116753700 3623.093
2019-01-14 3810 3850 3790  3850  68487000 3613.707

Hal diatas memudahkan kita untuk menyimpan kedalam file excel menggunakan package openxlsx

Mengubah class xts menjadi vector

Ketika dataset diubah seperti diatas, akan sangat mudah mengaksesnya karena seragam! Namun bila kalian akses dan cek jenis class tersebut

open = SAHAM$Open
class(open)

hasil

> class(open)
[1] "xts" "zoo"

Yup merupakan jenis xts = matrix + times, yaitu dataframe yang menggunakan index berupa date/time

Bisa dicek menggunakan perintah

index(open)

Sedangkan untuk mengambil datanya, gunakan perintah coredata()

data_open = coredata(open)
class(data_open)

Hasilnya data_open berubah menjadi matrix

[1] "matrix" "array"

Jadi sekarang jangan bingung lagi ya