LLM한테 투자 맡겼더니 반항한 건에 대하여
노코드에서 이평선까지. 코인 자동매매 1년 삽질기.
개인의 입장에서 홈서버를 돌리고, 자동화를 돌리기에 적절한 게 무엇이 있을까를 고민하던 차에, 코인선물1 매매 자동화를 시도해야겠다고 생각하게 되었다.
24년 10월 즈음 시원하게 코인선물로 손실을 보고, 이건 내가 할 게 아니다라는 결론을 내린 지 얼마 되지 않았을 때였다.
사람의 감정을 배제한 LLM을 활용한 자동매매. 돈 벌면 좋고, 아니면 이 경험으로 취업하는 데 도움이 되지 않을까 하는 생각으로 시작했다.
확실히 둘 다 도움이 되지 않았다.
(1) 코인선물(Futures) — 코인을 실제로 사고파는 현물과 달리, 미래 가격을 예측해 베팅하는 방식. 레버리지를 쓸 수 있어 수익도 크지만 손실도 크다.
나에게 코드는 암호문에 가까웠다.
대체재를 알아보던 중 노코드 툴2 n8n3, Make의 존재를 알게 되었다. LLM에게 묻고 공식문서를 찾아가며 사용법을 익혔다. n8n의 에이전트 기능을 활용해 데이터를 분석시키고, OKX API4로 매매를 하자는 계획을 세웠다.
(2) 노코드 툴(No-code tool) — 코드를 직접 작성하지 않고 블록이나 버튼을 연결하는 방식으로 자동화를 만드는 도구. n8n, Make(구 Integromat)가 대표적.
(3) n8n — 오픈소스 자동화 플랫폼. 여러 서비스를 연결해 "A가 일어나면 B를 해라" 같은 워크플로우를 만들 수 있다.
(4) OKX API — 코인 거래소 OKX에서 제공하는 프로그래밍 인터페이스. API(Application Programming Interface)란 프로그램끼리 데이터를 주고받는 창구라고 보면 된다. 이걸 통해 가격 조회, 주문 등을 코드로 실행할 수 있다.
여기서 문제가 발생했다.
n8n에서는 OKX API를 지원하지 않았다. 가격 데이터를 가져올 방법이 없었다. 주문도 넣을 수 없었다. 결국 파이썬 코드를 사용할 수밖에 없다는 결론에 이르렀다.
파이썬으로 OKX 가격 정보를 받아오고, 웹훅5으로 n8n 에이전트에 전달해 매매 판단을 하게 만들었다. JSON6으로 된 결과를 디스코드와 파이썬 코드로 받아와 거래를 했던 로직으로 기억한다. 오래돼서 정확하진 않지만.
이 로직이 완성되고 클라우드타입에 배포7했다. 이후에는 네이버 클라우드 마이크로서버로 옮겼다. 지금 생각하면 어떻게 했는지 의문인데, 어찌저찌 돌아가게 만들었다. API 비용은 구글에서 주는 크레딧으로 해결하고, 1시간마다 돌아가게끔 만들었다.
(5) 웹훅(Webhook) — 특정 이벤트가 발생했을 때 지정한 주소로 데이터를 자동으로 전송하는 방식. "데이터 받을 주소를 미리 알려두면, 뭔가 생기면 거기로 쏴준다"는 개념.
(6) JSON — 데이터를 주고받을 때 쓰는 텍스트 형식.
{"action": "buy", "amount": 10}처럼 키-값 쌍으로 생긴 구조.(7) 배포(Deploy) — 내 컴퓨터에서만 돌아가던 코드를 외부 서버에 올려서 24시간 돌아가게 만드는 것. 클라우드타입은 한국 스타트업이 만든 배포 플랫폼.
그러다 문제가 생겼다.
n8n 데이터가 다 날아갔다.
클라우드로 배포했으니 다 저장된다고 생각했는데, 어느 날 로그인이 안 됐다. ID와 워크플로우가 통째로 날아가는 사태가 몇 번이고 벌어졌다. 나중에야 알았지만, 최저 요금제를 사용하면서 별도 볼륨8을 달아두지 않았기 때문이었다. 서버를 잠시 멈추거나 재배포하면 데이터가 모두 초기화됐다.
이후 파이썬 코드를 조금씩 익히고 커서9를 적극 사용하게 되면서, n8n은 더 이상 사용하지 않게 되었다.
(8) 볼륨(Volume) — 서버에 붙이는 별도 저장 공간. 볼륨 없이 배포하면 서버가 꺼졌다 켜질 때 내부 데이터가 통째로 사라진다. 컨테이너 기반 서버의 흔한 함정.
(9) 커서(Cursor) — AI가 내장된 코드 편집기. 코드를 직접 짜지 않아도 말로 설명하면 AI가 코드를 작성해준다.
n8n에서 돌리던 에이전트를 파이썬 코드로 옮겼다.
Gemini 2.0 Pro 모델을 사용했던 것 같다. 시장 변동성과 추세에 따라 방향, 매매 사이즈, 레버리지10 크기를 선택해주길 바랐는데 — 어찌나 보수적인지, 아주 작은 레버리지와 사이즈만 골랐다. 시스템 프롬프트11로 범위를 정해줘도 가장 작은 레버리지만 이용하거나, 프롬프트를 무시하고 레버리지 1배로 고정시켜버리는 결과를 계속 뱉어냈다.
1시간마다 한 번씩 호출하는 방식으로 세팅했는데, 호출할 때마다 판단을 달리해서 샀다 팔았다를 반복했다.
일관성을 잡기 위해 특정 조건에서만 매매하도록 LLM에게 규칙을 주었다. 그랬더니 Flash 모델12이나 심지어 로컬 모델13도 일관성 있는 결과를 내기 시작했다.
잠시 생각해보니, 이러면 그냥 스크립트로 돌리는 게 낫겠다는 생각이 들었다.
조건 내에서 매매하는데 파이썬 스크립트14로 돌리든 LLM이 판단하든 결과는 같다. 분석 시간과 비용 측면에서 LLM이 압도적으로 불리했다.
(10) 레버리지(Leverage) — 내 돈보다 더 큰 금액으로 거래하는 것. 레버리지 10배면 100만 원으로 1000만 원짜리 포지션을 잡는 것. 수익도 10배지만 손실도 10배. 1배는 레버리지를 안 쓰는 것과 같다.
(11) 시스템 프롬프트(System Prompt) — LLM에게 대화 시작 전에 역할이나 규칙을 미리 정해주는 지시문. "너는 트레이더야, 레버리지는 5~20배 사이에서 골라" 같은 식.
(12) Flash 모델 — Gemini 계열의 경량 모델. Pro보다 빠르고 저렴하지만 성능은 낮다.
(13) 로컬 모델 — 클라우드 서버가 아닌 내 컴퓨터에서 직접 실행하는 AI 모델. API 비용이 없고 인터넷 없이도 작동한다.
(14) 스크립트(Script) — "조건 A면 B를 해라"처럼 미리 정해진 규칙대로만 움직이는 코드. AI처럼 판단하지 않고 정해진 대로만 실행한다.
LLM을 걷어내고 규칙 기반으로 바꾼 뒤, 이번엔 통계를 활용한 로직을 만들어보고자 했다.
모든 시간대의 모든 가격에서 거래했을 때 수익이 가장 높은 구간을 찾고, 그 전략으로 투자하는 방식이었다.
결과는 좋지 않았다. 오버피팅15이 문제였다.
기출문제의 답을 보고 문제를 푼 뒤, 실제 시험에서 그 번호를 그대로 써넣은 격이었다. 6개월 정도 돌렸고, 역시 큰 성과는 없었다.
(15) 오버피팅(Overfitting) — 과거 데이터에 지나치게 최적화된 나머지 새로운 데이터에서는 엉망이 되는 현상. 퀀트 투자의 가장 흔한 함정.
지금은 추세를 이용한 로직을 적용하고 있다.
이동평균선16이 정배열이면 롱17, 역배열이면 숏17에 베팅하는 간단한 로직이다. 지금껏 돌려본 자동화 중 가장 성과가 좋다. 10만 원 미만 소액으로 돌리므로 액수로는 큰 의미가 없지만.
단순할수록 오래 살아남는다는 걸, 꽤 돌아와서 배웠다.
(16) 이동평균선(Moving Average) — 일정 기간의 평균 가격을 이은 선. 단기선이 중기선 위, 중기선이 장기선 위에 있는 순서면 정배열(상승 추세), 반대면 역배열(하락 추세)로 본다.
(17) 롱(Long) / 숏(Short) — 롱은 가격이 오를 것 같을 때 사는 것, 숏은 가격이 내릴 것 같을 때 미리 파는 것. 선물 거래에서는 양방향 베팅이 가능하다.
이 과정에서 홈서버, 클라우드, API 활용, LLM 활용(툴 콜링18 등)을 직접 써볼 기회가 되었다.
AI가 화두가 되기 시작했을 때, 커서 같은 LLM 래퍼19 앱들이 모든 영역을 장악하리라 생각했다. 하지만 실제 사용 패턴을 보면, 소프트웨어 개발과 업무 자동화의 진입장벽을 낮추는 데 더 큰 효용이 있는 것처럼 보인다.
각종 API를 활용하고 홈서버를 만드는 것들은 LLM 이전에는 생각해본 적도 없는 것들이다.
마치 유튜브가 기성 방송국을 허물어버리고 "방송"이라는 해자20를 없애버린 것처럼 — LLM은 지금 모든 분야의 해자를 순차적으로 부수고 있는 중인지도 모른다.
(18) 툴 콜링(Tool Calling) — LLM이 단순히 텍스트를 생성하는 것을 넘어, 외부 함수나 API를 직접 호출하는 기능. "검색해줘"라고 하면 LLM이 검색 API를 직접 실행하는 방식.
(19) LLM 래퍼(Wrapper) — LLM 자체를 만드는 게 아니라, 기존 LLM(GPT, Claude 등)을 감싸서 특정 용도에 맞게 만든 앱. 커서, Notion AI 같은 것들.
(20) 해자(Moat) — 원래는 성 주위를 둘러싼 물길. 비즈니스에서는 "진입장벽" 또는 "경쟁자가 넘기 힘든 유리한 조건"을 뜻한다. 워런 버핏이 즐겨 쓰는 표현.