728x90
(2021년 2월 1일 글 옮김)
볼린저 밴드 계산 방법에 대해서는 많은 사람들이 포스팅 해놨지만 간단하게 말하자면
가운데 20일 평균선을 기준으로 표준편차 * 2 한 값을 + , - 해서 얻는다.
표준 편차는 아래 나무 위키를 보시는 것이 제가 설명 하는 것 보다 낫습니다.
https://namu.wiki/w/%ED%91%9C%EC%A4%80%ED%8E%B8%EC%B0%A8
표준편차 - 나무위키
이 저작물은 CC BY-NC-SA 2.0 KR에 따라 이용할 수 있습니다. (단, 라이선스가 명시된 일부 문서 및 삽화 제외) 기여하신 문서의 저작권은 각 기여자에게 있으며, 각 기여자는 기여하신 부분의 저작권
namu.wiki
혹시 코드를 원하시는 분을 위해 코드도 첨부 합니다.
int avgCnt = 20; // 가변적으로 평균 날짜를 수정 가능하도록 변수화
int count = 80; // 모든 날짜에 대해 볼린저밴드 값을 구할 필요가 없어 최근 몇일만 구할 수 있도록 변수화
double before = 0;
double total = 0;
for (int i = 0; i < count; ++i)
{
double avg = 0;
double gap = 0;
int index = curInfo.list_StockDayInfo.Count - 1 - i; // 역순으로 인덱스를 구해옴 (최근 몇일만 구할 수 있도록 하기 위해)
double cur = curInfo.list_StockDayInfo[index].close; // 인덱스에 해당하는 날짜의 종가
/*
* 20일간의 총 합을 구하는 부분으로 최초 1회만 20일간 루프를 돌려 합을 얻고
* 이후로는 이전 인덱스에 해당하는 종가를 빼고
* 이후로는 다음 인덱스 + 19에 해당하는 종가를 더하는 방식으로 성능을 올렸습니다.
*/
if (i == 0)
{
for (int n = 0; n < avgCnt; ++n)
{
total += curInfo.list_StockDayInfo[index - n].close;
}
}
else
{
total -= before;
total += curInfo.list_StockDayInfo[index - avgCnt + 1].close;
}
// <= 여기까지가 20일 총합 값 구하는 코드
avg = total / avgCnt; // 20일 평균 값
// 아래 부분이 표준 편차를 구하는 공입니다.
// 이 부분도 평균값 처리 하듯 총합을 가지고 하면 성능 개선이 있지만 귀차니즘이...
for (int n = 0; n < avgCnt; ++n)
{
gap += Math.Pow(curInfo.list_StockDayInfo[index - n].close - avg, 2);
}
gap = Math.Sqrt(gap / avgCnt); // <= 여기까지가 20일간의 표준 편차 값입니다.
gap *= 2.0; // 볼린저에서는 표준편차의 2배 값을 사용하기 때문에 2배 해줍니다.
// 차트에 추가하는 코드
int addX = BOL_LINE.Points.AddXY(index, avg);
addX = BOL_BEND.Points.AddXY(index, new object[] { avg + gap, avg - gap });
before = cur;
}
누가 보게 될지 몰라 주석을 친절하게 한번 남겨 봅니다.
'주식 > 자동 추천 프로그램' 카테고리의 다른 글
주식 분석 프로그램 수정 (20210209) (0) | 2021.02.16 |
---|---|
주식분석 프로그램 수정 (20210204) (0) | 2021.02.16 |
주식 분석 프로그램 수정 (20210127) (0) | 2021.02.16 |
키움 OpenAPI GetCommData 편의성을 위한 확장 함수 (0) | 2021.02.16 |
키움OpenAPI를 이용한 주식 분석 프로그램 변화 (0) | 2021.02.16 |
댓글