extqnt - modrpc/info GitHub Wiki

 

간단한 사용 설명서

1. QuantKim 데이터를 이용한 과거 data 에뮬레이션

1.1. python cewaaRun.py ? : 사용할 수 있는 argument를 보여줌

    - quiet : 웬만하면 사용
    - debug, verbose는 에뮬 기간을 좁혀서 사용하는 것이 바람직
      (어떤 식으로 에뮬레이션이 진행되는지 진행 과정을 볼 수 있는데,
       프로그램 개발 이후에는 사용해야 할 필요성이 대개의 경우 없음)
    - report는 종목 추출 툴로 쓸 수 있음 
    - plot, plotlog : 수익률을 선형 혹은 로그 스케일로 보여줌, 아래 그림은 Kospi
    - d=startDate,endDate : 에뮬레이션 기간, 예 : 2004/01 ~ 2016/12 -> d=04/01,16/12
      d=startDate,baseDate,endDate : baseDate에 선정한 종목들의 사전 & 사후 수익률 변화 보여줌
    - useFnguide : QuantKim 데이터가 아닌 fnGuide 데이터 사용
      QuantKim 데이터는 ~ 2016/12 까지, fnGuide 데이터는 유료(분기에 10만원), 2011/09 ~ 유효함
    - cyc=i : 매매 교체 기간 (개월), default는 3
    - mcap=i,j : 시총 필터, sales=i,j : 매출액 필터, asset=i,j : 총자산 필터
      단위 억원, default는 100억원 ~ 900조원, 회사 규모를 지정하는 대표적인 방법
    - debtr=i : 부채비율 최대치, 즉 <= debtr, 단위 %, defalut는 100%
    - crntr=i : 유동비율 최소치, 즉 >= crntr, 단위 %, default는 200%
    - roe=i,j : ROE 범위, 단위 %, 넓히면 1 ~ 50 정도, 좁히면 5 ~ 20 정도 추천
      roa=i,j : ROA 범위, 단위 %
    - incsales=i : 최소 매출액 증가율, 단위 %,
          증가율은 전분기 대비, 전년도 동분기 대비, 전년도 동기 (1년 누적) 대비의 셋 모두 비교
      incprofit=i : 최소 영업 이익 증가율, 단위 %, 증가율 비교는 위와 동일
      incebitda=i : 최소 EBITDA 이익 증가율, 단위 % (fnGuide 등에서 실제로 사용하기는 어려움)
      incearn=i : 최소 순이익 증가율, 단위 %
    * incsales와 다른 세 inc 이익류는 독립적으로 적용
    - mmt=i[,j] : 모멘텀 필터, 단위는 개월, 예 : mmt=3 -> 3 개월, mmt=6,12 -> 6 ~ 12 개월 평균
    - mmtKospi : Kospi 모멘텀을 필터 사용 (MDD는 확실히 줄지만 수익률도 함께 줄기에 비추)
    - age : 상장 이후 기간, 단위 년
    - vol : 일 평균 거래 대금, 단위 백만원 (매월 마지막 5 영업일 평균으로 계산했음)
    - exam, exam=examStr : exam만 쓰면 사용할 수 있는 examStr들을 보여줌
    - pbb=i,j : PRB 범위, PER, POR, PCR, PSR, PDR 모두 동일 형식
                EER(EV/EBITDA), MER(시총/EBITDA), GPA 와 독립적으로 적용
    - pbp=i,j : PBR 순위를 매겨서 i ~ j 번째 선택, 나머지 설명 위와 동일
    - pe%=i,j : PBR 순위를 매겨서 범위를 %로 선택, 나머지 설명 위와 동일
    - 지표+지표=i,j 사용예 : pb+mmt=i -> PBR 순위를 매기고 모멘텀 순위를 매겨서 더해서 다시 정렬

1.2. examStr : 조건들을 일부 모아 이름을 붙인 것들

    - noCond : 조건이 사실상 없음 (이것으로도 탈락되는 종목은 있음)
    - ?PBR : 저평가 가치주 조건들을 몇 개 시험한 것들
    - true? : 고평가는 아님 + 영업 (혹은 EBITDA 혹은 순) 이익  25% 상승
    - hybrid : GPA (gross profit/ asset) + PBR 저평가 (강환국 참조)
    - bigmmt : 대형 회사들 중에서 3 ~ 12 개월 모멘텀이 높은 회사, 3 위 이상만 의미

1.3. 에뮬 예제

    - bat\c4.bat : 2004/01 ~ 2016/12 + %*
      예 : c4 exam=3rdpbr plotlog, 아래와 동일
           python cewaaRun.py quiet d=04/01,16/12 exam=3rdpbr plotlog
    - bat\c3.bat : 2013/01 ~ today(month) + %*
      예 : c3 exam=3rdpbr plotlog, c3.bat 내용을 보면 알 수 있듯이 fnGuide 데이터를 사용함

1.4. 결과 해석

    - i(에뮬레이션 기간) : i 는 실제 교체 매매 회수
    - C:i%(j%) : i는 CAGR(연 이율), j는 총 이율
    - E:i(k%,m%,n%) : i는 리스크 대비 기대치 (펜폴드 참조, 펜폴드는 그냥 기대치라고 기술했음),
      k는 승률, m은 이겼을 때 평균 이익, n은 졌을 때 평균 손실
    - R:i%,j : i는 MDD (maximum drawdown), j는 MTUW (maximum time under water), 단위는 개월
    - 회사수[i .. j] : 말 그대로 선택된 회사수, 회사 이름을 보고 싶으면 report 사용
    - 파산 회사수 : 회사의 주가가 갑자기 사라진 경우
      꼭 파산이 아니라 합병 등도 있는데, 처리가 귀찮아서 0 처리함
    - plot, plotlog 사용시 마지막 라인에 같은 기간의 Kospi 데이터를 벤치마크로 표시
    * 거래 비용 (세금, 수수료, 스프레드 등) 과 배당은 계산에 포함하지 않음
      addDvnd가 배당 가산 옵션인데, 교체 기간에 6월이 들어가야 유효 (6월에 가산)
    * 과거의 데이터는 과거의 데이터일 뿐, 과최적화가 아닌지 의심해야 함
    - 좋은 전략 : 떨어질 때는 지수 정도 혹은 약간 더 떨어지되, 좋을 때는 정말 좋은 때가 있어야 함
    - 2017년 부근에 퀀트 바람이 불어서 그 부근을 경계로 저평가 가치 전략들의 효력이 많이 나빠졌음
      비슷한 예로 trading에 있어서, 2007년을 경계로 지수 추세 추종 전략의 효력이 확 나빠졌음
      -> 다른 사람들이 쉽게 따라할 수 있는 전략은 유효성이 지속적으로 떨어질 가능성 있음
         문제는 5년에 한 번쯤 빛나는 전략을 내가 진지하게 수행할 수 있을까? 예 : bigMmt
    - 저평가 가치주 전략은 초과 수익이 천천히 떨어지고 있는 것으로 보임
      소형주와 저평가 가치주는 지수가 정점을 찍고 하락할 무렵 뒤늦게 정점을 찍는 경향이 있음
      즉, 지수의 움직임을 참조하면 조금 더 나은 결과를 얻을 수 있는 가능성은 있음
      (지수가 확실히 하향한 다음에 청산하는 식으로)
    - 전략에 따라서 시작월이 중요한 경우가 있음
      예 : bigMmt의 경우 /01 로 시작하는 것과 /02, /03 이 차이가 많음
      실적 류도 마찬가지 (ideal이 그것을 조금 더 확인해 보기 위한 파라미터)
    - 교체 기간은 3개월이 기본인데, 저평가 가치주의 경우 기간을 늘려도 유효성이 남아 있음
      기간을 늘리면 실적은 떨어지지만 대신 거래 비용도 감소하는 효과가 있음
    - DART에 올려야 하는 의무 기간 : 전년도 : 3/31, 각 분기 : 5/15, 8/15, 11/15
      fnGuide 실적 속보에 하루 이틀 내에 취합한 엑셀이 올라오는데,
      보름 쯤 후 뒤늦게 취합된 수정본이 한 차례 더 올라옴 (잠정 디렉토리의 의미)
      fnGuideLib.py로 데이터를 업데이트할 때 다시 create 하는 것을 권장함
      현재 유료로 바뀌었음

2. data query

    - dbq : QuantKim 데이터 쿼리, 쿼리 예: 삼성전자 20151Q 혹은 005930 20151Q
    - fnq : fnGuide 데이터 쿼리
    - qry, qryF : fnq를 GUI로 만들며 간단한 종목 스크리닝 기능을 추가함

3. 실전 종목 추출

    - Plan A : fnGuide 데이터 사용시 먼저 fnGuideLib.py로 데이터 업데이트 &
          down.bat 실행 (대신 증권 API - cybosPlus 설치 필요) &
          rpt.bat 실행 (규칙 - examStr 필요)
    -Plan B : 키움 증권 혹은 대신 증권의 종목 검색 사용 (규칙을 저장할 수 있음)
    * 각 회사마다 엔진이 달라서 실제로 추출되는 종목이 조금씩 다름
⚠️ **GitHub.com Fallback** ⚠️