Forecasting Pergerakan Saham dan Foreign Flow

By | December 13, 2022
922 Views

Secara umum forecasting time series yang menggunakan metode statistika harus memenuhi beberapa asumsi seperti autokorelasi di ARIMA. Namun bila kita menggunakan algoritma machine learning, hal semacam itu tidak diperlukan lagi. Pergerakan saham tidak hanya dipengaruhi oleh data sebelumnya / time series namun juga beberapa paramater lainnya. Oleh sebab itu kita akan mencoba Forecasting Pergerakan Saham dengan memasukan foreign flow. Sebagai bahan bacaaan, kalian bisa baca analisis teknikal investasi saham Analisis Investasi Saham

Studi kasus yang nanti kita akan lakukan yaitu untuk memprediksi saham pada emiten blue chip menggunakan atribut berupa Open, High, Low, dan Close untuk memprediksi harga Close dihari berikutnya. Salah satu penggerak saham pada emiten dengan kapitalisasi besar yaitu adanya foreign flow yang bisa kita hitung dengan cara akumulasi antara Net antara Foreign Buy dikurangi Foreign Sell pada asal investornya.

Melalui plot grafik kita dapat mencari tahu bahwa ada korelasi antara naik turunnya saham mengikuti naik turun nya akumulasi asing pada emiten tersebut. Sebagai contoh pada emiten TLKM berikut ini (data saham diambil dari Yahoo finance, IDX kemudian dilakukan merging data)

Kita bisa melakukan ploting dan perhitungan Akumulasi Foreign Buy – Foreign Sell dengan rumus

    \[ akumulasi = cumsum(foreign \. buy - foreign \.sell) \]

Pergerakan Harga Saham vs Akumulasi Asing

Pembahasan detail mengenai Memantau pergerakan dana asing / foreign flow silahkan untuk dibaca.

Algoritma Machine Learning

Contents

See also  Mengenal Conv2d pada algoritma CNN

Pemaparan sebelumnya telah dijelaskan bahwa pada metode statistika diharus membutuhkan beberapa asumsi yang harus dipenuhi untuk dapat digunakan sebagai metode yang tepat pada forecasting seperti contoh nya Pengertian dan Cara Perhitungan ARIMA serta Prediksi Model ARIMA

Metode yang akan digunakan nanti menggunakan algoritma machine learning Multi Layer Perceptron atau disingkat dengan MLP. Penjelasan MLP bisa kalian pelajari di Belajar Algoritma Multi Layer Percepton

Model/Arsitektur yang kita akan gunakan menggunakan multi layer perceptron dengan fungsi aktifasi MSE serta loss function MSE. Adapun Framework /package forecasting machine learning menggunakan Torch

Split dataset training dan testing

Kita akan melakukan split dataset dengan aturan sebagai berikut

  • Training : dari 01 Januari 2019 sd 31 Desember 2021
  • Testing: dari 01 Januari 2022 sd 30 Oktober 2022

Atribut input yaitu

  • Open, High, Low, Close, Foreign Buy, Foreign Sell, Volume

Atribut Output yaitu

  • Close dihari berikutnya

atau bila dirumuskan yaitu

    \[ Close_{(t+1)} =f (Open_{(t)}, High_{(t)}, Low_{(t)}, Close_{(t)}, Foreign Buy_{(t)}, Foreign Sell_{(t)}, Volume_{(t)}) \]

Arsitektur /Model Machine Learning

Adapun arsitektur/model machine learning yang digunakan terdiri dari beberapa layer dengan total 6221 paramater. Berikut arsitektur yang digunakan

 

net  <- nn_module(
  "Model-saham",
  initialize = function(){
    self$layer1 = nn_linear(in_features = ncol(x.df.train), out_features = 100)
    self$layer2 = nn_linear(in_features = 100, out_features = 50)
    self$layer3 = nn_linear(in_features = 50, out_features = 10)
    self$layer4 = nn_linear(in_features = 10, out_features = 5)
    self$layer5 = nn_linear(in_features = 5, out_features = 1)
    self$sigmoid = nn_sigmoid()
    #self$relu = nn_relu()
  },
  forward = function(x){
    x %>%
      self$layer1() %>%
      self$sigmoid() %>%
      self$layer2() %>%
      self$sigmoid() %>%
      self$layer3() %>%
      self$sigmoid() %>%
      self$layer4() %>%
      self$sigmoid() %>%
      self$layer5() %>%
      self$sigmoid()
  }
)

 

An `nn_module` containing 6,221 parameters.

── Modules ──────────────────────────────────────────────────────────────────────
• layer1: <nn_linear> #600 parameters
• layer2: <nn_linear> #5,050 parameters
• layer3: <nn_linear> #510 parameters
• layer4: <nn_linear> #55 parameters
• layer5: <nn_linear> #6 parameters
• sigmoid: <nn_sigmoid> #0 parameters

Activation dan Loss Function

Fungsi aktifasi menggunakan sigmoid oleh sebab itu diperlukan teknik normalisasi dengan rumus Pengertian dan Cara Normalisasi Data dengan nilai maksimal = 1 dan minimal = 0  maka rumus normalisasi dan denormalisasi yaitu

See also  Mengenai eigen dan contoh kasus sederhana

normalisasi

    \[ y=\frac{x-min}{max-min} \]

denormalisasi

    \[ x = y(max-min)+min \]

Berikut potongan kode yang digunakan untuk persiapan datasetnya

df.train.norm = normalisasi(df.train %>% select(!Date),MAKSIMAL,MINIMAL) 
df.test.norm =  normalisasi(df.test %>% select(!Date),MAKSIMAL,MINIMAL) 

x.df.train = df.train.norm %>% select(Open,High,Low,Close,ForeignBuy,ForeignSell,Volume)
y.df.train = df.train.norm %>% select(Close2) #sebagai target

 

sedangkan untuk loss function menggunakan MSE – Mean Square Error – Pytorch Membuat Function Loss. Berikut grafik loss per epoch yang bisa dilihat mengalami penurunan untuk setiap epoch dengan maksimal epoch 10 ribu kali.

l = c()
for (epoch in c(1:10000)){
  optimizer$zero_grad()
  output = model(x_train)
  loss = criterion(output,y_train)
  loss$backward()
  optimizer$step()
  l = c(l,loss$item())
  if(epoch %% 100==0){
    cat(epoch,loss$item(),'\n')
  }
}

 

 

Loss untuk setiap Epoch

Hasil Pelatihan dataset training dan pengujian

Hasil pelatihan menunjukan nilai RMSE yang kecil. Forecasting Pergerakan Saham dan Foreign Flow pada dataset training dan testing sebagai berikut

Hasil prediksi saham

Disimpulkan bahwa algoritma machine learning Forecasting Pergerakan Saham dan Foreign Flow

  • Sesi training menghasilkan RMSE dengan nilai 61.3 dengan plot Prediksi mengikuti target Close
  • Sesi testing menghasilkan RMSE dengan nilai 109.6 dengan beberapa grafik under performance dibeberapa titik seperti pada bulan april dan september 2022

Forecasting Pergerakan Saham dan Foreign Flow dapat digunakan sebagai atribut input pada machine learning multi layer perceptron.

Download Source Code

Silahkan untuk berkirim email ke Contact Us