```
function stockPortfolioBuilder(targetSize) {
var universe = IQStock.filter(stockFilter);
for(var i=0; i<universe.length; i++) {
var stock = universe[i];
if(!stock.getScore("marketcap")) {
stock.setScore("marketcap", stock.getMarketCapital());
}
}
for(var i=0; i<universe.length; i++) {
var stock = universe[i];
var totalRank = 0;
totalRank += stock.getRank(universe, "marketcap", RankOrder.ascending);
stock.setScore("totalRank", totalRank);
}
var sortedByCap = universe.slice().sort(function(a,b){return a.getScore("totalRank") - b.getScore("totalRank");});
var res = sortedByCap.slice(0, targetSize);
var resLog = "";
for(var i=0; i<res.length; i++) {
var res_stock = res[i];
resLog += res_stock.name+'(['+res_stock.getScore("totalRank")+'],cap:'+(res_stock.getMarketCapital(0)/100)+'억,per:'+res_stock.getPER().toFixed(2)+',pbr:'+res_stock.getPBR().toFixed(2)+'), ';
}
logger.debug(resLog);
return res;
}
```
기존에 시가총액을 기준으로 정렬을 하는 부분을 위와 같이 랭킹 함수를 가지고 정렬을 했을 때, 다음과 같이 정렬이 제대로 되지 않는 현상이 있었습니다.
```
[2000-06-07]
고려산업([1],cap:43.62억,per:-0.76,pbr:0.17),
삼양사우([2],cap:42.41억,per:-1.00,pbr:-1.00),
선진금속([3],cap:41.28억,per:-1.63,pbr:-0.12),
동아정기([4],cap:40.88억,per:-1.00,pbr:-1.00),
롯데칠성우([5],cap:51.84억,per:-1.00,pbr:-1.00),
극동제혁([6],cap:51.21억,per:8.76,pbr:0.61),
지코([7],cap:41.63억,per:-1.45,pbr:1.95),
코오롱건설우([8],cap:59.93억,per:-1.00,pbr:-1.00),
...
```
위 예제를 보면, 시가총액을 기준으로 오름차순 정렬을 했기 때문에 동아정기가 1순위가 되어야 하는데, 고려산업이 1순위라고 나오는 상황입니다.
코드에서 제가 작성한 부분은 totalRank를 기준으로 순서를 재배치 한 것 밖에 없고, 실제로 시가총액을 순위로 결정하는 건 getRank 함수이기 때문에 해당 함수의 순위 결정 방식에 의해서 위와 같은 결과가 나온 것 같은데,,,
제가 getRank 함수를 잘못 이해하고 사용하고 있는걸까요 ??
혹시 비슷한 경험을 하신 분들이 계신지 궁금합니다.