Saturday, November 16, 2019

Peramalan Harga Saham dengan Neural Network


Kalau kamu ambil Mata Kuliah Sistem Produksi akan mengenal pokok bahasan yaitu forecasting dengan beragam metode yang digunakan yaitu dimulai dari pola data seperti data tersebut mengandung pola
  1. stasioner
  2. trend
  3. siklus
Kalau menggunakan Neural Network tidak perlu dipusing analisis autokorelasi dan lainnya, karena Neural Network sifatnya cukup robust terhadap dataset yang bersifat non linear. Kasus sederhana untuk forecasting yaitu harga saham. Kamu harus tahu harga sama itu ada 4 yaitu open, high, low, dan close disingkat OHLC, biasanya akan mudah dibaca menggunakan plot candle stick ref: https://www.seputarforex.com/belajar/forex/pola-candlestick/

Ada warna candle stik yaitu
  1. hitam dan putih
  2. merah dan hijau
Tergantung si pembuat candle sticnya, dibawah uni contoh 2 keadaan candle stick


Sekarang kita bahas saja yuk untuk harga saham yang akan dimasukan kedapan neada beberapa cara

  1. menggunakan harga close atau harga penutupan bursa pasar.
  2. Menggunakan ke 4 harga yaitu OHLC nya
  3. Atau average(OHLC) nya

Adapun untuk pemilihan emiten saham harus dalam kondisi normalnya yaitu



  1. Tidak dalam masa stocks split, right issue atau aksi korporasi lainnya yang bisa membuat harga bergerak secara fluktuatif.
  2. Bebas menggunakan harga close daily, weekly, atau monthly, untuk harga daily yaitu 5 hari kerja dalam seminggu, sedangkan harga close weekly akhir bursa yaitu jumat sore.
  3. Serta menggunakan data 2 tahun ke belakang agar bisa mencerminkan pergerakan harga saham.

Contoh emiten saham yang digunakan yaitu PP Property dengan kode saham PPRO, penulis menggunakan data weekly yang diambil dari www.investing.com
https://www.investing.com/equities/pp-properti-tbk-pt-historical-data





Desain input dan target mengikuti ilustrasi berikut (simple moving average) dengan aturan seperti berikut


4 Harga weekly average(OHLC) untuk memprediksi harga minggu ke 5, begitu juga dengan untuk prediksi minggu ke 6, diambil dari data dari minggu ke 2 sampai dengan minggu ke 5.

Acuan fraksi harga sahamhttps://www.idx.co.id/investor/mekanisme-perdagangan/



Sehingga fraksi harga saham sesuai dengan data historisnya mempunyai rentang 92 s.d 208  sebagai nilai acuan normalisasi data, akan tetapi diperluas bila saja terjadi penurunan/kenaikan batas diatas tersebut, maka diubah rentangnya yaitu 80 s/d 300. Teknik normalisasi menggunakan rumus http://www.softscients.web.id/2014/09/teknik-untuk-melakukan-normalisasi.html


Persiapan Dataset


Dataset yang digunakan disimpan dalam format excel terdiri dari 51 data tahun 2018 dan 44 data tahun 2019 ( Januari 2018 s.d November 2019)


Pada format investing.com menggunakan format weekly, misalkan pada perdagangan minggu I Januari (senin, 02 s.d 05 januari 2018) ditulis pada minggu, 07 Januari 2018.





Kolom yang digunakan yaitu Price/Closed, Open, High, dan Low disingkat dengan OHLC (open high low close) akan dicari nilai average nya.

clc;clear all;close all;warning off;
data=readtable('PPRO Historical Data.xlsx');
harga = [data.Price,data.Open,data.High,data.Low]; %ambil nilai OHLC
harga = mean(harga,2); %nilai reratanya


Penyusunan Array Input Target


Desain stacking/penyusunan array input target di desain dengan disusun array dengan aturan kolom ke 1 sampai dengan 4 merupakan input sedangkan kolom ke 5 adalah kolom target.

 
Pada baris ke 1:  data ke 1 s.d 4 untuk prediksi data ke 5,
Pada baris ke 2:  data ke 2 s.d 5 untuk prediksi ke 6
Sehingga kode nya menjadi berikut

clc;clear all;close all;warning off;
data=readtable('PPRO Historical Data.xlsx');
harga = [data.Price,data.Open,data.High,data.Low];
harga = mean(harga,2);
input_target = [];
for i = 1: length(harga)
    if i+4>length(harga)
        break
    end
    input_target(i,1:4) = harga(i:i+3);
    input_target(i,5) = harga(i+4);
    
end


Sehingga ukuran array input_target yaitu 91 baris * 5 kolom

Normalisasi data


Arsitektur jaringan yang digunakan sangat sederhana yaitu menggunakan fungsi logsig dan 1 layer hidden (7 node), kamu bisa baca link berikut
https://www.softscients.web.id/2019/11/deteksi-kanker-payudara-dengan-neural.html
sehingga dibutuhkan normalisasi data, baca link berikut http://www.softscients.web.id/2014/09/teknik-untuk-melakukan-normalisasi.html. Seperti sebelumnya yang telah ditentukan nilai  minimal = 80 dan maksimal 300, maka kode diatas secara lengkap sebagai berikut:

clc;clear all;close all;warning off;
data=readtable('PPRO Historical Data.xlsx');
harga = [data.Price,data.Open,data.High,data.Low];
harga = mean(harga,2);
input_target = [];
for i = 1: length(harga)
    if i+4>length(harga)
        break
    end
    input_target(i,1:4) = harga(i:i+3);
    input_target(i,5) = harga(i+4);
    
end
maksimal = 300;
minimal = 80;
delta = maksimal-minimal;
 
input_target_normalisasi = (input_target-minimal)./delta; 

Split Dataset Input dan Target


Tahap selanjutnya menggunakan slicing array yaitu untuk memisahkan array input dan target, dengan kode sebagai berikut


P = input_target_normalisasi(:,1:4); %ambil kolom 1 s.d 4
T = input_target_normalisasi(:,end); %ambil kolom 5 atau yang terakhir

Berikut grafik overlay untuk target dan prediksi dengan hasil RMSE 0.01942 (belum maksimal)




Dengan nilai RMSE diatas, maka model bisa kita gunakan untuk memprediksi harga average OHLC saham PPRO minggu ke 3 bulan November (18 s.d 22 November 2019) menggunakan data dari 20-Okt-19;  27-Okt-19; 03-Nov-19; 10-Nov-19

data ke 91 terdiri dari 20-Okt-19; 27-Okt-19; 03-Nov-19; 10-Nov-19
  102.2500  101.7500   98.7500   95.2500


prediksi_92 =

   97.2781




Sesuai dengan hasil peramalan bahwa harga sama average pada 17 November 2019 yaitu 97.2781 atau dibulatkan menjadi 97. Kode selengkapnya


clc;clear all;close all;warning off;
data=readtable('PPRO Historical Data.xlsx');
harga = [data.Price,data.Open,data.High,data.Low];
harga = mean(harga,2);
input_target = [];
for i = 1: length(harga)
    if i+4>length(harga)
        break
    end
    input_target(i,1:4) = harga(i:i+3);
    input_target(i,5) = harga(i+4);
    
end
maksimal = 300;
minimal = 80;
delta = maksimal-minimal;
 
input_target_normalisasi = (input_target-minimal)./delta; 
 
 
 
P = input_target_normalisasi(:,1:4); %ambil kolom 1 s.d 4
T = input_target_normalisasi(:,end); %ambil kolom 5 atau yang terakhir
 
 
epoch = 100000;
lr = 0.25;
node_hidden = 10;
 
jaringan = latihjaringan(P,T,epoch, node_hidden,lr);
 
prediksi = simulasijaringan(jaringan,P);
 
 
RMSE = sqrt(mean((prediksi-T).^2));
 
 
for i=5:length(harga)
 sumbux(i-4) = (data.Date(1));
end
 
 
 
figure
plot(data.Date(5:end),T.*delta+minimal)
hold on
plot(data.Date(5:end),prediksi.*delta+minimal)
legend('Target','Prediksi')
xlabel('Data Mingguan')
ylabel('Harga')
title(['Nilai RMSE : ' num2str(RMSE)])
grid on
 
%prediksi untuk minggu III bulan november 2019
disp('data ke 91 terdiri dari 20-Okt-19; 27-Okt-19; 03-Nov-19; 10-Nov-19')
data_91 = [P(end,2:end), T(end)];
disp(data_91*delta+minimal)
 
prediksi_92 = simulasijaringan(jaringan,data_91)*delta+minimal %langsung denormalisasi
 




No comments: