BAB IV IMPLEMENTASI DAN HASIL
4.1 Implementasi program dan Pembuatan Database …
Pada proses ini dilakukan pembuatan database pada MySQL menggunakan SQL yog. Database yang dibuat bernama sahambollinger. Database ini akan berisi tabel-tabel yang akan diperlukan oleh program bantu pemilihan saham dengan Indikator Bollinger Bands. Berikut sintaks pembuatan database sahambollinger dan tabel-tabel, stored procedure, dan view pada database sahambollinger :
4.1.1 Tabel saham
CREATE TABLE `saham` (
`No_saham` int(11) NOT NULL auto_increment, `kode_perusahaan` varchar(50) default NULL, `nm_perusahaan` varchar(100) NOT NULL, `Prev` double default NULL,
`High` double default NULL, `Low` double default NULL, `Close` double default NULL, `Volume` double default NULL, `Tanggal` date default NULL, PRIMARY KEY (`No_saham`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
4.1.2 View temp
View temp berisi query untuk menghitung nilai garis middle bands
/*!50001 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `temp` AS (select (sum(`saham`.`Close`) /
count(`saham`.`kode_perusahaan`)) AS `middle`,`saham`.`kode_perusahaan` AS `kode`,`saham`.`Tanggal` AS `Tanggal` from `saham` where
(`saham`.`kode_perusahaan` like _latin1'%%') group by `saham`.`kode_perusahaan` order by
`saham`.`kode_perusahaan`,`saham`.`Tanggal`) */;
4.1.3 View cleaningbeli
View cleaningbeli berisi query untuk menghitung nilai garis lower bands, dimana nilai lower bands merupakan hasil perhitungan yang menggunakan middle bands yang diambil dari view temp.
/*!50001 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `cleaningbeli` AS (select `sh`.`kode_perusahaan` AS `kode_perusahaan`,`sh`.`Low` AS `Low`,round((`sub`.`middle` - (2 * sqrt(avg(((`sh`.`Close` - `sub`.`middle`) * (`sh`.`Close` -
`sub`.`middle`)))))),0) AS `lower_bands` from (`temp` `sub` join `saham` `sh`) where (`sub`.`kode` = `sh`.`kode_perusahaan`) group by `sh`.`kode_perusahaan` order by `sh`.`kode_perusahaan`,`sh`.`Tanggal`) */;
4.1.4 View cleaningjual
View cleaningbeli berisi query untuk menghitung nilai garis upper bands, dimana nilai upper bands merupakan hasil perhitungan yang menggunakan middle bands yang diambil dari view temp.
/*!50001 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `cleaningjual` AS (select `sh`.`kode_perusahaan` AS `kode_perusahaan`,`sh`.`High` AS `High`,round((`sub`.`middle` + (2 * sqrt(avg(((`sh`.`Close` - `sub`.`middle`) * (`sh`.`Close` -
`sub`.`middle`)))))),0) AS `upper_bands` from (`temp` `sub` join `saham` `sh`) where (`sub`.`kode` = `sh`.`kode_perusahaan`) group by `sh`.`kode_perusahaan` order by `sh`.`kode_perusahaan`,`sh`.`Tanggal`) */;
4.1.5 View vdata
View vdata berisi query untuk menghitung ‘sinyalwarna’,
`sinyalekor`,`bobot_ekor`, `warna`, `warna_badan`.
/*!50001 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `vdata` AS (select `saham`.`kode_perusahaan` AS `kode_perusahaan`,`saham`.`Tanggal` AS `Tanggal`,`saham`.`Prev` AS `Prev`,`saham`.`High` AS `High`,`saham`.`Low` AS `Low`,`saham`.`Close` AS `Close`,if((`saham`.`Close` >
`saham`.`Prev`),round((((`saham`.`Close` - `saham`.`Prev`) /
`saham`.`Close`) * 100),0),round((((`saham`.`Prev` - `saham`.`Close`) / `saham`.`Prev`) * 100),0)) AS `sinyalwarna`,if((`saham`.`Close` >
`saham`.`Prev`),round((((`saham`.`Prev` - `saham`.`Low`) /
`saham`.`Prev`) * 100),0),round((((`saham`.`Close` - `saham`.`Low`) / `saham`.`Close`) * 100),0)) AS `sinyalekor`,if((if((`saham`.`Close` > `saham`.`Prev`),round((((`saham`.`Prev` - `saham`.`Low`) /
`saham`.`Prev`) * 100),0),round((((`saham`.`Close` - `saham`.`Low`) / `saham`.`Close`) * 100),0)) > 3),_utf8'long',_utf8'short') AS
`bobot_ekor`,(case when (`saham`.`Close` > `saham`.`Prev`) then _utf8'green' when (`saham`.`Prev` > `saham`.`Close`) then _utf8'red' else _utf8'yellow' end) AS `warna`,if((if((`saham`.`Close` >
`saham`.`Prev`),round((((`saham`.`Close` - `saham`.`Prev`) /
`saham`.`Close`) * 100),0),round((((`saham`.`Prev` - `saham`.`Close`) / `saham`.`Prev`) * 100),0)) > 2),_utf8'long',_utf8'short') AS
`warna_badan` from `saham` where (`saham`.`kode_perusahaan` like _latin1'%%') group by `saham`.`kode_perusahaan` order by
4.1.6 View ekorwarnabeli
View ekorwarnabeli merupakan query untuk memberikan bobot terhadap gabungan antara hasil kolom warna, bobot ekor dan warna badan yang diambil dari view vdata. Pemberian bobot ini adalah peberian bobot untuk sinyal beli berdasarkan panjang ekor dan warna candlestick
/*!50001 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `ekorwarnabeli` AS (select
`vdata`.`kode_perusahaan` AS `kode_perusahaan`,(if(((`vdata`.`warna` = _utf8'red') and (`vdata`.`warna_badan` = _utf8'long') and
((`vdata`.`bobot_ekor` = _utf8'short') or (`vdata`.`bobot_ekor` = _utf8'long'))),0,if(((`vdata`.`warna` = _utf8'red') and
(`vdata`.`warna_badan` = _utf8'short') and (`vdata`.`bobot_ekor` = _utf8'long')),14,if(((((`vdata`.`warna` = _utf8'yellow') and
(`vdata`.`warna_badan` = _utf8'short')) or (`vdata`.`warna_badan` = _utf8'long')) and (`vdata`.`bobot_ekor` =
_utf8'long')),14,if(((`vdata`.`warna` = _utf8'green') and
(`vdata`.`warna_badan` = _utf8'long') and (`vdata`.`bobot_ekor` = _utf8'long')),15,if(((`vdata`.`warna` = _utf8'green') and
(`vdata`.`warna_badan` = _utf8'short') and (`vdata`.`bobot_ekor` = _utf8'long')),20,if(((`vdata`.`warna` = _utf8'red') and
(`vdata`.`warna_badan` = _utf8'short') and (`vdata`.`bobot_ekor` = _utf8'short')),4,if(((((`vdata`.`warna` = _utf8'yellow') and
(`vdata`.`warna_badan` = _utf8'short')) or (`vdata`.`warna_badan` = _utf8'long')) and (`vdata`.`bobot_ekor` =
_utf8'short')),6,if(((`vdata`.`warna` = _utf8'green') and
(`vdata`.`warna_badan` = _utf8'long') and (`vdata`.`bobot_ekor` = _utf8'short')),10,if(((`vdata`.`warna` = _utf8'green') and
(`vdata`.`warna_badan` = _utf8'short') and (`vdata`.`bobot_ekor` = _utf8'short')),8,1))))))))) * 0.01) AS `hasil_akhir` from `vdata`) */;
4.1.7 View ekorwarnajual
View ekorwarnajual merupakan query untuk memberikan bobot terhadap gabungan antara hasil kolom warna, bobot ekor dan warna badan yang diambil dari view vdata. Pemberian bobot ini adalah peberian bobot untuk sinyal jual berdasarkan panjang ekor dan warna candlestick
/*!50001 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `ekorwarnajual` AS (select
`vdata`.`kode_perusahaan` AS `kode_perusahaan`,(if(((`vdata`.`warna` = _utf8'red') and (`vdata`.`warna_badan` = _utf8'long') and
(`vdata`.`bobot_ekor` = _utf8'long')),15,if(((`vdata`.`warna` = _utf8'red') and (`vdata`.`warna_badan` = _utf8'long') and
(`vdata`.`bobot_ekor` = _utf8'short')),10,if(((`vdata`.`warna` = _utf8'green') and (`vdata`.`warna_badan` = _utf8'long') and
((`vdata`.`bobot_ekor` = _utf8'short') or (`vdata`.`bobot_ekor` = _utf8'long'))),0,if(((`vdata`.`warna` = _utf8'red') and
(`vdata`.`warna_badan` = _utf8'short') and (`vdata`.`bobot_ekor` = _utf8'long')),20,if(((((`vdata`.`warna` = _utf8'yellow') and
(`vdata`.`warna_badan` = _utf8'short')) or (`vdata`.`warna_badan` = _utf8'long')) and (`vdata`.`bobot_ekor` =
_utf8'long')),14,if(((`vdata`.`warna` = _utf8'green') and
(`vdata`.`warna_badan` = _utf8'short') and (`vdata`.`bobot_ekor` = _utf8'long')),14,if(((`vdata`.`warna` = _utf8'red') and
(`vdata`.`warna_badan` = _utf8'short') and (`vdata`.`bobot_ekor` = _utf8'short')),8,if(((((`vdata`.`warna` = _utf8'yellow') and
(`vdata`.`warna_badan` = _utf8'short')) or (`vdata`.`warna_badan` = _utf8'long')) and (`vdata`.`bobot_ekor` =
_utf8'short')),6,if(((`vdata`.`warna` = _utf8'green') and
(`vdata`.`warna_badan` = _utf8'short') and (`vdata`.`bobot_ekor` = _utf8'short')),4,1))))))))) * 0.01) AS `hasil_akhir(%)` from `vdata`) */;
4.1.8 Stored Procedured persenKeluar
Potongan stored procedured dibawah adalah query untuk menghitung besar nilai yang keluar dari garis lower bands.baik itu nilai prev,close, high ataupun low.Keempat nilai tersebut ditotal maka akan terlihat besar nilai yang keluar dari garis lower bands.
DELIMITER $$
/*!50003 CREATE DEFINER=`root`@`localhost` PROCEDURE `persenKeluar`(in KD varchar(10))
BEGIN
select distinct kode_perusahaan,nm_perusahaan, (case when
if (Prev > round(sub.middle-(2* SQRT(avg((sh.close-sub.middle)*(sh.close-sub.middle))))),0,
(((round(sub.middle-(2* SQRT(avg((sh.close-sub.middle)*(sh.close-sub.middle)))))-Prev)/
round(sub.middle-(2* SQRT(avg((sh.close-sub.middle)*(sh.close-sub.middle))))))*100)) +
if (High > round(sub.middle-(2* SQRT(avg((sh.close-sub.middle)*(sh.close-sub.middle))))),0,
(((round(sub.middle-(2* SQRT(avg((sh.close-sub.middle)*(sh.close-sub.middle)))))-High)/
round(sub.middle-(2* SQRT(avg((sh.close-sub.middle)*(sh.close-sub.middle))))))*100)) +
if (Low > round(sub.middle-(2* SQRT(avg((sh.close-sub.middle)*(sh.close-sub.middle))))),0,
(((round(sub.middle-(2* SQRT(avg((sh.close-sub.middle)*(sh.close-sub.middle)))))-Low)/
round(sub.middle-(2* SQRT(avg((sh.close-sub.middle)*(sh.close-sub.middle))))))*100)) +
if (Close > round(sub.middle-(2* SQRT(avg((sh.close-sub.middle)*(sh.close-sub.middle))))),0,
(((round(sub.middle-(2* SQRT(avg((sh.close-sub.middle)*(sh.close-sub.middle)))))-Close)/ +
round(sub.middle-(2*
from
(select (SUM(Close)/COUNT(kode_perusahaan)) 'middle',kode_perusahaan 'kode' ,Tanggal
from saham
WHERE kode_perusahaan LIKE KD group by kode_perusahaan
order by kode_perusahaan desc, Tanggal desc)sub , saham sh
where
sub.kode = sh.kode_perusahaan group by sh.kode_perusahaan
order by sh.kode_perusahaan desc, sh.Tanggal desc,'persen_keluar (%)' desc;
END */$$ DELIMITER ;
4.1.9 Stored Procedured persenKeluarJual
Potongan stored procedured dibawah adalah query untuk menghitung besar nilai yang keluar dari garis upper bands. baik itu nilai prev,close, high ataupun low.Keempat nilai tersebut ditotal maka akan terlihat besar nilai yang keluar dari garis lower bands.
DELIMITER $$
/*!50003 CREATE DEFINER=`root`@`localhost` PROCEDURE `persenKeluarJual`(in KDJUAL varchar(10))
BEGIN
select kode_perusahaan,nm_perusahaan, (case when
if (Prev < round(sub.middle+(2* SQRT(avg((sh.close-sub.middle)*(sh.close-sub.middle))))),0,
(((Prev-round(sub.middle+(2* SQRT(avg((sh.close-sub.middle)*(sh.close-sub.middle))))))/Prev)*100)) +
if (High < round(sub.middle+(2* SQRT(avg((sh.close-sub.middle)*(sh.close-sub.middle))))),0,
(((High-round(sub.middle+(2* SQRT(avg((sh.close-sub.middle)*(sh.close-sub.middle))))))/High)*100)) +
if (Low < round(sub.middle+(2* SQRT(avg((sh.close-sub.middle)*(sh.close-sub.middle))))),0,
(((Low-round(sub.middle+(2* SQRT(avg((sh.close-sub.middle)*(sh.close-sub.middle))))))/Low)*100)) +
if (Close < round(sub.middle+(2* SQRT(avg((sh.close-sub.middle)*(sh.close-sub.middle))))),0,
(((Close-round(sub.middle+(2* SQRT(avg((sh.close-sub.middle)*(sh.close-sub.middle))))))/Close)*100)) 'bobot final (%)'
from
(select (SUM(Close)/COUNT(kode_perusahaan)) 'middle',kode_perusahaan 'kode' ,Tanggal
from saham
WHERE kode_perusahaan LIKE KDJUAL group by kode_perusahaan
order by kode_perusahaan desc, Tanggal desc)sub , saham sh
where
sub.kode = sh.kode_perusahaan group by sh.kode_perusahaan
order by sh.kode_perusahaan desc, sh.Tanggal desc; END */$$
DELIMITER ;
4.1.10 Volume
Potongan program bibawah adalah query untuk menghitung bobot volume.
Select
(SUM(Volume/500)/COUNT(kode_perusahaan))'rata_vol',(Volume/500)'VOL_PER SATUAN',(select
0.2*(SUM(Volume/500)/COUNT(kode_perusahaan))'vol_perbandingan' from saham
where kode_perusahaan like " + temp.get(i) + "'
group by kode_perusahaan)'VOL_PERBANDINGAN',kode_perusahaan , sum(IF ((Volume/500)>(select
0.2*(SUM(Volume/500)/COUNT(kode_perusahaan)) from saham
where kode_perusahaan like " + temp.get(i) + "' group by kode_perusahaan),1,0))'Jumlah_liquid', (sum(IF ((Volume/500)>(select
0.2*(SUM(Volume/500)/COUNT(kode_perusahaan)) from saham
where kode_perusahaan like " + temp.get(i) + "' group by kode_perusahaan),1,0))/20*100)'hasil' from saham
WHERE kode_perusahaan LIKE " + temp.get(i) + "' GROUP BY kode_perusahaan