Input : Period1(12),Period2(26),Period3(9);
var : DayCount(0),EP1(0),EP2(0),EP3(0);
Var : DayEMA1(0), PreDayEMA1(0);
Var : DayEMA2(0), PreDayEMA2(0);
var : DayMACDV(0), PreDayMACDV(0);
Var : DayMACDS(0), PreDayMACDS(0);
var : DayMACDO(0), PreDayMACDO(0);
//Period1 지수이동평균 평활상수
Ep1 = 2/(Period1+1);
//Period2 지수이동평균 평활상수
Ep2 = 2/(Period2+1);
//Period3 지수이동평균 평활상수
Ep3 = 2/(Period3+1);
//영업일 변경
if bdate != bdate[1] Then
{
//날짜수 카운트
DayCount = DayCount+ 1;
//전일 일봉 단기 지수이평값
PreDayEMA1 = DayEMA1[1];
//전일 일봉 장기 지수이평값
PreDayEMA2 = DayEMA2[1];
//전일 MACD값
PreDayMACDV = DayMACDV[1];
//전일 MACD 시그널값
PreDayMACDS = DayMACDS[1];
}
#첫날
if DayCount <= 1 then
{
//단기지수이평은 종가
DayEMA1 = C;
//장기지수이평은 종가
DayEMA2 = C;
//일간 MACD는 단기지수이평-장기지수이평
DayMACDV = DayEMA1-DayEMA2;
//일간 MACD 시그널은 일간 MACD값
DayMACDS = DayMACDV;
}
else
{
//일간 단기지수이평 = 현재봉 종가에 EP1 가중치, 전일 단기지수이평 값에는 (1-EP1)가중치를 주어 합산
DayEMA1 = C * EP1 + PreDayEMA1 * (1-EP1);
//일간 장기지수이평 = 현재봉 종가에 EP2 가중치, 전일 장기지수이평 값에는 (1-EP2)가중치를 주어 합산
DayEMA2 = C * EP2 + PreDayEMA2 * (1-EP2);
//일간 MACD는 단기지수이평-장기지수이평
DayMACDV = DayEMA1-DayEMA2;
//일간 MACD 시그널 = 현재봉 일간MACD에 EP3 가중치, 전일 일간MACD시그널 값에는 (1-EP2)가중치를 주어 합산
DayMACDS = DayMACDV * EP3 + PreDayMACDS * (1-EP3);
}
plot1(DayMACDV,"Day MACD");
plot2(DayMACDs,"Day MACD Signal");
PlotBaseLine1(0);
JavaScript
복사
[지수이평평균 공식]
EP(평활계수) = 2/(기간 + 1)
EMA = 금일 종가 * EP + 전일의 지수 이동평균 * (1-EP)
[스토캐스틱 공식]
FastK = (현재종가-n일기간 최저가) / (n일기간 최고가 - n일기간 최저가)*100
%K = 기본적K의 n지수이동평균
%D = Slow%K의 n지수이동평균
[주의사항]
지수이동평균은 과거 데이터가 현재봉 계산에 영향을 주는 평균방법입니다.
차트의 과거봉수에 따라 현재값이 다를 수 있는데
차트 주기보다 큰 주기의 값을 계산하면 큰 주기의 봉수가 상대적으로 적어
값의 차이가 발생 할 수 있습니다.
차트에 최대한 많은 봉을 조회해서 보셔야 합니다.