커뮤니티

참조차트에서의 ATR 계산 문의

프로필 이미지
Trader
2024-09-22 13:36:48
449
글번호 183627
답변완료
기본차트에서 다음과 같이 ATR_5와 ATR_20을 계산한 결과와 sum = 0; for cnt = 1 to P{ If DayClose(cnt+1) > dayhigh(cnt) then TH = DayClose(cnt+1); else TH = dayhigh(cnt); If DayClose(cnt+1) < DayLow(cnt) then TL = DayClose(cnt+1); else TL = daylow(cnt); TR = TH-TL; sum = sum+TR; //MessageLog("%.2f",TR); } ATR_5 = sum/P; //ATR(20) sum1 = 0; for cnt1 = 1 to P1{ If DayClose(cnt1+1) > dayhigh(cnt1) then TH1 = DayClose(cnt1+1); else TH1 = dayhigh(cnt1); If DayClose(cnt1+1) < DayLow(cnt1) then TL1 = DayClose(cnt1+1); else TL1 = daylow(cnt1); TR1 = TH1-TL1; Sum1 = Sum1+TR1; } ATR_20 = sum1/P1; MessageLog("%.2f,%.2f",ATR_5,ATR_20); 같은 종목을 참조차트에 넣고 계산한 결과가 다릅니다. 똑같은 종목이고 이를 참조차트로 넣으면서 다음과 같이 코드를 작성해서 마찬가지로 찍어보니 결과가 다른데 뭐가 잘못된건지 알 수 있을까요? sum = 0; for cnt = 1 to P{ If data2(closeD(cnt+1)) > data2(highD(cnt)) then TH = data2(closeD(cnt+1)); else TH = data2(highD(cnt)); If data2(closeD(cnt+1)) < data2(lowD(cnt)) then TL = data2(closeD(cnt+1)); else TL = data2(lowD(cnt)); TR = TH-TL; sum = sum+TR; //MessageLog("%.2f",TR); } ATR_5 = sum/P; //ATR(20) sum1 = 0; for cnt1 = 1 to P1{ If data2(closeD(cnt1+1)) > data2(highD(cnt1)) then TH1 = data2(closeD(cnt1+1)); else TH1 = data2(highD(cnt1)); If data2(closeD(cnt1+1)) < data2(lowD(cnt1)) then TL1 = data2(closeD(cnt1+1)); else TL1 = data2(lowD(cnt1)); TR1 = TH1-TL1; Sum1 = Sum1+TR1; } ATR_20 = sum1/P1; MessageLog("%.2f,%.2f",ATR_5, ATR_20); 코드가 바뀐부분이라곤 dayhigh함수 같은것을 highD함수로 바꾼거 밖에 없는데 도무지 모르겠네요.
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2024-09-23 14:32:29

안녕하세요 예스스탁입니다. 데이터함수(data2~data99)를 사용하는 경우 함수의 매개변수를 루프로 변경이 가능하지 않습니다. 아래와 같이 별도로 값을 배열에 저장한 이후에 해당 배열을 루프를 돌려 계산하셔야 합니다. input : P(5),P1(20); var : cnt(0,Data2),sum(0,Data2),TH(0,Data2),TL(0,Data2),TR(0,Data2),ATR_5(0,Data2); var : cnt1(0,Data2),sum1(0,Data2),TH1(0,Data2),TL1(0,Data2),TR1(0,Data2),ATR_20(0,Data2); Array : H2[50](0,Data2),L2[50](0,Data2),C2[50](0,Data2); if data2(Bdate != Bdate[1]) Then { for cnt = 49 DownTo 1 { H2[cnt] = H2[cnt-1]; L2[cnt] = L2[cnt-1]; C2[cnt] = C2[cnt-1]; } } H2[0] = Data2(HighD(0)); L2[0] = Data2(LowD(0)); C2[0] = Data2(CloseD(0)); sum = 0; for cnt = 1 to P { If C2[cnt+1] > H2[cnt] then TH = C2[cnt+1]; else TH = H2[cnt]; If C2[cnt+1] < L2[cnt] then TL = C2[cnt+1]; else TL = L2[cnt]; TR = TH-TL; sum = sum+TR; } ATR_5 = sum/P; //ATR(20) sum1 = 0; for cnt1 = 1 to P1 { If C2[cnt+1] > H2[cnt] then TH1 = C2[cnt+1]; else TH1 = H2[cnt]; If C2[cnt+1] < L2[cnt1] then TL1 = C2[cnt+1]; else TL1 = L2[cnt]; TR1 = TH1-TL1; Sum1 = Sum1+TR1; } ATR_20 = sum1/P1; 즐거운 하루되세요 > Trader 님이 쓴 글입니다. > 제목 : 참조차트에서의 ATR 계산 문의 > 기본차트에서 다음과 같이 ATR_5와 ATR_20을 계산한 결과와 sum = 0; for cnt = 1 to P{ If DayClose(cnt+1) > dayhigh(cnt) then TH = DayClose(cnt+1); else TH = dayhigh(cnt); If DayClose(cnt+1) < DayLow(cnt) then TL = DayClose(cnt+1); else TL = daylow(cnt); TR = TH-TL; sum = sum+TR; //MessageLog("%.2f",TR); } ATR_5 = sum/P; //ATR(20) sum1 = 0; for cnt1 = 1 to P1{ If DayClose(cnt1+1) > dayhigh(cnt1) then TH1 = DayClose(cnt1+1); else TH1 = dayhigh(cnt1); If DayClose(cnt1+1) < DayLow(cnt1) then TL1 = DayClose(cnt1+1); else TL1 = daylow(cnt1); TR1 = TH1-TL1; Sum1 = Sum1+TR1; } ATR_20 = sum1/P1; MessageLog("%.2f,%.2f",ATR_5,ATR_20); 같은 종목을 참조차트에 넣고 계산한 결과가 다릅니다. 똑같은 종목이고 이를 참조차트로 넣으면서 다음과 같이 코드를 작성해서 마찬가지로 찍어보니 결과가 다른데 뭐가 잘못된건지 알 수 있을까요? sum = 0; for cnt = 1 to P{ If data2(closeD(cnt+1)) > data2(highD(cnt)) then TH = data2(closeD(cnt+1)); else TH = data2(highD(cnt)); If data2(closeD(cnt+1)) < data2(lowD(cnt)) then TL = data2(closeD(cnt+1)); else TL = data2(lowD(cnt)); TR = TH-TL; sum = sum+TR; //MessageLog("%.2f",TR); } ATR_5 = sum/P; //ATR(20) sum1 = 0; for cnt1 = 1 to P1{ If data2(closeD(cnt1+1)) > data2(highD(cnt1)) then TH1 = data2(closeD(cnt1+1)); else TH1 = data2(highD(cnt1)); If data2(closeD(cnt1+1)) < data2(lowD(cnt1)) then TL1 = data2(closeD(cnt1+1)); else TL1 = data2(lowD(cnt1)); TR1 = TH1-TL1; Sum1 = Sum1+TR1; } ATR_20 = sum1/P1; MessageLog("%.2f,%.2f",ATR_5, ATR_20); 코드가 바뀐부분이라곤 dayhigh함수 같은것을 highD함수로 바꾼거 밖에 없는데 도무지 모르겠네요.