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

RankOrder에 대한 질문 (descending, ascedning)

CHOI 2022.07.13 20:07 조회수  100 추천 1


이제 블록코딩에서 발전하여 스크립트를 이해해보려 하는데요,


블록코딩 한것을 스크립트로 변환하고, source를 살펴보려 하는데요, 헷갈리는 부분이 있어서요. 

per, gp/a를 골랐는데요, 

per은 작을수록, gp/a는 클수록 좋은것으로 알고 있는데,  순위순서 (RankOrder)는 모두 descending으로 되어 있어서, 헷갈려서 살펴봤더니, 

per 계산하는 방법이 보통 방법과 꺼꾸로 되어있네요. 순이익/시가총액으로요,


- 이렇게 계산하는 것이 일반적인 것일까요? 

- 아니면 순위 계산할때 편하게 descending으로 통일하려고 하는걸까요?

앞으로 source 분석하는데 기준을 삼으려고 이렇게 문의드립니다.


** 그리고, 블록코딩에서 변환된 script를 설명해 놓은 자료도 있을까요??


밑에는 제가 본 source의 일부분입니다.


---------------------------------

var FactorIndex_portfolio1 = {

    /* Default factor */

    // Value factor

    "_per": [1, RankOrder.descending],

    "_pbr": [0, RankOrder.descending],

    "_psr": [0, RankOrder.descending],

    "_pcr": [0, RankOrder.descending],

    // Quality factor

    "_roa": [0, RankOrder.descending],

    "_roe": [0, RankOrder.descending],

    "_ros": [0, RankOrder.descending],

    "_gpoa": [1, RankOrder.descending],

    // Momentum factor


// per 계산 부분

var FactorEval_default = {

    // Default factors

    "_per": function(stock) {

        if (stock.getMarketCapital() === 0) {

            return -99999999;

        }

        return (stock.getFundamentalNetProfit() * 4) / (stock.getMarketCapital() * 1000);

    },


댓글 2
안녕하세요?

블록 알고리즘의 블록들을 설계한 장본인으로서 답변을 좀 드립니다.^^

per뿐 아니라, pbr, psr 등 모두 정렬기준이 descending으로 되어 있는 걸 볼 수 있으실텐데요. 표시는 익숙하도록 per로 했지만, 사실은 epr (earning / price ratio)을 계산한 셈입니다.

이렇게 하는 이유는 음수가 나올 경우에 보다 간편하고 일관되게 정렬을 하기 위해 price / earning 이 아닌 earning / price 와 같이 역수를 사용해서 값을 계산해서 그렇습니다.

예를 들면, 당기순이익이 -100억 (즉 순손실)이고 시총이 1000억이면 price / earning = -10 이 되는데, 만일 순이익이 +100억이고 시총이 1000억이면 price / earning = 10 이 되어 후자가 전자보다 per 값이 커지게 되어 오름차순으로 정렬을 하면 전자가 더 좋은 점수를 받게 됩니다. 이는 순손실이 난 종목이 더 좋은 점수를 받게 되어 가치 대비 어느 것이 더 저평가되어 있는지 여부를 따질 때 이치에 안 맞게 됩니다. 

이를 피하기 위해서는, 값이 음수인 경우를 예외로 처리해 주거나 미리 필터링하여 정렬되기 전에 해당 종목들을 대상에서 제외시켜야 합니다.

하지만, per 대신 epr 로 계산을 하고 내림차순으로 정렬을 하게 되면, 설령 음수가 나오는 종목이 섞여 있더라도 음수가 나온 종목들이 밑으로 가도록 자연스럽게 정렬이 되기 때문에 효과적으로 정렬 처리를 할 수 있게 됩니다.

마지막으로, 블록 알고리즘에서 변환된 스크립트에 관해서는 따로 설명 자료는 준비가 되어 있지 않습니다. 아마도 일부 코드가 좀 복잡해 보이긴 할텐데요... 전략 아이디어를 설정하고 표현할 수 있도록 기본 블록들을 설계할 때, 자동으로 코드 변환이 되기 위해서는 Javascript의 특징을 최대한 활용하여야 했습니다. 그러다 보니, 기존 스크립트 알고리즘의 샘플처럼 코드가 단순하게 되어 있지는 않습니다. 

도움이 되셨기를 바랍니다.
Joseph 2022.07.13 21:55
답변 감사합니다.

소스 이해하는 데에 큰 도움이 되었습니다.

블록 코딩을 스크립트로 변환하는 것보다는 스크립트 기본 예제를 이해하는 방향으로 진행하는게 더 빠르겠네요. 
감사합니다.
CHOI 2022.07.15 16:32
댓글 등록을 위해서 로그인해주세요.
 
최신 게시글