PERANCANGAN PROGRAM APLIKASI
3.1 Gambaran Umum Perancangan
Untuk merancang program aplikasi perhitungan portofolio ini, penulis menggunakan bahasa C++ dan Qt sebagai GUI toolkit yang dioperasikan pada sistem operasi GNU Linux. Secara umum, program aplikasi dapat dibagi menjadi 3 bagian, yaitu input, proses dan output. Bagian input adalah di mana user dapat memasukkan data saham-saham yang akan membentuk portofolio. Bagian proses adalah proses penghitungan untuk menghasilkan kurva efficient frontier. Bagian output adalah kurva efficient frontier dan diagram lingkaran.
Algoritma Critical Line yang digunakan untuk menghasilkan kurva efficient frontier [http://www.stanford.edu/~wfsharpe/mia/opt/mia_opt3.htm] adalah sebagai berikut :
• Tentukan saham-saham yang akan dimasukkan ke dalam portofolio.
Tiap saham yang dimasukkan tersebut akan memiliki informasi return, risiko, nilai batas bawah dan nilai batas atas. Nilai default batas bawah dan batas atas adalah 0 dan 1.
• Hitung matriks korelasi dan matrik kovarians dari saham-saham tersebut.
• Buat variabel CP bertipe array untuk menampung corner portfolio yang dihasilkan.
• Inisialisasi matriks D, matriks k dan matrik f.
1) dan elemen yang terletak pada dimensi (jumlah_saham) x (jumlah_saham) adalah 2 * matriks kovarians saham-saham.
⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = 0 1 1 1 1 ) , ( * 2 ) 1 , ( * 2 1 1 ) , 1 ( * 2 ) 1 , 1 ( * 2 n n Cov n Cov n Cov Cov D L M L M L
Matriks k dan f berupa matriks dengan ukuran (jumlah_saham + 1) x 1.
⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = 1 0 0 M k dan ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = 0 ) ( Re ) 1 ( Re n turn turn f M
• Inisialisasi nilai variabel risk tolerance rt dengan sembarang nilai positif.
• Tentukan portofolio dengan komposisi yang memberikan nilai return yang maksimum. Selanjutnya, kita dapat memberi status pada tiap variabel proporsi dengan kriteria sebagai berikut :
1. down : X(i) = LowerBound(i)
2. in : LowerBound(i) < X(i) < UpperBound(i) 3. up : X(i) = UpperBound(i)
Simpan portofolio yang dihasilkan ke dalam variabel CP. • Selama nilai rt > 0 maka lakukan :
− Hitung nilai matriks DD, kk dan ff berdasarkan status variabel yang ada dan bentuk persamaan DD * y = kk + rt * ff. Matriks DD, kk dan ff diperoleh dengan cara mengeluarkan variabel yang tidak masuk dalam nilai batasan batas bawah dan batas atas.
Persamaan y = inv(DD) * kk + rt * inv(DD) * ff dapat diubah menjadi y = ya + yb * rt dengan ya = inv(DD) * kk dan yb = inv(DD) * ff.
− Hitung nilai ∂L, ∂la dan ∂lb.
Dari bab sebelumnya diketahui bahwa ∂L=rt*f −D*y dan y = ya + yb * rt didapat : rt lb la L rt yb ya D f rt L * ) * ( * * ∂ + ∂ = ∂ + − = ∂ dengan ∂la=−D*yadan ∂lb= f −D*yb.
− Hitung nilai kritis rt berikutnya di mana akan terjadi perubahan status pada salah satu variabel. Sebuah variabel akan berubah statusnya dalam 4 kondisi berikut :
1. Jika yb(i) bernilai negatif, variabel yang berstatus in berubah menjadi up dengan nilai kritis crt(i) = (UpperBound(i) – ya(i)) / yb(i).
2. Jika yb(i) bernilai positif, variabel yang berstatus in berubah menjadi down dengan nilai kritis crt(i) = (LowerBound(i) – ya(i)) / yb(i).
3. Jika ∂lb(i) bernilai negatif, variabel yang berstatus down berubah menjadi in dengan nilai kritis crt(i) = -∂la(i) / ∂lb(i) .
4. Jika ∂lb(i) bernilai positif, variabel yang berstatus up berubah menjadi in dengan nilai kritis crt(i) = -∂la(i) / ∂lb(i) .
Nilai rt berikutnya adalah nilai crt yang maksimum dan variabel yang berubah status adalah variabel yang membuat nilai crt menjadi maksimum.
- Hitung corner portfolio y = inv(DD) * kk + rt * ff dengan nilai rt yang didapat sebelumnya dan simpan portofolio ke dalam variabel CP.
• Gambar kurva efficient frontier menggunakan data corner portfolio yang tersimpan pada variabel CP.
3.2 Diagram Alir Algoritma Critical Line
3.3 Contoh Perhitungan
Berikut ini adalah contoh perhitungan dengan menggunakan contoh data dari [http://www.stanford.edu/~wfsharpe/mia/opt/mia_opt3.htm]. Terdapat 3 saham dengan data berikut : R e t u r n =
[
2 .8 0 0 6 .3 0 0 1 0 .8 0 0]
, R is k =[
1 .0 0 0 7 .4 0 0 1 5 .4 0 0]
Co r r e la t io n =[
1 .0 0 0 0 .4 0 0 0 .1 5 0 0 .4 0 0 1 .0 0 0 0 .3 5 0 0 .1 5 0 0 .3 5 0 1 .0 0 0]
L o w e r B o u n d =[
0 .2 0 0 0 .2 0 0 0 .2 0 0]
, U p p e r B o u n d =[
0 .5 0 0 0 .5 0 0 0 .5 0 0]
Langkah 1 :Hitung matriks kovarians dengan menggunakan data-data di atas. n Correlatio Risk Risk iance Covar =( . T). ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ = 160 . 237 886 . 39 310 . 2 386 . 39 760 . 54 960 . 2 310 . 2 960 . 2 000 . 1 var iance Co Langkah 2 :
Inisialisasi matriks D , k dan f dan bentuk persamaan D * y = k + rt * f
⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ + ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ 0 ) 3 ( Re ) 2 ( Re ) 1 ( Re * 1 0 0 0 ) 3 ( ) 2 ( ) 1 ( * 0 1 1 1 1 ) 3 , 3 ( * 2 ) 2 , 3 ( * 2 ) 1 , 3 ( * 2 1 ) 3 , 2 ( * 2 ) 2 , 2 ( * 2 ) 1 , 2 ( * 2 1 ) 3 , 1 ( * 2 ) 2 , 1 ( * 2 ) 1 , 1 ( * 2 tur turn turn rt tmup X X X Cov Cov Cov Cov Cov Cov Cov Cov Cov
Langkah 3 :
Tentukan portofolio dengan komposisi yang memberikan nilai return maksimum dan simpan status dari variabel proporsi dari masing-masing saham. Portofolio ini merupakan corner portfolio yang pertama kali dihasilkan. Dari contoh di atas, maka dengan :
X =
[
0 .2 0 0 0 .3 0 0
0 .5 0 0
]
memberikan nilai return maksimumDari data di atas, maka didapat :
X(1) = down , X(2) = in , X(3) = up .
Langkah 4 :
Bentuk persamaan baru DD * y = kk + rt * f dengan cara memodifikasi persamaan D * y = k + rt * f. Modifikasi yang dilakukan adalah membuang variabel yang statusnya up dan down yakni X(1) dan X(3) sehingga didapat :
⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ + ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ = ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ ⎥ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎢ ⎣ ⎡ 0 0 ) 2 ( Re 0 * 1 ) 3 ( Re 0 ) 1 ( Re ) 3 ( ) 2 ( ) 1 ( * 0 1 1 1 1 1 0 0 1 ) 3 , 2 ( * 2 ) 2 , 2 ( * 2 ) 1 , 2 ( * 2 0 0 0 1 turn rt turn turn tmup X X X Cov Cov Cov Langkah 5 :
Hitung nilai ya dan yb yang didapat dari persamaan DD * y = kk + rt * f. y = inv(DD) * kk + rt * inv(DD) * kk dapat ditulis sebagai :
y = ya + yb *rt
Dari contoh data di atas, maka didapat : y a =
[
0 .2 0 0 0 .3 0 0 0 .5 0 0 − 7 3 .9 2 6]
dan y b =[
0 .0 0 0 0 .0 0 0 0 .0 0 0 6 .3 0 0]
Langkah 6 :Hitung nilai ∂ladan ∂lb.
Dari contoh data di atas maka didapat :
∂ la =
[
6 9 .4 4 0 0 .0 0 0 − 1 8 8 .0 8 9 − 1 .0 0 0]
dan ∂ lb =[
− 3 .5 0 0 0 .0 0 0 4 .5 0 0 0 .0 0 0]
Selanjutnya cari nilai kritis crt dan variabel mana yang statusnya akan berubah, kemudian cari nilai rt berikutnya yang merupakan nilai kritis crt yang maksimum. Dari contoh data di atas, didapat :
c r t =
[
1 9 .8 4 0 0 .0 0 0
4 1 .7 9 8
]
dan rt = max(crt)Jadi nilai rt = 41.798 dan variabel yang berubah status adalah X(3) dari up menjadi in .
Langkah 7 :
Hitung nilai y dari persamaan DD * y = kk + rt * f dengan menggunakan nilai rt yang didapat dari langkah 6.
y = inv(DD) * kk + rt * inv(DD) * ff y = ya + yb * rt
ya = inv(DD) *kk ; yb = inv(DD) * ff Dari contoh data di atas dan dengan nilai rt =41.798 , maka didapat :
y =
[
0 .2 0 0 0 .3 0 0 0 .5 0 0 1 9 4 .3 6 1
]
Matriks y yang dihasilkan merupakan salah satu corner portfolio yang akan membentuk kurva efficient frontier . Matriks y berisi proporsi dari masing-masing saham. Dengan demikian, return dan risiko portofolio dapat dihitung.
Selanjutanya portofolio disimpan dalam variabel array CP yang menampung semua corner portfolio yang dihasilkan.
Langkah 8 :
Ulangi langkah 4 sampai langkah 6 selama nilai rt bernilai lebih besar dari 0.
Setelah semua iterasi dilakukan, maka akan diperoleh sejumlah corner portfolio. Dengan semua corner portfolio tersebut, dapat digambarkan kurva efficient frontier.
3.4 Pengumpulan Data
Pengumpulan data berupa data harga saham-saham dilakukan dengan cara mengambil data sekunder yaitu data historis yang sudah ada melalui situs internet (finance.yahoo.com).
Dalam perancangan ini, penulis mengambil sampel berupa saham-saham emiten yang secara fundamental kinerjanya baik dan telah tercatat di Bursa Efek Indonesia (BEI) selama lebih dari 5 tahun. Seluruh data yang digunakan dalam perancangan merupakan data harga saham-saham yang berbasis waktu triwulan
(kuartal) selama 3 tahun pengamatan yang dimulai dari awal Januari 2005 sampai dengan akhir Desember 2007. Penulis akan mengambil saham-saham dari tiap sektor usaha berikut :
1. Sektor Pertambangan
Bumi Resources Tbk (BUMI) Timah Tbk (TINS)
Tambang Batubara Bukit Asam Tbk (PTBA) Medco Energi Internasional Tbk (MEDC) 2. Sektor Infrastruktur
Telekomunikasi Indonesia Tbk (TLKM) Perusahan Gas Negara (Persero) Tbk (PGAS) Berlian Laju Tanker Tbk (BLTA)
Citra Marga Nusaphala Persada Tbk (CMNP) 3. Sektor Properti dan Real Estate
Bakrieland Development Tbk (ELTY) Ciputra Development Tbk (CTRA) Modernland Realty Tbk (MDLN) Summarecon Agung Tbk (SMRA) 4. Sektor Keuangan
Bank Central Asia Tbk (BBCA) Bank Mandiri (Persero) Tbk (BMRI)
Bank Rakyat Indonesia (Persero) Tbk (BBRI) Bank Negara Indonesia Tbk (BBNI)
5. Sektor Barang Konsumsi
Indofood Sukses Makmur Tbk (INDF) Tunas Baru Lampung Tbk (TBLA) Kalbe Farma Tbk (KLBF)
Unilever Indonesia Tbk (UNVR)
3.5. Perancangan Struktur Menu 3.5.1 Struktur Menu Utama
Gambar 3.4 Struktur Menu Utama
3.5.2 Struktur Menu File
3.5.3 Struktur Menu View
Gambar 3.6 Struktur Menu View
3.5.4 Struktur Menu Insert
Gambar 3.7 Struktur Menu Insert
3.5.5 Struktur Menu Help
3.6 Perancangan Basis Data
Basis data yang digunakan adalah SQLite 3. Basis data disimpan dalam satu file yang tipenya dot db(.db). Penggunaan basis data dimaksudkan agar data-data lebih mudah diolah. Penulis akan membuat dua buah tabel di dalam database yakni sebagai berikut :
1. Tabel ms_header_stock
Tabel ms_header_stock berisi informasi utama tentang saham seperti kode emiten, nama saham dan sektor usahanya.
Tabel 3.1 Struktur tabel ms_header_stock
Kolom Tipe Keterangan
code Char(4) Kode emiten
name Varchar(100) Nama emiten
sector Varchar(50) Sektor usaha emiten
2. Tabel ms_detail_stock
Tabel ms_detail_stock berisi informasi harga pembukaan dan penutupan saham dalam periode tertentu.
Tabel 3.2 Struktur Tabel ms_detail_stock
Kolom Tipe Keterangan
code Char(4) Kode emiten
Kolom Tipe Keterangan
open numeric Harga pembukaan
close numeric Harga penutupan
3.7 Diagram Transisi (State Transition Diagram )
Diagram transisi memberikan keterangan kepada sistem tentang apa yang harus dikerjakan (action) dan kondisi (state) tertentu. Kondisi adalah suatu event pada external environment yang dapat dideteksi oleh sistem misalnya sinyal, interrupt, data, dan lain sebagainya. Hal ini akan menyebabkan perubahan terhadap state dari aktivitas x ke aktivitas y. Action adalah hal yang dapat dilakukan oleh sistem bila terjadi perubahan state atau data. Action akan menghasilkan output, message display pada layar, menghasilkan kalkulasi atau menghasilkan informasi lainnya.
3.7.1 STD Layar Utama
3.7.2 STD Menu File
3.7.3 STD Menu View
Gambar 3.11 STD Menu View 3.7.4 STD Menu Insert
3.7.5 STD Menu Help
Gambar 3.13 STD Menu Help
3.8 Perancangan Layar
Pada program aplikasi ini, penulis akan membuat rancangan layar sebagai berikut : 1. Layar Utama, terdiri atas 2 bagian, yaitu :
a. Layar Stock Data b. Layar Efficient Frontier 2. Layar Add Stock
3. Layar Insert New Portfolio 4. Layar About
3.8.1 Layar Stocks Data
yang akan dimasukkan ke dalam portofolio. Melalui layar ini, user dapat menambah , mengurangi serta mengubah variabel dan informasi yang berkaitan dengan saham terkait.
Untuk membuat file baru, user bisa memilih menu File | New. Sebelum dapat memasukkan data saham, user harus mengimpor database saham yang telah disediakan dengan memilih menu File | Import Database.
Selanjutnya untuk menambah / memasukkan data saham baru, user dapat menekan tombol 'Add Stock'. Setelah itu, akan muncul dialog 'Add Stock' di mana user akan bisa memilih saham dengan mengetikkan kode saham ataupun memilihnya dari daftar yang sudah ada. Informasi saham-saham yang telah dimasukkan akan ditampilkan pada tabel 'Stock Information'.
Untuk menghapus saham yang telah dimasukkan, user dapat memilih saham tersebut pada kemudian menekan tombol 'Remove Stock'. Untuk menghapus semua saham yang telah dimasukkan, user dapat menggunakan tombol 'Clear All'.
Tombol 'Reset Constraints' berguna untuk mengatur ulang nilai variabel min. bound dan max. bound menjadi nilai default yaitu 0 dan 1. Setelah semua data saham dimasukkan, user bisa menekan tombol 'Calculate Matrix' untuk menghitung matriks korelasi dari saham-saham yang telah dimasukkan. Matriks korelasi ditampilkan pada tabel 'Correlation Matrix'.
Setelah semua data telah siap, user dapat menekan tombol 'Generate Frontier' untuk menghitung dan menghasilkan kurva efficient frontier yang akan ditampilkan pada layar tab Efficient Frontier. Data yang tercatat di dalam tabel – tabel dapat disimpan ke dalam file melalui menu File | Save Data As.. dan dapat dibuka kembali melalui menu File | Load Data.
Gambar 3.14 Layar Stocks Data
3.8.2 Layar Efficient Frontier
Layar Efficient Frontier dirancang sebagai layar output yang menampilkan kurva efficient frontier beserta diagram lingkaran. Diagram lingkaran menampilkan komposisi saham-saham yang membentuk portofolio yang terletak pada sepanjang kurva efficient frontier . Tampilan pada kurva dapat diubah dengan memilih menu View pada layar utama. Menu 'Show Grid' untuk menampilkan garis-garis pembantu. Menu 'Show Frontier' untuk menampilkan kurva efficient frontier. Menu 'Show Stock' untuk menampilkan saham-saham yang membentuk portofolio secara terpisah. Menu 'Show Portfolio' untuk menampilkan portofolio baru yang dimasukkan oleh user melalui menu 'Insert New Portfolio' pada layar utama.
Pada layar ini, user bisa menggunakan mouse untuk mengklik titik – titik pada kurva dan portofolio yang dipilih akan ditampilkan pada diagram lingkaran. Selanjutnya, user dapat memasukkan jumlah modal dalam Rupiah dan tekan
tombol 'Calculate' untuk menghitung jumlah lot pada tiap saham yang membentuk portofolio yang telah dipilih dan hasil akan ditampilkan pada tabel. Tombol 'Save As...' untuk menyimpan data di tabel ke dalam file. Tombol 'Clear' untuk menghapus data-data pada tabel.
Gambar kurva efficient frontier dan diagram lingkaran dapat disimpan ke dalam file gambar melalui menu File | Save Frontier As.. dan menu File | Save Chart As.. pada layar utama.
Gambar 3.15 Layar Efficient Frontier
3.8.3 Layar Add Stock
Layar Add Stock merupakan dialog yang akan muncul ketika user memasukkan data saham baru dengan menekan tombol 'Add Stock' pada layar tab 'Stocks Data'. User dapat memilih saham dengan mengetik kode saham atau dengan memilihnya dari daftar yang tersedia. Setelah user memilih salah satu saham, maka
dialog ini akan menampilkan informasi mengenai nama saham, sektor usaha, daftar harga pembukaan dan penutupan setiap periode, return beserta risikonya. Tombol 'Add' untuk menambahkan saham tersebut ke dalam daftar. Tombol 'Cancel' untuk membatalkan dan menutup dialog.
Gambar 3.16 Layar Add Stock
3.8.4 Layar Insert New Portfolio
Layar 'Insert New Portfolio' merupakan dialog yang muncul ketika user mengklik menu 'Insert New Portfolio' pada layar utama. Pada layar ini, user dapat membuat portofolio baru dengan menetapkan komposisi dari masing-masing saham yang membentuk portofolio. User dapat menekan tombol 'OK' untuk memproses dan tombol 'Cancel' untuk membatalkan dan menutup dialog. Portofolio baru tersebut akan ditampilkan pada layar kurva efficient frontier .
Gambar 3.17 Layar Insert New Portfolio
3.8.5 Layar About
Layar About menampilkan informasi singkat dari program aplikasi seperti judul, data mahasiswa, dosen pembimbing, dan sebagainya.
3.9 Perancangan Modul
Untuk merancang program aplikasi, penulis menggunakan bahasa C++. Oleh karena itu, perancangan modul disusun dalam bentuk class(kelas). Adapun kelas-kelas yang dipakai dalam program aplikasi adalah sebagai berikut :
Kelas Stock, StockGroup dan Portfolio
Kelas-kelas ini adalah kelas-kelas yang berperan dalam menyimpan informasi saham, kumpulan saham dan portofolio. Kelas-kelas ini dilengkapi dengan metode-metode yang lengkap untuk mengolah data misalnya data return dan risiko.
Kelas Matrix, Statistic dan CriticalLineMethod
Kelas Matrix dan Statistic merupakan kelas dipakai untuk membantu perhitungan matematis dalam program. Kelas CriticalLineMethod merupakan kelas yang berisi algoritma inti CriticalLineMethod yang digunakan penulis dalam penulisan skripsi ini.
Kelas PlotWidget, ChartWidget, StockDataWidget
Ketiga kelas ini adalah kelas-kelas yang menangani tampilan GUI pada program aplikasi seperti grafik kurva, chart, tabel data, dsb.
Kelas MainWindow
Kelas MainWindow adalah kelas utama yang menggabungkan tampilan GUI dan algoritma matematis ke dalam satu kesatuan program aplikasi.
3.9.1 Layar Utama Modul Menu_Utama Mulai modul
Tampilkan menu utama
Lakukan pemilihan menu
Pilih popup menu 'File | Import Database'
Panggil modul New
Tutup modul menu utama Pilih popup menu 'File | Import Database'
Panggil modul Import
Tutup modul menu utama Pilih popup menu 'File | Load Data'
Panggil modul Load
Tutup modul menu utama Pilih popup menu 'File | Save Data'
Panggil modul Save
Tutup modul menu utama Pilih popup menu 'File | Save Data As ...'
Panggil modul Save_Data
Tutup modul menu utama
Pilih popup modul 'File | Save Frontier As ...'
Panggil menu Save_Frontier
Tutup modul menu utama Pilih popup menu 'File | Save Chart As ...'
Panggil modul Save_Chart
Tutup modul menu utama Pilih popup menu 'File | Quit'
Panggil modul Quit
Tutup modul menu utama Pilih popup menu 'View | Show Grid'
Panggil modul Show_Grid
Tutup modul menu utama Pilih popup menu 'View | Show Frontier'
Panggil modul Show_Frontier
Tutup modul menu utama
Pilih popup menu 'View | Show Individual Stock'
Panggil modul Show Stock
Tutup modul menu utama
Pilih popup menu 'View | Show Other Portfolio'
Panggil modul Show_Portfolio
Tutup modul menu utama Pilih popup menu 'Insert | New Portfolio' Panggil modul Insert_Portfolio
Tutup modul menu utama Pilih popup menu 'Help | About'
Tutup modul menu utama Pilihan selesai
Akhir modul menu utama Modul New
Tampilkan dialog box 'Are you to close this application ?' Jika user menekan tombol 'Yes' maka
Hapus isi tabel 'Stock Information' Hapus isi tabel 'Correlation Matrix'
Hapus grafik dan diagram lingkaran pada layar 'Efficient Frontier' Akhir jika
Tutup dialog box Akhir modul New Modul Import Mulai modul
Tampilkan import dialog box
Pilih file database yang akan diimpor Jika user menekan tombol 'OK' maka
Baca file database dan simpan ke dalam variabel objek database Tampilkan kotak pesan 'Database imported.'
Akhir jika Tutup import dialog box Akhir modul Import
Modul Load_Data Mulai modul
Jika database telah diimpor maka Tampilkan open dialog box
Pilih file data yang akan dibaca Jika user menekan tombol 'OK' maka
Baca file data yang dipilih dan simpan ke dalam
variabel
Tampilkan data pada tabel-tabel
Akhir jika
Tutup open dialog box selain itu
Tampilkan kotak pesan 'Please import database before loading data.' Akhir jika
Akhir modul Load_Data Modul Save
Mulai modul
Simpan file dengan filename yang sama
Tampilkan status file tersimpan di bagian status bar Akhir modul Save
Modul Save_Data Mulai modul
Tampilkan save as dialog box
Pilih lokasi dan ketik filename yang hendak disimpan Jika user menekan tombol 'OK' maka
Simpan data di tabel-tabel ke dalam file
Tampilkan status file tersimpan pada bagian status bar Akhir jika
Tutup save as dialog box Akhir modul Save_Data
Modul Save_Frontier Mulai modul
Tampilkan save as dialog box
Pilih lokasi dan ketik filename yang hendak disimpan Jika user menekan tombol 'OK' maka
Simpan kurva efficient frontier ke dalam file
Tampilkan status file tersimpan pada bagian status bar Akhir jika
Tutup save as dialog box Akhir modul Save_Frontier Modul Save_Chart
Mulai modul
Tampilkan save as dialog box
Pilih lokasi dan ketik filename yang hendak disimpan Jika user menekan tombol 'OK' maka
Simpan diagram lingkaran ke dalam file
Tampilkan status file tersimpan pada bagian status bar Akhir jika
Tutup save as dialog box Akhir modul Save_Chart
Modul Quit Mulai modul
Tampilkan dialog box 'Are you to close this application ?' Jika user menekan tombol 'Yes' maka
Keluar dari program Akhir jika
Tutup dialog box Akhir modul Quit Modul Show_Grid Mulai modul
Tampilkan grid pada bagian grafik Akhir modul Show_Grid
Modul Show_Frontier Mulai modul
Tampilkan kurva frontier pada bagian grafik Akhir modul Show_Frontier
Modul Show_Stock Mulai modul
Tampilkan masing-masing stock pada bagian grafik Akhir modul Show_Stock
Modul Show_Portfolio Mulai modul
Tampilkan portofolio yang dibuat oleh user pada bagian grafik Akhir modul Show_Portfolio
Modul Insert_Portfolio Mulai modul
Tampilkan dialog 'Insert New Portfolio' Isi data pada dialog
Jika user menekan tombol 'OK' maka
Simpan data portofolio dan tampilkan pada bagian grafik Akhir jika
Tutup dialog 'Insert Portfolio' Akhir modul Insert_Portfolio Modul About
Mulai modul
Tampilkan dialog 'About' Klik 'OK'
Tutup dialog 'About' Akhir modul About 3.9.2 Layar Stocks Data Modul Add_Stock
Jika jumlah baris pada tabel 'Stock Information' = 20 maka
Tampilkan kotak pesan 'Maximum 20 stocks reached.' selain itu
Jika database belum diimpor maka
Tampilkan kotak pesan 'Please import database
before add stock.'
selain itu
Tampilkan dialog 'Add Stock' Pilih salah satu saham
Jika user menekan tombol 'OK' maka
Tambahkan satu baris informasi saham
Information'
Akhir jika
Tutup dialog 'Add Stock'
Akhir jika
Akhir jika Akhir modul Add_Stock Modul Remove_Stock
Jika jumlah baris pada tabel 'Stock Information' > 0 maka
Tampilkan dialog box 'Are you sure to remove this stock data ?' Jika user menekan tombol 'Yes' maka
Hapus baris saham yang dipilih oleh user pada tabel 'Stock
Information'
Nonaktifkan tombol 'Generate Frontier' Akhir jika
Tutup dialog box Akhir jika
Akhir modul Remove_Stock Modul Clear_All
Tampilkan dialog box 'Are you sure to clear all the stock data?' Jika user menekan tombol 'Yes' maka
Hapus semua data saham pada tabel 'Stock Information' Nonaktifkan tombol 'Remove Stock'
Nonaktifkan tombol 'Clear All'
Nonaktifkan tombol 'Reset Constraints' Nonaktifkan tombol 'Calculate Matrix' Nonaktifkan tombol 'Generate Frontier' Akhir jika
Tutup dialog box Akhir modul Clear_All Modul Reset_Constraints
Jika jumlah baris pada tabel 'Stock Information' > 0 maka Set n = jumlah baris pada tabel 'Stock Information' Lakukan pengulangan dari i=0 sampai i=n – 1
Set nilai kolom 'Min. Bound' pada baris ke-i menjadi 0 Set nilai kolom 'Max. Bound' pada baris ke-i menjadi 0 Akhir pengulangan
Akhir jika
Akhir modul Reset_Constraints Modul Calculate_Matrix
Jika jumlah baris pada tabel 'Stock Information' > 0 maka Set n = jumlah baris pada tabel 'Stock Information' Ambil data return dan risk dari tabel 'Stock Information'
dengan jumlah baris pada tabel 'Stock Information' Lakukan pengulangan dari i = 0 sampai i = n – 1
Lakukan pengulangan dari j = 0 sampai j = n - 1
Hitung nilai korelasi antara saham[i] dengan saham[j]
Tampilkan hasil tersebut pada tabel 'Correlation Matrix' baris ke-i dan kolom ke-j
Akhir pengulangan
Akhir pengulangan
Aktifkan tombol 'Generate Frontier' Akhir jika
Akhir modul Calculate_Matrix Modul Generate_Frontier
Ambil data-data pada tabel 'Stock Information' dan tabel 'Correlation Matrix' Hitung titik – titik pada kurva dengan menggunakan algoritma Critical Line Gambar kurva efficient frontier pada bagian layar 'Efficient Frontier'
Tampilkan kotak pesan 'Efficient frontier generated.' Pindahkan tampilan aktif ke layar 'Efficient Frontier' Akhir modul Generate_Frontier
3.9.3 Layar Efficient Frontier Modul Draw_Stock
Ambil nilai variabel array _stocks yang berisi semua saham yang dimasukkan user Set n = jumlah data dalam variabel array _stocks
Set warna titik menjadi biru
Lakukan pengulangan dari i =0 sampai i = n – 1 Set x = _stocks[i].risk
Set y = _stocks[i].return
Kalkulasi nilai x dan nilai y yang sesuai dengan ukuran window Gambar titik (x, y) pada layar
Akhir pengulangan Akhir Modul Draw_Stock Modul Draw_Portfolio
Ambil nilai variabel array _portfolios yang berisi portofolio yang dimasukkan oleh user
Set n = jumlah data dalam variabel array _portfolios Set warna titik menjadi ungu
Lakukan pengulangan dari i =0 sampai i = n – 1 Set x = _portfolios[i].risk
Set y = _portfolios[i].return
Kalkulasi nilai x dan nilai y yang sesuai dengan ukuran window Gambar titik (x, y) pada layar
Akhir pengulangan Akhir Modul Draw_Portfolio
Modul Draw_Frontier
Ambil nilai variabel array _frontier yang dihasilkan dari algoritma Critical Line Set n = jumlah data dalam variabel array _frontier
Set warna kurva menjadi hijau
Lakukan pengulangan dari i =0 sampai i = n – 1 Set x = _frontier[i].risk
Set y = _frontier[i].return
Kalkulasi nilai x dan nilai y yang sesuai dengan ukuran window Simpan nilai x dan y ke array points
Akhir pengulangan
Gambar garis yang menghubungkan titik-titik pada array _points Akhir modul Draw_Frontier
Modul Calculate
Ambil data variabel bobot portofolio pada diagram lingkaran Set n = jumlah saham pada diagram lingkaran
Lakukan pengulangan dari nilai i = 0 sampai i = n – 1 Set lot = ( capital * 1000000 / harga saham[i] ) / 500
Tampilkan kode saham dan jumlah lot pada baris ke-i dari tabel Akhir pengulangan
Akhir modul Calculate Modul Clear
Hapus semua data pada tabel layar 'Efficient Frontier' Akhir modul Clear
Modul Save_As
Tampilkan save as dialog box
Pilih lokasi dan ketik filename yang hendak disimpan Jika user menekan tombol 'OK' maka
Simpan data di tabel-tabel ke dalam file Akhir jika
Tutup save as dialog box Akhir modul Save_As