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

[질문] basket 의 종목이 BasketEgg 에 반영되는 시점이 궁금합니다.

Rosekeit 2022.03.29 21:35 조회수  81 추천 0

basket 에 종목을 넣고 getCurrentEggs() 함수로 해당 basket 의 종목과 각 종목의 수량을 확인하고자 했습니다.

아래와 같은 코드를 사용했습니다.

function PortManagement(basket,account,universe,portnum)
{
    basket.reset();    
    var asset = account.getTotalEquity() * stock_weight / portnum;
    universe.forEach(function(stock)
                     {
    basket.enter(stock,Math.floor(asset / stock.getAdjClose()));
    })
}

function onDayClose(now){    
     if (now.getMonth() != lastRebalMonth &&  now.getDate() >= 1) {  
   ...

    PortManagement(basket0,account0,universe0,universe0.length);
    var eggs = basket0.getCurrentEggs();
     
     var eggs = basket0.getCurrentEggs();
        for (var i = 0; i < eggs.length; i++) {
          var stock = eggs[i].stock;
          var num = eggs[i].quantity;
          logger.info(stock.name + ':' + num); 
        }
          
lastRebalMonth = now.getMonth();
}

그런데 로그가 출력되지 않아 보니 eggs.length 가 0 으로 나옵니다.
시뮬레이션 결과의 잔고보유내역에는 종목들이 들어가 있는 것으로 보아 basket 에는 종목이 있는 것으로 판단됩니다.
제가 뭘 잘못하고 있는 게 있을까요?
댓글 1
Rosekeit 님 안녕하세요.

Basket에 enter() 함수를 이용하거나 buildPortfolio() 함수를  사용해서 종목을 추가 또는 구성하는 것은 목표 포트폴리오를 구성하는 과정입니다.

Basket의 getCurrentEggs()  함수는 이미 매매처리가 끝나서 계좌에 담겨진 종목들을 조회하는 함수로서,
예시의 코드는  onDayClose() 에서 PortManagement() 함수를 이용해 Basket에 종목을 enter 하고 아직 매매처리가 안 된 시점에 바로 보유종목을 조회한 셈입니다.

매매처리는 SimulationMethod 옵션에 따라 아래 시점에 이루어 집니다.
- SimulationMethod.day: 당일 종가 ----> onDayClose()가 모두 끝나고 바로 그날의 종가를 이용해 매매처리
- SimulationMethod.normal 또는 average: 익일 시가 또는 평균가 ----> onDayClose()가 끝나고 날짜를 하루 진행시킨 후 다시 onDayClose()가 시작되기 직전에 그날의 가격데이터로 매매처리
인텔리퀀트 2022.03.29 21:58
댓글 등록을 위해서 로그인해주세요.
 
최신 게시글