BAB III
PERANCANGAN PROGRAM APLIKASI
3.1 Perancangan Program
Untuk merancang program pemilihan saham dengan metode quadratic programming, penulis menggunakan Delphi 6.0 dan Microsoft Access 2002 yang dioperasikan pada sistem operasi Microsoft Windows XP.
Algoritma perhitungan dengan metode quadratic programming adalah sebagai berikut :
Algoritma pemilihan saham dengan quadratic programming metode Wolfe. Setelah membuka data dari database, maka lakukan :
• Tentukan jumlah saham serta periode yang hendak dimasukkan dalam portfolio. • Cek apakah jumlah saham yang dipilih lebih dari 1. Jika ya, hitung return. Jika
tidak, minta user untuk memilih saham lagi.
• Hitung return dari masing-masing saham yang telah dipilih untuk dianalisa. • Hitung rata-rata dari setiap return saham.
• Hitung risiko dari tiap-tiap saham dengan menghitung standar deviasi dan varians.
• Hitung kovarians untuk mengetahui hubungan antar saham, kemudian masukkan nilai yang didapat ke matrix kovarians.
• Tentukan nilai expected return yang diharapkan.
• Tambahkan variabel buatan, yaitu s1 dan s2 ke dalam persamaan serta kondisi Karush Kuhn Tucker.
kolom w dan a0.
• Set nilai leaving variable mula-mula = 0, nilai pivot column mula-mula = 2* jumlah saham + 6.
• Selama leaving variable pada tabel iterasi tidak sama dengan ‘a0’ maka lakukan :
Cari pivot row dengan langkah :
Membagi kolom solution dengan kolom pivot column. Hasil bagi terkecil merupakan pivot row.
Bila hasil bagi yang didapat = 0, maka di cek apakah nilai dalam pivot column negatif atau postif. Jika hasil nya negatif, maka walaupun 0 merupakan hasil bagi terkecil, baris tersebut tidak dapat dijadikan pivot row.
Tentukan new pivot row dengan cara :
Baris yang menjadi pivot row dibagi dengan pivot point (perpotongan pivot row dengan pivot column).
Mencari nilai baru untuk baris-baris lainnya dengan cara : Baris baru = baris lama- pengali * new pivot row. Tentukan pivot column yang baru dengan ketentuan (**):
Bila pada kolom basic variable terdapat variabel s1 maka λ1 tidak boleh menjadi pivot column.
Bila pada kolom basic variable terdapat variabel s2 maka λ2 tidak boleh menjadi pivot column.
Bila pada kolom basic variable terdapat variabel xi maka λi+3 tidak boleh menjadi pivot column.
Dari calon pivot column, dipilih pivot colum baru dengan nilai w terkecil.
• Tunjukkan nilai xi yang didapat.
Hitung return Hitung rata-rata return setiap
saham Hitung standard deviasi, variance
Tentukan nilai expected return yang diharapkan
Pilih saham Apakah banyak saham > 1 Ya Tidak Hitung covariance
Tambahkan variabel buatan s1 dan s2 sesuai kondisi KKT
Set nilai leaving_var mula-mula = 0 dan pivot_column mula-mula =
2*numstock+6 For i = 2 to numstock + 3 Grid[i,pivot_column] = 0 ? Ya Tidak Hitung hasil_bagi[i]=Grid[i,2*numstock+7]/G rid[i,pivot_column] Set hasil_bagi[i] = 100000 Set i = i+ 1
Tentukan variabel maks = 0
*
For I = 2 to numstock + 3
Hasil_bagi[i] =
0 ? Tidak Set maks=maks
Ya Kolom[I,pivot_ column] > maks ? Set maks=maks Max = max Tidak Ya
Tentukan maks = kolom[i,pivot_column] Max = i Set i = i + 1 Nilai maks > 0 ? Ya Pivot_row = maks Tidak Tentukan nilai min = 100000
For I = 2 to numstock + 3
Hasil_bagi[i] tidak = 0 ?
Tidak
Tentukan nilai min = min Ya
Hasil_bagi[i] < min ?
Ya
Set i = i + 1
Tidak Tentukan min= min Min_r = min_r
Tentukan Min = hasil bagi[i], min r = i
B A
Tentukan pivot row = min
Set leaving_var = Identifier[pivot_row,0] Identifier[pivot_row,0]= identifier[0,pivot_column] Set pivot_element = Grid[pivot_row, pivot_column]
For i = 1 to numstock + 3
Tentukan pengali[i] = Grid[I,pivot column]
Set i = i + 1 For i = 1 to numstock + 3 I = pivot_row ? Ya Tidak For j = 1 to 2*numstock+7
Tentukan Grid[i,j] = Grid[i,j]/pivot_element New_pivot_row[j] = Grid[i,j]
Set j = j + 1
Set i = i + 1
B
Gambar 3.1 Flow chart pemilihan saham dengan Quadratic Programming algoritma wolfe For i = 1 to numstock + 3 For j = 1 to 2*numstock + 7 I <> pivot_row ? Ya Tidak
Tentukan Grid[i,j]=Grid[i,j] – pengali[i] * new_pivot_row[j]
Set j = j + 1
Set i = i + 1
Cari pivot_column baru dengan ketentuan (**) Leaving_var = a0 ? Ya Tunjukkan hasil finish tidak Kembali ke * C
Contoh perhitungan
No Periode RBBCA RINDF RPTBA
1 Agustus 2004 -2,70% -3,57% 10,71% 2 September 2004 11,11% 3,85% 9,68% 3 Oktober 2004 20% -3,57% 8,82% 4 November 2004 14,58% 11,11% 58,33% 5 Desember 2004 8,18% 6,66% 0% 6 Januari 2005 -2,54% 10,13% 8,55% 7 Februari 2005 13,91% 6,90% 0,60% 8 Maret 2005 4,62% 24,73% -9,52% 9 April 2005 -9,56% -11,30% 1,97% 10 Mei 2005 12,10% 21,21% 1,30% 11 Juni 2005 4,35% -8,33% 1,92% 12 Juli 2005 1,39% -0,91% -1,26% Jumlah 75,44% 56,91% 91,1% Rata-rata(R ) 6,29% 4,74% 7,59%
Periode RBBCA−RBBCA ( RBBCA)2
BBCA
R − RINDF −RINDF (RINDF −RINDF)2 RPTBA−RPTBA (RPTBA−RPTBA)2
Agt 2004 -8,99 80,8201 -8,31 69,0561 3,12 9,7344 Sept 2004 4,82 23,2324 -0,89 0,7921 2,09 4,3681 Okt 2004 13,71 187,9641 -8,31 69,0561 1,23 1,5129 Nov 2004 8,29 68,7241 6,37 40,5769 50,74 2574,5476 Des 2004 1,89 3,5721 1,92 3,6864 -7,59 57,6081 Jan 2005 -8,83 77,9689 5,39 29,0521 0,96 0,9216 Feb 2005 7,62 58,0644 2,16 4,6656 -6,99 48,8601 Mar 2005 -1,67 2,7889 19,99 399,6001 -17,11 292,7521 April 2005 -15,85 251,2225 -16,04 257,2861 -5,62 31,5844 Mei 2005 5,81 33,7561 16,47 271,2609 -6,29 39,5641 Juni 2005 -1,94 3,7636 -13,07 170,8249 -5,67 32,1489 Juli 2005 -4,90 24,01 -5,65 31,911201 -8,85 78,3225 Jumlah 815,8872 1347,7640 3171,9248
BBCA
BBCA INDF BBCA BBCA PTBA INDF PTBA
Agt 2004 74,71 -28,05 -25,93 Sept 2004 -4,29 10,07 -1,86 Okt 2004 -113,93 16,86 -10,22 Nov 2004 52,81 420,63 323,21 Des 2004 3,63 -14,35 -14,57 Jan 2005 -47,59 -8,48 5,17 Feb 2005 16,46 -53,26 -15,10 Mar 2005 -33,38 28,57 -342,03 April 2005 254,23 89,08 90,14 Mei 2005 95,69 -36,55 -103,60 Juni 2005 25,36 11,00 74,11 Juli 2005 27,69 43,37 50,00 Jumlah 351,37 478,89 29,34
Menghitung varians σ2 =
∑
( )
= − − n i i n r r 1 2 1 maka : 16 17 , 74 ) 8872 , 815 ( 11 1 1 12 ) ( 12 1 2 2∑
= ≈ = − − = i BBCA BBCA BBCA R R σ∑
= ≈ = − − = 12 1 2 2 (1347,7640) 122,524 11 1 1 12 ) ( i INDF INDF INDF R R σ∑
= ≈ = − − = 12 1 2 2 (3171,9248) 288,3568 11 1 1 12 ) ( i PTBA PTBA PTBA R R σ Menghitung kovariansσij =
∑
(
)(
)
= − − − t j jt i it r r r r n 1 1∑
= ≈ = − − − = 12 1 , (391,42) 35,58 11 1 ) )( ( 1 12 1 t INDF INDF BBCA BBCA INDF BBCA R R R R σ∑
= ≈ = − − − = 12 1 , (478,89) 43,53 11 1 ) )( ( 1 12 1 t PTBA PTBA BBCA BBCA PTBA BBCA R R R R σ∑
= ≈ = − − − = 12 1 , (29,34) 2,67 11 1 ) )( ( 1 12 1 t PTBA PTBA INDF INDF PTBA INDF R R R R σmisalkan nilai expected return yang diharapkan paling sedikit 6 % dan modal yang ingin diinvestasikan sebesar 1 juta rupiah. Fungsi objektifnya :
Min
[
]
⎟ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎜ ⎝ ⎛ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ 3 2 1 3 2 1 36 , 288 67 , 2 53 , 43 67 , 2 52 , 122 58 , 35 53 , 43 58 , 35 17 , 74 x x x x x xFungsi objektif dirubah menjadi permasalahan maksimasi menjadi :
Maks
[
]
⎟ ⎟ ⎟ ⎠ ⎞ ⎜ ⎜ ⎜ ⎝ ⎛ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ ⎥ ⎥ ⎥ ⎦ ⎤ ⎢ ⎢ ⎢ ⎣ ⎡ − − − − − − − − − 3 2 1 3 2 1 36 , 288 67 , 2 53 , 43 67 , 2 52 , 122 58 , 35 53 , 43 58 , 35 17 , 74 x x x x x xDengan batasan masalah :
x1 + x2 + x3 ≤ 1
-6,29x1 – 4,74x2 – 7,59x3 ≤ -6 x1 , x2 , x3 ≥ 0
Dengan menambahkan variabel buatan s1 dan s2 ke dalam persamaan, kondisi Karush-kuhn Tucker yang didapat adalah :
-87,06 x1 – 4,74 x2 – 576,72 x3 - λ1 + 7,59 λ2 + λ5 = 0 x1 + x2 + x3 + s1 = 1
-6,29x1 – 4,74x2 – 7,59x3 + s2 = -6 s1λ1 = s2λ2 = x1λ3 = x2λ4 = x3λ5 = 0 x1 , x2 , x3, s1, s2, λ1, λ2, λ3, λ4, λ5 ≥ 0
Maka initial table nya :
w x1 x2 x3 s1 s2 l1 l2 l3 l4 l5 a0 w 1 0 0 0 0 0 0 0 0 0 0 1 0 l3 0 -148,34 -71,16 -87,06 0 0 -1 6,29 1 0 0 0 0 l4 0 -71,16 -245,04 -5,34 0 0 -1 4,74 0 1 0 0 0 l5 0 -87,06 -5,34 -576,72 0 0 -1 7,59 0 0 1 0 0 s1 0 1 1 1 1 0 0 0 0 0 0 0 1 s2 0 -6,29 -4,74 -7,59 0 1 0 0 0 0 0 -1 -6
new pivot row s2 0 -6,29 -4,74 -7,59 0 1 0 0 0 0 0 -1 -6 a0 0 6,29 4,74 7,59 0 -1 0 0 0 0 0 1 6 w w-lama 1 0 0 0 0 0 0 0 0 0 0 1 0 a0 0 6,29 4,74 7,59 0 -1 0 0 0 0 0 1 6 w-baru 1 -6,29 -4,74 -7,59 0 1 0 0 0 0 0 0 -6 l3 l3-lama 0 -148,34 -71,16 -87,06 0 0 -1 6,29 1 0 0 0 0 a0 0 6,29 4,74 7,59 0 -1 0 0 0 0 0 1 6 l3-baru 0 -148,34 -71,16 -87,06 0 0 -1 6,29 1 0 0 0 0 l4 l4-lama 0 -71,16 -245,04 -5,34 0 0 -1 4,74 0 1 0 0 0 a0 0 6,29 4,74 7,59 0 -1 0 0 0 0 0 1 6 l4-baru 0 -71,16 -245,04 -5,34 0 0 -1 4,74 0 1 0 0 0 l5 l5-lama 0 -87,06 -5,34 -576,72 0 0 -1 7,59 0 0 1 0 0 a0 0 6,29 4,74 7,59 0 -1 0 0 0 0 0 1 6 l5-baru 0 -87,06 -5,34 -576,72 0 0 -1 7,59 0 0 1 0 0 s1 s1-lama 0 1 1 1 1 0 0 0 0 0 0 0 1 a0 0 6,29 4,74 7,59 0 -1 0 0 0 0 0 1 6 s1-baru 0 1 1 1 1 0 0 0 0 0 0 0 1
w x1 x2 x3 s1 s2 l1 l2 l3 l4 l5 a0 w 1 -6,29 -4,74 -7,59 0 1 0 0 0 0 0 0 -6 l3 0 -148,34 -71,16 -87,06 0 0 -1 6,29 1 0 0 0 0 l4 0 -71,16 -245,04 -5,34 0 0 -1 4,74 0 1 0 0 0 l5 0 -87,06 -5,34 -576,72 0 0 -1 7,59 0 0 1 0 0 s1 0 1 1 1 1 0 0 0 0 0 0 0 1 a0 0 6,29 4,74 7,59 0 -1 0 0 0 0 0 1 6
new pivot row
l5 0 -87,06 -5,34 -576,72 0 0 -1 7,59 0 0 1 0 0 l2 0 -11,47035573 -0,703557312 -75,98418972 0 0 -0,131752306 1 0 0 0,131752306 0 0 w w-lama 1 -6,29 -4,74 -7,59 0 1 0 0 0 0 0 0 -6 l2 0 -11,47035573 -0,703557312 -75,98418972 0 0 -0,131752306 1 0 0 0,131752306 0 0 w-baru 1 -6,29 -4,74 -7,59 0 1 0 0 0 0 0 0 -6 l3 l3-lama 0 -148,34 -71,16 -87,06 0 0 -1 6,29 1 0 0 0 0 l2 0 -11,47035573 -0,703557312 -75,98418972 0 0 -0,131752306 1 0 0 0,131752306 0 0 l3-baru 0 -76,19146245 -66,73462451 390,8805534 0 0 -0,171277997 0 1 0 -0,828722003 0 0 l4 l4-lama 0 -71,16 -245,04 -5,34 0 0 -1 4,74 0 1 0 0 0 l2 0 -11,47035573 -0,703557312 -75,98418972 0 0 -0,131752306 1 0 0 0,131752306 0 0 l4-baru 0 -16,79051383 -241,7051383 354,8250593 0 0 -0,375494071 0 0 1 -0,624505929 0 0 s1 s1-lama 0 1 1 1 1 0 0 0 0 0 0 0 1 l2 0 -11,47035573 -0,703557312 -75,98418972 0 0 -0,131752306 1 0 0 0,131752306 0 0 s1-baru 0 1 1 1 1 0 0 0 0 0 0 0 1 a0 a0-lama 0 6,29 4,74 7,59 0 -1 0 0 0 0 0 1 6 l2 0 -11,47035573 -0,703557312 -75,98418972 0 0 -0,131752306 1 0 0 0,131752306 0 0 a0-baru 0 6,29 4,74 7,59 0 -1 0 0 0 0 0 1 6
hasil iterasi 2 w x1 x2 x3 s1 s2 l1 l2 l3 l4 l5 a0 w 1 -6,29 -4,74 -7,59 0 1 0 0 0 0 0 0 -6 l3 0 -76,19146245 -66,73462451 390,8805534 0 0 -0,171277997 0 1 0 -0,828722003 0 0 l4 0 -16,79051383 -241,7051383 354,8250593 0 0 -0,375494071 0 0 1 -0,624505929 0 0 l2 0 -11,47035573 -0,703557312 -75,98418972 0 0 -0,131752306 1 0 0 0,131752306 0 0 s1 0 1 1 1 1 0 0 0 0 0 0 0 1 a0 0 6,29 4,74 7,59 0 -1 0 0 0 0 0 1 6
new pivot row
l3 0 -76,19146245 -66,73462451 390,8805534 0 0 -0,171277997 0 1 0 -0,828722003 0 0 x3 0 -0,194922622 -0,170728945 1 0 0 -0,000438185 0 0,002558326 0 -0,002120141 0 0 w w-lama 1 -6,29 -4,74 -7,59 0 1 0 0 0 0 0 0 -6 x3 0 -0,194922622 -0,170728945 1 0 0 -0,000438185 0 0,002558326 0 -0,002120141 0 0 w-baru 1 -7,769462703 -6,035832693 0 0 1 -0,003325824 0 0,019417697 0 -0,016091872 0 -6 l4 l4-lama 0 -16,79051383 -241,7051383 354,8250593 0 0 -0,375494071 0 0 1 -0,624505929 0 0 x3 0 -0,194922622 -0,170728945 1 0 0 -0,000438185 0 0,002558326 0 -0,002120141 0 0 l4-baru 0 52,37291717 -181,1262303 0 0 0 -0,220015051 0 -0,907758281 1 0,127773332 0 0 l2 l2-lama 0 -11,47035573 -0,703557312 -75,98418972 0 0 -0,131752306 1 0 0 0,131752306 0 0 x3 0 -0,194922622 -0,170728945 1 0 0 -0,000438185 0 0,002558326 0 -0,002120141 0 0 l2-baru 0 -26,28139324 -13,67625786 0 0 0 -0,165047438 1 0,194392351 0 -0,029344913 0 0 s1 s1-lama 0 1 1 1 1 0 0 0 0 0 0 0 1 x3 0 -0,194922622 -0,170728945 1 0 0 -0,000438185 0 0,002558326 0 -0,002120141 0 0 s1-baru 0 1,194922622 1,170728945 0 1 0 0,000438185 0 -0,002558326 0 0,002120141 0 1 a0 a0-lama 0 6,29 4,74 7,59 0 -1 0 0 0 0 0 1 6 x3 0 -0,194922622 -0,170728945 1 0 0 -0,000438185 0 0,002558326 0 -0,002120141 0 0 a0-baru 0 7,769462703 6,035832693 0 0 -1 0,003325824 0 -0,019417697 0 0,016091872 1 6
w x1 x2 x3 s1 s2 l1 l2 l3 l4 l5 a0 w 1 -7,769462703 -6,035832693 0 0 1 -0,003325824 0 0,019417697 0 -0,016091872 0 -6 x3 0 -0,194922622 -0,170728945 1 0 0 -0,000438185 0 0,002558326 0 -0,002120141 0 0 l4 0 52,37291717 -181,1262303 0 0 0 -0,220015051 0 -0,907758281 1 0,127773332 0 0 l2 0 -26,28139324 -13,67625786 0 0 0 -0,165047438 1 0,194392351 0 -0,029344913 0 0 s1 0 1,194922622 1,170728945 0 1 0 0,000438185 0 -0,002558326 0 0,002120141 0 1 a0 0 7,769462703 6,035832693 0 0 -1 0,003325824 0 -0,019417697 0 0,016091872 1 6
new pivot row
l4 0 52,37291717 -181,1262303 0 0 0 -0,220015051 0 -0,907758281 1 0,127773332 0 0 x1 0 1 -3,458394913 0 0 0 -0,004200932 0 -0,01733259 0,019093838 0,002439683 0 0 w w-lama 1 -7,769462703 -6,035832693 0 0 1 -0,003325824 0 0,019417697 0 -0,016091872 0 -6 x1 0 1 -3,458394913 0 0 0 -0,004200932 0 -0,01733259 0,019093838 0,002439683 0 0 w-baru 1 0 -32,90570298 0 0 1 -0,035964807 0 -0,115247212 0,148348863 0,002863156 0 -6 x3 x3-lama 0 -0,194922622 -0,170728945 1 0 0 -0,000438185 0 0,002558326 0 -0,002120141 0 0 x1 0 1 -3,458394913 0 0 0 -0,004200932 0 -0,01733259 0,019093838 0,002439683 0 0 x3-baru 0 0 -0,84484835 1 0 0 -0,001257042 0 -0,000820188 0,003721821 -0,001644592 0 0 l2 l2-lama 0 -26,28139324 -13,67625786 0 0 0 -0,165047438 1 0,194392351 0 -0,029344913 0 0 x1 0 1 -3,458394913 0 0 0 -0,004200932 0 -0,01733259 0,019093838 0,002439683 0 0 l2-baru 0 0 -104,5676946 0 0 0 -0,275453778 1 -0,261132253 0,501812667 0,034773364 0 0 s1 s1-lama 0 1,194922622 1,170728945 0 1 0 0,000438185 0 -0,002558326 0 0,002120141 0 1 x1 0 1 -3,458394913 0 0 0 -0,004200932 0 -0,01733259 0,019093838 0,002439683 0 0 s1-baru 0 0 5,303243263 0 1 0 0,005457973 0 0,018152777 -0,022815659 -0,000795091 0 1 a0 a0-lama 0 7,769462703 6,035832693 0 0 -1 0,003325824 0 -0,019417697 0 0,016091872 1 6 x1 0 1 -3,458394913 0 0 0 -0,004200932 0 -0,01733259 0,019093838 0,002439683 0 0 a0-baru 0 0 32,90570298 0 0 -1 0,035964807 0 0,115247212 -0,148348863 -0,002863156 1 6
hasil iterasi 4 w x1 x2 x3 s1 s2 l1 l2 l3 l4 l5 a0 w 1 0 -32,90570298 0 0 1 -0,035964807 0 -0,115247212 0,148348863 0,002863156 0 -6 x3 0 0 -0,84484835 1 0 0 -0,001257042 0 -0,000820188 0,003721821 -0,001644592 0 0 x1 0 1 -3,458394913 0 0 0 -0,004200932 0 -0,01733259 0,019093838 0,002439683 0 0 l2 0 0 -104,5676946 0 0 0 -0,275453778 1 -0,261132253 0,501812667 0,034773364 0 0 s1 0 0 5,303243263 0 1 0 0,005457973 0 0,018152777 -0,022815659 -0,000795091 0 1 a0 0 0 32,90570298 0 0 -1 0,035964807 0 0,115247212 -0,148348863 -0,002863156 1 6
new pivot point
a0 0 0 32,90570298 0 0 -1 0,035964807 0 0,115247212 -0,148348863 -0,002863156 1 6 x2 0 0 1 0 0 -0,030389869 0,001092966 0 0,003502348 -0,004508302 -8,70109E-05 0,03038987 0,182339213 w w-lama 1 0 -32,90570298 0 0 1 -0,035964807 0 -0,115247212 0,148348863 0,002863156 0 -6 x2 0 0 1 0 0 -0,030389869 0,001092966 0 0,003502348 -0,004508302 -8,70109E-05 0,03038987 0,182339213 w-baru 1 0 0 0 0 0 0 0 0 0 0 1 0 x3 x3-lama 0 0 -0,84484835 1 0 0 -0,001257042 0 -0,000820188 0,003721821 -0,001644592 0 0 x2 0 0 1 0 0 -0,030389869 0,001092966 0 0,003502348 -0,004508302 -8,70109E-05 0,03038987 0,182339213 x3-baru 0 0 0 1 0 -0,025674831 -0,000333651 0 0,002138765 -8,70109E-05 -0,001718103 0,02567483 0,154048984 x1 x1-lama 0 1 -3,458394913 0 0 0 -0,004200932 0 -0,01733259 0,019093838 0,002439683 0 0 x2 0 0 1 0 0 -0,030389869 0,001092966 0 0,003502348 -0,004508302 -8,70109E-05 0,03038987 0,182339213 x1-baru 0 1 0 0 0 -0,105100168 -0,000421025 0 -0,005220088 0,003502348 0,002138765 0,10510017 0,630601008 l2 l2-lama 0 0 -104,5676946 0 0 0 -0,275453778 1 -0,261132253 0,501812667 0,034773364 0 0 x2 0 0 1 0 0 -0,030389869 0,001092966 0 0,003502348 -0,004508302 -8,70109E-05 0,03038987 0,182339213 l2-baru 0 0 0 0 0 -3,17779853 -0,161164868 1 0,105100168 0,030389869 0,025674831 3,17779853 19,06679118 s1 s1-lama 0 0 5,303243263 0 1 0 0,005457973 0 0,018152777 -0,022815659 -0,000795091 0 1 x2 0 0 1 0 0 -0,030389869 0,001092966 0 0,003502348 -0,004508302 -8,70109E-05 0,03038987 0,182339213 s1-baru 0 0 0 0 1 0,161164868 -0,00033829 0 -0,000421025 0,001092966 -0,000333651 -0,1611649 0,033010795
w x1 x2 x3 s1 s2 l1 l2 l3 l4 l5 a0 w 1 0 0 0 0 0 0 0 0 0 0 1 0 x3 0 0 0 1 0 -0,025674831 -0,000333651 0 0,002138765 -8,70109E-05 -0,001718103 0,02567483 0,154048984 x1 0 1 0 0 0 -0,105100168 -0,000421025 0 -0,005220088 0,003502348 0,002138765 0,10510017 0,630601008 l2 0 0 0 0 0 -3,17779853 -0,161164868 1 0,105100168 0,030389869 0,025674831 3,17779853 19,06679118 s1 0 0 0 0 1 0,161164868 -0,00033829 0 -0,000421025 0,001092966 -0,000333651 -0,1611649 0,033010795 x2 0 0 1 0 0 -0,030389869 0,001092966 0 0,003502348 -0,004508302 -8,70109E-05 0,03038987 0,182339213
Tabel 3.5 Hasil iterasi Metode Wolfe Hasil yang didapat :
x1 : 0,631 x2 : 0,182 x3 : 0,154
3.2 Metode Pengumpulan Data
Pengumpulan data berupa data harga saham-saham dilakukan dengan cara mengambil data sekunder, yaitu data mengambil data historis yang sudah ada melalui internet.
3.3 Perancangan Piranti Lunak Aplikasi 3.3.1 Perancangan Layar
Pada program aplikasi ini, user akan membuat lima layar. Layar yang pertama adalah layar menu. Keempat layar lainnya adalah layar stock information, layar stock market historical data, layar statistical calculation, dan layar final calculation .
3.3.1.1 Layar Menu
Layar Menu berfungsi sebagai layar utama ketika user menjalankan program.
Pada layar menu, akan terdapat tiga pilihan, yaitu DATA, CALCULATE, EXIT. Fungsi dari pilihan DATA adalah mengantar user ke layar stock information atau layar stock market historical data . Fungsi dari CALCULATE adalah mengantar user ke layar statistical calculation. Fungsi pilihan EXIT berguna jika user ingin keluar dari program.
Gambar 3.2 Rancangan Layar Menu
3.3.1.2 Layar Stock Information
Layar stock information dirancang untuk menampilkan, mengubah informasi dan menambah saham-saham yang belum ada di dalam database.
Judul form ‘Stock Information’ menginformasikan kepada user halaman form yang dipilih. Tombol pilih ‘ADD’ berguna untuk memasukkan data saham baru yang akan disimpan ke dalam database. Tombol pilih ‘EDIT’ berfungsi untuk mengedit data yang sudah ada di dalam database. Tombol ‘SAVE’ berfungsi untuk menyimpan data baru yang dimasukkan user atau menyimpan perubahan data yang dilakukan oleh user. Tombol ‘CANCEL’ berguna bila user ingin membatalkan tindakan yang semula ingin dilakukan, baik penambahan data baru atau perubahan data yang telah ada.
DBGrid1 berfungsi sebagai tabel yang menampilkan data saham-saham yang telah ada. Informasi yang ditampilkan antara lain stock code, stock name, sector.
3.3.1.3 Layar Stock Market Historical Data
Layar Stock Market Historical Data dirancang untuk menampilkan dan mengubah data harga dari masing-masing saham.
Gambar 3.4 Rancangan Layar Stock Market Historical Data
Judul Form ‘Stock Market Historical Data’ menginformasikan kepada user halaman form yang sedang dipilih. Tombol ‘ADD’ berfungsi untuk menambah data harga saham baru yang akan disimpan dalam database. Tombol ‘EDIT’ berfungsi untuk merubah data harga saham yang telah tersimpan. Tombol ‘SAVE’ berfungsi untuk menyimpan data baru yang dimasukkan user atau menyimpan perubahan data yang dilakukan oleh user. Tombol ‘CANCEL’ berguna bila user ingin membatalkan tindakan yang semula ingin dilakukan, baik penambahan data baru atau perubahan data yang telah ada.
DBGrid1 berfungsi sebagai tabel yang menampilkan data saham-saham yang telah ada. Informasi yang ditampilkan antara lain stock code, stock name.
DBGrid2 berfungsi sebagai tabel yang menampilkan data harga saham sesuai dengan saham yang dipilih pada DBGrid1. Informasi yang ditampilkan antara lain period, opening price, closing price.
3.3.1.4 Layar Statistical Calculation
Layar Statistical Calculation dirancang untuk menampilkan hasil perhitungan statistik setelah sebelumnya user harus memilih terlebih dahulu jumlah saham yang hendak dihitung dan saham-saham yang hendak dihitung.
Gambar 3.5 Rancangan Layar Statistical Calculation
Tombol ‘add to my portfolio’ berguna untuk mengambil data saham yang hendak dihitung, nama saham yang dipilih akan muncul dalam kotak Memo1. Tombol ‘calculate’ berfungsi untuk memberi
pemilihan saham telah selesai dilakukan oleh user. Tombol “Iteration Table” berfungsi untuk memasukkan dan menampilkan data hasil perhitungan statistik ke dalam tabel iterasi. Sebelum tombol ini dipilih, user harus memasukkan expected return yang diinginkan. Tombol ‘Start Iteration’ berfungsi untuk melanjutkan perhitungan Quadratic Programming dengan metode Wolfe. Tombol ‘Reset’ berfungsi untuk menghapus semua data saham yang telah dipilih termasuk perhitungannya jika perhitungan telah dilakukan.
DBGrid1 berguna untuk menampilkan nama-nama saham yang telah tersimpan dalam database sehingga memudahkan user dalam memilih saham mana yang hendak dianalisa. Informasi yang terdapat dalam DBGrid1 antara lain : stock code, stock name, sector.
StringGrid1 berguna untuk menampilkan hasil perhitungan secara statistik. Informasi yang terdapat dalam DBGrid2 antara lain : stock code, average return, variance.
Memo1 berguna untuk menampilkan saham-saham apa saja yang telah dipilih oleh user.
StringGrid2 berfungsi untuk menampilkan data-data hasil perhitungan statistik sebagai tabel iterasi mula-mula yang nantinya akan dijalankan.
StringGrid3 berfungsi untuk menampilkan matriks kovarians dari saham-saham yang telah dipilih.
3.3.1.5 Layar Final Calculation
Layar Final Calculation berguna untuk menampilkan hasil perhitungan akhir. StringGrid1 berguna untuk menampilkan tabel iterasi yang sudah stabil (sudah mendapatkan hasil perhitungan akhirnya).
Tombol ‘Final Result’ berguna untuk menampilkan hasil perhitungan akhir. Memo1 berfungsi untuk menginformasikan kepada user, proporsi investasi saham-saham yang telah dipilih.
Gambar 3.6 Rancangan Layar Final Calculation
3.3.2 Perancangan Basis Data
Basis data yang digunakan adalah Microsoft Access 2002. Penggunaan basis data dimaksudkan agar data-data mudah diolah, di-update atau dihapus. Penulis akan membuat dua buah tabel di dalam database.
yang ada di dalam database beserta kode saham yang terdiri dari empat karakter dan sektor dari perusahaan yang mengeluarkan saham tersebut. Kode saham yang dipakai bersifat unik dan merupakan singkatan dari nama perusahaan emiten. Kode yang digunakan sudah sesuai dengan yang dikeluarkan oleh Bursa Efek Jakarta dan dipergunakan sebagai identitas perusahaan tersebut dalam perdagangan saham.
Tabel kedua, stockd, akan berisi kode saham, daftar harga saham pada periode tertentu.
3.3.3 Perancangan Modul Layar Menu
Modul Load_Menu
Fungsi : Sebagai menu, perpindahan dari satu layar ke layar lainnya. Begin
Aktifkan Menu DATA
Aktifkan menu “Stock Information”
Aktifkan menu “Stock Market Historical Data” Aktifkan Menu CALCULATE
Aktifkan menu “Statistical Calculation” Non-aktifkan menu “Final Calculation”
Modul Stock_Information_click
Fungsi : Menetukan perintah yang akan dijalankan jika menu Stock Information dipilih.
Begin
Jalankan modul Load_Stock_Information End Modul
Modul Stock_Historical_Data_click
Fungsi : Menetukan perintah yang akan dijalankan jika menu Stock Market Historical Data dipilih.
Begin
Jalankan modul Load_Stock_Historical_Data End Modul
Modul Statistical_Calculation_click
Fungsi : Menetukan perintah yang akan dijalankan jika menu Statistical Calculation dipilih.
Begin
Jalankan modul Load_Statistical_Calculation End Modul
Layar Stock Information Modul Inisialisasi Grid
menampilkan informasi saham-saham yang terdapat di dalam database. Informasi yang ditampilkan adalah stock code, stock name, sector.
Begin
Tentukan jumlah fixed column dari DBGrid1 adalah 0 Tentukan jumlah fixed row dari DBGrid1 adalah 1 Tentukan jumlah kolom DBGrid1 adalah 3
Isi sel (0,0) dari DBGrid1 dengan “Stock Code” Isi sel (1,0) dari DBGrid1 dengan “Stock Name” Isi sel (2,0) dari DBGrid1 dengan “Sector” Tentukan DataSource nya, yaitu “DataSource1”. End Modul
Modul Tampil Data
Fungsi : Untuk membuka data yang sudah tersimpan di dalam database dan menampilkannya di dalam DBGrid1.
Begin
Dari tab Data Access, masukkan DataSource ke dalam form dengan nama DataSource1
Dari tab ADO masukkan ADOTable ke dalam form dengan nama ADOTable1 dan ADOQuery dengan nama ADOQuery1
Tentukan datasource ADOQuery1,yaitu DataSource1. Tentukan DataSet dari DataSource1, yaitu ADOTable1 Bangun ConnectionString dari ADOTable1.
Tentukan TableName yang akan digunakan pada ADOTable1, yaitu stockh. End Modul
Modul but_add_click
Fungsi : Untuk menentukan perintah yang dijalankan bila tombol but_add ditekan.
Begin
Kosongkan editbox txtstock_code Kosongkan editbox txtstock_name
Set ComboBox sector menjadi default Aktifkan editbox txtstock_code Aktifkan editbox txtstock_name Aktifkan ComboBox sector Non-aktifkan tombol but_add Non-aktifkan tombol but_edit Aktifkan tombol but_save Aktifkan tombol but_cancel
Tentukan focus pada editbox txtstock_code Tentukan variabel flag dengan 1
End Modul
Modul but_edit_click
Fungsi : Untuk menentukan perintah yang akan dijalankan jika tombol but_edit ditekan.
Kosongkan editbox txtstock_code Kosongkan editbox txtstock_name
Set ComboBox sector menjadi default Aktifkan editbox txtstock_code Aktifkan editbox txtstock_name Aktifkan ComboBox sector Non-aktifkan tombol but_add Non-aktifkan tombol but_edit Aktifkan tombol but_save Aktifkan tombol but_cancel
Tentukan focus pada editbox txtstock_code Tentukan variabel flag adalah 2
End Modul
Modul but_save_click
Fungsi : Untuk menentukan perintah yang akan dijalankan bila tombol but_save ditekan.
Begin
Jika txtstock_code kosong maka
Tampilkan Message Dialog Box yang berisi pesan agar user mengisi terlebih dahulu stock code.
Cek dengan query “select * from stockh where stock_code = txtstock_code” apakah sudah ada data dengan kode saham yang di-input.
Jika nilainya false, maka
Tambahkan record baru pada DBGrid1 Isi field “Stock Code” dengan isi txtstock_code
Isi field “Stock Name” dengan isi txtstock_name Isi field “Sector” dengan isi sector
Selain itu,
Tampilkan Dialog Box “Data yang anda masukkan sudah ada.” Selain itu jika variabel flag adalah 2 maka
Cek dengan query “select * from stockh where stock_code = txtstock_code” apakah sudah ada data dengan kode saham yang di-input.
Jika nilainya true maka lakukan :
Isi field “Stock Code” dengan isi txtstock_code Isi field “Stock Name” dengan isi txtstock_name Isi field “Sector” dengan isi sector
Non-aktifkan tombol but_save Non-aktifkan tombol but_cancel Aktifkan tombol but_add
Aktifkan tombol but_edit
Non-aktifkan editbox txtstock_code Non-aktifkan editbox txtstock_name Non-aktifkan combobox sector
Modul but_cancel_click
Fungsi : Untuk menetukan perintah yang akan dijalankan bila tombol but_cancel ditekan.
Begin
Aktifkan tombol but_add Aktifkan tombol but_edit Kosongkan editbox txtstock_code Kosongkan editbox txtstock_name
Set ComboBox menjadi default Non-aktifkan tombol but_save Non-aktifkan tombol but_cancel Non-aktifkan editbox txtstock_code Non-aktifkan editbox txtstock_name Non-aktifkan ComboBox sector End Modul
Modul Menu
Fungsi : Sebagai menu, perpindahan dari layar yang satu ke layar yang lain. Begin
Aktifkan DATA
Non-aktifkan pilihan “Stock Information” Aktifkan pilihan “Stock Market Historical Data”
Aktifkan CALCULATE
Aktifkan pilihan “Statistical Calculation” Non-aktifkan pilihan “Final Calculation” Aktifkan Menu EXIT
End
Modul Load Stock_Information
Fungsi : Untuk menentukan perintah yang akan dijalankan bila menu stock information dipilih.
Begin
Tentukan nilai flag mula-mula adalah 0 Jalankan modul Inisialisasi Grid
Jalankan modul Menu Jalankan modul Tampil Data Aktifkan tombol but_add Aktifkan tombol but_edit Non-aktifkan tombol but_save Non-aktifkan tombol but_cancel
End Modul
Layar Stock Market Historical Data Modul Inisialisai Grid1
Fungsi : Untuk mendefinisikan DBGrid1 yang akan digunakan untuk menampilkan data saham-saham yang terdapat dalam database.
Tentukan jumlah fixed column dari DBGrid1 adalah 0 Tentukan jumlah fixed row dari DBGrid1 adalah 1 Tentukan jumlah kolom DBGrid1 adalah 3
Isi sel (0,0) dari DBGrid1 dengan “Stock Code” Isi sel (1,0) dari DBGrid1 dengan “Stock Name” Isis el (2,0) dari DBGrid1 dengan “Sector” Tentukan DataSource nya, yaitu “DataSource1”. End Modul
Modul Inisialisasi Grid2
Fungsi : Untuk mendefinisikan DBGrid2 yang akan digunakan untuk menampilkan data harga pembukaan dan penutupan suatu saham setiap bulan. Begin
Tentukan jumlah fixed column dari DBGrid2 adalah 0 Tentukan jumlah fixed row dari DBGrid1 adalah 1 Tentukan jumlah kolom DBGrid1 adalah 3
Isi sel (0,0) dari DBGrid2 dengan “Period”
Isi sel (1,0) dari DBGrid2 dengan “Opening Price” Isi sel (2,0) dari DBGrid2 dengan “Closing Price” Tentukan DataSource nya, yaitu “DataSource2”. End Modul
Modul Tampil Data
Fungsi : Untuk membuka data yang sudah tersimpan di dalam database dan menampilkannya di dalam DBGrid1.
Begin
Dari tab Data Access, masukkan DataSource ke dalam form dengan nama DataSource1
Dari tab ADO masukkan ADOTable ke dalam form dengan nama ADOTable1 Tentukan DataSet dari DataSource1, yaitu ADOTable1
Bangun ConnectionString dari ADOTable1.
Tentukan TableName yang akan digunakan pada ADOTable1, yaitu stockh. Dari tab Data Access, masukkan DataSource ke dalam form dengan nama DataSource2
Dari tab ADO masukkan ADOQuery ke dalam form dengan nama ADOQuery1 Tentukan DataSource dari ADOQuery1 adalah DataSource1
Tentukan DataSet dari DataSource2, yaitu ADOQuery1 Bangun ConnectionString dari ADOQuery1.
End Modul
Modul but_add click
Fungsi : Untuk menentukan perintah yang dijalankan jika tombol but_add ditekan. Fungsi dari tombol but_add ini adalah jika user ingin menambah data harga saham beserta periodenya dengan syarat data saham sudah ada dalam database.
Aktifkan editbox txtopening Aktifkan editbox txtclosing Kosongkan editbox period Kosongkan editbox txtopening Kosongkan editbox txtclosing Non-aktifkan tombol but_add Non-aktifkan tombol but_edit Aktifkan tombol but_save Aktifkan tombol but_cancel
Tentukan variabel flag adalah 1 End Modul
Modul but_edit_click
Fungsi : Untuk menentukan perintah yang dijalankan jika tombol but_edit ditekan.
Begin
Aktifkan editbox period Aktifkan editbox txtopening Aktifkan editbox txtclosing Kosongkan editbox period Kosongkan editbox txtopening Kosongkan editbox txtclosing Non-aktifkan tombol but_add
Non-aktifkan tombol but_edit Aktifkan tombol but_save Aktifkan tombol but_cancel
Tentukan variabel flag adalah 2 End Modul
Modul but_save_click
Fungsi : Untuk menentukan perintah yang dijalankan jika tombol but_save ditekan.
Begin
Cek apakah combobox period sudah dipilih atau belum, jika belum tampilkan pesan yang meminta user untuk memilih periode terlebih dahulu
Jika variabel flag adalah 1 maka
Cek dengan query “select * from stockd where stock_code = code and period = period”
Jika nilainya false maka
Isi ke database stockd dimana stock_code = code field period dengan isi editbox period
field opening_price dengan isi editbox txtopening field closing_price dengan isi editbox txtclosing Selain itu jika flag sama dengan 2, maka
Buka record database dengan query “select * from stockd where stock_code = code and period = period”
Isi field closing_price dengan isi editbox txtclosing Non-aktifkan tombol but_save
Non-aktifkan tombol but_cancel Aktifkan tombol but_add
Aktifkan tombol but_edit Kosongkan period
Kosongkan editbox txtopening Kosongkan editbox txtclosing Non-aktifkan period
Non-aktifkan editbox txtopening Non-aktifkan editbox txtclosing
Tentukan nilai flag adalah 0 End Modul
Modul but_cancel_click
Fungsi : Untuk menentukan perintah yang dijalankan jika tombol but_cancel ditekan.
Begin
Kosongkan editbox txtperiod Kosongkan editbox txtopening Kosongkan editbox txtclosing Non-aktifkan editbox txtperiod Non-aktifkan editbox txtopening
Non-aktifkan editbox txtclosing Aktifkan tombol but_add Aktifkan tombol but_edit Non-aktifkan tombol but_save Non-aktifkan tombol but_cancel End Modul
Modul DBGrid1cell_click
Fungsi : Untuk menentukan perintah yang akan dijalankan jika sel pada DBGrid1 di klik.
Begin
Deklarasi isi sebagai string
Isi variabel isi dengan kode saham sel yang di-click pada DBGrid1
Buka record pada DBGrid2 dengan query “select * from stockd where stock_code = code”
Aktifkan tombol but_add Aktifkan tombol but_edit End Modul
Modul Menu
Fungsi : Sebagai menu, perpindahan dari layar yang satu ke layar yang lain. Begin
Aktifkan DATA
Aktifkan CALCULATE
Aktifkan pilihan “Statistical Calculation” Non-aktifkan pilihan “Final Calculation” Aktifkan Menu EXIT
End
Modul Load_Stock_Historical_Data
Fungsi : Untuk menentukan perintah yang dijalankan jika menu Stock Market Historical Data dipilih.
Begin
Jalankan modul Inisialisasi Grid1 Jalankan modul Inisialisasi Grid2 Jalankan modul Tmapil Data Kosongkan editbox period Kosongkan editbox txtopening Kosongkan editbox txtclosing Non-aktifkan editbox period Non-aktifkan editbox txtopening Non-aktifkan editbox txtclosing Non-aktifkan tombol but_save Non-aktifkan tombol but_cancel Aktifkan tombol but_add
Tentukan nilai flag mula-mula adalah 0 End Modul
Layar Statistical Calculation Modul Load_Statistical_Calculation
Fungsi : Untuk menentukan perintah yang dijalankan pada saat pertama kali form dibuka
Begin
Dekalrasikan variabel nama, kode sebagai string.
Deklarasikan variabel numstock,numdata sebagai integer
Deklarasikan variabel opening, closing, return, mean, returnmean, variance, std, r_er, covariance, Grid, MIdentitas1, MIdentitas2, A, b sebagai array of extended Deklarasikan variabel temp, temp1, temp2, temp3, temp4 sebagai extended Deklarasikan variabel m, k ,l sebagai integer
Deklarasikan variabel Identifier sebagai array of integer; Jalankan modul Inisialisasi Grid
Non-aktifkan tombol but_add_to_portfolio Non-aktifkan tombol but_calculate
Non-aktifkan tombol but_iteration_table Non-aktifkan tombol but_final_result Tentukan fokus pada editbox txtstock_number Kosongkan Memo1
Set nilai awal untuk temp sama dengan 0 Set nilai awal untuk variabel k, l, m adalah 0
Isi StringGrid1[1,0] dengan string ‘Average Return’ Isi StringGrid1[2,0] dengan string ‘Variance’ Non-visible kan StringGrid3
End Modul
Modul Inisialisasi Grid
Fungsi : Untuk mendefinisikan DBGrid1 yang akan digunakan untuk menampilkan informasi saham-saham yang terdapat di dalam database. Informasi yang ditampilkan adalah stock code, stock name, sector.
Begin
Tentukan jumlah fixed column dari DBGrid1 adalah 0 Tentukan jumlah fixed row dari DBGrid1 adalah 1 Tentukan jumlah kolom DBGrid1 adalah 3
Isi sel (0,0) dari DBGrid1 dengan “Stock Code” Isi sel (1,0) dari DBGrid1 dengan “Stock Name” Isi sel (2,0) dari DBGrid1 dengan “Sector” Tentukan DataSource nya, yaitu “DataSource1”. End Modul
Modul DBGrid1cell_click
Fungsi : Untuk menentukan perintah yang akan dijalankan jika isi sel dari DBGrid1 di-click.
Jika txtstock_number kosong, maka
Tampilkan pesan ‘Please Fill Stock Number’ Selain itu
Cek apakah jumlah yang dimasukkan lebih dari 1 atau tidak. Jika tidak, tampilkan pesan ‘Stock Number must be more than 1’ Aktifkan tombol but_add_to_portfolio
Isikan variabel nama dengan isi dari DBGrid1.Fields[1].text Isikan variable kode dengan isi dari DBGrid2.Fields[0].text End Modul
Modul but_add_to_portfolio_click
Fungsi : Untuk menentukan perintah yang akan dijalankan jika tombol but_add_yo_portfolio ditekan.
Begin
Deklarasikan variabel i sebagai integer Tentukan nilai variabel l adalah l + 1
Transfer isi variabel nama ke variabel stock_name[l] pada layar Final Calculation.
Isi StringGrid1[0,l] dengan isi dari kode. Isi StringGrid3[0,l] dengan isi dari kode. Isi StringGrid3[l,0] dengan isi dari kode Non-aktifkan tombol but_add_to_portfolio
Jika nilai l lebih kecil dari numstock maka Aktifkan tombol but_add_to_portfolio
Non-aktifkan tombol but_add_to_portfolio Aktifkan tombol calculate
Non-aktifkan DBGrid1 Dengan ADOQuery1 lakukan :
Ambil semua data harga opening_price dan closing_price dari tabel stockd dimana Stock_code sama dengan kode
Tentukan variabel i sama dengan 0
Selama ADOQuery1 tidak Eof maka lakukan
Isi variabel opening[i] dengan isi dari DBGrid2.Fields[0] Isi variabel closing[i] dengan isi dari DBGrid2.Fields[1]
Hitung return[l-1,i] dengan melakukan perhitungan (closing[i]-opening[i] )/ opening[i] * 100
Tambahkan variabel i dengan 1
Tentukan isi dari numdata sama dengan i
Untuk i sama dengan 1 sampai lakukan perulangan Jika nilai k lebih kecil dari numdata maka lakukan
Tentukan nilai temp dengan perhitungan temp = temp + return[m,k] Tambah nilai k dengan 1
Jika nilai k sama dengan numdata maka lakukan Jalankan Modul calculate(m)
Tambahkan nilai m dengan 1 Set nilai k menjadi 0
Isi Memo1 dengan isi variabel nama End Modul
Modul but_calculate_click
Fungsi : Untuk menentukan perintah yang akan dijalankan jika tombol but_calculate ditekan
Begin
Deklarasikan variabel x, y, z sebagai integer Non-aktifkan tombol but_calculate Aktifkan tombol but_iteration_table
Fokuskan kursor pada editbox txtexpected_return Visible-kan StringGrid3
Set banyak kolom untuk StringGrid3 sama dengan numstock + 1 Set banyak baris untuk StringGrid3 sama dengan numstock + 1
Jika nilai variabel m sama dengan numstock maka lakukan
Lakukan perulangan untuk variabel x mulai dari 0 sampai numstock-1
Lakukan perulangan untuk variabel y mulai dari 0 sampai numstock-1
Tentukan nilai variabel temp4 = 0
Lakukan perulangan untuk variabel z mulai dari 0 sampai numdata-1
Hitung nilai temp3 dengan melakukan perhitungan temp3 = r_er[x,z]*r_er[y,z]
perhitungan temp4 = temp4 + temp3
Tentukan nilai variabel covariance[a,b] dengan menghitung covariance[a,b] = temp4 / (numdata-1)
End Modul
Modul calculate
Fungsi : Untuk menghitung rata-rata return, variance, standar deviasi dari saham-saham yang telah dipilih.
Begin
Deklarasikan variabel l sebagai integer
Hitung nilai mean dengan hasil perhitungan mean[x] = temp/numdata Isi StringGrid1 [1,x+1] denga nilai mean[x]
Set nilai temp2 = 0
Untuk l = 0 sampai numdata-1 lakukan
Tentukan nilai temp1 dengan perhitungan temp1 = return[j,l]-mean[j] Tentukan nilai e_er[j,l] dengan perhitungan e_er[j,l] = temp1
Tentukan nilai temp1 dengan perhitungan temp1 = sqr(temp1) Tentukan variabel temp2 dengan perhitungan temp2 = temp2+temp1 Setelah selesai, maka hitung nilai variance dengan perhitungan variance[x] = temp2 / (numdata-1)
Tentukan nilai std dengan perhitungan std[x] = sqrt(variance[x]) End Modul
Modul but_iteration_table_click
Fungsi : Untuk menentukan perintah yang akan dijalankan bila tombol but_iteration_table ditekan
Begin
Deklarasikan variabel i, j, x, y sebagai integer Aktifkan tombol but_start
Non-aktifkan tombol but_iteration_table Jika txtexpected_return kosong maka
Tampilkan pesan “Please Fill Expected Return” Selain itu
Tentukan jumlah kolom pada StringGrid2 dengan perhitungan (2*(strtoint(txtstock))) + 8
Tentukan jumlah baris pada StringGrid2 dengan perhitungan strtoint(txtstock)+ 4
Lakukan perulangan untuk variabel x mulai dari 1 sampai numstock Tentukan variabel A[1,x] dengan mendekalrasikan A[1,x] = 1 Lakukan perulangan untuk variabel y mulai dari 1 sampai numstock
Tentukan variabel A[2,y] dengan mendeklarasikan A[2,y] = -1 * mean[y-1]
Set nilai variabel b[1,1] dengan nilai 1
Set nilai variabel b[2,1] dengan isi dari txtexpected_return*-1 Lakukan perulangan untuk variabel i mulai dari 1 sampai numstock
Lakukan perulangan untuk variabel j mulai dari 1 sampai numstock Jika nilai i sama dengan nilai j maka
Selain itu
Isi variabel MIdentitas1[i,j] dengan nilai 0 Lakukan perulangan untuk variabel i mulai dari 1 sampai 2
Lakukan perulangan untuk variabel j mulai dari 1 sampai 2 Jika nilai I sama dengan nilai j maka
Isi variabel MIdentifier2[i,j] dengan nilai 1 Selain itu
Isi variabel MIdentifier2[i,j] dengan nilai 0 Jalankan modul baris
Jalankan modul kolom Jalankan modul isi End Modul
Modul baris
Fungsi : Untuk menampilkan keterangan kolom pada table iterasi Begin
Deklarasikan variabel i sebagai array of integer Tentukan Identifier[0,1] dengan string 1000
Isi StringGrid1[1,0] dengan isi Identifier[0,1]
Lakukan perulangan untuk nilai i sama dengan 1 sampai numstock Set nilai Identifier[0,i+1] sama dengan i
Isi StringGrid1[i+1,0] dengan X + inttostring(i)
Set nilai Identifier[0,numstock+ i +1] sama dengan 100 + i Isi StringGrid1[numstock + i +1, 0] dengan s + inttostring(i) Lakukan perulangan untuk nilai i sama dengan 1 sampai numstock + 2 Set nilai Identifier[0,numstock+ i + 3] sama dengan 50 + i
Isi StringGrid1[numstock+ i + 3,0] dengan string l + inttostring(i) Set nilai Identifier[0, 2*numstock+6] sama dengan 1001
Set nilai Identifier[0, 2*numstock+7] sama dengan 1002 Isi StringGrid1[2*numstock+6, 0] dengan string a0
Isi StringGrid1[2*numstock+7, 0] dengan string solution End Modul
Modul kolom
Fungsi : Untuk menampilkan keterangan baris pada tabel iterasi Begin
Deklarasikan variabel i sebagai integer Tentukan Identifier[1,0] sama dengan 1000
Isi StringGrid1[0,1] dengan string w
Lakukan perulangan untuk i sama dengan 1 sampai numstock Set Identifier[i+1, 0] sama dengan string 50 + i +2
Isi StringGrid1[0, i+1] dengan string l + inttostring(i+2) Lakukan perulangan untuk i sama dengan 1 sampai numstock Set Identifier[numstock+1+i, 0] sama dengan string 100 + i Isi StringGrid1[0, numstock+1+i] dengan string s + inttostring(i) End Modul
Fungsi : Untuk menentukan dan menampilkan isi tabel iterasi pertama kali Begin
Deklarasikan i,j sebagai integer
Set nilai variabel Grid[1,1] dengan nilai 1
Lakukan perulangan untuk variabel i mulai dari 2 sampai numstock + 3 Tentukan nilai Grid[i,1] sama dengan 0
Isi StringGrid1[1,i] dengan 0
Lakukan perulangan untuk variabel i mulai dari 2 sampai numstock + 1
Lakukan perulangan untuk variabel j sama dengan 2 sampai numstock+1 Tentukan nilai Grid[i,j] sama dengan -2 * covariance[i-2, j-2]
Isi StringGrid1[j,i] dengan -2 * covariance[i-2, j-2]
Lakukan perulangan untuk variabel i mulai dari numstock + 2 sampai numstock + 3
Lakukan perulangan untuk variabel j sama dengan 2 sampai numstock+1 Tentukan nilai Grid[i,j] sama dengan A[i-numstock-2, j-1]
Isi StringGrid1[j,i] dengan A[i-numstock-2, j-1]
Lakukan perulangan untuk variabel i mulai dari 2 sampai numstock + 1
Lakukan perulangan untuk variabel j sama dengan numstock + 2 sampai numstock+3
Tentukan nilai Grid[i,j] sama dengan 0 Isi StringGrid1[j,i] dengan 0
Lakukan perulangan untuk variabel i mulai dari numstock + 2 sampai numstock + 3
Lakukan perulangan untuk variabel j sama dengan numstock + 2 sampai numstock+3
Tentukan nilai Grid[i,j] sama dengan MIdentitas2[i-numstock-1, j-numstock-1]
Isi StringGrid1[j,i] dengan MIdentitas2[i-numstock-1, j-numstock-1] Lakukan perulangan untuk variabel i mulai dari 2 sampai numstock + 1
Lakukan perulangan untuk variabel j sama dengan numstock + 4 sampai numstock + 5
Tentukan nilai Grid[i,j] sama dengan -1 *A[j-numstock-3, i-1] Isi StringGrid1[j,i] dengan -1*A[j-numstock-3, i-1]
Lakukan perulangan untuk variabel i mulai dari numstock + 2 sampai numstock + 3
Lakukan perulangan untuk variabel j sama dengan numstock + 4 sampai numstock+5
Tentukan nilai Grid[i,j] sama dengan 0 Isi StringGrid1[j,i] dengan 0
Lakukan perulangan untuk variabel i mulai dari 2 sampai numstock + 1
Lakukan perulangan untuk variabel j sama dengan numstock + 6 sampai 2*numstock+5
Tentukan nilai Grid[i,j] sama dengan MIdentitas1[i-1, j-numstock-5] Isi StringGrid1[j,i] dengan MIdentitas1[i-1, j-numstock-5]
Lakukan perulangan untuk variabel i mulai dari numstock + 2 sampai numstock + 3
2*numstock+5
Tentukan nilai Grid[i,j] sama dengan 0 Isi StringGrid1[j,i] dengan 0
Lakukan perulangan untuk variabel i mulai dari 2 sampai 2*numstock + 5 Tentukan nilai Grid[1,i] sama dengan 0
Isi StringGrid1[i,1] dengan 0
Tentukan nilai Grid[1,2*numstock+6] sama dengan 1 Isi StringGrid1[2*numstock+6,1] dengan 1
Tentukan nilai Grid[1,2*numstock+7] sama dengan 0 Isi StringGrid1[2*numstock+7,1] dengan 0
Tentukan nilai Grid[numstock+3, 2*numstock+6] sama dengan -1 Isi StringGrid1[2*numstock+6, numstock+3] dengan -1
Lakukan perulangan untuk variabel i mulai dari 2 sampai numstock + 2 Tentukan nilai Grid[i, 2*numstock + 6] sama dengan 0
Isi StringGrid1[2*numstock + 6, i] dengan 0
Lakukan perulangan untuk variabel i mulai dari 1 sampai numstock + 1 Tentukan nilai Grid[i, 2*numstock + 7] sama dengan 0
Isi StringGrid1[2*numstock + 7, i] dengan 0
Lakukan perulangan untuk variabel i mulai dari numstock + 2 sampai numstock + 3
Tentukan nilai Grid[i, 2*numstock + 7] sama dengan b[i-numstock-1, 1] Isi StringGrid1[2*numstock + 7, i] dengan b[i-numstock-1, 1]
Modul but_start_iteration click
Fungsi : Untuk menentukan perintah yang akan dijalankan bila tombol but_start_iteration ditekan
Begin
Jalankan modul load_final_calculation Transfer nilai numstock
End Modul
Modul but_reset click
Fungsi : Untuk menentukan perintah yang akan dijalankan jika tombol but_reset ditekan.
Begin
Deklarasikan variabel i, j sebagai integer Kosongkan editbox txtstock_number
Set fokus pada editbox txtstock_number Kosongkan editbox txtexpected_return Aktifkan DBGrid1
Lakukan perulangan untuk nilai i dari 0 sampai 2
Lakukan perulangan untuk nilai j sama dengan 1 sampai numstock Kosongkan isi dari StringGrid1[i,j]
Kosongkan isi dari StringGrid3[i,j]
Lakukan perulangan untuk nilai i sama dengan 0 sampai 2*numstock+7 Lakukan perulangan untuk nilai j sama dengan 0 sampai numstock+3 Kosongkan isi StringGrid2[i,j]
Lakukan perulangan untuk nilai i sama dengan 0 sampai numstock – 1 Set nilai mean[i] menjadi 0
Set nilai variance[i] menjadi 0
Lakukan perulangan untuk nilai i sama dengan 0 sampai numstock – 1 Lakukan perulangan untuk nilai j sama dengan 0 sampai numstock – 1
Set nilai covariance[i,j] menjadi 0 Non-aktifkan tombol but_add_to_portfolio Non-aktifkan tombol but_calculate Non-aktifkan tombol but_iteration_table Non-aktifkan tombol but_final_result Tentukan fokus pada editbox txtstock_number Kosongkan Memo1
Set nilai awal untuk temp sama dengan 0 Set nilai awal untuk variabel k, l, m adalah 0 Isi StringGrid1[0,0] dengan string ‘Stock Code’ Isi StringGrid1[1,0] dengan string ‘Average Return’ Isi StringGrid1[2,0] dengan string ‘Variance’ Non-visible kan StringGrid3
End Modul
Layar Final Calculation Modul Load_final_calculation
Fungsi : Untuk menentukan perintah yang akan dijalankan jika tombol but_final_calculation ditekan.
Begin
Deklarasikan variabel numstock sebagai integer Deklarasikan leaving_var sebagai string
Deklarasikan variabel pivot_column, pivot_row sebagai integer Deklarasikan hasil_bagi sebagai array of extended
Deklarasikan varaibel stock_name sebagai array of string Kosongkan Memo1
End Modul
Modul but_final click
Fungsi : Untuk menentukan perintah yang akan dijalankan jika tombol but_final ditekan
Begin
Deklarasikan variabel counter sebagai integer Tentukan nilai counter sama dengan 0
Non-aktifkan tombol but_final
Tentukan banyak kolom pada StringGrid1 adalah (2*numstock) + 8 Tentukan banyak baris pada StringGrid1 adalah numstock+ 4 Tentukan nilai variabel pivot_column yaitu 2*numstock+6
Selama leaving_var tidak sama dengan 1001 maka lakukan Jalankan modul iterasi
Jalankan modul cari_pivot_column Jalankan modul baris
Tambahkan nilai variabel counter dengan 1 Jika nilai counter sama dengan 1000 maka
Tampilkan pesan “Result not found because of the expected return value is too big”
Setelah selesai, jalankan modul hasil End Modul
Modul iterasi
Fungsi : Untuk menentukan hasil bagi antara kolom solusi dengan pivot_column Begin
Deklarasikan variabel i sebagai integer
Lakukan perulangan untuk variabel i dari 2 sampai numstock + 3 Jika Grid[i, pivot_column] sama dengan 0, maka
Tentukan hasil_bagi[i] sama dengan 100000 Selain itu
Tentukan hasil_bagi[i] dengan perhitungan hasil_bagi[i] = Grid[i, 2*numstock+7] / Grid[i, pivot_column]
Modul hasil_bagi_nol
Fungsi : Untuk menentukan perintah yang akan dijalankan bila dari modul iterasi ditemukan hasil_bagi yang nilainya 0
Begin
Deklarasikan variabel i,max sebagai integer Deklarasikan variabel maks sebagai extended Tentukan nilai maks sama dengan 0
Lakukan perulangan untuk i mulai dari 2 sampai numstock + 3 Jika hasil_bagi[i] sama dengan 0, maka
Jika Grid[i, pivot_column] lebih besar maks maka
Tentukan nilai maks sama dengan Grid[i, pivot_column] Tentukan nilai max sama dengan nilai variabel i
Selain itu
Tentukan nilai maks sama dengan maks Tentukan nilai max sama dengan max Jika nilai maks lebih besar dari 0, maka
Tentukan nilai variabel pivot_row sama dengan max Selain itu
Jalankan prosedur hasil_bagi_tidak_nol End Modul
Modul hasil_bagi_tidak_nol
Fungsi : Untuk menentukan perintah yang akan dijalankan bila dari modul iterasi tidak ditemukan hasil_bagi yang nilainya 0
Deklarasikan variabel i, min_r sebagai integer Deklarasikan min sebagai extended
Tentukan nilai min mula-mula 100000
Lakukan perulangan untuk variabel i mulai dari 2 sampai numstock + 3 Jika hasil_bagi[i] tidak sama dengan 0, maka
Jika hasil_bagi[i] < min maka
Tentukan nilai variabel min sama dengan hasil_bagi[i] Tentukan nilai min_r sama dengan i
Selain itu
Tentukan nilai variabel min sama dengan min Tentukan nilai variabel min_r sama dengan min_r Setelah itu tentukan nilai pivot_row sama dengan min_r
End Modul
Modul proses
Fungsi : Untuk mencari new pivot row dan baris-baris baru lainnya dalam proses iterasi
Begin
Deklarasikan variabel i,j sebagai integer
Deklarasikan variabel pivot_element sebagai extended
Deklarasikan variabel pengali, new_pivot_row sebagai array of extended Tentukan nilai dari leaving_var sama dengan Identifier[pivot_row,0]
Tentukan nilai pivot_element sama dengan Grid[pivot_row,pivot_column] Lakukan perulangan untuk variabel i sama dengan 1 sampai numstock+3 Tentukan nilai dari pengali[i] sama dengan isi dari Grid[i,pivot_column] Lakukan perulangan untuk i sama dengan 1 sampai numstock + 3
Jika nilai i sama dengan pivot_row maka
Lakukan perulangan untuk j sama dengan 1 sampai 2*numstock + 7 Tentukan nilai Grid[i,j] dengan perhitungan Grid[i,j] = Grid[i,j] / pivot_element
Tentukan nilai new_pivot_row[j] sama dengan Grid[i,j] Lakukan perulangan untuk i sama dengan 1 sampai numstock + 3
Lakukan perulangan untuk j sama dengan 1 sampai 2*numstock + 7 Jika nilai tidak sama dengan pivot_row maka
Tentukan nilai Grid[i,j] dengan perhitungan Grid[i,j] = Grid[i,j] – pengali[i] * new_pivot_row[j]
End Modul
Modul cari_pivot_column
Fungsi : Untuk mencari pivot_column yang baru setiap satu kali iterasi selesai dilakukan
Begin
Deklarasikan variabel i,j sebagai integer
Deklarasikan variabel min_col sebagai extended Jalankan modul baris
Lakukan perulangan untuk variabel i dengan nilai 2 sampai numstock + 3 Jika isi Identifier[i,0] sama dengan 1001 maka
Tentukan nilai Identifier[0,2*numstock+6] menjadi 0 Jika isi Identifier[i,0] sama dengan 101 atau string 51 maka Tentukan nilai Identifier[0, numstock+2] menjadi 0 Tentukan nilai Identifier[0, numstock+4] menjadi 0
Jika isi Identifier[i,0] sama dengan string 102 atau string 52 maka Tentukan nilai Identifier[0, numstock+3] menjadi 0 Tentukan nilai Identifier[0, numstock+5] menjadi 0
Lakukan perulangan untuk variabel i mulai dari 1 sampai numstock
Lakukan perulangan untuk variabel j mulai dari 2 sampai numstock + 3 Jika isi Identifier[j,0] sama dengan i atau string 50+ i + 2 maka
Tentukan nilai Identifier[0, i+1] menjadi 0
Tentukan nilai Identifier[0, numstock+5+i] menjadi 0 Tentukan nilai variabel min_col sama dengan 100000
Lakukan perulangan untuk nilai i sama dengan 1 sampai 2 * numstock + 7 Jika nilai Identifier[0,i] tidak sama dengan 0 maka
Jika Grid[1,i] lebih kecil daripada min_col, maka Tentukan nilai min_col sama dengan Grid[1,i] Tentukan nilai pivot_column sama dengan i Selain itu
Tentukan nilai min_col sama dengan min_col
End Modul
Modul hasil
Fungsi : Untuk menunjukkan hasil akhir bila iterasi telah selesai dilakukan Begin
Deklarasikan variabel i,j sebagai integer Jalankan modul baris
Lakukan perulangan untuk i sama dengan 1 sampai numstock+3 Jika nilai Identifier[i,0] sama dengan 1000 maka
Isi StringGrid1[0,i] dengan string 'W' Jika Identifier[i,0] sama dengan 101 maka Isi StringGrid1 [0,i] dengan string 's1' Jika Identifier[i,0] sama dengan 102 maka Isi StringGrid1 [0,i] dengan string 's2' Jika Identifier[i,0] sama dengan 51 maka Isi StringGrid1 [0,i] dengan string 'l1' Jika Identifier[i,0] sama dengan 52 maka Isi StringGrid1 [0,i] dengan string 'l2'
Lakukan perulangan untuk i sama dengan 1 sampai numstock Lakukan perulangan untuk j sama dengan 1 sampai numstock+3 Jika Identifier[j,0] sama dengan i maka
Isi StringGrid1 [0,j] dengan 'X' + IntToStr(i) Tampilkan hasilnya dalam Memo1
Lakukan perulangan untuk nilai i sama dengan 1 sampai 2*numstock +7 Lakukan perulangan untuk nilai j sama dengan 1 sampai numstock + 3 Isi StringGrid[i,j] dengan floattostr(Grid[j,i])