커뮤니티

문의드립니다.

프로필 이미지
저스트뚜잇
2022-05-25 00:31:46
1099
글번호 159233
답변완료

첨부 이미지

안녕하세요. 종목검색을 함에 있어 원인 모를 오류가 있어 문의드립니다. (질문을 위해 코드를 간결하게, 또한 변수를 임의로 설정하였습니다) 20220225에 검색을 하였고 이 때 41봉전은 20220325 입니다. ///////////////////////////////////////////////////////////// // <사용자함수> 파일명 : [highestvolume_Test<사용자 함수>] // Input : num(Numeric), condition1(logicalRef); condition1=False; Var3 = V; var4 = M; If Var3[num] > Highest(Var3[num+1], 250)*0.7 and Var3[num] > Highest(Var3[num+1], 10)*2.5 and Var4[num] > 3*10^10 //거래대금 300억 Then { condition1=true; } highestvolume_test=1; /////////////////////////////////////////////////////////////// // <종목검색> 파일명 : highestvolume_test종목검색<종목 검색>]// var1 = 41; var2 = 45; For Var99 = var1 to var2 { highestvolume_test(Var99, condition1); If condition1==true Then { Find(Var99); } } //////////////////////////////////////////////////// 수식은 위와 같이 작성하였습니다. 첨부한 사진 참고 부탁드립니다 종목검색의 수식 내 변수 var2=45;를 var2=46;으로 바꿀 경우 41에서 45까지의 종목이 유지된 채로 46봉전에 조건을 만족되는 종목만 추가될 것으로 예상했는데 그렇지 않고 일부가 없어지고 생깁니다. 강조로 작성된 수식은 정확하게 조건과 일치하는 결과를 만들었는데 똑같이 highestvolume_test(0,condition1); 을 사용했음에도 종목검색 결과의 경우 조건에 부합되지 않는 유진로봇, 에스피시스템스와 같은 종목이 나왔습니다. 원인이 무엇일까요? 그리고 미리 감사드립니다! ++위와 같이 Var3 = V; 와 같이 변수에 대입할 때 종목검색 자체가 500봉 전까지의 값만 참조할 수 있으므로 500봉 전까지의 값이 모두 배열형태로 대입되는 건가요? 아니면 다른 방식이 있는건가요?
종목검색
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2022-05-25 11:58:21

안녕하세요 예스스탁입니다. 사용자함수식만 아래와 같이 수정하시면 됩니다. 일반 수식이나 함수식을 작성하실때 특정계산식이 과거값이 필요하면 해당계산식을 변수처리해서 사용하셔야 합니다. 수식은 차트에 적용되면 차트 과거봉부터 현재봉으로 오면서 계산을 하게 됩니다. 이는 종목검색도 각 종목의 차트를 열고 계산하는 것과 같기에 동일합니다. 현재 사용자함수식의 for문안에 highest함수가 사용되는데 매봉 n번 호출되면서 그 이전의 값들을 충분히 못만들수도 있습니다. 아래와 같이 변수처리를 해 이용하시면 각 기간의 함수는 매봉 한번만 호출되어 계산후 변수에 저장되므로 수식의 동작도 빨라지게 됩니다. Input : num(Numeric), condition1(logicalRef); var : h1(0),h2(0); condition1=False; Var3 = V; var4 = M; h1 = highest(Var3,250); h2 = highest(Var3,10); If Var3[num] > h1[num+1]*0.7 and Var3[num] > h2[num+1]*2.5 and Var4[num] > 3*10^10 //거래대금 300억 Then { condition1=true; } highestvolume_test=1; 즐거운 하루되세요 > 저스트뚜잇 님이 쓴 글입니다. > 제목 : 문의드립니다. > 안녕하세요. 종목검색을 함에 있어 원인 모를 오류가 있어 문의드립니다. (질문을 위해 코드를 간결하게, 또한 변수를 임의로 설정하였습니다) 20220225에 검색을 하였고 이 때 41봉전은 20220325 입니다. ///////////////////////////////////////////////////////////// // <사용자함수> 파일명 : [highestvolume_Test<사용자 함수>] // Input : num(Numeric), condition1(logicalRef); condition1=False; Var3 = V; var4 = M; If Var3[num] > Highest(Var3[num+1], 250)*0.7 and Var3[num] > Highest(Var3[num+1], 10)*2.5 and Var4[num] > 3*10^10 //거래대금 300억 Then { condition1=true; } highestvolume_test=1; /////////////////////////////////////////////////////////////// // <종목검색> 파일명 : highestvolume_test종목검색<종목 검색>]// var1 = 41; var2 = 45; For Var99 = var1 to var2 { highestvolume_test(Var99, condition1); If condition1==true Then { Find(Var99); } } //////////////////////////////////////////////////// 수식은 위와 같이 작성하였습니다. 첨부한 사진 참고 부탁드립니다 종목검색의 수식 내 변수 var2=45;를 var2=46;으로 바꿀 경우 41에서 45까지의 종목이 유지된 채로 46봉전에 조건을 만족되는 종목만 추가될 것으로 예상했는데 그렇지 않고 일부가 없어지고 생깁니다. 강조로 작성된 수식은 정확하게 조건과 일치하는 결과를 만들었는데 똑같이 highestvolume_test(0,condition1); 을 사용했음에도 종목검색 결과의 경우 조건에 부합되지 않는 유진로봇, 에스피시스템스와 같은 종목이 나왔습니다. 원인이 무엇일까요? 그리고 미리 감사드립니다! ++위와 같이 Var3 = V; 와 같이 변수에 대입할 때 종목검색 자체가 500봉 전까지의 값만 참조할 수 있으므로 500봉 전까지의 값이 모두 배열형태로 대입되는 건가요? 아니면 다른 방식이 있는건가요?