저번에 만들어 놓은 실시간 차트에 이평선 보조 지표를 추가하도록 하겠습니다.
5분의 20이평 선을 추가
하기 위해서 전에 사용하였던 PriceEntityObject 에 사용하기 위한 해당 날짜의 이평선 값을 추가 합니다.
1.
TR 데이터를 수신할 때 이평선을 계산하고 이평선
차트를 생성
2.
실시간 데이터가 수신될 때 마다 업데이트
A.
기존 이평선 값을 업데이트 하는 경우
B.
새로운 캔들이 추가되면서 새로운 이평선을 추가해야 되는 경우
위 단계를 통해서 지표 작업을 진행해 보도록 할게요.
일단 20일 이평선 이므로 20개
이하가 있는 과거 데이터에 대해서는 계산하지 않고 0으로 설정하도록 합니다.
1번 2A 2B 함수 를
아래와 같이 만듭니다.
void update_20이평선_add()
{
Series avr_20 = real_chart.Series.FindByName("avr_20"); //현재 차트에 20이평선이 그려져 있다면 그 정보를 우선 가져온다.
if (avr_20 == null)
return;
double avr_sum;
avr_sum = 0.0;
//i번째 부터 20개의 데이터의 합을 구한다.
for (int j = 0; j <
20; j++)
{
avr_sum +=
m_real_data_list[j].close;
}
m_real_data_list[0].avr_20 =
avr_sum / 20; //i 번째에 20개를 계산하여 업데이트 한다.
//설정된 X 0번째에 값을 추가 한다.
avr_20.Points.AddXY(real_chart.Series["f_price"].Points[0].XValue,
m_real_data_list[0].avr_20);
}
void update_20이평선_update()
{
//최신 20 이평선만 재계산하면 된다.
if (m_real_data_list.Count > 0)
{
Series avr_20 = real_chart.Series.FindByName("avr_20"); //현재 차트에 20이평선이 그려져 있다면 그 정보를 우선 가져온다.
if (avr_20 == null)
return;
double avr_sum;
avr_sum = 0.0;
//i번째 부터 20개의 데이터의 합을 구한다.
for (int j = 0; j <
20; j++)
{
avr_sum +=
m_real_data_list[j].close;
}
m_real_data_list[0].avr_20 =
avr_sum / 20; //i 번째에 20개를 계산하여 업데이트 한다.
//현재 최신 값을 수정한다.
avr_20.Points[0].SetValueY(m_real_data_list[0].avr_20);
}
}
void update_20이평선_create()
{
if (m_real_data_list.Count > 0)
{
Series avr_20 = real_chart.Series.FindByName("avr_20"); //현재 차트에 20이평선이 그려져 있다면 그 정보를 우선 가져온다.
if (avr_20 == null)
avr_20 =
real_chart.Series.Add("avr_20"); //없다면 새로 추가를 한다.
avr_20.ChartType = SeriesChartType.Line; //이평선은 선형태 그래프 임.
avr_20.Color = Color.Green; //색상은 초록색
avr_20.Points.Clear(); //기존의 이평선 값을 초기화 한다.
//과거 마지막 20개는 20개 데이터가 없기 때문에 이평선데이터를 만들수 없다.
for (int i = 0; i <
m_real_data_list.Count-20; i++)
{
double avr_sum;
avr_sum = 0.0;
//i번째 부터 20개의 데이터의 합을 구한다.
for (int j = 0; j <
20; j++)
{
avr_sum +=
m_real_data_list[i + j].close;
}
m_real_data_list[i].avr_20
= avr_sum / 20; //i 번째에 20개를 계산하여 업데이트 한다.
//입력되는 x단위는 캔들데이터가 가지고 있는 날짜시간 값과 동일해야 한다.
avr_20.Points.AddXY(real_chart.Series["f_price"].Points[i].XValue,
m_real_data_list[i].avr_20);
}
}
}
추가를 아래 위치에 하나씩 해줍니다.
TR 데이터를 수신할 때
실시간 데이터를 수신할 때 기존 캔들 데이터가 업데이트 된것이면 이평선도 업데이트를
신규 캔들이 만들어 지면 이평선도 같이 추가를 해서 만들어 주는 add 함수를
만들어 주면됩니다.
결과 화면