답변완료
lowest 함수 오작동 문의
아래와 같이 실행하면 var2와 var3의 값이 정상적으로 같은 값으로 출력되는 걸 확인(캡처1)했습니다.
------------------------------------------------------------------------------
var : n(5), HighBar(15);
var1 = HighBar - (n+1);
Var2 = Lowest(L, Var1)[6];
Var3 = Lowest(L, 9)[6];
MessageLog("var1 %.0f, var2 %.3f, Var3 %.3f", var1, Var2, Var3);
------------------------------------------------------------------------------
하지만, 아래와 같이 Swing하는 지표를 만들어 활용하게 되면 lowest()함수에 오류가 발생합니다.
첨부(캡처2)한 디버깅 내용을 확인해보시면 7/28일의 경우 tt 변수는 9로 계산됩니다.
t = lowest(L, 9)와 ttt = lowest(L, tt)의 값이 서로 다르게 계산됩니다.
7/28일의 t와 ttt의 값이 다른 이유를 알고 싶습니다.
US Dollar Index 일간 차트로 지표를 실행하였습니다.
Input : n(5), Tick(0.005), UnComplete(True);
Var : j(0), k(0), t(0), tt(0), ttt(0), S(0), HighPoint(0), LowPoint(0);
Array : HighPrice[20](0), LowPrice[20](0), HighBar[20](0), LowBar[20](0), HighIndex[20](0), LowIndex[20](0);
For j = 1 to 19 {
HighBar[j] = HighBar[j] + 1;
LowBar[j] = LowBar[j] + 1;
HighIndex[j] = Index - HighBar[j];
LowIndex[j] = Index - LowBar[j];
}
HighPoint = (o[n] + c[n]) / 2;
LowPoint = (o[n] + c[n]) / 2;
if Highest(h, n)[n+1] <= H[n] and h[n] > Highest(h, n) Then {
if UnComplete == True Then {
For j = 18 DownTo 1 {
HighPrice[j+1] = HighPrice[j];
HighBar[j+1] = HighBar[j];
HighIndex[j+1] = HighIndex[j];
}
HighPrice[1] = H[n];
HighBar[1] = n;
HighIndex[1] = Index - HighBar[1];
HighPoint = HighPrice[1] + Tick * 0.25;
if LowBar[1] > HighBar[2] Then {
For j = 18 DownTo 1 {
LowPrice[j+1] = LowPrice[j];
LowBar[j+1] = LowBar[j];
LowIndex[j+1] = LowIndex[j];
}
k = n + 1;
For j = n + 2 to HighBar[2] - 1 {
if L[k] > L[j] Then k = j;
}
tt = HighBar[2] - (n+1);
ttt = Lowest(L, tt)[6];
t = Lowest(L, 9)[6];
LowPrice[1] = L[k];
LowBar[1] = k;
LowIndex[1] = Index - LowBar[1];
LowPoint = LowPrice[1] - tick * 0.25; # 책에 없는 코드
}
}
if UnComplete == False Then {
if HighBar[1] > LowBar[1] Then
For j = 18 DownTo 1 {
HighPrice[j+1] = HighPrice[j];
HighBar[j+1] = HighBar[j];
HighIndex[j+1] = HighIndex[j];
}
if HighBar[1] > lowBar[1] or HighPrice[1] <=High[n] Then {
HighPrice[1] = h[n];
HighBar[1] = n;
HighIndex[1] = Index - HighBar[1];
HighPoint = Highprice[1] + tick * 0.25;
}
}
}
If Lowest(L, n)[n +1] >= L[n] and L[n] < Lowest(L, n) Then {
if UnComplete == True Then {
For j = 18 DownTo 1 {
Lowprice[j+1] = Lowprice[j];
LowBar[j+1] = Lowbar[j];
LowIndex[j+1] = LowIndex[j];
}
LowPrice[1] = L[n];
LowBar[1] = n;
LowIndex[1] = Index - LowBar[1];
LowPoint = LowPrice[1] - Tick * 0.25;
if HighBar[1] > LowBar[2] Then {
For j = 18 DownTo 1 {
HighPrice[j+1] = HighPrice[j];
HighBar[j+1] = HighBar[j];
HighIndex[j+1] = HighIndex[j];
}
k = n + 1;
For j = n + 2 to LowBar[2] - 1 {
if H[k] < H[j] Then k = j;
}
HighPrice[1] = H[k];
HighBar[1] = k;
HighIndex[1] = Index - HighBar[1];
HighPoint = HighPrice[1] + tick * 0.25;
}
}
if UnComplete == False Then {
If LowBar[1] > HighBar[1] Then {
For j = 18 DownTo 1 {
Lowprice[j+1] = LowPrice[j];
LowBar[j+1] = LowBar[j];
LowIndex[j+1] = LowIndex[j];
}
}
if LowBar[1] > HighBar[1] or LowPrice[1] >= L[n] Then {
LowPrice[1] = L[n];
LowBar[1] = n;
LowIndex[1] = Index - LowBar[1];
LowPoint = LowPrice[1] - Tick * 0.25;
}
}
}
if HighPoint > H[n] Then Plot1(HighPoint, "HighPoint", RED); # 점그래프, -n만큼 수평이동
if LowPoint < L[n] Then Plot2(LowPoint, "LowPoint", BLUE); # 점그래프, -n만큼 수평이동
if HighBar[1] == n and HighPrice[1] > 0 Then Plot3(HighPrice[1]); # 선그래프, -n만큼 수평이동
if LowBar[1] == n and LowPrice[1] > 0 Then Plot3(LowPrice[1]); # 선그래프, -n만큼 수평이동
if LowBar[1] == n and LowPrice[1] > 0 Then Plot4(LowPrice[1]); # 선그래프, -n만큼 수평이동
if HighBar[1] == n and HighPrice[1] > 0 Then Plot4(HighPrice[1]); # 선그래프, -n만큼 수평이동
MessageLog("HighPrice[1] %.3f, HighPrice[2] %.3f, LowPrice[1] %.3f, t %.3f, tt %.0f, ttt %.3f, HighBar[1] %.0f, HighBar[2] %.0f, LowBar[1] %.0f, s %.0f, k %.0f",
HighPrice[1], HighPrice[2], LowPrice[1], t, tt, ttt, HighBar[1], HighBar[2], LowBar[1], s, k);
2021-09-12
1044
글번호 152209
지표