안녕하세요. 종목검색을 함에 있어 원인 모를 오류가 있어 문의드립니다.
(질문을 위해 코드를 간결하게, 또한 변수를 임의로 설정하였습니다)
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봉 전까지의 값이 모두
배열형태로 대입되는 건가요? 아니면 다른 방식이 있는건가요?