BAB VI PENUTUP
6.2 Saran
Sistem yang telah diterapkan dalam Tugas Akhir ini dapat dikembangkan lagi dengan penerapan beberapa metode yang telah ada dalam kasus forex trading, misalnya dengan menggunakan metode MACD (Moving Average Convergence / Divergence) dan metode bohranger, Sehingga memaksimalkan nilai kevalidannya untuk periode berikutnya.
Untuk memudahkan para pelaku forex trading dalam menyusun strategi, sistem ini dapat dikembangkan lagi dengan menambahkan parameter periode
untuk menentukan berapa lama periode yang akan diambil oleh user, sehingga lama periode tidak hanya tergantung dari 14 periode. Serta pilihan periode juga dapat dikembangkan dengan menambahkan pilihan peride yang diinginkan, misalnya periode tiap menit, tiap jam atau bahkan setiap detik.
Untuk memaksimalkan sistem ini, sistem ini juga dapat dikembangkan dengan menambahkan parameter yang berfungsi untuk mengupdate kurs secara real time, jadi user tidak perlu memasukkan nilai kurs satu per satu.
82
Amelia, T. (2007). Pemrogaman Data Base Menggunakan ADO .NET. Surabaya: Graha Ilmu.
Dania, I Putu. 2006. Rancang Bangun Sistem Informasi Peramalan Pergerakan Harga Saham Menggunakan Metode Relative Strength Index. Disertai tidak diterbitkan. Surabaya: Program Strata Satu STIKOM Surabaya
J.ALam, M. A. (2005). Belajar Sendiri Pemrogaman Visual Basic dalam SQL Server 7.0 & 2005. Bandung: PT Elex Media Komputindo.
STIKOM, L. K. Modul Praktikum Pemrogaman Visual II. Surabaya: Sekolah Tinggi Manajemen Informatika & Teknik Komputer.
Syamsir, H. (2005). Solusi Investasi di Bursa Saham Indonesia. Jakarta: PT ELex Media Komputindo.
Yuswanto, Soetam Rizky, Tan Amelia. (2008). Pemrogaman Visual I. Surabaya: Sekolah Tinggi Manajemen Informatika dan Teknik Komputer.
Street Authority, L. (2009). StreetAuthority.Com. Retrieved Januari 15, 2012, from RSI: Calculation Underlies Meaningful Interpretation:
83
DECLARE @ID int, @IDKURS int, @TANGGAL datetime, @OPEN decimal(19,6), @CLOSE decimal(19,6), @UP decimal(19,6), @DOWN decimal(19,6)
SELECT @ID = ID, @IDKURS = IDKURS, @TANGGAL = TANGGAL, @OPEN = [OPEN], @CLOSE = [CLOSE], @UP = UP, @DOWN = DOWN FROM INSERTED
DECLARE @ID_TEMP int, @TANGGAL_TEMP datetime,
@OPEN_TEMP decimal(19,6), @OPENVALUE_TEMP decimal(19,6), @OPENUP_TEMP decimal(19,6), @OPENDOWN_TEMP decimal(19,6),
@CLOSE_TEMP decimal(19,6), @CLOSEVALUE_TEMP decimal(19,6), @CLOSEUP_TEMP decimal(19,6), @CLOSEDOWN_TEMP decimal(19,6),
@UP_TEMP decimal(19,6), @UPVALUE_TEMP decimal(19,6), @UPUP_TEMP decimal(19,6), @UPDOWN_TEMP decimal(19,6), @DOWN_TEMP decimal(19,6), @DOWNVALUE_TEMP decimal(19,6), @DOWNUP_TEMP decimal(19,6), @DOWNDOWN_TEMP decimal(19,6)
DECLARE @CLOSERSI decimal(19,2), @CLOSERSIVALUE decimal(19,2), @CLOSERSIUP decimal(19,2), @CLOSERSIDOWN decimal(19,2)
DECLARE @SUMUP decimal(19,2), @SUMDOWN decimal(19,2), @SUMUPAV decimal(19,2), @SUMDOWNAV decimal(19,2) DECLARE @RSSCLOSE decimal(19,2), @HCLOSE decimal(19,2), @ICLOSE decimal(19,2), @RSICLOSE decimal(19,2) /*OPEN*/
SELECT @TANGGAL_TEMP = @TANGGAL - 1
IF EXISTS(SELECT [OPEN] FROM TFKURS WHERE (IDKURS = @IDKURS) AND (TANGGAL = @TANGGAL_TEMP)) BEGIN
SELECT @OPEN_TEMP = [OPEN] FROM TFKURS WHERE (IDKURS = @IDKURS) AND (TANGGAL = @TANGGAL_TEMP) SELECT @OPENVALUE_TEMP = @OPEN - @OPEN_TEMP
IF @OPENVALUE_TEMP > 0 BEGIN
SELECT @OPENUP_TEMP = @OPENVALUE_TEMP END IF @OPENVALUE_TEMP <= 0 BEGIN SELECT @OPENUP_TEMP = 0 END IF @OPENVALUE_TEMP < 0 BEGIN
SELECT @OPENDOWN_TEMP = @OPENVALUE_TEMP * -1 END IF @OPENVALUE_TEMP >= 0 BEGIN SELECT @OPENDOWN_TEMP = 0 END
UPDATE TFKURS SET [OPENVALUE] = @OPENVALUE_TEMP, OPENUP = @OPENUP_TEMP, OPENDOWN = @OPENDOWN_TEMP WHERE ID = @ID
END
SELECT @TANGGAL_TEMP = @TANGGAL + 1
IF EXISTS(SELECT [OPEN] FROM TFKURS WHERE (IDKURS = @IDKURS) AND (TANGGAL = @TANGGAL_TEMP)) BEGIN
SELECT @ID_TEMP = ID, @OPEN_TEMP = [OPEN] FROM TFKURS WHERE (IDKURS = @IDKURS) AND (TANGGAL = @TANGGAL_TEMP)
SELECT @OPENVALUE_TEMP = @OPEN_TEMP - @OPEN IF @OPENVALUE_TEMP > 0
BEGIN
SELECT @OPENUP_TEMP = @OPENVALUE_TEMP END IF @OPENVALUE_TEMP <= 0 BEGIN SELECT @OPENUP_TEMP = 0 END IF @OPENVALUE_TEMP < 0 BEGIN
SELECT @OPENDOWN_TEMP = @OPENVALUE_TEMP * -1 END
IF @OPENVALUE_TEMP >= 0 BEGIN
END
UPDATE TFKURS SET [OPENVALUE] = @OPENVALUE_TEMP, OPENUP = @OPENUP_TEMP, OPENDOWN = @OPENDOWN_TEMP WHERE ID = @ID_TEMP
END
/*CLOSE*/
SELECT @TANGGAL_TEMP = @TANGGAL - 1
IF EXISTS(SELECT [CLOSE] FROM TFKURS WHERE (IDKURS = @IDKURS) AND (TANGGAL = @TANGGAL_TEMP)) BEGIN
SELECT @CLOSE_TEMP = [CLOSE] FROM TFKURS WHERE (IDKURS = @IDKURS) AND (TANGGAL = @TANGGAL_TEMP) SELECT @CLOSEVALUE_TEMP = @CLOSE - @CLOSE_TEMP
IF @CLOSEVALUE_TEMP > 0 BEGIN
SELECT @CLOSEUP_TEMP = @CLOSEVALUE_TEMP END IF @CLOSEVALUE_TEMP <= 0 BEGIN SELECT @CLOSEUP_TEMP = 0 END IF @CLOSEVALUE_TEMP < 0 BEGIN
SELECT @CLOSEDOWN_TEMP = @CLOSEVALUE_TEMP * -1 END IF @CLOSEVALUE_TEMP >= 0 BEGIN SELECT @CLOSEDOWN_TEMP = 0 END
UPDATE TFKURS SET [CLOSEVALUE] = @CLOSEVALUE_TEMP, CLOSEUP = @CLOSEUP_TEMP, CLOSEDOWN = @CLOSEDOWN_TEMP WHERE ID = @ID
END
SELECT @TANGGAL_TEMP = @TANGGAL + 1
IF EXISTS(SELECT [CLOSE] FROM TFKURS WHERE (IDKURS = @IDKURS) AND (TANGGAL = @TANGGAL_TEMP)) BEGIN
SELECT @ID_TEMP = ID, @CLOSE_TEMP = [CLOSE] FROM TFKURS WHERE (IDKURS = @IDKURS) AND (TANGGAL = @TANGGAL_TEMP)
SELECT @CLOSEVALUE_TEMP = @CLOSE_TEMP - @CLOSE IF @CLOSEVALUE_TEMP > 0
BEGIN
SELECT @CLOSEUP_TEMP = @CLOSEVALUE_TEMP END IF @CLOSEVALUE_TEMP <= 0 BEGIN SELECT @CLOSEUP_TEMP = 0 END IF @CLOSEVALUE_TEMP < 0 BEGIN
SELECT @CLOSEDOWN_TEMP = @CLOSEVALUE_TEMP * -1 END IF @CLOSEVALUE_TEMP >= 0 BEGIN SELECT @CLOSEDOWN_TEMP = 0 END
UPDATE TFKURS SET [CLOSEVALUE] = @CLOSEVALUE_TEMP, CLOSEUP = @CLOSEUP_TEMP, CLOSEDOWN = @CLOSEDOWN_TEMP WHERE ID = @ID_TEMP
END
/*UP*/
SELECT @TANGGAL_TEMP = @TANGGAL - 1
IF EXISTS(SELECT [UP] FROM TFKURS WHERE (IDKURS = @IDKURS) AND (TANGGAL = @TANGGAL_TEMP)) BEGIN
SELECT @UP_TEMP = [UP] FROM TFKURS WHERE (IDKURS = @IDKURS) AND (TANGGAL = @TANGGAL_TEMP) SELECT @UPVALUE_TEMP = @UP - @UP_TEMP
SELECT @UPUP_TEMP = @UPVALUE_TEMP END IF @UPVALUE_TEMP <= 0 BEGIN SELECT @UPUP_TEMP = 0 END IF @UPVALUE_TEMP < 0 BEGIN
SELECT @UPDOWN_TEMP = @UPVALUE_TEMP * -1 END IF @UPVALUE_TEMP >= 0 BEGIN SELECT @UPDOWN_TEMP = 0 END
UPDATE TFKURS SET [UPVALUE] = @UPVALUE_TEMP, UPUP = @UPUP_TEMP, UPDOWN = @UPDOWN_TEMP WHERE ID = @ID
END
SELECT @TANGGAL_TEMP = @TANGGAL + 1
IF EXISTS(SELECT [UP] FROM TFKURS WHERE (IDKURS = @IDKURS) AND (TANGGAL = @TANGGAL_TEMP)) BEGIN
SELECT @ID_TEMP = ID, @UP_TEMP = [UP] FROM TFKURS WHERE (IDKURS = @IDKURS) AND (TANGGAL = @TANGGAL_TEMP)
SELECT @UPVALUE_TEMP = @UP_TEMP - @UP IF @UPVALUE_TEMP > 0
BEGIN
SELECT @UPUP_TEMP = @UPVALUE_TEMP END IF @UPVALUE_TEMP <= 0 BEGIN SELECT @UPUP_TEMP = 0 END IF @UPVALUE_TEMP < 0 BEGIN
SELECT @UPDOWN_TEMP = @UPVALUE_TEMP * -1 END IF @UPVALUE_TEMP >= 0 BEGIN SELECT @UPDOWN_TEMP = 0 END
UPDATE TFKURS SET [UPVALUE] = @UPVALUE_TEMP, UPUP = @UPUP_TEMP, UPDOWN = @UPDOWN_TEMP WHERE ID = @ID_TEMP
END
/*DOWN*/
SELECT @TANGGAL_TEMP = @TANGGAL - 1
IF EXISTS(SELECT [DOWN] FROM TFKURS WHERE (IDKURS = @IDKURS) AND (TANGGAL = @TANGGAL_TEMP)) BEGIN
SELECT @DOWN_TEMP = [DOWN] FROM TFKURS WHERE (IDKURS = @IDKURS) AND (TANGGAL = @TANGGAL_TEMP) SELECT @DOWNVALUE_TEMP = @DOWN - @DOWN_TEMP
IF @DOWNVALUE_TEMP > 0 BEGIN
SELECT @DOWNUP_TEMP = @DOWNVALUE_TEMP END IF @DOWNVALUE_TEMP <= 0 BEGIN SELECT @DOWNUP_TEMP = 0 END IF @DOWNVALUE_TEMP < 0 BEGIN
SELECT @DOWNDOWN_TEMP = @DOWNVALUE_TEMP * -1 END
IF @DOWNVALUE_TEMP >= 0 BEGIN
SELECT @DOWNDOWN_TEMP = 0 END
UPDATE TFKURS SET [DOWNVALUE] = @DOWNVALUE_TEMP, DOWNUP = @DOWNUP_TEMP, DOWNDOWN = @DOWNDOWN_TEMP WHERE ID = @ID
END
SELECT @TANGGAL_TEMP = @TANGGAL + 1
IF EXISTS(SELECT [DOWN] FROM TFKURS WHERE (IDKURS = @IDKURS) AND (TANGGAL = @TANGGAL_TEMP)) BEGIN
SELECT @ID_TEMP = ID, @DOWN_TEMP = [DOWN] FROM TFKURS WHERE (IDKURS = @IDKURS) AND (TANGGAL = @TANGGAL_TEMP)
SELECT @DOWNVALUE_TEMP = @DOWN_TEMP - @DOWN IF @DOWNVALUE_TEMP > 0
BEGIN
SELECT @DOWNUP_TEMP = @DOWNVALUE_TEMP END IF @DOWNVALUE_TEMP <= 0 BEGIN SELECT @DOWNUP_TEMP = 0 END IF @DOWNVALUE_TEMP < 0 BEGIN
SELECT @DOWNDOWN_TEMP = @DOWNVALUE_TEMP * -1 END IF @DOWNVALUE_TEMP >= 0 BEGIN SELECT @DOWNDOWN_TEMP = 0 END
UPDATE TFKURS SET [DOWNVALUE] = @DOWNVALUE_TEMP, DOWNUP = @DOWNUP_TEMP, DOWNDOWN = @DOWNDOWN_TEMP WHERE ID = @ID_TEMP
END
/*RSI CLOSE*/
SELECT @TANGGAL_TEMP = @TANGGAL - 13 SELECT @SUMUP = 0, @SUMDOWN = 0
IF EXISTS(SELECT [ID] FROM TFKURS WHERE (IDKURS = @IDKURS) AND (TANGGAL = @TANGGAL_TEMP)) BEGIN
DECLARE CURFETCH41 CURSOR FOR
SELECT SUM([CLOSE]) AS [CLOSE], SUM(CLOSEVALUE) AS CLOSEVALUE, SUM(CLOSEUP) AS CLOSEUP, SUM(CLOSEDOWN) AS CLOSEDOWN FROM TFKURS WHERE (IDKURS = @IDKURS) AND (TANGGAL BETWEEN @TANGGAL_TEMP AND
@TANGGAL) OPEN CURFETCH41
FETCH NEXT FROM CURFETCH41 INTO @CLOSERSI, @CLOSERSIVALUE, @CLOSERSIUP, @CLOSERSIDOWN WHILE @@FETCH_STATUS = 0
BEGIN
FETCH NEXT FROM CURFETCH41 INTO @CLOSERSI, @CLOSERSIVALUE, @CLOSERSIUP, @CLOSERSIDOWN END
CLOSE CURFETCH41 DEALLOCATE CURFETCH41
SELECT @SUMUPAV = @CLOSERSIUP/14 SELECT @SUMDOWNAV = @CLOSERSIDOWN/14 SELECT @RSSCLOSE = @SUMUPAV / @SUMDOWNAV SELECT @HCLOSE = 1 + @RSSCLOSE
SELECT @ICLOSE = 100 / @HCLOSE SELECT @RSICLOSE = 100 - @ICLOSE
UPDATE TFKURS SET RSSCLOSE = @RSSCLOSE, HCLOSE = @HCLOSE, ICLOSE = @ICLOSE, RSICLOSE = @RSICLOSE WHERE ID = @ID
END
Code Visual Basic SPK RSI
Case"RSI"
If rdbtnClose.Checked = TrueThen
Try
Me.SqlConnRSI = myConnection.conn objDataTable.Clear()
StrSQL = "SELECT TFKURS.ID, TFKURS.IDKURS, MKURS.PAIRS, TFKURS.TANGGAL, TFKURS.RSICLOSE AS RSI
"', 102) AND CONVERT(DATETIME, " & _
"'" & dfAkhir & "', 102)) AND (TFKURS.IDKURS = " & Val(cmbPairs.SelectedValue.ToString) & ") ORDER BY TFKURS.TANGGAL"
objCommandRSI = New SqlCommand
objCommandRSI.Connection = myConnection.conn objCommandRSI.CommandType = CommandType.Text objCommandRSI.CommandText = StrSQL
objDataAdapterRSI = New SqlDataAdapter(objCommandRSI)
objDataAdapterRSI.Fill(objDataSetRSI, "MDT_RSI") objDataTableRSI = objDataSetRSI.Tables("MDT_RSI") dRSI = 0
dKursUp = 0 dKursDown = 0
objCommandRSI = myConnection.open.CreateCommand
objCommandRSI.CommandText = ("SELECT TFKURS.ID, TFKURS.IDKURS, MKURS.PAIRS, TFKURS.TANGGAL,
TFKURS.CLOSEUP, TFKURS.CLOSEDOWN, TFKURS.RSICLOSE AS RSI FROM TFKURS LEFT OUTER JOIN MKURS ON " & _
"TFKURS.IDKURS = MKURS.ID WHERE (TFKURS.TANGGAL BETWEEN CONVERT(DATETIME, '" &
dfAwal & "', 102) AND CONVERT(DATETIME, " & _
"'" & dfAkhir & "', 102)) AND (TFKURS.IDKURS = " & Val(cmbPairs.SelectedValue.ToString) & ") ORDER BY TFKURS.TANGGAL")
objDataReaderRSI = objCommandRSI.ExecuteReader
Dim sValueRSI AsString, sValueKursUp AsString, sValueKursDown AsString
While objDataReaderRSI.Read()
sValueRSI = objDataReaderRSI.Item("RSI").ToString
sValueKursUp = objDataReaderRSI.Item("CLOSEUP").ToString sValueKursDown = objDataReaderRSI.Item("CLOSEDOWN").ToString 'A Fix
If IIf(sValueRSI = "", 0, Val(sValueRSI)) >= 70 Then
txtA.Text = "Overbought"
ElseIf IIf(sValueRSI = "", 0, Val(sValueRSI)) <= 30 Then
txtA.Text = "Oversold"
ElseIf (IIf(sValueRSI = "", 0, Val(sValueRSI)) > 30) And IIf(sValueRSI = "", 0, Val(sValueRSI)) < 70 Then
txtA.Text = "Wait and See" & vbCrLf & "RSI Value = " & Format(Val(sValueRSI), "###.##") EndIf
'B Not Fix
If IIf(sValueRSI = "", 0, Val(sValueRSI)) > dRSI And IIf(sValueKursDown = "", 0, Val(sValueKursDown)) > 0 Then
txtB.Text = "Divergency Positif"
ElseIf IIf(sValueRSI = "", 0, Val(sValueRSI)) < dRSI And IIf(sValueKursUp = "", 0, Val(sValueKursUp)) > 0 Then
txtB.Text = "Divergency Negatif"
Else
txtB.Text = ""
EndIf
'C Fix
If IIf(sValueRSI = "", 0, Val(sValueRSI)) >= 50 Then
txtC.Text = "Centerline Cross Over"
Else
txtC.Text = "Not Centerline Cross Over"
EndIf
dRSI = objDataReaderRSI.Item("RSI").ToString
dKursUp = objDataReaderRSI.Item("CLOSEUP").ToString dKursDown = objDataReaderRSI.Item("CLOSEDOWN").ToString EndWhile
objDataReaderRSI.Close()
Me.SqlConnRSI = myConnection.conn
Dim sqlGrafik AsString = "SELECT CONVERT(varchar, dbo.TFKURS.TANGGAL, 103) AS TANGGAL,
TFKURS.RSICLOSE AS RSI FROM TFKURS LEFT OUTER JOIN MKURS ON TFKURS.IDKURS = MKURS.ID WHERE " & _ "(TFKURS.TANGGAL BETWEEN CONVERT(DATETIME, '" & dfAwal & "', 102) AND CONVERT(DATETIME, '" & dfAkhir & "', 102)) AND " & _
"(TFKURS.IDKURS = " & Val(cmbPairs.SelectedValue.ToString) & ") ORDER BY TFKURS.TANGGAL"
Dim da AsNew SqlDataAdapter(sqlGrafik, SqlConnRSI) Dim ds AsNew DataSet()
da.Fill(ds, "TFKURS")
Dim ChartArea1 As ChartArea = New ChartArea() Dim Legend1 As Legend = New Legend() Dim Series1 As Series = New Series() Dim Chart1 = New Chart() Me.Controls.Add(Chart1)
ChartArea1.Name = "ChartArea1"
Chart1.ChartAreas.Add(ChartArea1) Legend1.Name = "Legend1"
Chart1.Legends.Add(Legend1)
Chart1.Location = New System.Drawing.Point(13, 13) Chart1.Name = "Chart1"
Series1.ChartArea = "ChartArea1"
Series1.Legend = "Legend1"
Series1.Name = "Series1"
Chart1.Series.Add(Series1)
MChart.Size = New System.Drawing.Size(800, 400) MChart.TabIndex = 0
MChart.Text = "Chart1"
MChart.Series("Series1").XValueMember = "TANGGAL"
MChart.Series("Series1").Font = New Font(Me.Font.Name, 6, FontStyle.Regular) MChart.Series("Series1").YValueMembers = "RSI"
MChart.DataSource = ds.Tables("TFKURS") MChart.Show()
myConnection.close() Catch ex As Exception
MsgBox("Cannot Load Data RSI Close Value" & vbCrLf & Err.Description, MsgBoxStyle.Exclamation + MsgBoxStyle.OkOnly, "Error Load Data RSI Close")
EndTry
EndIf
EndSelect
myConnection.close() EndSub
02-Nop $22,61 0,17 0,17 0 03-Nop $22,67 0,06 0,06 0 04-Nop $22,88 0,21 0,21 0 05-Nop $23,36 0,48 0,48 0 08-Nop $23,23 -0,13 0 0,13 09-Nop $23,08 -0,15 0 0,15 10-Okt $22,86 -0,22 0 0,22 11-Nop $23,17 0,31 0,31 0 12-Nop $23,69 0,52 0,52 0 15-Nop $23,77 0,08 0,08 0 16-Nop $23,84 0,07 0,07 0 17-Nop $24,32 0,48 0,48 0 18-Nop $24,80 0,48 0,48 0 t ot al 14 hari 2,86 0,5 0,204 0,036 5,72 19-Nop $24,16 -0,64 0 0,64 0,190 0,079 2,40 22-Nop $24,10 -0,06 0 0,06 0,176 0,078 2,27 23-Nop $23,37 -0,73 0 0,73 0,164 0,124 1,32 24-Nop $23,61 0,24 0,24 0 0,169 0,115 1,47 26-Nop 0 0 0 0,000 0,000 0,00 29-Nop 0 0 0 0,000 0,000 0,00 30-Nop 0 0 0 0,000 0,000 0,00
6,72 14,88 85,12 3,40 29,37 70,63 3,27 30,56 69,44 2,32 43,15 56,85 2,47 40,55 59,45 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00 0,00