커뮤니티

nthhighestbar 이거 함수 정상작동 하도록 구현 요청드립니다.

프로필 이미지
여유로운투자
2023-08-30 23:34:28
1236
글번호 172004
답변완료
83573 번 문의한 내용답변 잘봤씁니다 그럼 궁금한게 검색식에서 nthhighestbar와 동일한 기능을 하도록 구현하고싶은데 어떻게 구현해야되는지궁금합니다. 작성해주신 내용은 nthhighestbar(1,h,48) 에서만 작동하는데 예를들어 nthhighestbar(3,h,48) 혹은 nthhighestbar(5,c,48) 이런것도 작동하도록 검색식에서 구현하고싶은데 어떻게할지궁금합니다. 안녕하세요 예스스탁입니다. 수식은 계산에 필요한 최소봉수(MaxBarsBack) 이후에 계산을 하게 됩니다. 수식에 NthHighestBar(1,h,period)가 있기 때문에 내부적으로 MaxBarsBack이 48로 고정으로 잡히게 됩어 48개 이상 봉이 없는 종목은 검색되지 못합니다. 아래와 같이 작성하시면 MaxBarsBack를 1로 잡히게 할수 있습니다. 루프로 현재봉에서 첫봉까지 가면서 최고가를 계산하고 이전봉이 48개봉 이전이면 루프를 멈추게 됩니다. input : period(48); var : hh(0),cnt(0); hh = 0; For cnt = 0 to Index { if (hh == 0 or (hh > 0 and h[cnt] > hh)) and cnt < period Then hh = h[cnt]; #for문 빠져나감 if cnt >= period Then cnt = Index+1; } if h == hh Then Find(1); 즐거운 하루되세요 > 여유로운투자 님이 쓴 글입니다. > 제목 : 검색함수가 정상작동하지않습니다. > input : period(48); var : nflagh(0),nflagCnt(0); if nflagcnt!= 0 Then nflagcnt = nflagcnt + 1; var1 = BarIndex; if BarIndex+1 >= period Then { if NthHighestBar(1,h,period)==0 //&& NthHighestBar(1,h,period)[1]!=0 Then { Find(1); } } Else { if nflagh < h Then { nflagh = h; nflagcnt = 1; } if LastBarOnChart==1 Then if nflagcnt==1 //&& nflagcnt[1] != 1 Then Find(1); } 48봉중 최고가인 검색식을작성했습니다. 신규주나 생긴지 얼마안되는 것은 즉 48봉 미만인경우는 아래 else를타고 48봉 이상이 존재하는 주식은 if 문을 타도록 구현했는데요 지표에서는 잘 작동하는데 검색식으로는 위에 해당하는종목이 검색이안됩니다. 예를들어 오늘 뷰노같은 경우는 아에 검색식에 뜨지 않습니다. 디버깅해보니 NthHighestBar 함수 존재 유무에따라 검색이 되고 안되는 거같은데 이거 NthHighestBar 함수가 파라미터에 들어오는수만큼 없는경우는 검색식인경우 정상작동하지 않는 거같은데요 확인 요청드립니다. 아 해당검색식은 월봉에서 찾는걸로 수행했습니다 월봉상 48벙미만인정목은 해당함수때문에아에검색동닥이안하네요 ㅠㅜ 그리고해당함수에문제가있다면 우회해서 제가짜고싶은로직은 어떻게구현해야하나요?
검색
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2023-08-31 17:04:54

안녕하세요 예스스탁입니다. 1 아래 내용 참고하시기 바랍니다. 이전 수식에 첫번째~다섯번째 최고값을 리턴하게 수정해 드립니다. 가장 큰값은 h1, 두번째 큰값은 h2, 세번째 큰값은 h3, 네번째 큰값은 h4, 다섯번째 큰값은 h5입니다. input : period(48); var : cnt(0),h1(0),h2(0),h3(0),h4(0),h5(0); h1 = 0; h2 = 0; h3 = 0; h4 = 0; h5 = 0; For cnt = 0 to Index { if cnt < period Then { if h1 == 0 or (h1 > 0 and h[cnt] > h1) Then { h5 = h4; h4 = h3; h3 = h2; h2 = h1; h1 = h[cnt]; } if h[cnt] < h1 and (h2 == 0 or (h2 > 0 and h[cnt] > h2)) Then { h5 = h4; h4 = h3; h3 = h2; h2 = h[cnt]; } if h[cnt] < h2 and (h3 == 0 or (h3 > 0 and h[cnt] > h3)) Then { h5 = h4; h4 = h3; h3 = h[cnt]; } if h[cnt] < h3 and (h4 == 0 or (h4 > 0 and h[cnt] > h4)) Then { h5 = h4; h4 = h[cnt]; } if h[cnt] < h4 and (h5 == 0 or (h5 > 0 and h[cnt] > h5)) Then { h5 = h[cnt]; } } #for문 빠져나감 if cnt >= period Then cnt = Index+1; } if h == h1 Then Find(1); 2 아래는 위와 비슷한 내용인데 값을 배열에 넣어서 배열로 컨트롤하게 작성한 식입니다. 배열함수의 사이즈는 봉수가 아니므로 MaxBarsBack을 회피할 수 있습니다. 배열관련 함수 사용으로 식이 간단합니다. 수식에 사용된 NthHighestArray는 랭귀지 도움말 참고하시기 바랍니다. input : period(48); var : cnt(0); var : h1(0),hb1(0); var : h2(0),hb2(0); var : h3(0),hb3(0); var : h4(0),hb4(0); var : h5(0),hb5(0); Array : hh[100](Nan); #hh 배열변수에 고가를 0번방~99번방까지 고가를 저장 0이 가장 최근 For cnt = 99 downto 1 { hh[cnt] = hh[cnt-1]; } hh[0] = h; #h1에 hh의 1번째 큰값 저장하고 hb1는 몇봉전인지 봉수 저장 NthHighestArray(hh,min(Index+1,period),1,h1,hb1); #h1에 hh의 1번째 큰값 저장하고 hb1는 몇봉전인지 봉수 저장 NthHighestArray(hh,min(Index+1,period),2,h2,hb2); #h1에 hh의 1번째 큰값 저장하고 hb1는 몇봉전인지 봉수 저장 NthHighestArray(hh,min(Index+1,period),3,h3,hb3); #h1에 hh의 1번째 큰값 저장하고 hb1는 몇봉전인지 봉수 저장 NthHighestArray(hh,min(Index+1,period),4,h4,hb4); #h1에 hh의 1번째 큰값 저장하고 hb1는 몇봉전인지 봉수 저장 NthHighestArray(hh,min(Index+1,period),5,h5,hb5); Plot1(h1); Plot2(h2); Plot3(h3); Plot4(h4); Plot5(h5); 즐거운 하루되세요 > 여유로운투자 님이 쓴 글입니다. > 제목 : nthhighestbar 이거 함수 정상작동 하도록 구현 요청드립니다. > 83573 번 문의한 내용답변 잘봤씁니다 그럼 궁금한게 검색식에서 nthhighestbar와 동일한 기능을 하도록 구현하고싶은데 어떻게 구현해야되는지궁금합니다. 작성해주신 내용은 nthhighestbar(1,h,48) 에서만 작동하는데 예를들어 nthhighestbar(3,h,48) 혹은 nthhighestbar(5,c,48) 이런것도 작동하도록 검색식에서 구현하고싶은데 어떻게할지궁금합니다. 안녕하세요 예스스탁입니다. 수식은 계산에 필요한 최소봉수(MaxBarsBack) 이후에 계산을 하게 됩니다. 수식에 NthHighestBar(1,h,period)가 있기 때문에 내부적으로 MaxBarsBack이 48로 고정으로 잡히게 됩어 48개 이상 봉이 없는 종목은 검색되지 못합니다. 아래와 같이 작성하시면 MaxBarsBack를 1로 잡히게 할수 있습니다. 루프로 현재봉에서 첫봉까지 가면서 최고가를 계산하고 이전봉이 48개봉 이전이면 루프를 멈추게 됩니다. input : period(48); var : hh(0),cnt(0); hh = 0; For cnt = 0 to Index { if (hh == 0 or (hh > 0 and h[cnt] > hh)) and cnt < period Then hh = h[cnt]; #for문 빠져나감 if cnt >= period Then cnt = Index+1; } if h == hh Then Find(1); 즐거운 하루되세요 > 여유로운투자 님이 쓴 글입니다. > 제목 : 검색함수가 정상작동하지않습니다. > input : period(48); var : nflagh(0),nflagCnt(0); if nflagcnt!= 0 Then nflagcnt = nflagcnt + 1; var1 = BarIndex; if BarIndex+1 >= period Then { if NthHighestBar(1,h,period)==0 //&& NthHighestBar(1,h,period)[1]!=0 Then { Find(1); } } Else { if nflagh < h Then { nflagh = h; nflagcnt = 1; } if LastBarOnChart==1 Then if nflagcnt==1 //&& nflagcnt[1] != 1 Then Find(1); } 48봉중 최고가인 검색식을작성했습니다. 신규주나 생긴지 얼마안되는 것은 즉 48봉 미만인경우는 아래 else를타고 48봉 이상이 존재하는 주식은 if 문을 타도록 구현했는데요 지표에서는 잘 작동하는데 검색식으로는 위에 해당하는종목이 검색이안됩니다. 예를들어 오늘 뷰노같은 경우는 아에 검색식에 뜨지 않습니다. 디버깅해보니 NthHighestBar 함수 존재 유무에따라 검색이 되고 안되는 거같은데 이거 NthHighestBar 함수가 파라미터에 들어오는수만큼 없는경우는 검색식인경우 정상작동하지 않는 거같은데요 확인 요청드립니다. 아 해당검색식은 월봉에서 찾는걸로 수행했습니다 월봉상 48벙미만인정목은 해당함수때문에아에검색동닥이안하네요 ㅠㅜ 그리고해당함수에문제가있다면 우회해서 제가짜고싶은로직은 어떻게구현해야하나요?