몇주전부터 블록알고리즘으로 베타계수를 만들며 시행착오를 겪고있는데 쉽지 않아 회원님들의 조언을 구합니다.
현재까지 문제점은 실행은 되긴하나 연산이 많아서 그런지 계속 시간초과가 납니다. 이 문제는 알고리즘을 획기적으로 개선하거나
다른 필터들을 적용후에 최종필터로 이용하여 연산대상을 줄여서 써야 할 것 같고, 더 큰 문제는 블록알고리즘이고 제가 프로그래밍이 능숙하지 않다보니
블록으로 봐도 스크립트로 봐도 더 이상의 문제점을 찾기가 힘듭니다... 짧은 시간이라도 한번 봐주시고, 한줄 조언이라도 해주신다면 감사하겠습니다.
베타계수를 구현하려는 목적은 포트폴리오 방어를 위해 low beta 주식만을 대상으로 유니버스를 구성하거나, 시장 모멘텀에 따라
포트폴리오 베타를 액티브하게 조절하고자 합니다.
베타계수의 산식은 (주식수익률과 코스피수익률의 공분산) / (코스피 분산)
공분산은 편차곱의 평균, 분산은 편차제곱의 평균으로 계산하였습니다.
일단 그간의 과정을 나열하자면..
1. 처음에 매개변수 없이 함수를 짰더니 stock이 지정되지 않았다고 오류가 나서 매개변수를 넣어주긴 했는데 그게 맞는건지 잘 모르겠습니다.
어차피 수정종가를 불러올 때 stock이 지정될거라 생각했는데 그게 아니었나 봅니다. 어쨌든 매개변수 지정후에 실행이 되긴 했습니다.
2. 연산을 수행하는 과정에 문제가 있는건지, 계산 로직 자체를 잘못짠건지 모르겠으나 필터에 '베타>0.5'를 하든 '베타<0.5'를 하든 첫달 이후에는 종목이 나오지 않습니다.
3. 저번 글에서 Joseph님이 피드백 주신대로 리밸런싱시 선행작업에서 함수를 호출하고 필터에서 변수를 꽂아주었으나
Cannot read property "getAdjClose" from undefined in <eval> at line number 15 오류가 납니다. 필터에서 함수를 직접 호출하면 실행은 됩니다.
스크립트가 편하신 분들은 전환해서 보시고 피드백 주셔도 됩니다. 제가 좀 더 공부해볼게요 ^~^
연산이 많으니 테스트하실 땐 1차로 유니버스를 구성한 후에 해보시길 추천드리구요..
다들 설 잘보내세요 ~ !