복합 분봉에 일봉 MACD를 표시하려구 하였습니다.
그러나 초기 3개월 가량이 값이 너무 크게 나와 수식에 포함 시킬 수가 없습니다.
아마 설정된 기간보다 짧은 데이타가 문제 아닌가 싶습니다.
어떻게 수정해야 할지 몰라 도움을 구합니다.
감사합니다.
# ===<<< 분봉 차트에서 일봉 시고저종 계산 >>>===========================================
Arrays : 일봉_시가[20](0), 일봉_고가[20](0), 일봉_저가[20](0), 일봉_종가[20](0);
Variables : cnt(0), sum(0);
If sTime[1] < 080000 And 080000 <= sTime Then Begin
일봉_시가[0] = Open; 일봉_고가[0] = High;
일봉_저가[0] = Low; 일봉_종가[0] = Close;
End;
If sTime[1] < 170000 And 170000 <= sTime Then Begin
For cnt = 19 DownTo 1 Begin
일봉_시가[cnt] = 일봉_시가[cnt-1]; 일봉_고가[cnt] = 일봉_고가[cnt-1];
일봉_저가[cnt] = 일봉_저가[cnt-1]; 일봉_종가[cnt] = 일봉_종가[cnt-1];
End;
일봉_시가[0] = Open; 일봉_고가[0] = High;
일봉_저가[0] = Low; 일봉_종가[0] = Close;
End;
If 일봉_고가[0] < High Then 일봉_고가[0] = High;
If 일봉_저가[0] > Low Then 일봉_저가[0] = Low;
일봉_종가[0] = Close;
# ===<<< 분봉 차트에서 일봉 MACD (Moving Average Convergence & Divergence) 계산 >>>=========================================
Arrays : 지수이동평균1[26](0), 지수이동평균2[26](0), MACD_[26](0), MACD_Signal[26](0);
Variables : len1(12), len2(26), len3(9);
Variables : 평활계수1(0), 평활계수2(0), 평활계수3(0);
평활계수1 = 2 / (len1 + 1);
평활계수2 = 2 / (len2 + 1);
평활계수3 = 2 / (len3 + 1);
지수이동평균1[0] = (일봉_종가[0] * 평활계수1) + (지수이동평균1[1] * (1 - 평활계수1));
지수이동평균2[0] = (일봉_종가[0] * 평활계수2) + (지수이동평균2[1] * (1 - 평활계수2));
MACD_[0] = 지수이동평균1[0] - 지수이동평균2[0];
MACD_Signal[0] = (MACD_[0] * 평활계수3) + (MACD_[1] * (1 - 평활계수3));
# MACD 배열 이동
If sTime[1] < 170000 And 170000 <= sTime Then Begin
For cnt = 26 DownTo 1 Begin
지수이동평균1[cnt] = 지수이동평균1[cnt-1];
지수이동평균2[cnt] = 지수이동평균2[cnt-1];
MACD_[cnt] = MACD_[cnt-1];
MACD_Signal[cnt] = MACD_Signal[cnt-1];
End;
End;
# ===<<< 분봉 차트에서 일봉 MACD 화면 출력 >>>========================================
If MACD_[1] < MACD_[0] Then Plot1(MACD_[0],"MACD_", RED);
Else If MACD_[1] > MACD_[0] Then Plot1(MACD_[0],"MACD_", BLUE);
If MACD_Signal[1] < MACD_Signal[0] Then Plot2(MACD_Signal[0],"MACD_Signal", RED);
Else If MACD_Signal[1] > MACD_Signal[0] Then Plot2(MACD_Signal[0],"MACD_Signal", BLUE);
# ===<<< MACD 기준선 화면 출력 >>>========================================
PlotBaseLine1(0,"0", GRAY);
답변 2
예스스탁
예스스탁 답변
2020-03-30 15:15:12
안녕하세요
예스스탁입니다.
MACD가 과거의 봉갯수에 영향을 받는 지수이평을 기반으로 계산을 하게 됩니다.
차트의 과거기간의 부족한 부분이라 수식에서는 별도로 처리할 방법이 없습니다.
도움을 드리지 못해 죄송합니다.
즐거운 하루되세요
> 다니엘87 님이 쓴 글입니다.
> 제목 : 복합분봉에 일봉 MACD 표시
> 복합 분봉에 일봉 MACD를 표시하려구 하였습니다.
그러나 초기 3개월 가량이 값이 너무 크게 나와 수식에 포함 시킬 수가 없습니다.
아마 설정된 기간보다 짧은 데이타가 문제 아닌가 싶습니다.
어떻게 수정해야 할지 몰라 도움을 구합니다.
감사합니다.
# ===<<< 분봉 차트에서 일봉 시고저종 계산 >>>===========================================
Arrays : 일봉_시가[20](0), 일봉_고가[20](0), 일봉_저가[20](0), 일봉_종가[20](0);
Variables : cnt(0), sum(0);
If sTime[1] < 080000 And 080000 <= sTime Then Begin
일봉_시가[0] = Open; 일봉_고가[0] = High;
일봉_저가[0] = Low; 일봉_종가[0] = Close;
End;
If sTime[1] < 170000 And 170000 <= sTime Then Begin
For cnt = 19 DownTo 1 Begin
일봉_시가[cnt] = 일봉_시가[cnt-1]; 일봉_고가[cnt] = 일봉_고가[cnt-1];
일봉_저가[cnt] = 일봉_저가[cnt-1]; 일봉_종가[cnt] = 일봉_종가[cnt-1];
End;
일봉_시가[0] = Open; 일봉_고가[0] = High;
일봉_저가[0] = Low; 일봉_종가[0] = Close;
End;
If 일봉_고가[0] < High Then 일봉_고가[0] = High;
If 일봉_저가[0] > Low Then 일봉_저가[0] = Low;
일봉_종가[0] = Close;
# ===<<< 분봉 차트에서 일봉 MACD (Moving Average Convergence & Divergence) 계산 >>>=========================================
Arrays : 지수이동평균1[26](0), 지수이동평균2[26](0), MACD_[26](0), MACD_Signal[26](0);
Variables : len1(12), len2(26), len3(9);
Variables : 평활계수1(0), 평활계수2(0), 평활계수3(0);
평활계수1 = 2 / (len1 + 1);
평활계수2 = 2 / (len2 + 1);
평활계수3 = 2 / (len3 + 1);
지수이동평균1[0] = (일봉_종가[0] * 평활계수1) + (지수이동평균1[1] * (1 - 평활계수1));
지수이동평균2[0] = (일봉_종가[0] * 평활계수2) + (지수이동평균2[1] * (1 - 평활계수2));
MACD_[0] = 지수이동평균1[0] - 지수이동평균2[0];
MACD_Signal[0] = (MACD_[0] * 평활계수3) + (MACD_[1] * (1 - 평활계수3));
# MACD 배열 이동
If sTime[1] < 170000 And 170000 <= sTime Then Begin
For cnt = 26 DownTo 1 Begin
지수이동평균1[cnt] = 지수이동평균1[cnt-1];
지수이동평균2[cnt] = 지수이동평균2[cnt-1];
MACD_[cnt] = MACD_[cnt-1];
MACD_Signal[cnt] = MACD_Signal[cnt-1];
End;
End;
# ===<<< 분봉 차트에서 일봉 MACD 화면 출력 >>>========================================
If MACD_[1] < MACD_[0] Then Plot1(MACD_[0],"MACD_", RED);
Else If MACD_[1] > MACD_[0] Then Plot1(MACD_[0],"MACD_", BLUE);
If MACD_Signal[1] < MACD_Signal[0] Then Plot2(MACD_Signal[0],"MACD_Signal", RED);
Else If MACD_Signal[1] > MACD_Signal[0] Then Plot2(MACD_Signal[0],"MACD_Signal", BLUE);
# ===<<< MACD 기준선 화면 출력 >>>========================================
PlotBaseLine1(0,"0", GRAY);
다니엘87
2020-03-31 14:06:17
답변 감사합니다.
첨부한 그림의 위쪽은 제가 만든 복합 분봉에 적용한 주간장 일봉 MACD이고
아래 그림은 주간장 일봉에 적용한 기본 제공되는 MACD 입니다.
처음 3개월 가량이 너무 크게 나와 아래와 같이 식을 고쳐 보았으나 동일합니다.
기본 제공된 MACD에서는 초기 값을 조정할 수 있다면 수식으로 가능한 것이 아닐까 생각해서 다시 여쭤 봅니다.
# ===<<< 분봉 차트에서 일봉 MACD (Moving Average Convergence & Divergence) 계산 >>>=========================================
Arrays : 지수이동평균1[26](0), 지수이동평균2[26](0), MACD_[26](0), MACD_Signal[26](0);
Variables : len1(12), len2(26), len3(9);
Variables : pre_len1(0), pre_len2(0), pre_len3(0);
Variables : 평활계수1(0), 평활계수2(0), 평활계수3(0);
If pre_len1 < len1 Then pre_len1 = pre_len1+1;
If pre_len2 < len2 Then pre_len2 = pre_len2+1;
If pre_len3 < len3 Then pre_len3 = pre_len3+1;
평활계수1 = 2 / (pre_len1 + 1);
평활계수2 = 2 / (pre_len2 + 1);
평활계수3 = 2 / (pre_len3 + 1);
지수이동평균1[0] = (일봉_종가[0] * 평활계수1) + (지수이동평균1[1] * (1 - 평활계수1));
지수이동평균2[0] = (일봉_종가[0] * 평활계수2) + (지수이동평균2[1] * (1 - 평활계수2));
MACD_[0] = 지수이동평균1[0] - 지수이동평균2[0];
MACD_Signal[0] = (MACD_[0] * 평활계수3) + (MACD_[1] * (1 - 평활계수3));
# MACD 배열 이동
If sTime[1] < 170000 And 170000 <= sTime Then Begin
For cnt = 26 DownTo 1 Begin
지수이동평균1[cnt] = 지수이동평균1[cnt-1];
지수이동평균2[cnt] = 지수이동평균2[cnt-1];
MACD_[cnt] = MACD_[cnt-1];
MACD_Signal[cnt] = MACD_Signal[cnt-1];
End;
End;