주식 투자 기법

매입 보유법

  • 주식을 투자하는 가장 단순한 방법
  • 일단 매입을 하면 매도할 때까지 계속 보유하는 방식
  • 손절매하는 규칙도 없음
  • 운이 좋아서 이득을 볼 수도 있지만, 결국에는 돈이 궁해져서 파는 형태
  • 비가 올 때까지 마냥 기다리는 인디언 기우제 투자법이라고 하기도 함

정액 투자법

  • 주식 보유 비중을 일정 금액 기준으로 맞추면서 투자하는 방법
  • 수익이 나면 일정 금액까지 매도를 하고 손실이 나면 오히려 일정 금액이 될 때까지 매수
  • 추세 국면에서는 불리하지만 변동 국면에서는 유리

추세 투자법

  • 시장 추세에 따른 주식 투자법 (오른 주식은 다음에도 오를 가능성이 있다는 특징을 이용)
  • 상승 추세라고 판단되면 매수, 그렇지 않을 경우 전량 매도 (상승 추세 판단은 가령 3개월 이동평균보다 주가가 높다면 상승 추세)
  • 추세로 판단될 경우에만 매입하는 방법, 추세가 아니면 전량 매도하고 다시 추세가 올 때까지 기다리는 전략

추세/정액 전환법

  • 시장의 추세 여부에 따라 추세 구간에서는 추세 투자법을, 비추세 구간에서는 정액 투자법으로 전환하면서 투자하는 방법 (추세 투자법으로 손실을 본 경우, 비추세 구간으로 전환)
  • 추세 투자법에서는 비추세 구간에서는 투자를 전혀 안하지만 (이미 전량 매도한 상태) 추세/정액 전환법에서는 비추세 구간에서도 정액 투자를 고수
  • 시장이 어떻게 변화하든 비교적 잘 적응하면서 안전한 주식 투자법

정액 매수 적립식

  • 시장 상황에 상관없이 매달 일정 금액을 규칙적으로 매수하는 방법
  • 시장이 등락을 거듭할수록 평균 매입가를 낮추는 효과 발생

피라미드pyramiding (점증 적립식)

  • 이익이 발생할 때 주식 보유 비중을 점차 증가시키는 투자 기법
  • 최초 적립식으로 1백만원 투자하였다면 이익이 발생할 때 (발생 기준은 매월이나 매년 또는 매주) 같은 금액 1백만원을 더 투자하는 방법
  • 최초 적립식이 1백만원인데 이익이 발생할 때 최초 금액 대비 2백만원, 3백만원처럼 점차 증가시켜면서 투자하는 방법을 체증식 피라미드 또는 마팅게일(martingale) 방식이라고 함
  • 피라미딩과 대조되는 개념으로 물타기(역피라미딩)가 있음. 물타기는 손실이 발생할 때 보유 금액을 증가시키는 방법으로 평균 매입 단가를 낮추는 효과가 있음

위 내용은 아래 참고서적에 발췌한 내용임을 밝히며 위 내용 외에도 여러 가지 투자법이 있으니 더 궁금하신 분은 아래 참고 서적을 보시면 됩니다. (책 광고하려는 것은 아님 ㅎ)

참고 서적

  • ValueTimer의 전략적 가치 투자, 이콘

강화학습 기반 주식 트레이딩 시스템

머신러닝 알고리즘 분류(유형)는 크게 목적(라벨) 변수 유무에 따라 지도학습과 비지도학습으로 분류한다. 또 하나  재미있는 분류로는 강화학습이 있다. 강화학습은 에이전트와 환경이 주어질 때, 에이전트가 행하는 행위에 대한 보상(reward)으로 학습한다. 데이터 1건1건마다 라벨링값이 주어지는 지도학습과 달리 강화학습에서는 행위에 대한 보상(지도학습에서의 라벨링 역할)이 매번 주어질 필요가 없다. 이를 지연 보상(delayed reward)이라고 한다. 따라서 매번 행위 때마다 reward를 할 필요없이 행위가 여러번 시행된 이후 결과만 보상해도 학습이 된다라는 사실이다. 강화학습을 사용한 바둑을 생각하면 이해가 될 것이다. 매수하다 보상이 아니라 승패 결과만 보상해도 된다.

트레이딩 관점에서의 강화학습

트레이딩 관점에서 강화학습을 생각하면 에이전트는 트레이더(trader)이고 에이전트의 행위는 사고 팔고 그리고 아무런 행위도 안하는 것이다. 사고 나서 아무런 행위를 안하면 산 종목을 보유하겠다는 것으로 해석 가능하다. 에이전트가 구별할 수 있는 환경(에이전트가 인식할 수 있는 상태값)은 주식에서 얻을 수 있는 데이터들이다. 가장 기본적으로 차트 데이터가 있고 기타로는 지표 (PER 등), 뉴스 등 다양한 것들이 있을 수 있다. 강화학습이 제대로 학습만 된다면 너무나도 좋다. 사고 팔고 할 때 매번 보상을 줄 필요 없이 일정 기간 동안의 수익률(바둑에서의 승패)만 가지고도 학습이 왠지 쉬워 보일 듯 하다. 지도학습처럼 살 때 팔 때 따로 따로 모델을 만들어서 학습할 필요없이 강화학습 에이전트의 행위 자체가 사고 파는 그리고 보유(무행위)하는 인공지능 모델이 한번에 만들어지니 얼마나 좋겠는가…

실전 경험

강화학습을 접한지는 오래되었지만, 주식에 접하면 어떨까 싶어 시도를 해본 경험은 몇년 전이다. 뉴스나 논문을 봐도 강화학습을 이용한 로봇 트레이딩 시스템이 종종 있다. 그러나 필자가 시도한 바로는 학습이 쉽지 않았다. 사고 팔고 보유하는 단일 모델로 트레이딩 시스템을 구현해보고 싶었으나 현재까지도 보류(지금은 강화학습보다는 지도학습으로 변경) 상태이다. 강화학습에 대한 이해가 부족해서인지 아니면 에이전트 입력값(환경 상태)을 잘 못 잡아서인지 어려웠다. 강화학습 구현에는 텐서플로우 기반 오픈 소스를 활용해 DQN 이라는 딥러닝 강화학습 알고리즘을 사용했다. 시중에 나와있는 책을 사서도 봤지만 학습이 되질 않았다. 왜 학습이 안될까? 여기서 학습이 안된다는 의미는, 에이전트가 보지 못한 테스트 데이터셋에 적용을 해서 수익률이 나지 않음을 의미한다.  내 나름 주식 환경에서 강화학습이 어려운 점을 정리해 본다.

  1. 상태 공간이 너무 커 DQN 망 학습이 어려움.
    결국 DQN의 입력값은 상태값이 되며, 출력값은 가치(value) 값인데 상태에 대한 가치 추정이 어려움
  2. 에이전트 독립적인 환경
    보통 강화학습에서의 에이전트와 환경의 관계에는 에이전트 행위에 따라 환경이 상태값을 리턴하며 최종 목적지에 도착할 경우 보상을 준다. 그리드(grid) 월드나 바둑을 생각하면 된다. 그러나 주식 환경에서는 에이전트 행위와 거의 상관없이 환경이 변한다. 수십만 수백만 에이전트가 환경에 물려 있어 실제 거래하고 있는 에이전트는 환경에 거의 영향을 줄 수 없다는 의미다. 다시 말해, 목적 지향적인 패스가 주어지고 최종 보상이 주어지는 환경이 아니라는 것이다. 랜덤워크로 변화하는 차트를 기반으로 에이전트 입장에서는 마구 잡이로 보상하는 환경에 대해서 에이전트가 과연 학습을 할 수 있겠는가?

필자의 실전 경험과 이해를 바탕으로 작성한 글이니 잘못 작성된 부분도 있을 것이다. 혹시 다른 의견을 가지고 계신 분이나 주식 환경에서의 강화학습이 가능하다라고 주장하시는 분, 기타 등등 관련 내용을 공유해 주시면 정말 고마울 것이다. ㅎ 정말로 궁금하다 과연 강화학습으로 수익이 날 수 있는지… 가끔 강화학습 기반 로보트레이더 기사를 보면 더욱 궁금해진다. 세계 최고 강화학습 기술을 보유하고 있는 그 유명한 딥마인드(DeepMind)는 왜 주식에 적용하지 않을까? ㅎㅎ

(강화학습에 관심있는 여러분의 의견 내지는 조언을 듣고 싶습니다.)

배당 종목 배당률 순위 및 영구연금 배율 (2018년 3월 기준)

주식 투자에 대한 수익은 매수/매도 차익에 의한 수익 그리고 배당에 의한 수익으로 구성된다. 주식 투자를 하면서 배당에 대해서 소홀히 하면 안 된다. 관심있게 지켜봐야 할 사항이다. 특히 정기적으로 돌아오는 배당 시점을 잘 활용하면 남들보다 조금은 더 수익을 낼 수 있지 않을까 싶다. 통상적으로 배당 시점이 다가오면 주가가 상승으로 특성이 있기 때문이다. (물론 항상 그렇지만은 않다)

배당(Dividend)이란

배당은 일정기간 영업활동을 해 벌어드린 이익 중 일부를 그 회사 주주들한테 돌려주는 것을 말한다. 그렇기 때문에 재무상태표 상 이익잉여금의 범위 안에서 배당을 할 수 있다. 당기순손실이 쌓여서 이익잉여금이 결손금의 형태로 나타날 경우엔 배당 불가.

배당을 주는 회사가 그렇지 않은 회사보다 재무적으로 안정적인 경우가 많다. 배당을 지급하는 회사의 주가상승률이 그렇지 않은 회사보다 평균적으로 높은 것으로 나타났다. (나무위키에서 자료 발췌)

영구연금(Perpetuity)

동일한 금액을 영원히 받을 수 있는 현금 흐름을 영구연금이라고 한다. 죽기 전까지 제공되는 연금의 특수한 형태라고 이해할 수 있다.

가령 배당을 영구적으로 받는다고 가정하고 영구연금을 구하면 어떨까. 영구연금의 현재 가치를 구하는 방법은 다음과 같다.

 (Investopedia에서 자료 발췌)

그리고 영구연금과 기업의 현재 가치인 주가와 비교해보면 어떨지 궁금해서 파이썬으로 확인해보았다. (2018년 3월 기준)

확인 결과, 1등으로 ‘씨엠에스에듀’ 종목이 차지했으며 현재 주가 대비 영구연금 배율이 2.6배나 되었다. 주식 투자에 참고하길 바란다.

———————————————————

idx  종목 이름   현재가  배당률  영구연금  배율(=영구연금/현재가*100)

25   씨엠에스에듀    9080  13.32   24189  266.398678
14     이라이콤    6680  11.49   15350  229.790419
15     유아이엘    6760  10.31   13939  206.198225
20     서원인텍    7220   9.32   13458  186.398892
1      천일고속   89200   9.10  162344  182.000000
18     네오티스    4445   8.03    7138  160.584927
3      성보화학    6050   7.40    8954  148.000000
11      BGF   13300   6.60   17555  131.992481
7    푸른저축은행    7710   6.48    9992  129.597925
23    한솔씨앤피    8050   6.41   10320  128.198758
10     한국전력   33100   6.30   41706  126.000000
24    삼양옵틱스   17350   5.88   20403  117.596542
16   고려신용정보    3060   5.83    3567  116.568627
13  정상제이엘에스    7440   5.81    8645  116.196237
6    대림씨엔에스   10650   5.80   12354  116.000000
4      유화증권   14900   5.80   17284  116.000000
2     한국쉘석유  349500   5.70  398429  113.999714
8      일정실업   21900   5.70   24965  113.995434
19   연이정보통신    2590   5.62    2911  112.393822
5      진양산업    3290   5.60    3684  111.975684
22     한전산업    4000   5.50    4400  110.000000
12   에스에이엠티    1855   5.45    2021  108.948787
27     앤디포스    7530   5.43    8177  108.592297
17    와이비엠넷    2890   5.30    3063  105.986159
0        두산  105500   5.20  109719  103.999052
21     청담러닝   15650   5.16   16150  103.194888
26     동양파일    4930   5.11    5038  102.190669
9     S-Oil  125000   5.09  127250  101.800000

32/64비트 파이썬 프로세스 통신

필자는 대신증권 API(파이썬)으로 이용하고 있는 사용자 중 하나이다. 실제 파이썬 코드를 이용해 자동으로 매수/매도하는 프로그램을 운영하고 있다. 주식장이 열리는 날이면 매일 HTS 와 파이썬 모듈을 구동시키고 출근한다.

수익률이 크지는 않지만 (계속 보완/테스트 진행 중) 그래도 포기할만큼은 아니고 간간히 매수/매도로 수익이 나면 기분도 좋아지곤 한다.

이제는 2차 버전을 생각하고 있다. 수익률 때문은 꼭 아니지만 계속 새로운 것을 시도하면서 학습하고자 하는 목적도 있다. 바로 강화 학습 기반의 트레이딩 시스템이 다음 목표이다.

32/64비트 파이썬 통신이 필요한 이유

문제는 강화학습(DQN)을 하기 위해서는 텐서플로우(tensorflow)가 필요한데 대신증권 파이썬 모듈하고 돌리려니 문제가 발생했다. 텐서플로우는 64비트 환경에서 돌고 대신 증권은 32비트 환경에서만 구동해야 된다는 것이다. 텐서플로우를 32비트 환경에서 돌리는 것도 문제 해결은 될 수 있으나 32비트 환경에서 텐서플로우를 돌리기 위해서는 소스를 다운받아 컴파일해야 된다. 인터넷을 찾아보면 쉽지 않아 보인다. 한참을 좌절하고 있다가 우연히 IPC(Inter Process Communication)  관련 내용을 활용해보자라는 생각이 들었고 관련 자료를 찾아보기로 했다.

그러나 파이썬 기반 IPC 모듈이 딱히 마음에 드는 것이 없어 내 마음대로 필요한 내용을 구현해보고 사용해보고 있다. IPC도 아닌 fake IPC라고 스스로 명명해놓고 있다.

32/64비트 파이썬 기반 IPC 통신 방법

원리는 간단하다. 64비트 환경의 파이썬 모듈(예. 텐서플로우)에서 32비트 환경의 파이썬 모듈(대신증권 파이썬 모듈)을 호출한다. 그러면 대신증권의 파이썬 모듈에서 처리를 하고 나서 결과를 파일로 저장하고 이를 64비트 파이썬 모듈에서 읽어서 처리한다. 호출부 소스와 실행부 소스 일부는 아래와 같다.

호출부 (64비트 파이썬 환경)

# ...
from sytrap import fakeipc as fipc

sipc = fipc.SytrapFakeIpc()
p = sipc.call('get_item', itcode='A168330')  # get_item는 32비트 환경에서 구동
# ...

실행부 (32비트 파이썬 환경)

# ...
ret = syc.get_item(itcode)   
p.dump(ret, open(ippath, 'wb'))  # 처리 결과를 미리 약속된 경로에 저장
# ...

다만 호출할 때 64비트 환경에서 32비트 파이썬 실행기와 파이썬 모듈 경로를 정확히 제시해주어야 한다. 아래는 호출 방법의 예이다.

 <64비트 환경 python.exe> 64비트.py <32비트 환경 python.exe> 32비트.py

구현해야 할 양이 조금은 많아졌지만 (함수 옵션 처리, 파일 입출력 등) 드디어 64비트 텐서플로우를 이용해 32비트 대신증권 모듈을 호출할 수 있게 되어 마음껏 딥러닝 기반 트레이딩 시스템을 돌릴 수 있게 되었다. 수익률까지 좋아지길 기대하고 있다. ㅎ

저와 비슷한 고민을 하시는 분들에게 조금이나마 도움이 되길 바란다.

LDA 토픽 모델링

가끔 주식 관련 특징주 기사를 보면 주가에 영향을 줄만한 기사가 뜨는 경우가 있다. 물론 좋은 기사가 뜬다고 해서 주가가 항상 오르지는 않는다. 다만 테스트를 해보고 싶었다.

데이터 수집

먼저 기계 학습을 위해 관련 데이터 수집이 필요하다. 특정 사이트 URL를 선정해서 인터넷 기사와 주가와의 연관성 분석을 위해 5년간의 특징주 관련 기사를 수집했다. 그런 다음 기사가 뜬 시점의 주가와 2일 후 변동 주가를 기록하여 데이터를 수집하였다.

데이터 학습

데이터 학습은 LDA(Latent Dirichlet Allocation)라는 토픽 모델링 방법을 사용하였다. 신규 기사가 뜰 경우 LDA 토픽 벡터와 유사한 기사들을 검색하고 검색된 기사들의 주가 전후 변동값을 비교한 후, 신규 기사에 대한 주가 변동량으로 추정하는 방법을 이용하였다.

아래는 pseudo code


if new_article:
    tpv = lda_topic_vec(new_article)
    sims = find_similarity(tpv)
    ss = sort(sims, 10)  # get top 10 of similarity
    for article in ss:
        sumret += calc_change_rate(article)
    avgret = sumret/N
    if avgret > 0.02
        buy(ar)

LDA 란…

LDA는 잠재 디리클레 할당이라고 하는데, 문서에 잠재되어 있는 토픽(topic)을 이용해 분류(cluster)하는 방법론이다. 비지도 학습(unsupervised learning)의 일종이다. 나이브분류기(Naive Classifier)와 같은 예전 방법에는  문서를 포함하고 있는 단어들의 확률적인 분포로 문서를 분류했는데 LDA에서는 보이지 않은 토픽이라는 잠재(latent, hidden) 변수를 더 활용하는 점이 다르다. 단어는 직접적으로 확인 가능하지만 토픽은 추상적인 존재이기에 잠재라는 단어를 사용한다. 또 LDA는 디리클레라는 확률적인 분포를 가정하는 것이 특징이다. 반면 pLSA 와 같은 방법론은 확률적인 분포를 가정하지 않는다.

LDA 의 확률 분포는 다시 말해, 토픽 벡터의 요소가 양수이며 모든 요소를 더한 값이 1인 경우에 대해서 확률값이 정의되는 분포이다.

가령 토픽이 경제, 정치 2가지 뿐이라면 경제와 정치 2가지 토픽을 더해서 1이 되는 경우라 이해할 수 있다. 즉, 경제가 0.9, 정치가 0.1 정도의 토픽 비율의 문서는 가능한데, 경제 0.9, 정치 0.9 비율로 토픽이 구성된 문서는 사전 가정에서 배제하는 것이다.

위키에서 발췌한 아래 그림은 토픽 3개인 경우로 이해하면 되고 중앙이 큰 값을 가진다는 의미는 토픽이 어느정도 골고루 섞힌 문서가 많이 존재한다.(확률적으로 높은 값을 가짐)라는 의미로 해석할 수 있다.

(위키 그림 발췌)

 

LDA 토픽 모델링 결과, 주가에 긍적적인 기사 예

결과로만 보면, 신약 개발 관련 기업들의 기사 관련 내용들이 주가에 단기적으로 긍정적인 영향을 주는 것으로 파악되었다. 그래서 필자는 LDA 토픽 모델링 기법을 써서 특정 사이트를 모니터링 하다가 신약 개발 관련 기사들이 뜰 때는 자동으로 매수하도록 프로그램을 돌리기도 했다. 하지만 역시 소문에 팔고 기사에 팔라는 말이 맞는 듯…ㅎ

해외 투자 & 해외 경기 선행 지수

필자도 국내 투자를 하긴 하는데 잘 나가는 해외 기업들을 보면 해외 투자에 대한 관심이 생기긴 합니다. 해외 투자에 관심을 가져야 하는 이유는 국내 주식 시장이 단지 세계 주식 시장의 2% 규모라는 놀라운 사실입니다. 우물 안 개구리라는 속담이 문득 생각납니다.

(아래 내용은 ‘나는 집에서 구글 주식을 사고 두바이 원유를 판다‘라는 책에서 아래 내용을 발췌했음을 알려드립니다.)

물론 해외투자가 장점만이 있는 것은 아닙니다 국내 주식 투자와 달리 양도소득세를 추가로 낸다고 합니다. (해외 ETF에 직접투자하면 1년에 한 번만 투자 이익과 투자 손실을 합해 순이익 부분에 대해서만 양도소득세 22%만 내면 됨) (관련 참고 블로그)

해외 투자에 있어서도 시장 현황을 참고해야 성공 확률이 올라갑니다. 참조할만한 해외 경기 선행 지표 몇 가지를 소개해 드립니다.

해외 투자 경기선행 지수

미국 경기선행 지수(Leading Index for the United States): 미국의 컨퍼런스 보드(Conference Board)에서 발표하는데 90%에 육박하는 확률로 경기 침체를 예상할 수 있는 매우 신뢰성 높은 경제 지표라고 합니다.(발췌 내용)
//fred.stlouisfed.org/graph/graph-landing.php?g=eTza&width=500&height=275
OECD 경기선행 지수: OECD 회원국들에 국한된 경기 선행지수이긴 하나 중국도 포함되어 있어 선진국과 신흥국의 경기 전망을 분류해서 예상할 수 있습니다.
https://data.oecd.org/chart/4Vb3

미국기업세후 순이익지표(After-tax profit): 주식 시장과 관련해서 주목해야 할 지표가 하나 더 있는데 바로 미국 기업의 세후 이익 지표입니다. 금융 위기 이후 주가 선행성 강화되었다고 합니다.

해외 ETF

해외 투자시 직접 구글과 애플과 같은 종목을 직접 구매할 수도 있지만 보통은 해외 ETF 형태로 투자를 많이 합니다. ETF는 IT, 바이오 등 산업군별 종목도 있으며 또한 금, 원유와 같은 원자재에 해당하는 ETF도 있으니 여러 가지 형태로 투자가 가능합니다. 최근 중국에서의 커피 소비량 증가에 따른 커피 ETF 등도 있다고 하니 좁은 시장에서 벗어나 넓은 해외 시장에서의 투자를 한번 검토해보시길 바랍니다. 실제로 해외 시장에 투자하는 ETF 투자자가 늘어나고 있다고 합니다. 키움증권에 따르면 전체 해외 주식 거래 대금 가운데 해외 ETF가 차지하는 비중이 2014년 23%, 2015년 44%, 지난해엔 50%를 처음으로 넘었다고 합니다.

국내 상장 ETF나 해외 상장 ETF 투자 방법은 주식과 거의 같습니다. 증권사 홈트레이딩시스템(HTS)이나 영업점 전화를 통해 ETF를 사고팔 수 있습니다. 다만 해외 상장 ETF의 매매 주문은 ETF가 상장돼 있는 해외 거래소의 거래시간에만 가능합니다. 그리고 투자하기 위해서는 현지 통화를 미리 환전해 둬야 합니다. 원화 강세 때는 해외 주식투자가 유리하지만 원화 약세 국면에서는 환차손을 볼 수 있습니다.

예로 로봇 및 4차산업 관련 ROBO라고 하는 해외 ETF는 꾸준한 증가세를 띄고 있습니다. 놀랍습니다. 미리 알았더라면 50% 이상의 수익을 얻었을텐데, 아쉽습니다. 지금부터라도 눈 크게 뜨고 해외 투자도 지켜보려 합니다.

참고