Search

iQ스튜디오 전략 개발 환경: 백테스트 방식·수수료 설정

백테스트 시 종목의 매매는 어떤 방식으로 처리하나요?

종목의 매매는 리밸런싱 시 기 보유 포트폴리오와 신규 목표 포트폴리오 구성 종목의 차이에 따라 종목별로 전체 매도, 전체 매수, 부분 매도, 부분 매수의 방식으로 매매를 시뮬레이션 합니다. 매매 시뮬레이션을 위한 처리 방식은 세가지 선택이 가능하도록 제공하고 있습니다. 첫번째는 리밸런싱 이후 익일 아침 동시호가 매매를 가정하여 시가로 매수, 매도가 동시에 이루지는 방식이며 따로 설정하지 않는 한 기본적으로 적용하는 방식입니다. 두번째는 리밸런싱 이후 익일 장중에 분할매매가 이루어지는 것으로 가정하여 고가, 저가, 종가의 평균 값으로 매수, 매도 가격이 결정되는 방식입니다. 세번째는 리밸런싱 당일의 종가로 매수, 매도가 함께 수행되는 것으로 가정하는 방식입니다. (다소 비현실적입니다.) 이상의 세가지 방식을 설정하기 위한 코드는 아래와 같습니다. IQEnvironment.simulationMethod = SimulationMethod.normal // 익일 시가 매매(기본값) IQEnvironment.simulationMethod = SimulationMethod.average // 익일 평균가 매매 IQEnvironment.simulationMethod = SimulationMethod.day // 당일 종가 매매

보유종목 중 거래정지, 상장폐지 등 발생했을 때 처리방법은?

보유하고 있는 종목이 거래정지가 되는 경우, 다음 리밸런싱 때 매도 사유 발생 시 (거래정지된 종목을 필터링하여 제외한다고 가정) 신규 목표 포트폴리오에서 빠지게 되어 매도 처리가 됩니다. 보유하고 있는 종목이 상장폐지가 되는 경우는 실제로 기업이 상장요건을 만족시키지 못할 정도의 문제가 많아서 상장폐지되는 경우도 있고, 합병에 의해 종목코드가 사라지게 되어 상장폐지 처리가 되는 경우도 있습니다. 이를 자동으로 구분하는 것은 플랫폼 단계에서 하기 어렵기 때문에 상장폐지가 되기 전 정리매매 등의 기회를 통해 매도가 가능할 것으로 보고 상장폐지 직전 마지막 종가로 매도처리하고 있습니다. 이러한 거래정지 및 상장폐지 종목에 대한 처리방식은 비현실적인 줄 알면서도 가장 일반적인 것으로 (다른 상황과 꼬이지 않게) 처리할 수 있는 방법이 무엇일지 고민한 결과입니다. 예를 들어 거래정지 종목을 매도 못하게 하면, 리밸런싱 때 매도금액이 모자라서 새로 매수해야 할 종목 중에 마지막 종목 같은 것을 현금 부족으로 매수 못한다고 경고가 뜰 것입니다. 그러면 백테스팅 상에서는 이게 전략의 성과를 분석하는데 적절한 처리방법인가 하는 고민이 생기게 됩니다. 그래서, 보유하고 있던 거래정지 종목은 보유 중에 투자자가 인지해서 거래정지되기 직전/직후에 그 가격에 최대한 가깝게 매도를 할 수 있다고 가정해서 현재와 같이 처리하도록 만들었습니다.

백테스트를 눌렀는데 한 동안 멈추어 있어요. 왜 그런거죠?

가끔씩 여러 사용자가 동시간대에 몰려서 백테스트를 실행시키면 서버에서 동시에 감당할 수 있는 백테스트 요청 개수를 초과하게 되는데, 이런 경우 대기열에서 요청 작업이 잠시 기다리게 됩니다. 잠깐 기다리다 보면 자기 순서가 되었을 때 자동으로 시작합니다. 만일 10분 정도가 지나도 시작하지 않는다면 플랫폼에 문제가 발생했을 가능성도 있으니, 그런 경우에는 채널톡 & 자유게시판에 제보를 해 주시면 감사하겠습니다.

복수 계좌를 사용하는 알고리즘은 왜 사용하는 것인가요? 실제로 여러 계좌에 나누어 투자할 수 있게 실행시켜 주나요?

하나의 알고리즘 스크립트 코드에서 여러 개의 투자 전략에 대한 상대적인 성과 비교를 가시적으로 하고 싶을 때 주로 사용합니다. 처음에 플랫폼을 설계할 때는 회원님의 증권사 계좌에 연동해서 각 계좌별로 실제로 투자할 수 있게 하려는 의도에서 계좌(Account) 개념을 도입했습니다만, 현실적인 문제로 하나의 스크립트로 여러 개의 실제 계좌에 연동하는 것은 불가능한 상황입니다.

블록 알고리즘으로도 원하는 투자 전략을 모두 개발할 수 있나요?

블록 알고리즘 개발환경은 팩터 모델이나 자산배분 모델을 코딩할 필요 없이 보다 간편하게 알고리즘으로 구현하기 위해 미리 정해진 템플릿을 제공하는 한 가지 좋은 방식이라고 생각하시면 됩니다. 따라서, 템플릿에서 정해 놓은 구성 요소와 절차를 넘어서는 복잡한 데이터 처리 프로세스를 구현하기에는 일정한 제약이 따를 수 밖에 없습니다.

블록 알고리즘 코딩으로는 복수 계좌(복수 전략의 백테스트)는 불가능한가요?

현재 블록 알고리즘 개발환경에서는 복수 계좌를 설정할 수 있는 방법을 제공하고 있지 않습니다. 복수 전략을 테스트하기 원하시면 스크립트 알고리즘으로 복수 계좌를 활용하여 작성하셔야 합니다.

백테스트 실행 중 실수로 다른 페이지로 이동하거나 브라우저 탭을 닫았습니다. 실행 중이었던 백테스트를 중지할 수 있나요?

스튜디오 화면의 좌측 메뉴에 있는 ‘백테스트 현황’ 을 누르시면 현재 실행 중인 백테스트의 진행상황이 나옵니다. 목록에 무엇인가가 보인다면 그것은 현재 백테스트 실행 중인 알고리즘이 있다는 것이므로, 중지 아이콘을 누르면 불필요하게 계속 실행되지 않도록 중지시킬 수 있습니다.

거래 수수료, 거래세, 슬리피지 등을 설정하는 방법은?

스크립트 알고리즘으로 작성 시에는 다음과 같이 설정할 수 있습니다. IQEnvironment.stockCommission = 0.001 // 주식 거래 수수료. 기본값 = 0.0015 = 0.15% IQEnvironment.etfCommission = 0.001 // ETF 거래 수수료. 기본값 = 0.0015 = 0.15% IQEnvironment.stockTax = 0.003 // 주식 거래세. 기본값 = 0.003 = 0.3% 블록 알고리즘 작성 시에도 [전략 설정] 부분에서 거래수수료와 거래세 설정을 % 단위로 할 수 있습니다. 슬리피지는 별도의 방법을 제공하지는 않으며, 거래비용의 한 종류라는 측면에서 거래수수료 설정에 반영하는 것이 방법이 될 수 있습니다. 즉, 수수료 설정 시 슬리피지 크기만큼 더하여 설정하시면 됩니다.