커뮤니티
문의 드립니다.
2017-11-15 09:32:42
178
글번호 114200
Arrays : Period[2](0), Relative[2](0);
Vars : X(0);
Period[0] = 9;
For X = 0 To 1
{
Relative[X] = RSI(Period[X]);
If CrossDown(Relative[X], 30) Then
{
Print("C:₩a11.txt","%.2f, %.2f",Relative[0],Relative[1]);
Buy();
}
If CrossDown(Relative[X], 30) Then
{
Print("C:₩a11.txt","%.2f, %.2f",Relative[0],Relative[1]);
Buy();
}
}
For문에 대한 저의 이해가 부족해서인지
이해가 안되는 부분이 많은데요.
일단 수식을 보면 아시겠지만,
배열 Period[0] 변수에만 9값을 주었구요.
Period[1] 변수에는 값을 주지 않았으므로 0값인데
Print 함수로 출력을 해보니까
보시는바와 같이 데이터가 찍어져 나옵니다.
Relative[1] = RSI(Period[1])
여기서 Period[1]은 0값인데
Relative[1] 에 RSI 값이 저장되는게 말이 되는 건가요?
그리고 또 Print 함수로 찍어낸 수치를 보면
2017-11-03 9:01:00 27.66, 50.45
2017-11-03 9:01:00 27.66, 50.45
2017-11-03 9:01:00 27.66, 27.66
2017-11-03 9:01:00 27.66, 27.66
이렇게 봉 하나에
27.66, 50.45
가 되었다가
둘의 수치가 같아집니다.
27.66, 27.66
이 부분도 잘 이해가 안갑니다.
둘은 배열변수로 각각
Relative[0]
Relative[1]
의 값이 다른데
왜 둘의 값이
처음에는 달랐다가
똑같아 지는 것이죠?
- 1. 114771_1.png (0.00 MB)
답변 1
예스스탁 예스스탁 답변
2017-11-16 10:29:14
안녕하세요
예스스탁입니다.
Arrays : Period[2](0), R1[2](0), R2[2](0);
Vars : X(0);
Period[0] = 9;
For X = 0 To 1
{
if X == 0 then
R1[X] = RSI(Period[X]);
if X == 1 then
R1[X] = RSI(Period[X]);
R2[X] = RSI(Period[X]);
}
MessageLog("%.2f, %.2f, %.2f, %.2f",R1[0],R1[1],R2[0],R2[1]);
위 수식을 적용해 보시면 첨부된 그림과 같이
R1[0]은 기간9로 계산한 값을 가지고 R1[1]은 항상 0,
R2[0]은 기간9로 계산한 값을 가지고 R2[1]은 R2[0]과 항상 같은값을 가지는 것을 확인하실수 있습니다.
for문안에서 비슷해 보이는 구조인데 위와 같이 다른 값을 가지는 이유는
if X == 0 then
R1[X] = RSI(Period[X]);
if X == 1 then
R1[X] = RSI(Period[X]);
R1는 각각 다른 RSI함수가 호출이 되어서 계산을 하지만
(즉 R1[0]에 사용하는 RSI함수와 R2[1]에 사용하는 RSI함수가 별개의 메모리를 사용)
R2[X] = RSI(Period[X]);
R2는 하나의 RSI함수의 기간을 변경하면서 계산하는데(메모리공유)
RSI의 기간에 0이 들어가면 계산을 할수 없지만 이전계산한 값을 그대로 있으므로
해당 값으로 계산해 전달하기 때문입니다.
루프문안에서 하나의 함수로 기간값을 가변으로 주어 계산하는 것은
수식작성상/체계상 맞지 않는 코딩입니다.
함수에 따라서는 현재계산에 이전계산값이 필요한 경우들이 많은데
하나의 함수가 여러케이스의 이전값을 보관하지 않습니다.
최종계산된값 하나만 가지므로 루프문 안에서는 함수의 기간등을 가변으로 사용하지 않으셔야 합니다
즐거운 하루되세요
> 무결점 님이 쓴 글입니다.
> 제목 : 문의 드립니다.
> Arrays : Period[2](0), Relative[2](0);
Vars : X(0);
Period[0] = 9;
For X = 0 To 1
{
Relative[X] = RSI(Period[X]);
If CrossDown(Relative[X], 30) Then
{
Print("C:₩a11.txt","%.2f, %.2f",Relative[0],Relative[1]);
Buy();
}
If CrossDown(Relative[X], 30) Then
{
Print("C:₩a11.txt","%.2f, %.2f",Relative[0],Relative[1]);
Buy();
}
}
For문에 대한 저의 이해가 부족해서인지
이해가 안되는 부분이 많은데요.
일단 수식을 보면 아시겠지만,
배열 Period[0] 변수에만 9값을 주었구요.
Period[1] 변수에는 값을 주지 않았으므로 0값인데
Print 함수로 출력을 해보니까
보시는바와 같이 데이터가 찍어져 나옵니다.
Relative[1] = RSI(Period[1])
여기서 Period[1]은 0값인데
Relative[1] 에 RSI 값이 저장되는게 말이 되는 건가요?
그리고 또 Print 함수로 찍어낸 수치를 보면
2017-11-03 9:01:00 27.66, 50.45
2017-11-03 9:01:00 27.66, 50.45
2017-11-03 9:01:00 27.66, 27.66
2017-11-03 9:01:00 27.66, 27.66
이렇게 봉 하나에
27.66, 50.45
가 되었다가
둘의 수치가 같아집니다.
27.66, 27.66
이 부분도 잘 이해가 안갑니다.
둘은 배열변수로 각각
Relative[0]
Relative[1]
의 값이 다른데
왜 둘의 값이
처음에는 달랐다가
똑같아 지는 것이죠?