L-ATSLim's Automatic Trading System의 약자로 2016년 성(임씨)이 같은 나(프로그램 개발)와 내 친구(검색식 생성)의 합작으로 시작된 프로젝트였다.

 

Trading 프로그램들은 모두 같은 목적을 갖고 있다. 

[ 매매의 자동화 ]

 

프로그램을 필요로하는 사람들마다 매매의 자동화의 방식, 기준은 다 제각각이다

L-ATS은 매매의 자동화를 위해 이러한 기능들을 제공했다.

 

2016년 L-ATS 1.0

2020.05.24 - [Trading] - [Trading] 첫번째 프로그램

 

[Trading] 첫번째 프로그램

프로그램 명 : L-ATS (Lim's Automatic Trading System) 버전 : 1.0 환경 : Visual Basic 주요기능 : 검색식 기반 주식 매수, 설정값 기반 주식 매도, 스탑로스 API : 키움증권 API 제작기간 : 2015.05 ~ 2015.08 키움에서

brandon-dev.tistory.com


  • 키움증권 API 사용
  • 키움증권 [조건검색]의 자체 개발한 검색식을 사용한 자동 매수

손익 수준(%) 및 수량을 단계적으로 커스텀 가능한 자동 매도

 

2020년 L-ATS 2.0

2020.06.07 - [Trading] - [Trading] 두번째 프로그램

 

[Trading] 두번째 프로그램

프로그램 명 : L-ATS (Lim's Automatic Trading System) 버전 : 2.0 환경 : Visual C# 주요기능 : HTS/MTS 매수 종목 정보 실시간 수신, 설정값 기반 주식 매도, Flexable 스탑로스 API : 이베스트 증권 XingAPI 제작기간 : 2

brandon-dev.tistory.com


  • 이베스트증권 XingAPI 사용
  • 자동 매매 프로그램과 텔레그램 봇의 조합으로 텔레그램에서 종목명만 입력하면 설정된 조건으로 알아서 매수해 주는 실시간 매수 자동화
  • 가장 빠르게(!) 매수하는게 주 목적으로 매매를 위한 종목 클릭, 계좌 비번 입력, 매수 수량 입력, 매수 버튼 클릭 등의 작업을 없앤 초 간단 매수
  • 상승하는 종목의 최대 수익을 낼 수 있도록 현재가에 맞춰 유동적으로 변화하는 매도 기준의 실시간 변화
  • 손실을 최소화 할 수 있는 철저한 자동 손절

 

L-ATS 1.0은 사실상 실패한 프로젝트였다. 실패라기 보단 매매의 목적(=수익)을 달성하기에 큰 단점이 있었다.

제대로된 검색식

L-ATS 1.0은 위에 기술했듯이 키움증권의 검색식을 통해 추출된 종목을 즉시 매매하는 방식으로 차트 기반의 수익을 만들어내는 제대로된 검색식을 필요로 했기 때문이다.

아는 사람은 알겠지만...수익을 만들어 내는 제대로된 검색식을 만들기란 정말 쉽지않다. 
제대로된 검색식을 누구나 만들 수 있다면 모든 사람이 부자가 됐겠지...(나 역시도 반년간 검색식에 매달렸지만....)

L-ATS 1.0은 이렇게 약 7개월 정도 운용되다가 폐기되었다.


그렇게 시간이 흘러 2019년.

친구의 권유로 카카x톡 찌라시 매매방에 들어가게 되었고, 약 1년여의 시간동안 관찰해온 찌라시 매매방의 특징으로 나만의 독창적인 매도 방식을 결합하여 L-ATS 2.0을 설계하게 되었다.

 

[ 찌라시 매매방에서 찾아낸 특징 ]

  1. 찌라시 매매방은 진짜 뉴스와 가짜 뉴스가 섞여 나온다.
  2. 찌라시 매매방의 목적 상(= 뉴스 띄우고 개미들이 들러붙어 1~2% 오를때 물량 넘기기 수법) 진짜 뉴스든 가짜 뉴스든 대부분 어느 순간 일정 수준의 상승을 보인다.
  3. 높은 확률로 상한가 직행 종목이 나온다. (=진짜뉴스)
   결론 : 가지 않는 종목을 빠른 손절로 손실을 최소화 하고 상한가 가능 종목 1개만 잡아도 평균적으로 수익이다.

[ 자동 손절로 최대 수익을 낼 수 있는 방법의 추론]

  1. 주식판의 모든 종목은 파형을 그리면서 움직인다.
  2. 세력이 들어와 급등하는 종목도 개미를 떨구거나 더 많은 매물을 모아서 올리기 위해 매량 매도를 통해 순간 가격을 내린다.
  3. 종목의 최고가가 갱신될 때마다 해당 값을 기준으로 일정 수준의 손절 라인을 실시간으로 변경하면서 가져간다면 자동매매로써의 최대 수익을 낼 수 있는 하나의 방법이 된다. (= 내 생각)
절대적 손절 라인을 -5%로 지정했다고 가정해 보자.
내가 1000원에 어떤 종목을 샀으면 그 시점에 손절 라인은 1000원에서 -5%인 950원이다. 
이때 종목이 1000원에서 1100원이 되면 그 시점에 손절 라인은 1045원이 된다. 
이런 식으로 손절 라인을 매 시점의 최고가에 맞게 높여 나간다면 1000원에서 급등했다가 다시 1000원으로 내려와도 무조건 수익이 생기게 된다. 
또한, 급등하는 중간 중간에 세력이 개미를 떨구기 위해 호가를 내리는 경우 설정된 -5% 이내에 들어오면 손절되지 않고 상승 파형을 따라 끝까지 가져갈 수 있는 좋은 조건이 된다.
이것은 고정된 금액. 또는 고정된 수익/손절 %에서 자동 청산 기능을 제공하는 많은 증권사들의 기능과는 확실히 더 나은 차별점이 있다.

이렇게 탄생한 L-ATS 2.0은 약 2년간 기능 업데이트 및 버그 수정을 거듭해가며 나의 증권 계좌를 운용해 주었다.

 

L-ATS 2.0은 찌라시 매매방에서 언급한 종목을 무조건 사는 방식을 채택하였기에 

매수에 한해서는 완전 자동화를 할 수가 없었다.

때문에, 찌라시 매매방에 종목이 올라온 것을 캐치한 후 미리켜둔 증권 앱에서 종목을 검색하여 수동으로 매수를 하였다. 

여기서 L-ATS 2.0의 단점이 발생했다.

 

바로 매수가 느리다는 것.

찌라시 매매방에 올라오는 종목은 말그대로 찌라시에 의한 급등 종목들이기 때문에 빠른 매수가 수익과 직결된다. 

하지만 수동 매수로 인해 증권사 앱에 접속하는 시간, 종목을 검색하는 시간, 계좌 비밀번호를 입력하는 시간, 매수 가격 및 매수금액 입력  시간 등..

 

이를 보완하기 위해 텔레그램 봇을 이용하여 L-ATS 2.0 프로그램과 연동을 통해 수동 매수의 한계점을 극복하였으나

이것 역시 찌라시 매매방의 종목을 내가 인지한 후에 매수가 가능했기에 타이밍을 놓치거나 아예 보지 못해 매수를 하지 못하는 단점들이 생겨났다. 

그래서 결론은,  역시 완전 자동화!!

L-ATS 2.0은 약 7개월 전, 결국 전체 수익률 약 -3% 수준을 기록하고 멈추었다. 

그래도 반자동 매매 치고는 매우 괜찮은 수준이라고 생각한다.

 


최근 애플에서 iOS 업데이트를 하면서 카메라 기능 중 OCR 기능을 기본 탑재하면서 전 세계적으로 인공지능 학습에 의한 OCR 정확도가 평균적으로 매우 상승하였음을 보여주었다. (실제로 써보면 거의 100% 정확하다.)

 

L-ATS 2.0에서 완성하지 못했던 완전 자동화를 이 인공지능 OCR 기능을 통해 구현해 보고자 

다시 Visual Studio를 열게 되었다. (지금 내가 인공지능 회사에 재직 중이니까...)

 

2023년 L-ATS 3.0

L-ATS 3.0은 찌라시 매매방의 채팅 창을 일정 시간 간격으로 캡쳐하여 TEXT만 OCR로 변환 후

종목명을 추출하여 즉시 매수 처리하는 방식으로 구현될 것이다.

 

이 과정에서도 분명 문제점은 있다. 

하지만 완전 자동화가 되는 프로그램을 만드는 것이 우선순위이기 때문에 이슈들은 일단 뒤로 제껴둘 생각이다.

Posted by [ 브랜든 ]
,

하나의 시스템/프로그램을 설계하는 것은 상당히 고난도의 작업이다. 

Architecture-Design에 속하는 이 작업은 Front-End의 User Interface(UI)적 편의성과 간결함, 그리고 정확성을 바탕으로 하는 사용자 친화적 경험 및 지식이 필요하며, Back-End의 Call-Flow(메시지 흐름)와 가장 중요한 Data Structure가 가능해야한다. 

 

현재 L-ATS Flex v2.0은 약 50% 정도 완성이 되었지만, 실제 게시글은 그때마다 작성하지 못했다. 이유는 위에서 '가장 중요한'이라고 말한 Data Structure가 불안정했기 때문이다. 

처음 사용해 보는 이베스트 투자증권의 xingAPI에서 얻을 수 있는 Data가 생각보다 제한적이고 API의 사용성 또한 제한적이라 프로그램이 만들어지면서 데이터 구조가 많이 변경되었다. 

 

지금 시점은 xingAPI로부터 얻을 수 있는 데이터가 모두 파악되고, 그 데이터들을 어떤 부분에 사용하고 응용할지 정리가 되었기에, 잠시 개발을 멈추고 글을 작성한다. 


1. L-ATS 화면 구성

L-ATS Flex v2.0 화면 구성

크게 총 15개의 구역으로 구분이 되며, 각 구역 마다의 설명은 아래 정리되어 있다.

L-ATS v1.0과 가장 큰 차이점은 '매수' 기능이 없어져 그에따른 '미체결' 관련 화면 구역이 없어졌다. 그리고 L-ATS v2.0의 핵심 기능인 '스탑로스 Flex' 관련 설정 및 결과 창이 생겼다. 

실은 '스탑로스 Flex'보다 '스탑로스'가 더 표시할 정보가 많이 있는데(설정 조건이 복잡해서...)...결과 창의 위치를 바꾸어야 할 수도 있을 것 같다.

 

2. L-ATS 상세 화면 구성

1~15개의 구역을 가진 L-ATS v2.0

 

① L-ATS v2.0의 주 메뉴 Bar

② L-ATS v2.0 프로그램 사용자 정보 

    : L-ATS v2.0을 사용하기 위한 사용자 가입 정보.

③ 이베스트 투자증권 HTS 서버 접속 정보

    : 접속 (초록색), 미접속 (빨간색)

④ 자동 매매 시작 버튼

    : 이 버튼이 눌리지 않는한 자동매매가 시작되지 않음.

⑤ 프로그램 알림 Bar

    : 프로그램 동작 중 사용자에게 알림이 필요한 수준의 메시지가 표시됨.

⑥ 사용자 계좌 목록

    : 사용자가 보유한 이베스트 투자증권의 계좌 목록 표시. HTS 로그인이 완료되어야 표시됨.

⑦ 실시간 지수 정보

    : 실시간으로 증권 시장의 코스피/코스닥 지수를 표시. 약 3초마다 데이터 수신. HTS 로그인이 완료되어야 표시됨.

⑧ 실시간 매매 처리 종목 현황

    : L-ATS 프로그램 상에서 처리되고 있는 종목들의 갯수를 실시간으로 표시.

     (기존 잔고건수 + 신규 매수 건수) = (거래 완료 건수 + 스탑로스 건수 + 스탑로스 Flex 건수)

⑨ 사용자 계좌의 실시간 자산 현황

⑩ 사용자 계좌의 실시간 잔고 종목 목록

    : 현재 사용자가 보유한 종목들의 목록. 이 목록에서 종목별 스탑로스 처리 여부를 정할 수 있음.

⑪ 자동 스탑로스 환경 설정

    : 자동 매매 시작 이후 적용될 스탑로스 설정 값.

⑫ 스탑로스 처리 종목 목록

    : 실시간 잔고에서 스탑로스 처리를 선택한 종목들에 대한 목록 표시.

⑬ 거래 완료 종목 목록

    : 스탑로스 또는 스탑로스 Flex에서 매도처리가 완료된 종목들에 대한 목록 표시.

⑭ 스탑로스 Flex 처리 종목 목록

    : 실시간 잔고에서 스탑로스 Flex 처리를 선택한 종목들에 대한 목록 표시.

⑮ 이베스트 투자증권 사용자 정보

    : HTS 로그인 후 표시되는 사용자의 이베스트 증권 사용자 정보.

 

3. xingAPI 사용 구역

위의 15개 구역 중 xingAPI를 통해 얻은 데이터를 표시하는 구역에 대한 설명이다.

L-ATS v2.0 화면 내의 xingAPI 사용 구역

생각보다 xingAPI를 사용하는 부분은 많지 않다. 그리고 단순하다. 

실시간으로 계속 데이터를 요청하고 수신하여 반영해야하는 '실시간 잔고' 부분을 제외하고는 단순 Request-Response 처리이기에 크게 어려운 부분은 없다. 

 

xingAPI에서 제공하는 TR처리 기능 중 한번 Binding 해두고 값의 변화가 있을 때마다 서버 측에서 데이터를 내려주는 TR 처리 방식이 있는데 실시간으로 변화되는 잔고 정보를 갱신하는 데에 매우 유용할 것 같지만, 경험상 굳이 세션 유지를 신경 쓰며 보다 세세한 예외처리를 하기 위한 노력을 기울이는 것보다 주기적으로 정보를 요청하여 처리하는 것이 더 심플할 것 같다. 프로그램의 기능은 심플한 것이 최고다. 

 

다음은 실제로 구현한 'HTS 로그인' 부분 포스팅이다.

Posted by [ 브랜든 ]
,

모든 프로그램들은 Call Flow가 존재하며, 사용자 지향적인 프로그램일수록 사용자가 어떻게 프로그램을 사용해 나갈지, 예를 들면, 로그인부터 해서 특정 기능을 사용하기 위해 어떤 것들을 설정해야 하며, 얻어낸 결과를 어떻게 저장하고 프로그램을 종료하는지까지의 시나리오가 존재한다. 

 

프로그램 제작 전에 완성된 내용이지만, 나중에 사용자 매뉴얼 작성 시에 도움이 될 수 있도록 지금 기록을 해놓는 게 좋을 것 같다. 물론 Flow Chart 기반의 시나리오 정리이며, 필요할 경우 지속적으로 업데이트될 것이다.

 


L-ATS 사용자 시나리오

 

L-ATS 사용자 관점 시나리오

 

 

실은 어떤 프로그램이든 사용자 관점에서 정의하는 시나리오는 복잡하지 않다. 

사용자는 프로그램의 기능이 직관적이며 단순해야(단순하다는 어감이 조금 좋지 않은데 Simple하다가 의도하는 바와 가까운 단어다.) 잘 사용하게 된다. 

 

개발자라면 잘 알겠지만 단순해 보이는 하나하나의 과정마다 수가지의 예외처리와 백그라운드 프로세스 작업이 존재한다는 것을 알 것이다. 

사용자의 시선에서는 당연히 신경 쓸 필요 없다. 모든 기능이 오류 없이 정상적으로 처리되어야 하니 말이다.

즉, 위의 시나리오는 프로그램의 모든 기능이 정상적일 때의 시나리오이다. 

 

설계된 L-ATS 2.0의 기능은 크게 4가지로 구분된다. 

  1. 이베스트 증권 계좌 선택
  2. 스탑로스 조건 설정
  3. 자동 매매 시작
  4. 종목별 처리할 스탑로스 종류 선택

실제론 대부분의 자동매매 프로그램들이 1.~3.번 기능이 전부이다. 2.번 기능이 프로그램마다의 특징을 갖는 기능이며, 자동으로 매수하는 기능이 있는 프로그램도 있다. (L-ATS 1.0에도 존재했던 기능이나 2.0에서는 스탑로스만...)

 

기능 자체는 간단해 보이지만, 돈이 왔다갔다하는 프로그램이기에 얕은 지식으로 간단하게 만들 수 있는 프로그램의 종류는 아니다. 

기능 구현보다 Exception 처리에 더 많은 공을 들여야 한다. 

사용자는...더구나 GUI 환경에서의 사용자는 개발자가 예측하지 못한 돌발 행동을 많이 한다.

 

Posted by [ 브랜든 ]
,