예스스탁
예스스탁 답변
2021-09-13 15:07:49
안녕하세요
예스스탁입니다.
1
함수는 호출되면 해당 함수의 메모리를 만들게 됩니다.
var : n(5), HighBar(15);
var1 = HighBar - (n+1);
Var2 = Lowest(L, Var1)[6];
Var3 = Lowest(L, 9)[6];
함수가 Lowest(L, Var1)[6]내용으로 호출이 되어 매봉 동일내용의 함수로 계산해 가므로
이전봉[6]의 값을 가져오는데 문제가 없습니다.
2
하지만 아래와 같이 사용한 수식에서는
함수가 매봉 호출이 되는 것이 아닙니다.
if swinghigh조건식 then
{
tt = HighBar[2] - (n+1);
ttt = Lowest(L, tt)[6];
}
Lowest(L, tt)는 if문이 만족할때만 호출이 되어
진전 호출되 현재 호출사이 봉에서의 값을 만들어 놓치 않았기 때문에
이전봉[6]의 값을 제대로 가져오지 못하게 됩니니다.
특정if조건이 만족할 때만 함수가 호출되고 이전봉의 값도 계산이 요구될때는
for문등으로 풀어서 작성해 주서야 합니다.
ttt = L[6];
For j = 6 to 6+tt-1
{
if L[j] < ttt Then
ttt = L[j];
}
즐거운 하루되세요
> traderk 님이 쓴 글입니다.
> 제목 : 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);