Search
Duplicate
📝

키움 가격박스 지표와 Avgif, Stdevif 함수 변환

#공통 지표
키움수식 언어에 avgif와 stdevif함수가 제공됩니다. 특정 조건에 따라 평균(AvgIf)과 표준편차(StdevIf)를 계산하는 함수입니다. AvgIf(data, compare, value) StdevIf(data, compare, value) 이 두 함수는 비슷한 방식으로 동작하고, data (계산할 값), compare (비교할 조건), value (비교 대상)와 같이 매개변수를 받습니다. AvgIf(A,1,0) → A가 0보다 큰 봉의 A값을 평균 AvgIf(A,-1,0) → A가 0보다 작은 봉의 A값을 평균 AvgIf(A,0,0) → A가 0과 같은 봉의 A값을 평균
아래는 키움 가격박스 지표입니다.
박스중심선
MA(C,24,단순);
박스상단선
A = MA(C, 24,단순 );
A + AvgIf( 가격 - A, 1, 0.0 )+ 2 * StdevIf( 가격 - A, 1, 0.0 )
박스하단선
A = MA(C, 24,단순 );
A + AvgIf( 가격 - A, -1, 0.0 ) - 2 * StdevIf( 가격 - A, -1, 0.0 )
예스랭귀지로 변경시에는 avgif, stdevif에 대응하는 함수가 없으므로 풀어서 작성해 사용하셔야 합니다. 아래식 참고하시기 바랍니다.
input : 기간(24); var : A(0),diff(0),i(0); var : TotalSum1(0),count1(0),Avgif1(0); var : SumSqrt1(0),Stdevif1(0); var : TotalSum2(0),count2(0),Avgif2(0); var : SumSqrt2(0),Stdevif2(0); var : top(0),btm(0); A = ma(C,기간); //data diff = C-A; // AvgIf(C- A, 1,0.0)와 StdevIf(C - A, 1,0.0) //compare가 1이면 data > value Condition1 = diff > 0; // AvgIf(C- A, -1,0.0)와 StdevIf(C - A, -1,0.0) //compare가 -1이면 data < value Condition2 = diff < 0; //diff > 0 조건이 만족한 봉에서 if Condition1 == true Then { //diff값을 전체 누적 TotalSum1 = TotalSum1 + diff; //만족횟수 저장 Count1 = Count1 + 1; //누적값/만족횟수로 avgif 계산 Avgif1 = TotalSum1/Count1; //표준편차 계산 SumSqrt1 = 0; //현재봉에서 차트 첫봉까지 가면서 For i = 0 to Index { //diff > 0 조건이 만족한 봉이면 if Condition1[i] == true Then { //해당봉의 diff값과 현재봉 avgif값의 차이를 제곱해서 누적 SumSqrt1 = SumSqrt1 + (diff[i] - avgif1)^2; } } //제곱누적값을 만족회수로 나누고 제곱근을 구함 Stdevif1 = SquareRoot(SumSqrt1/count1); } //diff < 0 조건이 만족한 봉에서 if Condition2 == true Then { //diff값을 전체 누적 TotalSum2 = TotalSum2 + diff; //만족횟수 저장 Count2 = Count2 + 1; //누적값/만족횟수로 avgif 계산 Avgif2 = TotalSum2/Count2; //표준편차 계산 SumSqrt2 = 0; //현재봉에서 차트 첫봉까지 가면서 For i = 0 to Index { //diff < 0 조건이 만족한 봉이면 if Condition2[i] == true Then { //해당봉의 diff값과 현재봉 avgif값의 차이를 제곱해서 누적 SumSqrt2 = SumSqrt2 + (diff[i] - avgif2)^2; } } //제곱누적값을 만족회수로 나누고 제곱근을 구함 Stdevif2 = SquareRoot(SumSqrt2/count2); } //상단계산 top = A + AvgIf1 + 2* StdevIf1; //하단계산 btm = A + AvgIf2 - 2* StdevIf2; Plot1(A,"박스중심선",Green); Plot2(top,"박스상단선",Red); Plot3(btm,"박스하단선",Blue);
JavaScript
복사