여러 종목을 담아서 한번에 주문 낼 수 있는 Basket기능을 제공합니다. 종목을 선정하는 방법은 buildPortfolio함수를 통해 사용자가 직접 설정할 수 있습니다.
속성
account
이 Basket이 주문낼 계좌번호 입니다.
targetSize
이 Basket에 담을 주식의 종목수 입니다. 이 설정값이 buildPortfolio 함수에 전달되어 필요한 수량만큼 Basket에 담게 됩니다.
budget
예산입니다. 이 Basket에 총 예산을 설정할 수 있습니다. 여기서 설정된 예산은 바스켓 전체의 예산입니다. 각 종목별로 진입되는 금액은 budget/targetSize 로 결정됩니다. 현재는 동일비중 진입만 가능합니다.
setPortfolioBuilder()
포트폴리오를 생성하는 함수를 등록합니다.인텔리퀀트에서는 각 Basket의 포트폴리오를 일일이 지정하는 방식이 아닌 각각의 Basket이 자신의 포트폴리오를 결정하는 방식을 사용합니다. 여기서 등록된 함수는 사용자가 buildPortfolio()함수를 호출하면 실행됩니다. 일반적으로 initilaize 함수내에서 Basket을 만들때 같이 등록하는 방법을 권장합니다.
파라미터
Sample
var stock_port;
var bond_port;
var stock_weight = 0.8;
var bond_weight = 0.2;
function initialize() {
logger.debug('init..');
stock_port = new Basket(IQAccount.getDefaultAccount(), 20, IQEnvironment.aum * stock_weight); // stock basket with basket name "STOCK" and target size = 20
stock_port.setPortfolioBuilder(stockPortfolioBuilder);
bond_port = new Basket(IQAccount.getDefaultAccount(), 1, IQEnvironment.aum * bond_weight); // stock basket with basket name "STOCK" and target size = 20
bond_port.setPortfolioBuilder(bondPortfolioBuilder);
}
function getPER(stock) {
if (stock.getClose() === 0 || stock.getFundamentalNetProfit() === 0) {
return -1;
}
var per = stock.getMarketCapital() / (stock.getFundamentalNetProfit() * 4);
return 1/per;
}
function bondPortfolioBuilder(targetSize) {
return [IQStock.getStock("A157450")]; //Tiger 단기통안채
}
function stockPortfolioBuilder(targetSize) {
var universe0 = IQStock.filter(function(stock){return (stock.getMarketCapital() > 100000);} );
logger.debug('universe0 size = ' + universe0.length);
var sortedByPer = universe0.slice().sort(function(a,b){return getPER(b)-getPER(a);});
var portfolio = sortedByPer.slice(0, targetSize);
var temp = 1
for (var i = 0; i < targetSize; i++) {
temp = i + 1
logger.debug(portfolio[i].code + ' -> rank = ' + temp);
}
return portfolio;
}
function onDayClose(now) {
var totalEquity = IQAccount.totalEquity(); // 계좌의 총평가금액(주식평가액+ETF+예수금 모두)
stock_port.setBudget(totalEquity * stock_weight);
stock_port.buildPortfolio();
bond_port.setBudget(totalEquity * bond_weight);
bond_port.buildPortfolio();
}
JavaScript
복사
buildPortfolio()
포트폴리오를 현재 시점을 기준으로 생성합니다. 먼저 설정한 setPortfolioBuilder 의 결과에서 종목들이 선정되고, setBudget으로 설정한 예산만큼 수량이 결정됩니다. 이후 onDayClose 호출이 끝나면 자동으로 주문이 완료됩니다
getCurrentEggs()
결과
Sample
var eggs = stock_port.getCurrentEggs();
logger.debug("all eggs size: " + eggs.length);
JavaScript
복사
getEquityOpenValue()
현재 바스켓의 총 평가액을 가져옵니다. Bakset은 계좌가 아니므로 예수금을 고려하지 않은 모든 종목의 평가금액의 합입니다.
setBudget()
예산입니다. 이 Basket에 총 예산을 설정할 수 있습니다. 여기서 설정된 예산은 바스켓 전체의 예산입니다. 각 종목별로 진입되는 금액은 budget/targetSize 로 결정됩니다. 현재는 동일비중 진입만 가능합니다.
getBudget()
Basket 전체의 예산을 가져옵니다.
결과
enter(stock, quantity)
Basket 에 직접 종목을 추가합니다.
setPortfolioBuilder(), buildPortfolio() 를 대신하여 Basket 에 종목 추가시 사용합니다.예를들어 삼성전자 10주를 가지고 있는데 2주를 더 매수하고 싶다면 quantity를 12로 지정하시면 됩니다.
파라미터
Sample
var sse = IQStock.getStock('A005930');
stock_port.reset();
stock_port.enter(sse, 100);
JavaScript
복사
leave(stock, quantity)
Basket 에 직접 종목을 제거합니다.예를들어 삼성전자 10주를 가지고 있는데 2주를 매도하고 싶다면 quantity를 2로 지정하시면 됩니다.
파라미터
Sample
var sse = IQStock.getStock('A005930');
stock_port.leave(sse, 100);
JavaScript
복사
reset()
orderBasket() : deprecate
이 함수는 deprecate 되었습니다.buildPortfolio() 함수에서 결정된 포트폴리오를 한번에 주문을 냅니다.
이렇게 Bakset을 사용하면 account.buy() 등을 사용하지 않고도 주문을 낼 수 있습니다.