Search
📝

(주식,해외선옵)분봉에서 다른분봉 지수이동평균

분봉 차트에서 다른 분봉을 계산할 때는, 현재 차트 주기의 배수에 해당하는 더 큰 주기만 가능합니다.
예) 5분봉 → 10분봉, 15분봉, 20분봉
랭귀지는 봉의 시가, 고가, 저가, 종가만 활용할 수 있으며, 개별 봉의 내부 가격 변동이나 시간 흐름은 알 수 없습니다.
따라서 차트 주기보다 낮은 주기는 수식으로 계산할 수 없으며, 차트 주기의 배수가 아닌 주기 역시 계산이 불가능합니다.
Input : 분주기(30),Period(20); Var : S1(0),D1(0),TM(0),TF1(0); Var : EP(0),Bar(0),JISU(0), PreJISU(0); // EMA 계산에 사용할 평활계수 EP = 2/(Period+1); // 새로운 영업일이 시작하면 시작시간(S1)과 날짜(D1)를 초기화 if Bdate != Bdate[1] Then { S1 = TimeToMinutes(stime); //첫봉의 stime을 분단위로 변환 D1 = sdate; //첫봉의 날짜를 저장 } // D1에 날짜가 저장된 이후(영업일 변경이 되는 봉이 발생 후에) if D1 > 0 then { //같은 날짜인지 판단하여 영업일 변경이후 경과분(TM)계산 if sdate == D1 Then TM = TimeToMinutes(stime)-S1; //첫봉과 동일날짜이면 첫봉부터 경과분계산 Else TM = TimeToMinutes(stime)+1440-S1; //다음날이면 24시간(1440분)을 더해서 보정 TF1 = TM%분주기; //영업일 변경이후 경과분을 분주기로 나누어 나머지를 구함 //새로운 영업일이 시작하거나 새로운 분이 시작되면 if Bdate != Bdate[1] or (Bdate == Bdate[1] and 분주기 > 1 and TF1 < TF1[1]) or (Bdate == Bdate[1] and 분주기 > 1 and TM >= TM[1]+분주기) or (Bdate == Bdate[1] and 분주기 == 1 and TM > TM[1]) Then { Bar = Bar+1; //다른주기 분봉 갯수 카운트 카운트 PreJISU = JISU[1]; //이전 다른주기 분봉의 지수값을 저장 } //다른분주기의 첫봉이면 EMA 초기값으로 종가 사용 if Bar <= 1 then { JISU = C;// 초기화: 첫 값 종가 } else //두번쨰 봉부터는 { //현재봉종가 * EP + 이전봉EMA * (1-EP) JISU = C * EP + PreJISU * (1-EP); } plot1(JISU); // 차트에 다른분주기 EMA를 출력 }
JavaScript
복사
[지수이동평균 계산공식]
EP(평활계수) = 2/(기간 +1)
EMA = 현재값 * EP + 전봉 지수이동평균 * (1-EP)
[설명] 분봉차트에서 다른 분봉주기의 지수이동평균을 계산하는 수식입니다.
1.
24시간 거래되는 상품들도 있으므로 날짜변경이 아닌 영업일 변경을 기준으로 현재봉이 몇분이 경과했는지 계산
2.
경과한 분을 다른 분주기로 나누어 나머지를 구해서 다른 분주기의 시작봉 체크
3.
다른 분주기의 시작봉이 발생하면 다른 분주기의 봉갯수를 카운트하고 첫봉이면 종가를, 두번째봉 이후에는 현재봉종가와 전봉의 지수이동평균값에 일정비율을 취해서 합산해서 계산합니다.
지수이평평균에서 기간값은 봉수가 아닌 평활계수 계산에 사용되는 값입니다. 그러므로 20봉 단순이동평균은 차트상 20번째봉부터 계산이 가능하지만 지수이동평균은 현재값과 직전봉값에 각각 비율을 지정해 합산한 값이므로 첫봉부터 값을 가지게 됩니다. 이런 지수이동평균과 같은 계산방식은 과거봉수에 따라 현재값의 차이가 발생하게 되고 시간이 경과함에 따라 과거의 영향력이 소멸해 가므로 차트에 되도록 많은 봉수를 조회해서 보셔야 합니다.