//***********************************************************************
// 리밸런싱
//***********************************************************************
var isFirst = true; // 최초 전략 실행시 포트폴리오 생성 판단을 위한 변수
function onDayClose(now) {
// IQDate.isRebalancingDay(now)
// initialize에서 설정한 리밸런싱 주기 체크
// isFirst === true
// 전략 최초 실행시 리밸런싱 실행
if (IQDate.isRebalancingDay(now) || isFirst === true) {
// 1111 계좌 호출
var acc = IQAccount.getAccount("1111");
// 계좌의 총평가금액(평가액+예수금 모두)
var totalEquity = acc.getTotalEquity();
// 계좌 총평가액에 맞춰 주식 비중 금액 재할당
stock_port.setBudget(totalEquity * stock_weight);
// 포트폴리오 구성 함수 stockPortFolio() 실행
stock_port.buildPortfolio();
// 전략 최초 실행이후 변경
isFirst = false;
}
}
//***********************************************************************
// 전략 종료 직전에 호출
// iQ Live 연동을 위한 필수 설정
//***********************************************************************
function onComplete() {
// 투자 계획 수립에서 설정한
// Basket 객체 : stock_port
// Basket에 할당한 비중 정보 : stock_weight
IQLive.addPortfolio(stock_port, stock_weight);
}
안녕하세요 푸른주전자입니다.
오늘은 리밸런싱을 위한 onDayClose() 함수를 설명하겠습니다.
onDayClose() 함수는 전략이 실행되면 시작일부터 종료일까지 영업일에 매일매일 호출되는 함수입니다.
따라서, initialize() 함수에서 설정한 리밸런싱 주기에 맞게 리밸런싱이 일어날 수 있도록 if문을 추가합니다.
// if (IQDate.isRebalancingDay(now) || isFirst === true) { }
리밸런싱할 때는 계좌를 호출하여 총평가액으로 비중을 재할당 후 포트폴리오 구성 함수를 호출하면 됩니다.
포트폴리오 비중 재할당은 setBudget() 함수를 이용합니다.
// stock_port.setBudget(totalEquity * stock_weight);
포트폴리오 구성 함수 호출은 buildPortfolio() 함수로 합니다.
// stock_port.buildPortfolio();
이렇게만 써주면 포트폴리오 구성 함수인 stockPortFolio()함수를 자동으로 호출하여 지정한 날짜에 매도/매수가 이루어져 리밸런싱됩니다.
onComplete() 함수는 전략 종료 직전에 호출 되는 함수입니다.
실전투자에서는 이 함수를 통해 포트폴리오의 바스켓과 비중을 지정해야 합니다.
// IQLive.addPortfolio(stock_port, stock_weight);
감사합니다 ^^