Sinopsis
Contents
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
- stasioner
- trend
- siklus
- hitam dan putih
- 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
- menggunakan harga close atau harga penutupan bursa pasar.
- Menggunakan ke 4 harga yaitu OHLC nya
- Atau average(OHLC) nya
Adapun untuk pemilihan emiten saham harus dalam kondisi normalnya yaitu
- Tidak dalam masa stocks split, right issue atau aksi korporasi lainnya yang bisa membuat harga bergerak secara fluktuatif.
- 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.
- 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 ini
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