안녕하세요. 전략토론방에는 처음 게시물을 올립니다. (전략토론방에 최근 게시글이 너무 없어서 활성화를 의도하는 목적도 있습니다.)
알고리즘을 돌리다보면 거래액이 너무 커져서 시장에서 실제 거래될 수 없거나 혹은 시장 자체를 왜곡시킬 수준의 거래를 발생시키는 일이 자주 발생합니다. 실전 매매에서는 슬리피지를 아주 크게 만들거나, 혹은 실전 매매에 적용 불가능한 알고리즘이 됩니다.
이런 문제를 최대한 바로잡으려고 시도를 해 보았습니다. 각 개별종목별로 하루에 매매 시도하는 최대치를 일 거래량의 1% 정도로 셋팅해 두고 이를 강제하는 코드입니다. 아직 완전한 구현은 아닙니다. 배스킷의 최대 예산을 초과하지 않도록 매도와 매수를 보다 정밀하게 컨트롤해야 하지만, 가끔 매도보다 매수가 더 진행되서 오류를 출력하기도 합니다. 그래도 아마 실전에 적용하는 분들에게는 도움이 될 것 같아서 공유드립니다.
구현체는 인텔리퀀트에서 제공하는 기본 템플릿에 추가해 두었습니다. 기본 템플릿의 동작과 비교해 보시면 차이가 보입니다. 예를 들어, 아래 백테스트 결과를 보면, 매달 1일 리밸런싱임에도 불구하고, 1일에 리밸런싱을 충분히 마무리하지 못한 부분은 그 뒤로도 목표를 달성할때까지 매일 거래량을 컨트롤해가면서 매도, 매수를 진행한 것을 볼 수 있습니다.
감사합니다.