커뮤니티
Rsi 지표식 질문
2009-08-18 20:27:09
758
글번호 24295
If CurrentBar > 1 AND Length > 0 Then Begin
UpAmt = C[0] - C[1];
If UpAmt >= 0 Then
DownAmt = 0;
Else Begin
DownAmt = -UpAmt;
UpAmt = 0;
End;
UpAvg = (UpAvg[1] * (Length - 1) + UpAmt) / Length;
DownAvg = (DownAvg[1] * (Length - 1) + DownAmt) / Length;
End;
함수식 RSI참고 바랍니다.
함수공부중에 위식 UpAvg = (UpAvg[1] * (Length - 1) + UpAmt) / Length; 이문장질문입니다.
이문장의 윗문장에 UpAvg = UpSum / Length;라고 선언이되어있으니 이 선언으로 인식하여 저장하는 건가요? 그런데 if문이 Currentbar == 1 로 되어있어서 ... 이건 제일 처음봉을뜻하는거아닌가요? 첫봉에만 UpAvg = UpSum / Length; 를 성립하게하라. 라는것 아닌가요?
그런데... 조건문에 내부변수 선언시에는 초기화 없이 그대로 저장되고, 따로 var1 = 0 이런식으로 초기화를 한번더 해주면 조건문이 끝날때는 var1 이 0 으로 저장되는거로 알고있는데.. 조건문에상관없이 이 규칙을 따르는건가요? 그러면 위함수식에는 초기화를 해주지 않았으니까 UpAvg = UpSum / Length;을 저장해두고, 제가올린문장에서 계산이 들어가는건가요? 궁금합니다.
답변 1
예스스탁 예스스탁 답변
2009-08-19 10:15:22
안녕하세요
예스스탁입니다.
currentbar는 수식계산에 필요한 봉갯수 이후부터
1씩 누적하게 됩니다.
그러므로 20이동평균이면 계산에 최소 20개봉이 필요하므로
20번째 봉 전까지는 0이며 20개봉부터 1씩 증가하게 됩니다.
currentbar == 1 은 수식이 계산되는 첫봉을 의미하고
이봉에서는 UpAvg에 UpSum / Length 값을 할당하고
2번째 봉부터는 UpAvg에 (UpAvg[1] * (Length - 1) + UpAmt) / Length를 할당하라는 의미입니다. currentbar가 0일때는 당연히 UpAvg는 UpAvg(0)으로 선언이 되어 있으므로
0입니다.
즐거운 하루되세요
> sdfadfe 님이 쓴 글입니다.
> 제목 : Rsi 지표식 질문
> If CurrentBar > 1 AND Length > 0 Then Begin
UpAmt = C[0] - C[1];
If UpAmt >= 0 Then
DownAmt = 0;
Else Begin
DownAmt = -UpAmt;
UpAmt = 0;
End;
UpAvg = (UpAvg[1] * (Length - 1) + UpAmt) / Length;
DownAvg = (DownAvg[1] * (Length - 1) + DownAmt) / Length;
End;
함수식 RSI참고 바랍니다.
함수공부중에 위식 UpAvg = (UpAvg[1] * (Length - 1) + UpAmt) / Length; 이문장질문입니다.
이문장의 윗문장에 UpAvg = UpSum / Length;라고 선언이되어있으니 이 선언으로 인식하여 저장하는 건가요? 그런데 if문이 Currentbar == 1 로 되어있어서 ... 이건 제일 처음봉을뜻하는거아닌가요? 첫봉에만 UpAvg = UpSum / Length; 를 성립하게하라. 라는것 아닌가요?
그런데... 조건문에 내부변수 선언시에는 초기화 없이 그대로 저장되고, 따로 var1 = 0 이런식으로 초기화를 한번더 해주면 조건문이 끝날때는 var1 이 0 으로 저장되는거로 알고있는데.. 조건문에상관없이 이 규칙을 따르는건가요? 그러면 위함수식에는 초기화를 해주지 않았으니까 UpAvg = UpSum / Length;을 저장해두고, 제가올린문장에서 계산이 들어가는건가요? 궁금합니다.