처음 주가 데이터를 수집하다보면 누구나 직면하는 이슈가 있다.
"엥 내가 받은 데이터의 과거 주가와 왜 다른 사이트나 증권사에서 표시되는 과거 주가가 다르지?"
원인을 찾다보면 주가수정이 발생했는데 이를 어떻게 처리하는지에 따라 데이터가 다르다는 것을 발견하게 된다.
예를 들어 삼성전자는 2018년 5월 4일 1/50의 액면분할을 시행해서 2,650,000원이던 주가가 53,000원이 되었다.(이 외에도 무상증자, 유상증자, 감자 등이 발생할때 주가가 수정된다.) 내가 무수정주가를 수집하고 있었다면, 2018년 5월 4일 이전의 250만원이 넘는 가격이 저장이 되어 있을테고, 이후에는 5만원 언저리의 가격이 저장된다. 그런데 이렇게 자료를 다루다 보면 수익률을 계산할때 주가 수정으로 인해 말도 안되는 수익이 발생하곤 한다.(삼성전자를 보유했더니 98% 손실이!)
또, 이동평균을 계산할때도 주가수정 구간을 포함하게 되면 이동평균값이 제멋대로 나오게 된다.
이를 해결하기 위해 사용하는 것이 수정주가다. 증권사나 네이버 등에서 제공하는 주가는 주가수정이 발생하면 과거 데이터까지 모두 수정된 수정주가를 제공한다.
그럼 수정주가로 데이터를 저장하면 될까?
주가수정이 발생하면 과거 데이터의 모든 주가를 모두 변경해 줘야한다. 삼성전자의 경우 2018년 5월 이전의 200만원이 넘는 모든 가격에 0.02배를 곱한 채 가격을 다루어야 한다. 이 경우에도 문제가 발생한다.
먼저 수정의 부정확성이다. 주가수정이 발생하면 거래량도 같이 수정해야 하는데 일종의 근사값이 된다.
또 일봉만 수정하면, 분봉의 가격도 달라지게 된다. 분봉도 수정해야 할까? 일봉과 분봉을 조합해서 시뮬레이션을 하려면 당연히 분봉도 맞춰줘야 한다. 체결 데이터도 모으고 있었다면? 체결데이터는 수정이 가능할까..?
데이터가 일봉 수준을 넘어서면 이를 일일이 수정하는게 불가능하다는 생각에 직면하게 된다.
그리고 근사값과 수정된 값을 사용하게 되면, 과거 그 시점에서의 시장 상황을 정확하게 시뮬레이션 하지 못하게 되는 문제도 있다.
그럼 이를 어떻게 해결하면 될까?
내가 쓰는 방법은 기본은 무수정주가를 모으되, 주가수정 이슈를 모두 기록하는 것이다.
체결, 분봉, 일봉데이터를 모두 무수정주가로 모으고, 모든 종목의 주가 수정 이슈를 따로 저장해 둔다.
삼성전자의 경우 2018년 5월 4일 0.02의 주가주성을 DB에 기록해 둔다.
그리고 시뮬레이션 상황에서 오버나잇 시 주가수정이 발생하면 해당 테이블을 불러와서 수익률에 같이 연산해주면 된다.
삼성전자를 2018년 4월 27일(이후 3일간 거래정지였다)종가에 매수하고, 2018년 5월 4일 종가에 매도하는 경우 무수정주가로 계산하면 매도가/매수가 = 51900/2650000 ≒ 0.01958, 약 98.04% 손실이지만, 여기에 수정비율 0.02를 나눠주면
0.0198 / 0.02 = 0.979, 약 2.1% 손실로 계산할 수 있다.
많은 시행착오를 거치면 답을 찾게 된달까나..
'System trading' 카테고리의 다른 글
금융투자소득세 폐지 발표 (1) | 2024.01.02 |
---|---|
시스템 트레이딩 2023년 결산 (1) | 2023.12.28 |
최적주문집행 알고리즘 분석 (0) | 2023.09.13 |
시스템 트레이딩 작업 비중 (0) | 2023.08.26 |
남의 정보로 투자하기 (2) | 2023.07.12 |