예스스탁
예스스탁 답변
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함수로 바꾼거 밖에 없는데 도무지 모르겠네요.