• Tidak ada hasil yang ditemukan

BAB III PERANCANGAN PROGRAM APLIKASI

N/A
N/A
Protected

Academic year: 2021

Membagikan "BAB III PERANCANGAN PROGRAM APLIKASI"

Copied!
64
0
0

Teks penuh

(1)

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.

(2)

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.

(3)

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.

(4)

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

*

(5)

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

(6)

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

(7)

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

(8)

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%

(9)

Periode RBBCARBBCA ( RBBCA)2

BBCA

RRINDFRINDF (RINDFRINDF)2 RPTBARPTBA (RPTBARPTBA)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

(10)

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

(11)

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

(12)

σ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 :

(13)

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 x

Fungsi 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 x

Dengan 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 :

(14)

-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

(15)

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

(16)

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

(17)

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

(18)

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

(19)

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

(20)

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

(21)

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.

(22)

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.

(23)

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.

(24)

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.

(25)

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

(26)

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.

(27)

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.

(28)

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”

(29)

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

(30)

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.

(31)

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.

(32)

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.

(33)

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

(34)

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”

(35)

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.

(36)

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

(37)

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.

(38)

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

(39)

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”

(40)

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

(41)

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

(42)

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

(43)

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

(44)

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.

(45)

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

(46)

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

(47)

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]

(48)

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

(49)

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

(50)

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)

(51)

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

(52)

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

(53)

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

(54)

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]

(55)

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]

(56)

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

(57)

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

(58)

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]

(59)

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

(60)

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]

(61)

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

(62)

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

(63)

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

(64)

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])

Gambar

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 &lt;&gt; pivot_row ? Ya Tidak
Tabel 3.1 Tabel Return dari saham BBCA, INDF, PTBA Periode Agustus 2004 – Juli 2005
Tabel 3.2 Perhitungan nilai varians saham BBCA, INDF, PTBA
Tabel 3.3 Perhitungan nilai kovarians saham BBCA, INDF, PTBA
+6

Referensi

Dokumen terkait

!erdasarkan !erdasarkan sistem tata nama ganda' cara penulisan yang benar untuk nama jenis sistem tata nama ganda' cara penulisan yang benar untuk nama jenis kelapa adalah $..

Dari sengketa ini dapat disimpulkan bahwa prinsip yurisdiksi teritorial dapat pula berlaku terhadap kejahatan yang dilakukan tidak hanya di wilayah negara yang bersangkutan, tapi

Namun apabila posisi yang terbentuk adalah saya OK – kamu tidak OK dan posisi lainnya yang senada, maka sudah semestinya dikembangkan suasana komunikasi yang

Kajian ini mengkaji perbezaan penggunaan bingkai oleh akhbar Kompas dan Republika di samping melihat perubahan penggunaan bingkai semasa dan selepas pilihan raya legislatif..

Penelitian ini bertujuan untuk menganalisis pengaruh faktor fundamental yang diukur dengan rasio likuiditas, rasio hutang, rasio aktivitas, rasio profitabilitas dan faktor

menahan gaya geser, dan guling, tetapi tanah tidak mampu memikul beban pada ujung maupun pangkal abutmen, sehingga abutmen harus diberi konstruksi tambahan

Penelitian ini digunakan untuk menjawab permasalahan, apakah penggunaan metode Numbered Heads Together (NHT) dapat meningkatkan hasil belajar mata pelajaran

tersebut tidak mustahil menimbulkan konflik konflik. Berdasarkan perspektif kurikuler ini, pengembangan pendidikan berwawasan global memiliki implikasi ke arah