커뮤니티
내가 만든 전략들과 지식을 공유하고 토론합니다.

실제 해당 시점에서는 알고리즘에 의해 선정되지 않은 종목이, 현재 시점에서 테스트시에는 종목 선정이 되는 현상

윤병식 2021.10.23 21:28 조회수  172 추천 1

안녕하세요.


실제 알고리즘이 동작하는 시점에서는 종목으로 필터링 되지 않던 에이아이비트(A039230) 종목이, 상장 폐지된 현재 시점에서 테스트를 돌려보면,

종목 필터링이 되지 않으면서 과거의 실제 상황과 일치하지 않게 됩니다.

이 오류가 발생한건, manage 8번(정리매매) 번호가 추가되면서 부터로 보이는데요.


이 문제는 IQLive의 차트에도 영향을 미치고 있는것으로 보입니다. 금요일(22일 장마감 후) 시점의 그래프와 현재(23일) 시점의 그래프가 다릅니다.

23일 이후로는 주식시장이 열리지 않았으니, 주가데이터는 22일시점의 데이터 그대로일텐데 말이죠..

확인 부탁드립니다.

댓글 4
안녕하세요. 먼저, 이번 개선으로 더 정확하게 종목별 유의 정보를 추가하려고 한 것인데, 불편을 겪으시게 되어 죄송합니다.

해당 문제는 일단 지난 금요일(10/22)에 추가된 Stock객체 manage 코드의 '정리매매' 때문이 맞는 것으로 추측됩니다. 
기존에 필터링 하는 조건에 없는 값에 해당되어 걸러지지 않은 것으로 보입니다.

예) 해당 종목은 10/6에 상폐되었고, 만일 10/1에 포트를 뽑았다면 당시에는 거래정지가 풀리고 정리매매 중인 상황이었습니다. IQ Live 실행일자 기준으로, '정리매매' 코드(manage 코드 8)가 적용되기 전인 10/1에는 stock.manage === 1 과 같은 조건으로 필터링 하면 해당종목은 포트에 뽑힐 수 없게 되지만, 10/22에 실행하면 정리매매 코드에 의해 해당종목의 10/1일자 manage 코드가 9가 되어 포트에 뽑힌 것처럼 시뮬레이션이 된 것입니다.

시스템, 특히 데이터 부분에 새로운 업데이트를 할 때 간혹 겪게 되는 이런 현상은 시스템의 오류까지는 아니지만, 기능 변경 과도기에 나타날 수 있는 어쩔 수 없는 문제라서 저희도 기능 업데이트 할 때마다 항상 고민입니다. 

그런데, 
"금요일(22일 장마감 후) 시점의 그래프와 현재(23일) 시점의 그래프가 다릅니다.

23일 이후로는 주식시장이 열리지 않았으니, 주가데이터는 22일시점의 데이터 그대로일텐데 말이죠.."
라고 질문하신 부분은 뭔가 착오가 있으신 게 아닌가 싶습니다.

IQ Live는 과거 일자에 실행한 데이터는 날짜가 지난 후에 다시 고치는 일은 없습니다... 혹시 두 그래프가 정말 다르다면, 22일 그래프는 오후 8시 (22일자 IQ Live 실행을 모두 마친 시간) 이전에 확인하신 것이고, 23일 그래프는 22일자 실행까지 모두 반영되어 10/22 일 결과가 추가된 그래프일 것으로 생각됩니다.

설명이 충분히 되셨는지 모르겠습니다. 또 궁금하신 부분 있으시면 댓글 남겨 주세요. 감사합니다.
인텔리퀀트 2021.10.25 14:39
참고로, 가장 좋은 필터링 조건식 방법은
if (stock.manage & 1) { return false; }
와 같이 비트연산을 사용하시는 것이 좋습니다.  이렇게 하면 8이라는 정리매매 정보가 추가되어 해당종목의 manage = 9가 되더라도, 비트연산으로는 2진수로 1의 자리에 해당하는 값(관리종목 여부)이 0인지 1인지 정확히 파악할 수 있습니다.
인텔리퀀트 2021.10.25 14:44
"정리매매" 부분이 현재 도움말에 추가되어 있지 않네요. 해당 내용을 추가 부탁드립니다. 감사합니다.
Europa 2021.10.25 14:50
답변 감사합니다. 말씀하신 내용 적용해 보도록 하겠습니다.
윤병식 2021.10.25 16:55
댓글 등록을 위해서 로그인해주세요.
 
최신 게시글