커뮤니티

std 함수를 직접 구현하고 싶습니다

프로필 이미지
hex
2010-05-19 17:42:26
1022
글번호 30029
답변완료
안녕하세요? 예스트레이더에 내장되어 있는 표준편차 함수인 STD()를 직접 구현하고 싶은데요 STD() 함수의 소스를 보면 반복문을 사용하고 있는데 성능상의 이유로 반복문을 안쓴 버전으로 만들고 싶습니다. 반복문을 안쓰고 STD() 함수를 다시 코딩 할 방법은 없을까요?
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2010-05-20 08:39:28

안녕하세요 예스스탁입니다. 반복문을 사용하셔야 합니다. 표준편차의 기간에 따라 누적갯수가 달라지므로 반복문을 사용하셔야만 편하게 사용하실 수 있습니다. 풀어서 사용하시면 아래와 같이 기간에 따라 SumSqrt = SumSqrt + (Price[n] - Avgv) * (Price[n] - Avgv); 에 갯수를 늘려 따로 작성하셔야 합니다. #기준값이 5이평의 경우 Input : Price(c); Var : SumSqrt(0), Avgv(0), Counter(0),stdv(0); Avgv= Ma(Price, 5); SumSqrt = 0; SumSqrt = SumSqrt + (Price[0] - Avgv) * (Price[0] - Avgv); SumSqrt = SumSqrt + (Price[1] - Avgv) * (Price[1] - Avgv); SumSqrt = SumSqrt + (Price[2] - Avgv) * (Price[2] - Avgv); SumSqrt = SumSqrt + (Price[3] - Avgv) * (Price[3] - Avgv); SumSqrt = SumSqrt + (Price[4] - Avgv) * (Price[4] - Avgv); Stdv = SquareRoot(SumSqrt / 5); #기준값이 10이평의 경우 Input : Price(c); Var : SumSqrt(0), Avgv(0), Counter(0),stdv(0); Avgv= Ma(Price, 10); SumSqrt = 0; SumSqrt = SumSqrt + (Price[0] - Avgv) * (Price[0] - Avgv); SumSqrt = SumSqrt + (Price[1] - Avgv) * (Price[1] - Avgv); SumSqrt = SumSqrt + (Price[2] - Avgv) * (Price[2] - Avgv); SumSqrt = SumSqrt + (Price[3] - Avgv) * (Price[3] - Avgv); SumSqrt = SumSqrt + (Price[4] - Avgv) * (Price[4] - Avgv); SumSqrt = SumSqrt + (Price[5] - Avgv) * (Price[5] - Avgv); SumSqrt = SumSqrt + (Price[6] - Avgv) * (Price[6] - Avgv); SumSqrt = SumSqrt + (Price[7] - Avgv) * (Price[7] - Avgv); SumSqrt = SumSqrt + (Price[8] - Avgv) * (Price[8] - Avgv); SumSqrt = SumSqrt + (Price[9] - Avgv) * (Price[9] - Avgv); Stdv = SquareRoot(SumSqrt / 10); 즐거운 하루되세요 > hex 님이 쓴 글입니다. > 제목 : std 함수를 직접 구현하고 싶습니다 > 안녕하세요? 예스트레이더에 내장되어 있는 표준편차 함수인 STD()를 직접 구현하고 싶은데요 STD() 함수의 소스를 보면 반복문을 사용하고 있는데 성능상의 이유로 반복문을 안쓴 버전으로 만들고 싶습니다. 반복문을 안쓰고 STD() 함수를 다시 코딩 할 방법은 없을까요?