Home 소개       다운로드       온라인 설명서      주식차트    Q & A     Blog    

히포차트 4.3 - 주식 차트 보조지표 RSI 공식적용 그래프







히포차트로 작성해본 주식 차트의 유명한 보조지표인 RSI 지표를 계산하여 시리즈 추가해보았습니다.

보통 70에서 매도 신호, 30에서 매수 신호를 한다고 하여 라인마커를 통해 상한 하한선을 구현해보았습니다.




Candle chart  Candle chart2  주식 캔들 차트 - 최고가, 최저가, 특정 봉 정보  히포차트 4.1 - 주식 차트 활용 (틱 배경색), Area라인 차트  히포차트 4.3 - 주식 봉 차트 HTS 프로그램 개발하기  키움증권 OpenAPI 로 제작된 실시간 주식 차트 프로그램  [히포차트 4.3] - 주식 캔들 차트 보조지표 일목균형표  히포차트 4.3 - 주식차트 20일 이동평균선 그리기  히포차트 4.3 - 주식차트 보조지표 MACD, 시그널, 오실레이터, 지수이동평균선  히포차트 4.3 - 주식차트 보조지표 볼린저밴드(Bollinger Band) 그리기  히포차트 4.3 - 스토캐스틱(Stochastics) 주식차트 보조지표  히포차트 4.3 - 주식 차트 보조지표 RSI 공식적용 그래프  


C#
 
HippoEngine en = new HippoEngine();
en.DataType = DataSourceType.Excel;
en.Query = "select * from [삼성전자2$]";
en.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=`C:\삼성전자2.xlsx`;Extended Properties=`Excel 12.0;HDR=YES`";

SeriesList sList = en.GetSeriesListOfStock(DataSourceType.Excel, "Date", "Start", "Close", "Low", "High");

sList.AxisFactor.YAxis.Direction = AxisDirection.Right;
sList.AxisFactor.YAxis.IsZeroStartScale = false;
sList.GraphArea.Grid.IsBackGridColor = false;

sList.AxisFactor.AxisItems.Add(new Axis(AxisType.Ytype));
sList.AxisFactor.AxisItems[0].Decimalpoint = 0;

sList.SeriesCollection.Add(new Series());
sList.SeriesCollection[1].ChartType = ChartType.Line;
sList.SeriesCollection[1].Points.Width = 0;
sList.SeriesCollection[1].Line.LineWidth = 2;
sList.SeriesCollection[1].SeriesColor = Color.Pink;
sList.SeriesCollection[1].AxisIndex = 1;

sList.AxisFactor.AxisItems[0].Markers.Add(new AxisMarker("RSI - 매도라인", 70));
sList.AxisFactor.AxisItems[0].Markers.Add(new AxisMarker("RSI - 매수라인", 30));

sList.AxisFactor.AxisItems[0].Markers[0].TextFormat.Alignment = StringAlignment.Near;
sList.AxisFactor.AxisItems[0].Markers[1].TextFormat.Alignment = StringAlignment.Near;

sList.AxisFactor.AxisItems[0].Markers[0].TextFormat.LineAlignment = StringAlignment.Near;
sList.AxisFactor.AxisItems[0].Markers[1].TextFormat.LineAlignment = StringAlignment.Near;

sList.AxisFactor.AxisItems[0].Markers[1].Line.LineColor = Color.Red;
sList.AxisFactor.AxisItems[0].Markers[1].Label.ForeColor = Color.Red;

int nCnt = sList.SeriesCollection[0].items.Count;

for(int i = 0; i < nCnt; i++)
{
SeriesItem itemRSI = new SeriesItem();
itemRSI.Name = sList.SeriesCollection[0].items[i].Name;
try
{

int N = 10; // 보통 14로 한다고 하는데 네이버에 데이터가 10일이라 일단 맞춤. 수정 하시면 됩니다
double U_sum = 0;
double D_sum = 0;
double AU = 0; // 평균
double AD = 0; // 평균

for(int a = 0; a < N; a++)
{
double U = 0;
double D = 0;
double temp = sList.SeriesCollection[0].items[i - a].YValue - sList.SeriesCollection[0].items[i - a - 1].YValue;

if (temp > 0)
{
U = temp;
U_sum += U;
}
else if (temp < 0)
{
D = Math.Abs(temp);
D_sum += D;
}
}

AU = U_sum / N;
AD = D_sum / N;

itemRSI.YValue = (AU / (AU + AD)) * 100;
}
catch { itemRSI.YValue = double.NaN; }

sList.SeriesCollection[1].items.Add(itemRSI);
}

this.hHippoChart1.Designer.InnerBackColor = Color.Yellow;
this.hHippoChart1.Titles.Label.Text = "히포차트 주식 - RSI 보조지표";
this.hHippoChart1.LegendBox.Visible = false;
this.hHippoChart1.SeriesListDictionary.Add(sList);
this.hHippoChart1.DrawChart();


VB
 
Dim en As New. HippoEngine()
en.DataType = DataSourceType.Excel
en.Query = "select * from [삼성전자2$]"
en.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=`C:\삼성전자2.xlsx`;Extended Properties=`Excel 12.0;HDR=YES`"

Dim sList As SeriesList = en.GetSeriesListOfStock(DataSourceType.Excel, "Date", "Start", "Close", "Low", "High")

sList.AxisFactor.YAxis.Direction = AxisDirection.Right
sList.AxisFactor.YAxis.IsZeroStartScale = False
sList.GraphArea.Grid.IsBackGridColor = False

sList.AxisFactor.AxisItems.Add(New Axis(AxisType.Ytype))
sList.AxisFactor.AxisItems(0).Decimalpoint = 0

sList.SeriesCollection.Add(New Series())
sList.SeriesCollection(1).ChartType = ChartType.Line
sList.SeriesCollection(1).Points.Width = 0
sList.SeriesCollection(1).Line.LineWidth = 2
sList.SeriesCollection(1).SeriesColor = Color.Pink
sList.SeriesCollection(1).AxisIndex = 1

sList.AxisFactor.AxisItems(0).Markers.Add(New AxisMarker("RSI - 매도라인", 70))
sList.AxisFactor.AxisItems(0).Markers.Add(New AxisMarker("RSI - 매수라인", 30))

sList.AxisFactor.AxisItems(0).Markers(0).TextFormat.Alignment = StringAlignment.Near
sList.AxisFactor.AxisItems(0).Markers(1).TextFormat.Alignment = StringAlignment.Near

sList.AxisFactor.AxisItems(0).Markers(0).TextFormat.LineAlignment = StringAlignment.Near
sList.AxisFactor.AxisItems(0).Markers(1).TextFormat.LineAlignment = StringAlignment.Near

sList.AxisFactor.AxisItems(0).Markers(1).Line.LineColor = Color.Red
sList.AxisFactor.AxisItems(0).Markers(1).Label.ForeColor = Color.Red

Dim nCnt As Integer = sList.SeriesCollection(0).items.Count

For i As Integer = 0 To nCnt - 1
Dim itemRSI As New. SeriesItem()
itemRSI.Name = sList.SeriesCollection(0).items(i).Name
Try

Dim N As Integer = 10
` 보통 14로 한다고 하는데 네이버에 데이터가 10일이라 일단 맞춤. 수정 하시면 됩니다
Dim U_sum As Double = 0
Dim D_sum As Double = 0
Dim AU As Double = 0
` 평균
Dim AD As Double = 0
` 평균
For a As Integer = 0 To N - 1
Dim U As Double = 0
Dim D As Double = 0
Dim temp As Double = sList.SeriesCollection(0).items(i - a).YValue - sList.SeriesCollection(0).items(i - a - 1).YValue

If temp > 0 Then
U = temp
U_sum += U
ElseIf temp < 0 Then
D = Math.Abs(temp)
D_sum += D
End If
Next

AU = U_sum / N
AD = D_sum / N

itemRSI.YValue = (AU / (AU + AD)) * 100
Catch
itemRSI.YValue = Double.NaN
End Try

sList.SeriesCollection(1).items.Add(itemRSI)
Next

Me.hHippoChart1.Designer.InnerBackColor = Color.Yellow
Me.hHippoChart1.Titles.Label.Text = "히포차트 주식 - RSI 보조지표"
Me.hHippoChart1.LegendBox.Visible = False
Me.hHippoChart1.SeriesListDictionary.Add(sList)
Me.hHippoChart1.DrawChart()


※ 히포차트 샘플 코드는 버전별로 상이한 결과를 나타낼 수 있습니다.

이 코드 관련 문의 사항은 페이스북 리플을 달아주시거나 아래 이메일로 이 페이지 주소와 함께 문의주세요.

helpdesk@hippochart.com





Copyright © 2009-2016, HippoChart. Inc.  All Rights Reserved.