트레이딩뷰 차트의 볼린저밴드 알림이 울리면 선물 포지션을 잡고, 익절과 손절까지 프로그램이 처리합니다.
같은 고객이 Bitget 비트코인으로 시작해 이더리움판을 추가했고, 지인에게 줄 Binance판을 다시 의뢰했습니다.
마지막에는 PC를 켜 둬야 하던 프로그램을 서버에 올리고 휴대폰 텔레그램으로 조작하도록 바꿨습니다.
그 사이에 신호 서버가 통째로 사라져 프로그램이 멈춘 일도 있었습니다.
플랫폼
Bitget, Binance USDⓈ-M 무기한 선물 (REST)
신호
트레이딩뷰 알림 웹훅 자체 릴레이 서버 경유
형태
Windows PC 프로그램, 서버 상주 텔레그램 봇
제작 기간
Binance PC판 4일 텔레그램판은 엿새 뒤 전달
텔레그램판 재현 화면. 실제 텔레그램에 접속하지 않고, 납품한 봇 코드의 메시지 문구와 버튼 구성을 그대로 옮겨 그렸습니다 (잔고, 가격, 설정값은 예시)
01배경과 요구사항
처음 의뢰는 단순했습니다. 트레이딩뷰 1시간봉에 볼린저밴드를 올려 두고,
밴드 중심선의 방향과 밴드 터치를 함께 보고 롱이나 숏 신호를 냅니다.
한 봉이 위아래 밴드를 모두 건드리고 마감하면 그 봉은 신호에서 뺍니다.
판단은 봉 마감 기준이고, 진입 뒤에는 평균 진입가 대비 익절 %와 손절 %에 닿으면 시장가로 정리합니다.
구체적인 수치는 고객의 것이라 여기에는 적지 않습니다.
이 전략 하나가 네 번에 걸쳐 모습을 바꿨습니다.
맨 처음 만든 것은 Bitget 비트코인판 Windows 프로그램입니다.
다음이 Bitget 이더리움판입니다. 같은 전략에 코인만 바꿨고, 비트코인판과 같은 PC에서 동시에 돌릴 수 있습니다.
세 번째는 고객의 지인이 쓸 Binance 비트코인판입니다. 거래소가 달라졌고 전략은 그대로입니다.
마지막이 텔레그램판입니다. Binance판을 서버에 올려 24시간 돌리고, 조작과 알림은 휴대폰 텔레그램으로 합니다.
02신호가 주문이 되기까지
신호 판단은 트레이딩뷰가 맡고, 주문은 프로그램이 맡습니다. 둘 사이를 작은 릴레이 서버가 잇습니다.
트레이딩뷰 알림은 봉 마감 때 한 번 울리며 웹훅으로 방향(buy 또는 sell)을 보냅니다.
릴레이 서버는 가장 최근 신호와 받은 시각을 보관합니다. 파이썬 표준 라이브러리만 쓴 파일 하나짜리 서버입니다.
프로그램은 1초마다 릴레이에 물어보고, 받은 지 30초가 안 된 신호만 씁니다. 포지션이 없을 때만 시장가로 진입합니다.
진입 뒤에는 프로그램이 1초마다 현재가를 보다가 익절가나 손절가에 닿으면 시장가로 청산합니다.
트레이딩뷰가 PC로 직접 웹훅을 쏠 수는 없습니다. 가정집 PC는 밖에서 들어오는 요청을 받을 주소가 없기 때문입니다.
그래서 서버가 신호를 받아 두고 PC가 가지러 가는 구조를 택했습니다.
프로그램별로 신호 경로와 사용 권한 키를 따로 두어서, 비트코인판과 이더리움판이 같은 릴레이를 쓰면서도 서로 섞이지 않습니다.
납품한 Binance 비트코인판을 가짜 계좌 응답과 가짜 신호로 띄워 찍은 실제 프로그램 화면 (API 키, 잔고, 가격, 설정값은 예시)
03신호 서버가 사라진 날
프로그램은 그대로인데 인증도 신호도 닿지 않았습니다
2026년 9월, 릴레이와 인증을 맡던 예전 서버 두 대가 모두 폐기되어 접속이 끊겼습니다.
프로그램 안에는 그 서버 주소가 들어 있었으니, 실행 권한 확인에서 막히고 신호도 받지 못했습니다.
고객이 새 서버를 마련했고, 빈 서버에서 릴레이를 처음부터 다시 세웠습니다.
릴레이는 파일 하나로 다시 썼습니다. 설치할 패키지가 없어서 서버를 또 옮기더라도 파일만 복사하면 됩니다.
서비스로 등록한 뒤 서버를 껐다 켜서, 릴레이가 스스로 살아나는지 직접 확인했습니다.
고정 IP가 연결돼 있는지도 확인했습니다. 고정 IP가 아니면 서버를 멈췄다 켤 때 주소가 바뀌고, 그러면 프로그램을 다시 빌드해야 합니다.
신호 경로와 알림 메시지 형식, 사용 권한 키는 그대로 두었습니다. 고객은 새 실행 파일로 바꾸고 트레이딩뷰 알림의 웹훅 주소만 고치면 됐습니다.
2년 전 비트코인판 설명서는 PDF만 남아 있어 본문을 고칠 수 없었습니다. 맨 앞에 주소 변경 안내 한 장을 붙이고, 같은 내용을 텍스트 파일로도 넣었습니다.
두 달 전에 만든 이더리움판도 이때 함께 새 서버로 옮겼습니다. 이더리움판은 비트코인판과 폴더, 설정 파일, 로그, 신호 경로가 모두 분리돼 있어 두 프로그램을 한 PC에서 같이 켜 둘 수 있습니다.
이더리움 선물은 최소 주문 수량이 있어서, 주문 크기와 레버리지를 곱한 값이 그 수량에 못 미치면 진입이 거부됩니다. 이 계산은 설명서에 예시와 함께 적었습니다.
Bitget 이더리움판. 같은 방식으로 찍은 실제 프로그램 화면 (값은 예시). Bitget은 API 비밀번호 칸이 하나 더 있습니다
04Binance로 옮기며 바로잡은 것
의뢰 내용은 "조건은 같습니다. 거래소만 바이낸스입니다."가 전부였습니다.
전략은 손대지 않았습니다. 다만 2년 전 코드를 다시 읽으니 Bitget에서는 문제가 없었어도 Binance에서는 사고가 될 동작이 몇 군데 있었습니다.
Bitget판의 청산 주문은 거래소가 보유 수량 안에서 알아서 처리해 주는 동작에 기대고 있었습니다. Binance에는 그 동작이 없어서, 조회한 실제 보유 수량 전량으로 청산하도록 다시 썼습니다.
신호는 30초 동안 유효합니다. 그 안에 익절이나 손절이 나면 같은 신호로 다시 진입할 수 있는 틈이 있었습니다. 원래 명세는 "청산된 다음 봉부터 신호를 본다"였으므로, 한 번 처리한 신호는 다시 쓰지 않게 막았습니다. 포지션을 들고 있을 때 들어온 신호도 쓴 것으로 치고 로그에 남깁니다.
예전에는 주문이 실패하면 30초 동안 매초 다시 시도하면서 로그를 가득 채웠습니다. 이제 일시 오류는 세 번까지만 다시 시도하고, 최소 수량 미달처럼 다시 해도 결과가 같은 오류는 한 번으로 끝냅니다.
잔고나 포지션 조회가 실패하면 그 1초는 진입도 청산도 판단하지 않습니다. 직전 값으로 주문이 나가는 일을 막기 위해서입니다.
예전에는 Windows 시간 동기화 명령을 30분마다 불렀는데, 관리자 권한이 필요하고 검은 창이 깜빡였습니다. Binance 서버 시각과의 차이를 재서 요청에 반영하는 방식으로 바꿨고, 시각 오류가 나면 다시 잽니다.
계정이 단방향 모드인지 헤지 모드인지에 따라 주문 방식이 다릅니다. 진입할 때 계정 설정을 조회해 맞는 쪽으로 보냅니다.
모든 통신에 제한 시간을 걸어서, 응답이 오지 않아 화면이 굳는 일을 없앴습니다.
거래소 연동은 범용 라이브러리 대신 Binance REST를 직접 호출하도록 썼습니다. 주문 단위와 최소 금액을 주문 전에 검사하는 부분을 직접 다루기 위해서였고, 덤으로 실행 파일이 60MB에서 41MB로 줄었습니다.
서명, 수량 자릿수, 포지션 모드, 신호 처리는 네트워크 없이 도는 자동 테스트 29개로 확인합니다.
05PC를 끄면 손절도 멈춥니다
PC판은 익절과 손절을 거래소에 예약 주문으로 걸어 두지 않습니다. 프로그램이 가격을 보고 있다가 주문을 냅니다.
그래서 PC가 꺼지거나 절전에 들어가면 청산 감시도 같이 멈춥니다. 꺼져 있던 동안 온 신호도 버려집니다.
PC를 24시간 켜 두기 어려운 사용자에게는 이 점이 가장 큰 약점이었습니다.
텔레그램판은 같은 매매 엔진을 릴레이가 돌고 있는 그 서버에 올린 것입니다.
화면이 없어진 자리를 텔레그램 봇이 대신합니다. 채팅창 아래에 고정된 버튼 일곱 개로 시작, 중지, 상태 확인, 설정, API 키 등록, 최근 기록, 도움말을 다룹니다.
※ 본 사례는 과거 고객 요구사항을 익명 처리하여 재구성한 것이며, 수익률과 수익금은 공개하지 않습니다.
알고랩은 매매 자동화 프로그램 제작 서비스이며, 종목 추천, 투자 자문, 수익 보장 서비스가 아닙니다.
레버리지를 쓰는 가상자산 선물은 가격이 조금만 움직여도 손실이 크게 불어나고, 강제 청산으로 증거금 전부를 잃을 수 있습니다.
자동매매 프로그램은 설정한 규칙을 실행할 뿐이며, 서버나 통신 장애로 주문이 늦거나 나가지 않을 수 있습니다. 투자 판단과 그 결과는 사용자 본인에게 있습니다.
PC에서 돌리던 프로그램을 서버로 옮기고 싶으시면
지금 쓰는 프로그램을 옮기는 일도, 처음부터 새로 만드는 일도 상담에서 말씀해 주세요.
거래소와 신호를 받는 방식을 알려 주시면 됩니다.