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

IQ Live에 복수계좌 사용이 가능해 졌습니다.

IntelliQuant 2021.11.29 19:06 조회수  139

안녕하세요? 인텔리퀀트 팀입니다.


그동안 스크립트 알고리즘에서는 백테스트 단계에서 복수계좌를 사용하여 여러 전략 또는 모델의 성과를 비교할 수 있도록 지원하고 있었던 것에 반해, 그러한 복수계좌 사용 스크립트 알고리즘을 IQ Live에 그대로 적용하는 것은 부주의한 경우 문제가 발생할 수 있어서 허용되지 않았습니다.


하지만 보다 창의적인 투자전략을 실전에서 구사하실 수 있도록, 앞으로는 복수계좌를 사용한 알고리즘도 IQ Live에 등록하여 실행할 수 있도록 하였습니다.

다만, 문제 발생을 피하기 위해서는 아래와 같은 가이드라인을 꼭 지켜 주시기 바랍니다.

  1. 스크립트 알고리즘만 가능합니다. 블록 알고리즘은 현재 알고리즘 작성에서도 복수계좌 사용이 불가능한 상태이므로, IQ Live 에서도 복수계좌 사용은 계속 불가능합니다.
  2. 전략이 최종날짜 (IQ Live에서는 장마감된 당일)까지 시뮬레이션 방식으로 실행된 후 마지막 호출되는 함수인 onComplete() 에서 IQLive에 포트폴리오를 등록할 때, 반드시 특정 단일 Account 에 속한 Basket들만 등록되어야 합니다.




예제:

basket1, basket2, basket3가 각각 account1, account2, account3에 연결되어 있을 때,     


Case A)

function onDayClose(now) {

......

    if ( ... ) {

        flag = 1;

    } else {

        flag = -1;

    }

......

}


function onComplete() {

    if(flag === 1) {

        IQLive.addPortfolio(basket1, 0.9);     

        logger.info("Current Basket = basket1");

    } else {

     IQLive.addPortfolio(basket2, 0.9);

        logger.info("Current Basket = basket2");        

    }

}


==> IQ Live에 오류 없이 등록은 가능하나 정상동작 보장 못함 : 같은 시점에는 하나의 Account에 속한 Basket만 등록되지만, 교대과정에서 의도하지 않은 결과 발생 가능


Case B)

function onDayClose(now) {

......

    if ( ... ) {

        basket3.setPortfoliobuilder(...);   // basket1에 지정된 포트폴리오 빌더 함수로 설정

    } else {

        basket3.setPortfoliobuilder(...);   // basket2에 지정된 포트폴리오 빌더 함수로 설정

    }

    basket3.buildPortfolio();

......

}


function onComplete() {

    IQLive.addPortfolio(basket3, 0.9);

}


==> IQ Live에서 허용 : 최종적으로 하나의 Account에 속한 Basket만 실전포트폴리오 등록에 사용하므로 정상 동작



Case C)

function onComplete() {

    IQLive.addPortfolio(basket1, 0.45);     

    IQLive.addPortfolio(basket2, 0.45);

}


==> IQ Live에서 금지 (등록 실패) : 두개 이상의 Account에 각각 속한 Basket들의 포트폴리오를 동시에 등록 시도하므로 금지