#공통 지표
키움수식 언어에 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
복사
