BAB IV. IMPLEMENTASI DAN PEMBAHASAN
IV.2. Implementasi Manajemen Proses
Perancangan sistem yang sudah dilakukan, selanjutnya diimplementasikan ke dalam program. Untuk mendapatkan perusahaan yang sesuai dengan kriteria digunakan metode MACD. Yang digunakan dalam perhitungan MACD yaitu harga penutupan saham. Sebelum melakukan proses perhitungan, akan dilakukan pengecekan data yang tersedia dan mengambil data-data yang diperlukan untuk perhitungan. Dibawah ini contoh potongan program untuk mengambil data dari database.
lanjutkan% = 1
If lanjutkan% Then
If (periode_t1& > 0) And (periode_t2& > 0) And (periode_t2& > periode_t1&) Then
' ## cek jumlah data yang tersedia
string_perintah$ = "SELECT COUNT(*) FROM saham " _
+ "WHERE (kode_jenis = " +
Format(kode_jenis&, "#0") + ") " _
+ " AND (kode_perusahaan = '" + kode_perusahaan$ + "') " _
+ " AND (tanggal <= CURRENT_TIMESTAMP)"
jumlah_data& = SQLNilaiAgregat(db,
string_perintah$)
If jumlah_data& <= periode_t2& Then ' ## jumlah data tidak cukup nilai_balik& = erfDataTidakCukup lanjutkan% = 0
End If Else
' ## t1 dan/atau t2 tidak valid nilai_balik& = erfPeriodeTidakValid lanjutkan% = 0
End If End If
If lanjutkan% Then
' ## ambil data dari database berdasarkan kode perusahaan dan tanggal
offset_limit& = jumlah_data& - jmlh_limit& If offset_limit& < 0 Then offset_limit& = 0
string_perintah$ = "SELECT tanggal, hrg_buka,
hrg_rendah, hrg_tinggi, hrg_tutup, volume " _
+ "FROM saham WHERE (kode_jenis = " + Format(kode_jenis&, "#0") + ") " _
+ " AND (kode_perusahaan = '" +
kode_perusahaan$ + "') " _
+ " AND (tanggal <= CURRENT_TIMESTAMP) " _ + "ORDER BY tanggal " _
+ "LIMIT " + Format(offset_limit&, "#0") + ", " + Format(jmlh_limit&, "#0")
BukaRecordset db, RSData, string_perintah$ jumlah_baris& = RSData.RecordCount
IV.2.1 Menghitung SMA12 dan SMA26
Dengan menjumlahkan harga penutupan harian periode12 dan periode 26 yang disimpan dalam variablesum_hrttutup#. Setelah hasil penjumlahan didapat, dibagi periode 12 dan periode 26. Hasil perhitungan Simple Moving Average disimpan dalam variable nilai_rata2#. Contoh perhitungan Simple Moving Averagedapat dilihat pada potongan program di bawah ini.
Private Function HargaRata2#(Jumlah&)
' ## hitung rata-rata harga penutupan selama <Jumlah&> hari
If Jumlah > 0 Then For h& = 1 To Jumlah
sum_hrgtutup# = sum_hrgtutup# + hit(h&).h_tutup Next h&
nilai_rata2# = sum_hrgtutup# / Jumlah End If
HargaRata2 = nilai_rata2# End Function
IV.2.2 Menghitung EMA12 dan EMA26
Variable yang digunakan dalam perhitungan EMA adalah harga penutupan harian, exponential percentage, dan simple moving average. Perhitungan EMA yaitu harga penutupan periode 12 dan 26 dikalikan denganexponential percentage (2/periode+1) dan ditambahkan dengan hasil perhitungansimple moving average.
Private Function EMA#(n&, pt#, ma_t#) ' ## rumus EMA
EMA = (pt - ma_t) * (2 / (n + 1)) + ma_t End Function
hit(periode_t1&).ema_t1 = EMA(periode_t1&,
hit(periode_t1&).h_tutup, HargaRata2(periode_t1&))
hit(periode_t2&).ema_t2 = EMA(periode_t2&,
hit(periode_t2&).h_tutup, HargaRata2(periode_t2&)) For h& = periode_t1& + 1 To jumlah_baris&
If h& > periode_t1& Then
hit(h&).ema_t1 = EMA(periode_t1&, hit(h&).h_tutup, hit(h& -1).ema_t1)
End If
If h& >= periode_t2& Then If h& > periode_t2& Then
hit(h&).ema_t2 = EMA(periode_t2&, hit(h&).h_tutup, hit(h& -1).ema_t2)
End If
IV.2.3 Menghitung MACD
hit(h&).MACD = hit(h&).ema_t1 - hit(h&).ema_t2
IV.2.4 Menghitung SMA9
Cara perhitungannya sama dengan periode 12 dan periode 26, tapi tidak menggunakan harga penutupan harian melainkan menggunakan hasil perhitungan MACD. Hasil penjumlahan MACD periode 9 disimpan dalam variable jml_macd9hr#. Selanjutnya hasil penjumlahan MACD dibagi dengan periode 9. Hasil pembagiaannya disimpan dalam variable sma_9#.
jml_macd9hr# = jml_macd9hr# + hit(h&).MACD If h& = periode_t2& + 8 Then
sma_9# = jml_macd9hr# / 9
IV.2.5 Menghitung EMA9
Caranya dengan mengurangkan MACD dengan SMA periode 9 dikalikan dengan EP(2/(periode9+1) dan ditambahkan dengan SMA periode 9. Hasil perhitungan EMA periode 9 disimpan dalamarray hit(h&).ema_09.
If h& > periode_t2& + 8 Then
hit(h&).ema_09 = EMA(9, hit(h&).MACD, hit(h& - 1).ema_09) End If
IV.2.6 Menghitung Selisih dan Menentukan Rekomendasi Beli / Jual
Menghitung selisih dengan mengurangkan MACD dengan EMA periode 9. Hasil perhitungan selisih disimpan dalamarray hit(h&).selisih. Jika selisihnya positif mengindikasikan sinyal beli, dan jika selisihnya negatif mengindikasikan sinyal jual.
If h& >= periode_t2& + 8 Then
hit(h&).selisih = hit(h&).MACD
-hit(h&).ema_09
recomm$ = IIf(hit(h&).selisih < 0, "jual", "beli")
End If
IV.2.7 Menghitung Rata-rata Volume
Menghitung rata-rata volume dari setiap perusahaan. Hasil perhitungan rata-rata disimpan dalam variablemVolumeRata2.
jmlh_vol# = 0
For h& = 1 To jumlah_baris&
jmlh_vol# = jmlh_vol# + hit(h&).Volume Next h&
mVolumeRata2 = jmlh_vol# / jumlah_baris&
IV.2.8 Memberi Bobot Volume dan Gradien
Pemberian bobot gradien dengan mengalikan nilai gradien dengan (-10). Pemberian bobot volume dengan membandingkan volume dengan rata-rata volume. Untuk rekomendasi beli, pemberian bobotnya sebagai berikut :
-50 = volume > rata-rata + 50%
-25 = rata-rata + 10% < volume < rata-rata +50% 0 = rata-rata–10% < volume < rata-rata +10% 25 = rata-rata -50% < volume < rata-rata–10% 50 = volume < rata-rata - 50%
Untuk rekomendasi jual pemberian bobotnya sebagai berikut : 50 = volume > rata-rata + 50%
25 = rata-rata + 10% < volume < rata-rata +50% 0 = rata-rata–10% < volume < rata-rata +10% -25 = rata-rata -50% < volume < rata-rata–10% -50 = volume < rata-rata - 50%
Dibawah ini merupakan contoh potongan program pemberian bobot gradien dan volume.
skor_grad# = Gradien * -10
arah_volume% = IIf((UCase(Rekomendasi) = "BELI"), 1, -1) If Volume >= (1.5 * rata2vol#) Then
' ## volume >= (rata2vol + 50%) skor_volume# = -50 * arah_volume%
ElseIf ((1.1 * rata2vol#) <= Volume) And (Volume < (1.5 * rata2vol#)) Then
' ## (rata2vol + 10%) <= volume < (rata2vol + 50%) skor_volume# = -25 * arah_volume%
ElseIf ((0.9 * rata2vol#) <= Volume) And (Volume < (1.1 * rata2vol#)) Then
' ## (rata2vol - 10%) <= volume < (rata2vol + 10%) skor_volume# = 0
ElseIf ((0.5 * rata2vol#) <= Volume) And (Volume < (0.9 * rata2vol#)) Then
' ## (rata2vol - 50%) <= volume < (rata2vol - 10%) skor_volume# = 25 * arah_volume%
Else
' ## volume < (rata2vol - 50%) skor_volume# = 50 * arah_volume% End If
IV.2.9 Memberi Bobot Hasil Perhitungan MACD, Gradien, Volume
Untuk rekomendasi beli bobot MACD (0,5), gradient (0,2) dan volume (0,3). Untuk rekomendasi jual bobot MACD(0,5), gradient(0,3) dan volume (0,2). Selanjutnya masing-masing bobot tersebut dikalikan dengan nilai MACD, gradien dan volume. Kemudian semua hasil perkalian tersebut dijumlahkan. Hasil penjumlahan disimpan dalam variableskor_hasil#.
If Rekomendasi = "BELI" Then
Skor_hasil# = (0.5 * skor_macd#) + (0.2 * skor_grad#) + (0.3 * skor_volume#)
Else
Skor_hasil# = (0.5 * skor_macd#) + (0.3 * skor_grad#) + (0.2 * skor_volume#)
End If
IV.2.10 Mengurutkan Hasil Rekomendasi
Untuk rekomendasi beli, nilai skornya semakin negatif semakin direkomendasikan untuk dibeli. Untuk rekomendasi jual, nilai skornya semakin positif, semakin direkomendasikan untuk dijual.
If jml_hasil% > 0 Then
Select Case filter_rekom$ Case "BELI"
' ## urutkan hasil mulai dari skor terendah For i% = 1 To jml_hasil%
For j% = i% + 1 To jml_hasil%
If h_bobot(j%) < h_bobot(i%) Then n_bobot# = h_bobot(i%) h_bobot(i%) = h_bobot(j%) h_bobot(j%) = n_bobot# k_jenis& = kd_ktgr(i%) k_prshn$ = kd_prsh(i%) n_prshn$ = nm_prsh(i%) h_macd# = hsl_macd(i%) hsl_gradien# = h_gradien(i%) hsl_volume# = h_volume(i%) hsl_rata2# = h_rata2(i%) kd_ktgr(i%) = kd_ktgr(j%) kd_prsh(i%) = kd_prsh(j%) nm_prsh(i%) = nm_prsh(j%) hsl_macd(i%) = hsl_macd(j%) h_gradien(i%) = h_gradien(j%) h_volume(i%) = h_volume(j%) h_rata2(i%) = h_rata2(j%) kd_ktgr(j%) = k_jenis& kd_prsh(j%) = k_prshn$ nm_prsh(j%) = n_prshn$ hsl_macd(j%) = h_macd#
h_gradien(j%) = hsl_gradien# h_volume(j%) = hsl_volume# h_rata2(j%) = hsl_rata2# End If Next j% Next i% Case "JUAL"
' ## urutkan hasil mulai dari skor tertinggi For i% = 1 To jml_hasil%
For j% = i% + 1 To jml_hasil%
If h_bobot(j%) > h_bobot(i%) Then n_bobot# = h_bobot(i%) h_bobot(i%) = h_bobot(j%) h_bobot(j%) = n_bobot# k_jenis& = kd_ktgr(i%) k_prshn$ = kd_prsh(i%) n_prshn$ = nm_prsh(i%) h_macd# = hsl_macd(i%) hsl_gradien# = h_gradien(i%) hsl_volume# = h_volume(i%) hsl_rata2# = h_rata2(i%) kd_ktgr(i%) = kd_ktgr(j%) kd_prsh(i%) = kd_prsh(j%) nm_prsh(i%) = nm_prsh(j%) hsl_macd(i%) = hsl_macd(j%) h_gradien(i%) = h_gradien(j%) h_volume(i%) = h_volume(j%) h_rata2(i%) = h_rata2(j%) kd_ktgr(j%) = k_jenis& kd_prsh(j%) = k_prshn$ nm_prsh(j%) = n_prshn$ hsl_macd(j%) = h_macd# h_gradien(j%) = hsl_gradien# h_volume(j%) = hsl_volume# h_rata2(j%) = hsl_rata2# End If
IV.3 Implementasi Manajemen Dialog