본문 바로가기

자동 매매

업비트 서브포켓을 텔레그램으로 원격 주문해봤다|시장가·지정가·잔고·손익까지

반응형

업비트 서브포켓을 텔레그램으로 원격 주문해봤다|시장가·지정가·잔고·손익까지

최근 업비트 서브포켓을 활용하면서 단순히 자산을 나눠 보관하는 것보다 전략별 독립 계좌처럼 운용하면 상당히 편리하겠다는 생각이 들었다.

예를 들어 메인 계좌에서는 단기매매나 기존 자동매매를 계속 돌리고, 서브포켓에는 중장기 투자 또는 특정 전략에 사용할 자금만 따로 넣어두는 방식이다.

이렇게 하면 같은 업비트 계정 안에서도 자금과 보유종목을 분리해서 관리할 수 있다.

그런데 실제로 사용하다 보니 한 가지 욕심이 더 생겼다.

밖에서도 스마트폰으로 이 서브포켓에 주문을 넣을 수 없을까?

그래서 PC에서 만든 서브포켓 관리 프로그램에 텔레그램 명령 기능을 연결했다.

결과적으로 지금은

업비트 서브포켓 → PC 관리 프로그램 → 텔레그램 원격 주문

까지 연결해서 실제 주문을 테스트하고 있다.


 

1. 먼저 업비트 서브포켓 관리 프로그램부터 만들었다

기본이 되는 것은 PC용 서브포켓 관리 GUI다.

단순히 매수·매도 버튼만 있는 프로그램이 아니라 서브포켓 하나를 독립적인 투자계좌처럼 관리하는 것을 목표로 만들었다.

현재 들어간 주요 기능은 다음과 같다.

  • 서브포켓 보유종목 및 잔고 조회
  • 업비트에서 조회되는 평균매수가(평단) 표시
  • 현재가와 평가금액 계산
  • 종목별 손익금·손익률 표시
  • 시장가 매수·매도
  • 지정가 매수·매도
  • 현재 최우선 매수가를 이용한 지정가 매수
  • 미체결 주문 조회
  • 개별 미체결 주문 취소
  • 종목별 BUY/SELL 주문 일괄취소
  • 손절·익절 조건 관리
  • 텔레그램을 이용한 원격 주문

특히 평단은 프로그램에서 과거 체결내역을 다시 계산해서 추정하는 방식으로 만들지 않았다.

서브포켓 계좌에서 조회되는 평균매수가를 그대로 기준으로 사용하고, 여기에 현재가를 결합해 평가금액과 손익을 계산하도록 했다.

예를 들어 POLYX를 보유하고 있다면 프로그램에서는 대략 이런 식으로 관리된다.

POLYX
보유수량: 500개
평단: 190원
현재가: 200원
매수원금: 95,000원
평가금액: 100,000원
평가손익: +5,000원
수익률: +5.26%

프로그램을 다시 실행하더라도 서브포켓 정보를 다시 읽어오면 되기 때문에, 단순 보유현황과 평단 관리를 위해 별도의 매매 DB를 복원해야 하는 부담도 줄어든다.


2. 시장가뿐 아니라 지정가와 최우선 매수가 주문까지

매수 방법도 몇 가지로 나눴다.

시장가 매수

금액을 입력하고 시장가를 선택하면 해당 금액만큼 매수한다.

예를 들어 POLYX에 1만원을 넣는다면 1만원을 기준으로 시장가 매수 주문을 실행한다.

지정가 매수

원하는 가격을 직접 입력할 수도 있다.

예를 들어 현재 가격과 상관없이

POLYX 180원에 10,000원

식으로 지정가 주문을 걸어둘 수 있다.

최우선 매수가 주문

내가 자주 사용하는 방식 때문에 이것도 별도로 만들었다.

현재 호가를 조회한 뒤 가장 가까운 매수 1호가에 지정가 주문을 넣는 방식이다.

시장가로 바로 체결시키고 싶지는 않지만 현재 가장 높은 매수호가에 주문을 붙이고 싶을 때 사용할 수 있다.

매도 역시 시장가와 지정가를 모두 지원하도록 만들었다.


3. 손절·익절도 종목별로 따로 관리

여기에 별도의 손절·익절 관리 기능도 추가했다.

예를 들어 다음처럼 설정할 수 있다.

POLYX
손절가: 180원
익절가: 220원
매도수량: 전량

프로그램이 가격을 계속 확인하다가 설정한 가격에 도달하면 매도 조건이 발동한다.

여기서 내가 중요하게 생각한 부분이 하나 있다.

조건에 도달했다고 무조건 시장가로 던지지 않도록 했다.

급락하는 알트코인의 경우 시장가 SELL을 사용하면 호가가 얇을 때 생각했던 가격보다 상당히 아래에서 체결될 수 있기 때문이다.

그래서 현재 구조에서는 조건이 발동하면 그 순간의 매수 1호가를 확인하고 그 가격에 지정가 SELL 주문을 넣는 방식을 사용한다.

물론 이것도 완벽한 손절 방식은 아니다.

거래소 서버에 손절 주문을 미리 등록해놓는 것이 아니라 PC 프로그램이 가격을 감시하다 조건을 만족하면 주문하는 구조이기 때문이다.

따라서 PC 프로그램이 꺼져 있거나 인터넷/API에 장애가 발생하면 자동 손절·익절도 작동하지 않는다.

이 부분은 실제 운용에서 반드시 고려해야 한다.


4. 그리고 텔레그램을 주문 리모컨으로 연결했다

여기까지 만들고 보니 자연스럽게 다음 단계가 떠올랐다.

나는 기존에도 여러 검색기에서 조건을 만족하는 종목을 텔레그램으로 받고 있었다.

그렇다면 반대로,

텔레그램 → PC 프로그램 → 업비트 서브포켓

방향으로 명령을 전달하면 밖에서도 스마트폰으로 주문을 넣을 수 있다.

별도의 모바일 앱을 만드는 것보다 훨씬 간단하다.

텔레그램 채팅창 자체를 개인용 원격 주문 터미널로 사용하는 셈이다.


5. 실제 텔레그램에서 1만원 시장가 매수

예를 들어 텔레그램에서 다음과 같이 입력한다.

/매수 POLYX 10000 시장가
 

그렇다고 프로그램이 메시지를 받자마자 실제 주문을 실행하지는 않는다.

먼저 다음과 같이 주문 내용을 다시 보내준다.

[주문 확인]

BUY POLYX/KRW
금액: 10,000원
방식: 시장가

실제 주문: /확인 9162
취소: /주문취소 9162
확인번호 유효시간: 2분
 

내용을 확인한 뒤 다시

/확인 9162
 

를 보내야 실제 업비트 주문이 실행된다.

이번 테스트에서는 이 과정을 거쳐 텔레그램에서 요청한 10,000원 시장가 매수 주문이 실제 서브포켓에 접수되는 것까지 확인했다.


6. 왜 굳이 두 번 확인하게 만들었나?

텔레그램 원격 주문 기능을 만들면서 가장 신경 쓴 부분이다.

사실 /매수 메시지가 들어오는 즉시 주문하도록 만드는 것이 프로그램 자체는 더 간단하다.

하지만 실계좌에서는 그렇게 만들고 싶지 않았다.

예를 들어

/매수 POLYX 10000 시장가
 

를 입력하려다가 금액에 0을 하나 더 붙이면 어떻게 될까?

또는 종목을 잘못 입력할 수도 있다.

그래서 실제 주문 과정은 일부러

① 주문 요청 → ② 주문 내용 재확인 → ③ 확인번호 입력 → ④ 실제 주문

순서로 만들었다.

확인번호도 영구적으로 사용할 수 없다.

현재는 2분이 지나면 자동으로 만료되도록 했다.

결국 텔레그램은 원격 주문 버튼 역할을 하지만, 마지막 주문 결정은 사람이 한 번 더 확인하는 구조다.


7. 텔레그램에서도 시장가·지정가·최우선 주문

PC GUI에서 사용할 수 있는 주문 방식을 텔레그램에서도 거의 그대로 사용할 수 있게 했다.

시장가 매수

/매수 POLYX 10000 시장가
 

현재 최우선 매수가에 1만원 지정가 매수

/매수 POLYX 10000 최우선
 

가격을 직접 지정한 매수

/매수 POLYX 10000 지정가 180
 

매도도 가능하다.

전량 시장가 매도

/매도 POLYX 전량 시장가
 

전량 지정가 매도

/매도 POLYX 전량 지정가 200
 

5만원 상당만 지정가 매도

/매도 POLYX 50000 지정가 200
 

결국 PC GUI 앞에 앉아서 버튼을 누르던 기능을 텔레그램 명령어로도 실행할 수 있게 만든 것이다.


8. 주문하기 전에 스마트폰에서 잔고와 손익 확인

원격 주문만 가능하면 실제 사용하기에는 불편하다.

밖에서 매수·매도를 결정하려면 최소한 현재 서브포켓 상태부터 확인할 수 있어야 한다.

그래서 조회 명령도 추가했다.

/잔고
 

를 입력하면 서브포켓의 보유종목과 수량, 평단, 현재가 등을 확인할 수 있다.

그리고

/손익
 

을 보내면 전체 서브포켓의

매수원금 / 평가금액 / 손익금 / 손익률

을 확인할 수 있다.

또

/미체결
 

을 입력하면 현재 남아 있는 주문을 확인할 수 있고, 필요한 경우 주문 UUID를 이용해 미체결 주문을 취소할 수도 있다.

그래서 밖에서는 굳이 PC에 원격접속하지 않고도

잔고 확인 → 손익 확인 → 미체결 확인 → 주문 요청 → 주문 재확인 → 실제 주문

까지 텔레그램 하나에서 처리할 수 있다.


9. 실제 테스트하면서 만난 CCXT 시장가 매수 문제

프로그램을 만들었다고 바로 정상적으로 주문된 것은 아니다.

실제 테스트 중 재미있는 문제가 하나 발생했다.

텔레그램에서 주문 요청을 보내고 확인번호까지 정상적으로 발급됐는데 /확인을 보내자 CCXT에서 시장가 매수의 amount와 price 처리와 관련된 오류가 발생했다.

문제는 내가 원하는 주문 형태였다.

내가 원하는 것은

POLYX를 50개 사라

가 아니라

POLYX를 10,000원어치 사라

였다.

즉 코인 수량이 아니라 KRW 사용금액 기준 시장가 매수가 필요했다.

그래서 CCXT를 통한 업비트 시장가 매수 부분을 금액 기준으로 처리하도록 수정했다.

그 후 다시 실제 주문을 테스트했고 텔레그램에서 입력한 10,000원 시장가 주문이 서브포켓에 정상적으로 들어가는 것까지 확인했다.

자동매매 프로그램을 만들다 보면 자주 느끼는 부분이다.

코드가 에러 없이 실행되는 것과 실제 거래소에 내가 의도한 주문이 정확하게 들어가는 것은 전혀 다른 문제다.

결국 소액 실주문 테스트가 필요한 이유이기도 하다.


10. Telegram 409 Conflict도 주의해야 한다

텔레그램을 붙이면서 또 하나 만난 것이

409 Client Error: Conflict
 

오류였다.

내 경우 이미 여러 검색기에서 같은 텔레그램 봇을 사용하고 있었기 때문에 발생할 수 있는 문제였다.

구조를 나눠보면 이해하기 쉽다.

검색기 A ─┐
검색기 B ─┼─→ Telegram 알림 전송
검색기 C ─┘

Telegram 명령
      ↓
서브포켓 관리 프로그램
      ↓
업비트 주문
 

여러 프로그램이 sendMessage를 이용해 같은 봇으로 알림을 보내는 것과, 여러 프로그램이 동시에 같은 봇의 getUpdates를 가져가는 것은 다른 문제다.

내 구조에서는 알림을 보내는 검색기는 여러 개 두더라도 텔레그램 명령을 수신하는 프로그램은 하나로 모으는 방식으로 정리했다.

이렇게 하는 편이 원격 주문 명령을 어느 프로그램이 처리했는지도 명확하다.


11. 서브포켓 + 텔레그램 조합이 생각보다 괜찮다

처음에는 업비트 서브포켓을 단순히 자금을 분리해두는 기능 정도로 생각했다.

그런데 실제 API 프로그램과 연결해보니 활용 방법이 상당히 많다.

내가 현재 만들어가는 구조를 한 줄로 정리하면 이렇다.

자금 분리 → 별도 평단·손익 관리 → PC 자동감시 → 텔레그램 원격 확인·주문

특히 메인 계좌와 다른 목적으로 운용할 자금을 서브포켓에 따로 넣어두면 관리가 상당히 명확해진다.

예를 들어 메인 계좌에서는 기존 단타나 자동매매를 계속하고, 서브포켓에는 중기적으로 볼 종목만 넣어둘 수도 있다.

그리고 밖에 있을 때는 PC에 원격접속해서 작은 화면으로 거래 프로그램을 조작할 필요 없이 텔레그램에서 먼저

/잔고
/손익
/미체결
 

을 확인하고 필요한 주문만 보내면 된다.


12. 완전자동매매와도 조금 다르다

내가 이 구조에서 재미있다고 생각하는 부분이다.

모든 판단을 프로그램에 맡기는 완전자동매매와는 다르다.

판단은 사람이 하고 주문 전달과 계좌 관리를 프로그램에 맡길 수도 있다.

내가 종목과 가격, 금액을 결정한다.

텔레그램에 명령을 입력한다.

프로그램은 내가 정해둔 규칙에 따라 주문 내용을 다시 보여주고, 최종 확인을 받으면 업비트에 주문을 전달한다.

따라서

수동매매 ↔ 반자동매매 ↔ 자동매매

사이에서 원하는 만큼만 자동화할 수 있다.

개인적으로는 이런 형태가 실제 운용에서는 꽤 편하다.


13. 다음에는 손절·익절 설정도 텔레그램으로

현재 구조에서도 실사용은 가능하지만 확장할 부분은 더 있다.

다음에는 PC GUI를 열지 않고 텔레그램에서

/손절 POLYX 180
/익절 POLYX 220
 

처럼 보내서 해당 종목의 관리 조건 자체를 변경할 수 있게 해볼 생각이다.

체결 알림도 조금 더 상세하게 만들 수 있다.

예를 들면,

[매수 체결]

POLYX
체결금액: 10,000원
체결평단: XXX원

현재 보유수량: XXX
현재 계좌 평가손익: +XXX원
 

처럼 주문 접수에서 끝나는 게 아니라 실제 체결 이후의 계좌 상태까지 다시 보내는 방식이다.

이렇게 되면 스마트폰에서는 텔레그램만 보고도 상당 부분 관리할 수 있다.


마무리

지금까지는 PC에서만 관리하던 업비트 서브포켓을 텔레그램까지 연결해서 실제 원격 주문이 가능한 단계까지 구현해봤다.

처음에는 단순한 서브포켓 관리 프로그램으로 시작했는데 하나씩 기능을 붙이다 보니,

독립 자금관리 + 평단/손익 관리 + 손절·익절 감시 + 원격 주문

구조가 만들어졌다.

그리고 텔레그램 역시 단순히 자동매매 알림을 받는 도구에서 벗어나 개인용 원격 매매 인터페이스로 활용할 수 있었다.

특히 모든 것을 자동매매로 만들 필요 없이, 매매 판단은 직접 하면서 주문 실행과 계좌 관리만 자동화할 수 있다는 점이 마음에 든다.

앞으로는 손절·익절 원격 설정과 체결 후 평단·손익 자동 알림까지 추가해보면 훨씬 완성도가 높아질 것 같다.

※ 이 글은 개인적으로 개발·테스트한 프로그램의 구조와 경험을 정리한 내용이며 투자 권유가 아닙니다. API를 이용한 실주문 기능은 프로그램 오류, 네트워크 장애, API 장애, 중복 주문 및 인증정보 유출 등의 위험이 있습니다. 실제 자금을 사용하기 전 충분한 소액 테스트가 필요하며, API Key·Secret Key·Telegram Bot Token·허용된 사용자 정보 등 인증정보가 코드, 블로그 캡처, 로그에 노출되지 않도록 주의해야 합니다.

반응형