posts 자동매매를 개발하면서 경험한 것(주식, ETF, 선물, 비트코인)
Post
Cancel

자동매매를 개발하면서 경험한 것(주식, ETF, 선물, 비트코인)

  • 작성자 : macle
  • 작성자 블로그: https://macle.dev
  • 원본경로: https://macle.dev/posts/trading-auto-dev-ing/

개요

자동매매를 개발하면서 경험한 문제들, 실패한 연구, 성공적인 연구에 관한 내용입니다. 제가 직접 경험한 내용들이 주내용이라 여러사람의 경험과는 다를 수 있습니다.

실패에 대한 리스크

언제까지 해야할까.

자동매매 프로그램을 만든다고 했을때 자주 받았던 질문은 “만드는데 얼마나 걸려?”, “언제 완성 돼?” 이러한 내용이 이었는데, 이부분은 대답하기가 어려운 부분입니다. 연구 개발 성격이 강한 주제이기 때문에 수익을 내는 방법을 찾을때까지 언제가 될지 모르는 연구를 해야하죠.

관련문제로 인해서 중도포기를 하기도하고, 결과가 좋지 않아서 당장 다시 현실에 집중하다가 그만두는 경우도 많습니다.

부정적인 시선

수동으로 투자하는 많은 부분은 프로그램이 자동매매 하는것에 대해 부정적입니다. 여러 분야에도 사기꾼이 많지만 이분야는 특히 사기꾼이 많기 때문이죠. 그러한 사람들이 잘못된 인식을 심어준 부분이 커서 그런지 혹은 자동매매가 불가능하다고 믿고 싶은 개인심리 때문인지 부정적인 주변 시선을 많이 느꼈습니다.

부정적인 이야기를 많이 듣다보면 내가 잘못생각 하는건가.. 이러한 의심이 생겨서 흥미가 떨어지게 되기도 합니다. 관심받고 응원받는 부분에 대한 갈망도 크기 때문이죠.

러닝커브

러닝커브는 무언가를 습득하는데 드는 시간(학습 비용)을 이야기 합니다. 자동매매를 개발하려면 현시점에서 최고 수준의 기술이 필요합니다. 개발 관련된부분만 보아도 빅데이터 처리와 머신러닝기술 관련부분, 고급 알고리즘 개발능력등이 필요하죠

개발관련 능력말고도 도메인 지식이 필요한데 이부분에 대한 러닝커브도 큽니다. 양쪽다 흥미를 가져야만 시도해볼 만한데 많은 개발자들이 이부분을 무시하고 개발을 시작했다가 중간에 포기하는 경우도 주변에서 많았습니다. 개발은 재밋는데 투자관련 공부는 재미가 없는 개발자들이 많았고 저도 그중 한명이었습니다.

실패했던 부분

많은 실패를 경험 했습니다. 아래와 같은 이유 혹은 방법으로 접근했었습니다.

너무 큰 목표

손해 보지 않은 완벽한 자산분배와 매매를 개발하려다 보니 단게적 목표를 세우지 못하고 제대로 오픈도 하지 못하기도 하였습니다.

단계적인 접근이 필요하다는걸 많이 느꼇습니다.

관리비용이 큰 개발방식

개발하다보디 욕심이 생겨서 다양한 데이터를 분석하려고 하고 다양한 기술을 많이 적용하는 시도를 했는데, 이에따른 개발비용, 관리비용등이 많이 발생합니다.

가치투자

개발자이다 보니 투자모임을 다니면서 공부를 하려고 투자 스터디 모임에 많이 참여했는데, 대부분의 투자 모임은 가치투자로 접근했습니다.

근데 이부분은 자동화가 어렵습니다. 자동화 할 수 있는 데이터는 재무제표 관련 부분말고는 없는데, 이부분도 주가에 반영된후에 데이터화가 이루어지기 떄문입니다

위험한 주식을 거르는 용도로는 활용 해 보려 합니다.

중요한 정보를 파악하려면 그만큼의 노력이 필요하고, 그 회사의 진정한 가치를 파악할 수 있는 개인은 많지않습니다. 또한 그 데이터를 자동화 하여 프로그램이 인식하게 하기 어렵죠. 이런부분이 많아지면 자동화가 어려워집니다

개인적으로는 직장인도 가치투자는 맞지 않다고 생각합니다. 그 만큼의 시간적 여유와 회사의 가치를 판단할 수 있는 지식을 가지기는 매우 어렵습니다.

예측모델

시계열 분석 방법으로 접근했는데 이부분의 결과는 좋지 않았습니다. (시간에 따라서 어떻게 차트가 그려질지 예측하는 방식)

시계열 분석이 이루어질 수 있을 만큼의 데이터가 지금 현실에는 갖추어지지 않았다고 생각됩니다.

투자 공부 없이 머신러닝 적용

러닝커브가 커서 데이터를 밀어 넣고 머신러닝 방법들을 적용해 보앗는데 모델 성능도 대부분 좋지 않았고, 좋은 모델이 나온다고 해도 벡테스팅을 만들어서 테스트해보면 결과가 좋지 못했습니다.

이는 데이터를 어떻게 활용할지에 대한 기본적인 고민도 없이 사용하였기 때문이죠.. 지금은 관련부분은 어떻게 사용하는게 좋은지 이해핬는데..

이부분은 개발자라면 비슷한 실수를 할 수 있는 부분이라 생각됩니다.

가능성이 높은 개발 방식

성공한 방법보다 실패한 방법을 먼저 공유한 이유는 정답이 없는 분야이기 떄문 입니다. 이러한 분야는 실패에 대한 경험에 대한 공감도 중요하다고 생각 하였습니다.

분류 방법의 접근

예측이 아닌 분류 방식으로 접근하면 다양한 시도를 해볼 수 있고 저는 이부분에서 유의미한 결과를 얻었습니다.

참고자료

  • https://macle.dev/posts/trading_etf_backtest/

종목별로 롱포지션, 숏포지션, 롱만 청산, 숏만 청산, 전체청산, 홀딩등으로 지금 데이터 시점의 포지션을 분류하는 방법으로의 접근입니다.

관련 방법으로 접근하면 많은 기술적 분석과, 머신러닝을 둘다 활용해 볼 수 있습니다.

기술적 분석이용방법과 머신러닝의 AutoML 을 활용한 부분에 대한 내용은 이후에 추가로 따로 작성하겠습니다 관련내용도 너무 많은 내용이라..

슬리피지

벡테스팅 및 리얼 환경에서 고려해야할 가장 큰문제는 슬리피지 부분입니다. 개발할때 좋아보이는 부분도 적용하면 오차가 큰 가장큰 이유이죠.

주식에서는 상한가에서는 매수를 못하게, 하한가에서는 매도를 못하게, 종가나 시가매매에서는 단일가로 수량 조절 (전체 체결 되금의 5%이하)

리얼매매에서는 분봉의 시가, 종가, 고가에서 살때에는 시과와 종가의 높은가격과 고가 사이에서의 랜덤 값, 팔때는 시가와 종가의 낮은가격과 저가 사이의 랜덤 값을 활용하는게 좋습니다.

단 이부분도 자산이 커지면 알고리즘이 무의미해 지므로 거래량에 따른 수량에 다한부분은 고려해야 합니다.

통신오류

리얼 매매에서는 체결이 되지 않는 경우, 통신이 끊킨 경우등에 대한 안정화에 신경 써야합니다. 프로그램 불안정으로 인한 손실도 큰 분야입니다.

자산분배

하나의 종목에 큰 금액을 할 수 없습니다. 금액이 커지면 알고리즘 오차가 커지기 때문이죠. 많은 자산을 운용하려면 시장, 종목 등에 대한 자산분배가 들어가야 큰 자산 운용도 가능해집니다. 들어가는 러닝커브와 개발비용을 생각하면 큰돈 벌어야죠 ㅎㅎ

유리한 시장

분류방법은 추세추종 방법론과 유사한 성격을 가지게 됩니다. 과열시장과 비트코인 처럼 초기시장과 같이 방향성이 뚜렷한 시장에서 높은 수익율을 보이는데 증권사 API 만 활용하면 다양한 시장에 동일한 방법을 적용하기가 어렵습니다.

성과가 괜찮은 방법은 모두 자체 개발하고 있습니다. API는 시세정보와 매매만 이용하는 식으로 접근하면 어떤시장에도 접근이 쉬워 집니다.

매매 전략은 알고리즘당 최대 비용문제, 알고리즘원리를 악용한 호가 문제등으로 비공개로 운영되지만 공통적으로 쓰이는 기술적분석 벡테스팅을 포함한 많은 기능은 오픈소스로 운영하는 기술부분도 존재합니다.

  • https://github.com/seomse/seomse-stock
  • https://github.com/seomse/seomse-trading

사용관련 문의는 단톡방을 활용하고 있습니다.

  • 카카오톡 오픈톡
    • https://open.kakao.com/o/g6vzOKqb
    • 참여코드: seomse
This post is licensed under CC BY 4.0 by the author.

리얼타임 인메모리 검색, 분석, 통계

geth centos 에 설치

Comments powered by Disqus.