커뮤니티

lowest 함수 오작동 문의

프로필 이미지
traderk
2021-09-12 17:59:57
1045
글번호 152209
답변완료

첨부 이미지

아래와 같이 실행하면 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);
지표
답변 1
프로필 이미지

예스스탁 예스스탁 답변

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);