jesse 설치부터 실전까지 — 결정이 일어난 자리를 차트에서 보고, 실력과 운을 갈라 주는 크립토 전략 프레임워크
별 8천 5백 개짜리 크립토 전략 프레임워크를 8초에 깔고, 봉 29만 개를 받고, 백테스트 결과를 봉 위에 겹쳐서 주문 한 건 한 건을 들여다보고, 몬테카를로 1000번으로 '이 +12%가 실력인가 운인가'를 재 봅니다.
6편. jesse — 결정이 일어난 자리를 차트에서 보고, 실력과 운을 갈라 주는 물건이 글의 완료 조건: 독자는 자기 백테스트 결과를 몬테카를로 1,000번에 태워 "이게 실력인지 운인지"를 p값으로 받으면 성공입니다.
| 하는 일 | 크립토 봉을 받아 DB에 쌓고, 파이썬 전략을 백테스트하고, 그 결과를 봉 위에 겹쳐 주문 한 건까지 확대해 보여 주고, 몬테카를로로 그게 운이었는지 재 줍니다 |
| 맞는 사람 | 크립토 전략을 파이썬으로 쓰고 백테스트 결과를 스스로 못 믿어 본 적이 있는 사람. "왜 저기서 샀지"를 표가 아니라 차트에서 보고 싶은 사람 |
| 안 맞는 사람 | 주식을 보는 사람(크립토 전용) · PostgreSQL·Redis 를 띄우기 부담스러운 사람 · 무료로 실시간 주문까지 가고 싶은 사람(주문은 유료입니다) |
| 이 글의 결과물 | 백테스트 한 건(48매매·+12.18%), 그 매매가 봉 위에 겹쳐진 차트, 1,000 시나리오 분포와 p값 |
| 준비물·비용 | 코드 0원(MIT) · 모델 안 씁니다(LLM 없음) · 시세 0원, API 키 0개 · weltiq 5절을 따라 할 때만. 단 실거래·페이퍼는 유료 플러그인입니다 |
| 시간·난도 | 설치 8초, 봉 받기 91초, 백테스트 0.41초, 몬테카를로 9초. 난도 중(PostgreSQL·Redis 를 직접 띄워야 합니다) |
| weltiq 와의 관계 | 반대 방향으로 붙습니다. jesse 의 주문 자리는 유료라 weltiq 가 낄 곳이 아니지만, weltiq 가 내보낸 체결 원장을 jesse 의 몬테카를로에 태울 수 있습니다 |
| 검증 환경·날짜 | macOS 26.6.2 · arm64 · CPython 3.12.13 · jesse 3.2.1 · PostgreSQL 16.13 · Redis 8.6.2 · 2026-09-22 |
| 제휴 고지 | 필자는 weltiq 로부터 이 연재의 원고료를 받습니다. 도구 평가는 필자가 직접 돌린 결과만 씁니다 |
1. 이게 뭔가요
jesse-ai/jesse 는 파이썬으로 쓰인 크립토 전략 프레임워크입니다. 봉을 받아 DB에 쌓고, 전략을 파이썬 클래스로 쓰고, 백테스트를 돌리고, 결과를 웹 대시보드에서 봅니다. 2018년에 시작해 8년째입니다.
같은 크립토 봇인 4편 freqtrade 가 터미널이 본체이고 웹 UI가 곁다리라면, jesse 는 대시보드가 본체입니다. jesse run 한 줄이 곧 웹 서버 기동이고, 봉 받기·전략 편집·백테스트·결과 보기가 전부 브라우저 안에서 일어납니다.
이 편에서 볼 것은 둘입니다. 하나, 결정이 일어난 자리를 차트에서 봅니다 — 대부분의 도구는 "승률 27%, 낙폭 −14.5%" 같은 표를 주지만 그 −14.5%가 어느 봉에서 났는지는 표에 없죠. 둘, 몬테카를로가 제품 메뉴에 있습니다 — "이게 실력인가 운인가"를 9초에 재 줍니다. 이게 본론입니다.
| 항목 | 값 |
|---|---|
| 주소 | github.com/jesse-ai/jesse |
| 라이선스 | MIT |
| 별 수 | ★8,564 · 포크 1,242 (관측일 2026-09-22) |
| 마지막 푸시 | 2026-09-21 (이 글을 쓰기 하루 전) |
| 개설 | 2018-11-09 · 열린 이슈 16 · 아카이브 아님 |
| 버전 | PyPI jesse 3.2.1 (+ jesse-rust 1.2.0) |
| 봉 수집 대상 | 거래소 10곳 (Apex·Binance·Bitfinex·Bybit·Coinbase·Gate·Hyperliquid·Kraken·KuCoin·Lighter) |
| 설정상 시장 | 38개 (테스트넷 포함) |
앞 다섯 줄은 GitHub API, 버전은 jesse --version, 뒤 두 줄은 설치본의 수집 드라이버와 jesse.info.exchange_info 에서 읽었습니다.
jesse run 은 대시보드와 함께 MCP 서버(툴 67개)도 띄웁니다. 다만 무거운 것을 실제로 돌리는 툴 넷은 jesse.trade 계정을 요구하고 게스트는 하루 0회라, 필자는 계정 없이 대시보드와 로컬 API 로만 돌렸습니다(응답 원문은 검증 기록).
2. 설치
준비물은 넷입니다 — 파이썬 3.12(전용 가상환경), PostgreSQL(봉과 세션이 전부 여기 들어갑니다), Redis(대시보드 진행률·워커 관리), 그리고 API 키 0개. 봉 받기와 백테스트는 키 없이 됩니다.
돈이 드는 구간이 있습니다. 본체(백테스트·몬테카를로·대시보드)는 MIT 로 공짜지만 실시간 주문을 내는 라이브 플러그인은 유료이고,
.env에LICENSE_API_TOKEN이 있어야jesse install-live가 진행됩니다. 커뮤니티 전략 장터에도 PREMIUM 전략이 섞여 있습니다. 이 글에서는 아무것도 결제하지 않았습니다.
전용 가상환경을 권합니다 — 패키지 111개에 ray·scikit-learn·matplotlib 같은 덩치가 섞여 다 깔면 866MB 입니다.
uv venv -p 3.12 /private/tmp/tut-venvs/jesse
uv pip install --python /private/tmp/tut-venvs/jesse/bin/python jesse
7.94초 걸렸고, jesse --version 이 jesse, version 3.2.1 을 찍으면 된 겁니다.
그다음이 함정입니다. 오류 메시지가 안내하는 jesse make-project 명령이 3.2.1 에는 없습니다 — jesse --help 에 있는 것은 install-live 와 run 둘뿐입니다. 소스의 프로젝트 판정은 이렇습니다.
# jesse/helpers.py:1026
def is_jesse_project():
ls = os.listdir('.')
return 'strategies' in ls and 'storage' in ls
디렉터리 두 개면 됩니다. 그래서 폴더를 만들고 .env 를 놓고 DB와 Redis를 띄웁니다.
mkdir -p /private/tmp/jesse-tut/{strategies,storage}
cd /private/tmp/jesse-tut
cp env.example .env # PASSWORD·APP_PORT·POSTGRES_*·REDIS_*
createdb jesse_tut
redis-server --port 9011 --daemonize yes
jesse run
.env 전문은 env.example 에 있고, 채울 것은 PASSWORD(본인이 정하는 대시보드 비밀번호)와 PostgreSQL 계정뿐입니다. 기동 로그 끝에 Dashboard is available at http://localhost:9010 박스가 뜹니다. 열어서 그 비밀번호를 넣으면 이 화면입니다.
jesse 첫 기동 대시보드
첫 기동 화면입니다. 가운데 System Monitor 칸의 Jesse Environment 3.2.1 을 보십시오 — 여기까지 오면 설치가 된 것입니다. 왼쪽 메뉴의 Backtest · Monte Carlo 가 이 글에서 볼 것들입니다.
막히는 자리
| 증상 | 원인 | 우회 |
|---|---|---|
안내받은 jesse make-project 명령이 없다 |
3.2.1 에서 명령은 사라지고 안내 문구만 남았습니다 | strategies/·storage/ 폴더 두 개를 만들면 그 폴더가 프로젝트입니다 |
.env is missing or empty |
프로젝트 루트가 아닌 곳에서 실행했습니다 | 두 폴더가 있는 곳으로 cd 한 뒤 실행 |
You forgot to set the PASSWORD in your .env file |
비어 있으면 기동 자체가 안 됩니다 | 아무 값이나 채웁니다. 대시보드 로그인에 쓸 값입니다 |
Database wasn't ready 뒤 10초 대기 |
PostgreSQL 이 안 떠 있습니다 | pg_isready 로 먼저 확인 |
| Redis 연결 거부 | .env 의 REDIS_PORT 와 실제 포트가 다릅니다 |
기본은 6379. 옮겼으면 .env 도 고칩니다 |
| 포트 충돌 | 포트가 세 개입니다 — 기본값 대시보드 9000 · 언어 서버 9001 · MCP 9002 | 대시보드만 옮기면 나머지 둘이 조용히 막힙니다. 셋을 함께 옮기십시오 |
3. 첫 결과
대시보드 띄우기
이 글의 화면은 전부 jesse 자기 대시보드에서 나온 것입니다. 띄우는 법은 프로젝트 폴더에서 jesse run 한 줄, 주소는 http://localhost:9010(기본값 9000, 필자가 .env 에서 옮겼습니다). 비밀번호 창이 뜨는데 .env 의 PASSWORD= 값입니다 — 가입도 인터넷도 필요 없는 로컬 자물쇠이고, 1절의 jesse.trade 계정과는 별개입니다. 무료로, 계정 없이, 이 글의 4절까지 전부 보실 수 있습니다.
처음 열면 빈 화면이고, 위쪽 Your First Steps 의 Import Data → Create Strategy → Run Backtest 세 칸이 이 절에서 할 일입니다. 4절의 겹쳐 보는 화면(Trade chart)은 백테스트를 한 번 끝내야 결과 화면 오른쪽에 버튼으로 생깁니다.
봉 받기 — 91초
Import Candles 에서 거래소·종목·시작일만 고릅니다. 필자는 Binance Spot · BTC-USDT · 2026-06-24 로 잡았습니다.
Successfully processed 128160 observed candles since "2026-06-24" through "2026-09-20".
Existing rows were retained.
128,160개, 약 91초. 128,160 = 89일 × 1,440 — jesse 는 무조건 1분봉으로 받고 더 긴 시간틀은 합성합니다. DB가 금방 커집니다(204일치 29만 봉이 91MB).
Manage Candles 화면
Import Candles → Manage 화면입니다. 받아 둔 구간이 Start Date · End Date 로 정리됩니다. 오른쪽 Update · Copy · Export · Delete 를 보십시오 — 받아 둔 봉을 다른 거래소 이름으로 복사하거나 CSV로 내보낼 수 있습니다.
전략 하나 쓰고 백테스트 — 한 번 막힙니다
전략은 strategies/<이름>/__init__.py 에 파이썬 클래스로 씁니다. 제일 심심한 것을 썼습니다 — SMA 20/50 교차, 스팟 롱 전용, ATR×2 손절. 매매 의견이 아니라 몬테카를로에 태울 "매매 목록"을 만들기 위한 예제입니다.
class SmaCrossTutorial(Strategy):
@property
def fast(self): return ta.sma(self.candles, 20, sequential=True)
@property
def slow(self): return ta.sma(self.candles, 50, sequential=True)
def should_long(self) -> bool:
return utils.crossed(self.fast, self.slow, direction='above')
def go_long(self):
entry = self.price
self.stop_price = entry - ta.atr(self.candles) * 2
self.buy = utils.risk_to_qty(self.available_margin, 3, entry,
self.stop_price, fee_rate=self.fee_rate), entry
def on_open_position(self, order):
# 스팟에서는 손절을 go_long() 이 아니라 여기서 걸어야 한다.
self.stop_loss = self.position.qty, self.stop_price
def update_position(self):
if utils.crossed(self.fast, self.slow, direction='below'):
self.liquidate()
전문은 SmaCrossTutorial.py 에 있습니다. 그리고 방금 받은 90일 구간으로 백테스트를 걸었더니 거절당했습니다.
워밍업 봉 부족 실패 화면
실패 화면입니다. 빨간 박스의 SESSION STOPPED 문구를 보십시오 — "이 실행은 2026-02-11 부터의 데이터가 필요하다(시작일 앞의 워밍업 봉 210개 포함). 2026-02-11 부터 봉을 받고 다시 돌려라." 무엇이 부족한지와 어떻게 고치는지가 한 문장에 들어 있습니다.
지표를 계산하려면 시작일 이전의 봉이 필요합니다. jesse 는 기본 210개를 요구하고, 없으면 조용히 짧게 계산하는 대신 아예 거절합니다 — 값이 이상한 백테스트를 돌려 주는 것보다 나은 태도입니다. 2026-03-01 부터 다시 받고(117초, 165,600봉 추가) 시작일을 2026-03-15 로 잡았더니 됐습니다. 189일, 1시간봉, 0.41초.
백테스트 결과 화면
백테스트가 끝난 화면입니다. 왼쪽 Cumulative Returns vs Benchmark 에서 파란 선이 전략, 노란 점선이 그냥 BTC를 들고 있었을 때입니다 — 8월까지 뒤지다 9월에 붙은 게 한눈에 보입니다. 오른쪽 Performance 패널에서 볼 것은 Total Paid Fees 918.38, 순이익 1,217.59 의 4분의 3이 수수료로 나갔습니다.
Total Closed Trades 48
Total Net Profit 1217.59 (12.18%)
Start ⇒ Finish Balance 10000 ⇒ 11215.45
Total Paid Fees 918.38
Max Drawdown -14.52%
Win-rate 27.08% (13승 35패)
Sharpe / Calmar / Sortino 0.98 / 1.71 / 1.99
이렇게 나오면 성공입니다 — 매매 건수와 수수료 합계가 찍히고 오른쪽에 Trade chart 버튼이 생기면 4절로 갈 수 있습니다.
| 증상 | 원인 | 우회 |
|---|---|---|
Missing candles ... includes 210 warm-up candles |
시작일 앞의 봉이 부족합니다 | 메시지에 찍힌 날짜부터 다시 받습니다 |
세션이 running 에서 안 끝난다 |
설정 모양이 두 가지입니다 — 백테스트는 exchanges(복수), 몬테카를로는 exchange(단수)를 읽고, 안 맞으면 워커가 조용히 죽고 화면에는 아무 말도 안 올라옵니다 |
대시보드 폼으로 채우면 안 겪습니다. API로 넣을 때는 양쪽 키를 모두 |
InvalidStrategy: Setting self.stop_loss in the go_long() method is not supported for spot trading |
스팟의 제약입니다 | 손절을 on_open_position() 에서 거십시오 |
| 전략이 목록에 안 보인다 | 폴더 이름과 클래스 이름이 다릅니다 | strategies/SmaCrossTutorial/__init__.py 안에 class SmaCrossTutorial |
4. 제일 잘 쓰는 법 — "+12.18% 가 실력인가 운인가"를 물어보기
백테스트가 +12.18% 를 냈습니다. 그런데 이 숫자는 딱 한 번 일어난 일입니다 — 48건이 저 순서로 났고 가격이 저 경로로 움직였습니다. 순서가 달랐다면? 그걸 흔들어 보는 기능이 제품 메뉴에 있습니다.
| 무엇을 섞나 | 무엇을 묻나 | |
|---|---|---|
| Monte Carlo trades | 매매 48건의 순서를 섞는다 | 내가 겪은 낙폭이 순서 운이었나 |
| Monte Carlo candles | 봉 자체를 재표본해서 전략을 다시 돌린다 | 이 시장이 조금만 달랐어도 됐을까 |
각각 500번, 합쳐 1,000 시나리오 — 매매 셔플 5초, 봉 재표본 4초(CPU 4코어, ray 병렬화).
몬테카를로 결과 화면
위가 매매 순서 셔플 500회, 아래가 봉 재표본 500회입니다. 파란 실타래가 500개의 시나리오, 노란 선이 실제로 일어난 한 번. 위쪽 실타래는 오른쪽 끝에서 한 점(11215.45)으로 모이는데 아래쪽은 끝까지 벌어져 있습니다 — 이 차이가 이 절의 전부입니다.
매매 순서를 섞으면 수익률은 그대로고 낙폭만 변합니다.
| METRIC | ORIGINAL | WORST 5% | MEDIAN | BEST 5% |
|---|---|---|---|---|
| Return | 12.2% | 12.2% | 12.2% | 12.2% |
| Max Drawdown | −15.4% | −18.5% | −12.0% | −8.2% |
| Sharpe Ratio | 0.96 | 0.79 | 0.84 | 0.88 |
| Calmar Ratio | 1.61 | 1.34 | 2.08 | 3.03 |
수익률이 똑같은 건 당연합니다 — 같은 손익을 순서만 바꿔 더하면 합은 같으니까요. 그런데 최대 낙폭은 −8.2%에서 −18.5%까지 벌어집니다. 여기가 이 기능의 값입니다. "실제로 돌렸다면 겪었을 최악"은 −15.4%가 아니라 −18.5% 쪽이었을 수 있고, −15.4% 자체는 500번 중 전혀 특별하지 않았습니다(p=0.154). 반대로 Sharpe 실제값 0.963 은 셔플 500회의 최댓값 0.915 보다도 큽니다(p=0.0) — 전략이 잘나서가 아니라 매매가 난 순서 자체가 운이 좋았다는 뜻입니다.
봉을 재표본하니 아무것도 유의하지 않았습니다.
| METRIC | ORIGINAL | WORST 5% | MEDIAN | BEST 5% |
|---|---|---|---|---|
| Net Profit % | 12.18 | −18.13 | 15.34 | 56.38 |
| Max Drawdown | −15.39 | −30.41 | −16.00 | −8.14 |
| Sharpe Ratio | 0.96 | −1.61 | 1.19 | 3.29 |
| Win-rate | 0.271 | 0.171 | 0.273 | 0.390 |
| 매매 건수 | 48 | 39 | 46 | 53 |
+12.18% 는 −18.13% 와 +56.38% 사이의 한 점이었고, 중앙값(+15.34%)보다도 낮습니다. p값 0.570, 요약은 significant_metrics_5pct: 0 / total_metrics: 7 — 일곱 개 지표 중 유의한 것이 하나도 없습니다. 이 결과는 "SMA 20/50 교차가 통했다"의 증거가 전혀 아니고 재표본된 아무 시장에서나 나올 법한 값입니다. 백테스트 표만 봤으면 "189일에 +12%, 나쁘지 않네"로 끝났을 텐데, 9초짜리 계산 하나가 그 해석을 통째로 바꿉니다.
두 가지를 알고 돌리십시오. 몬테카를로 드래프트의 기본 수수료(0.0006)가 백테스트 쪽(0.001)과 다릅니다 — 안 맞추면 원본과 시나리오가 다른 수수료 위에서 비교됩니다. 그리고 봉 재표본은 fast_mode 를 켜십시오(합성 봉에서 ATR 이 급감하면 사이징이 폭주해 시나리오가 죽습니다 — jesse 자신의 툴 설명에 적힌 실패 모드입니다). 명령 전문과, 두 화면의 낙폭이 −15.4%·−14.52% 로 미세하게 다른 이유는 검증 기록에 있습니다.
안 되는 것: 이 계산은 jesse 자기 백테스트 결과에만 붙습니다(외부 기록을 넣는 입구가 없어 5절에서 우회했습니다). 재표본은 moving_block_bootstrap 한 종류가 기본이라 그 가정이 틀리면 분포도 틀립니다.
결정이 일어난 자리를 차트에서 보기
백테스트 결과 화면 오른쪽의 Trade chart 를 누르면 나옵니다.
Trade chart 전체
왼쪽은 완료된 매매 48건이 진입가·수량·수익률·방향·보유시간과 함께 줄지어 있는 목록, 오른쪽은 같은 기간 1시간봉 위에 실행된 주문이 전부 겹쳐 찍힌 차트입니다(파란 BUY · LONG, 빨간 SELL · LONG). 8월 하순의 수직 상승 구간을 보십시오 — 거기서 이 전략은 사지 않았습니다. 표로는 "승률 27%"였지만 차트로는 "가장 큰 상승을 놓치고 그 위에서 들락거렸다"가 보입니다.
목록에서 매매 하나를 고르면 그 자리로 확대됩니다.
매매 한 건 확대
첫 번째 매매(3월 15일 22:00 진입, 71시간 보유, +1.67%)를 펼친 화면입니다. 왼쪽 EXECUTIONS 2 orders 칸을 보십시오 — 71610.33 BUY MARKET · Executed 0.14, 72952.85 SELL MARKET · Executed −0.14. 주문 단위까지 내려갑니다. 오른쪽 차트는 진입 봉과 청산 봉을 점선으로 잇고, 노란 SELL · LONG 다음 봉부터 가격이 수직으로 빠진 것도 보입니다.
다만 이 차트에 지표 선은 기본으로 안 겹칩니다 — 필자의 SMA 20/50 선은 나오지 않았습니다. 전략 코드에서 따로 등록해야 하는 것으로 보이나 해 보지 않았으므로 미확인입니다.
백테스트 프레임워크는 많지만 자기 결과를 의심하는 장치를 제품 화면에 넣어 둔 것은 드뭅니다. 4편 freqtrade 의 lookahead-analysis 가 "내 코드가 미래를 훔쳐봤나"를 묻는다면, jesse 의 몬테카를로는 "내 결과가 운이었나" 를 묻습니다.
5. weltiq 로 옮기기 — 통합 실험 (방향이 반대입니다)
jesse 는 weltiq 의 실행과 직접 붙는 자리가 없습니다. 주문을 내는 쪽은 유료 플러그인이고, 그쪽은 자기 커넥터로 거래소에 붙습니다. 그런데 반대 방향으로는 붙습니다. 4절의 몬테카를로는 "매매 목록"만 있으면 도는 계산이고, weltiq 의 전략 컨테이너는 체결 원장을 파일로 내보냅니다. 필자는 이미 돌려 두고 정지된 컨테이너 하나를 썼습니다 — binance-spot / BTCUSDT / 일봉, 체결 60건 = 왕복 30건, 수수료 합계 37.37548391 USDT.
- weltiq 가입({{CTA_URL}}) → 마이 → 연결 관리에서 API 키 발급.
- 정지된 컨테이너의 내보내기를 받습니다(체결·수수료·성능표가 한 파일에 들어 있습니다).
- 같은 자로 재고 있는지부터 확인합니다 — 체결을 왕복 매매로 묶어 jesse 의 지표 계산기에 넣고 최대 낙폭이 weltiq 성능표와 맞는지 봅니다. 필자 실행에서는 양쪽 다 −0.5432% 로 소수 넷째 자리까지 같았습니다. 숫자가 안 맞으면 분포를 그려도 의미가 없습니다.
- 그 30건을 500번 섞습니다. 셔플·equity 재구성·신뢰구간은 전부 jesse 의 함수를 그대로 불렀습니다(필자가 다시 구현하면 jesse 로 잰 게 아니니까요). 스크립트는
wq_trades_monte_carlo.py. - 분포를 읽습니다.
weltiq 전략 컨테이너 30건 셔플 결과
왕복 매매 30건을 500번 섞어 본 최대 낙폭 분포입니다. 파란 막대가 셔플 분포의 분위수, 주황 세로선이 실제로 일어난 −0.5432%. 실제값이 25th(−0.5542%)와 median(−0.4990%) 사이, 분포 한가운데에 있는 것을 보십시오.
[max_drawdown] 원본 -0.5432 5th -0.6560 | 50th -0.4990 | 95th -0.3807 (p=0.276)
[calmar_ratio] 원본 -2.8900 5th -4.1229 | 50th -3.1457 | 95th -2.3930 (p=0.276)
셔플 500회, 시드 20260922
읽는 법. 이 컨테이너가 겪은 낙폭 −0.5432% 는 순서 운이 나빠서도 좋아서도 아니었습니다(p=0.276). 같은 30건이 다른 순서로 났다면 −0.656%까지 나빠질 수도, −0.381%까지 좋아질 수도 있었습니다. 그러니 중지 조건을 짤 때 "지금까지 최대 −0.54% 였으니 −0.6% 로 잡자"는 위험합니다 — 같은 전략, 같은 건수로도 −0.66% 는 평범하게 나옵니다.
이 조합이 해 주지 않는 것. 셔플은 손익은 그대로 두고 순서만 바꿉니다. 체결가가 다른 세상, 거부가 난 세상, 슬리피지가 더 컸던 세상은 이 방법으로 만들어지지 않습니다. 그건 4절의 봉 재표본 쪽인데, 그쪽은 jesse 전략을 다시 돌려야 해서 외부 기록에는 못 붙입니다.
네 단계 중 어디인가. jesse 의 본진은 ② 전략의 시스템화·장착이고 ③ 페이퍼 트레이딩은 유료 플러그인입니다. weltiq 와 붙는 자리는 ④ 거래 분석 한 곳뿐인데, 그 한 곳이 이 글에서 제일 쓸모 있었습니다. 앞뒤 단계에서 붙는 글은 주문 자리만 비어 있는 도구(1편 alpaca-mcp-server)와 판단만 하고 실행을 안 하는 도구(3편 LLM-Auto-Trader) 쪽입니다.
6. 써 보니
좋았던 것
- 몬테카를로가 제품 안에 있습니다. 결과를 두 방향으로 흔드는 데 9초, p값과 분위수까지 화면에 나옵니다. "내 결과가 운인가"를 기본 메뉴에서 묻는 프레임워크는 흔하지 않습니다.
- 결정 지점을 차트에서 봅니다. 매매 48건이 봉 위에 겹치고, 하나를 고르면 그 자리로 확대되며 주문 두 건이 체결 상태와 함께 펼쳐집니다.
- 틀렸을 때 정확히 말해 줍니다. 워밍업 봉이 부족하면 "2026-02-11 부터 받아서 다시 돌려라", 스팟에서 손절을 잘못 걸면 "
on_open_position()에서 걸어라"까지 나옵니다. 그리고 부족한 데이터로 억지로 돌려 주지 않습니다. - 빠르고, 기록이 남습니다. 189일 1시간봉 백테스트 0.41초, 1,000 시나리오 9초. 세션마다 전략 코드를 스냅샷해 둬서 "이 결과를 낸 게 어느 버전이었지"로 헤맬 일이 없습니다.
아쉬웠던 것
- 실거래·페이퍼가 유료입니다. 그래서 이 글은 jesse 의 주문 경로에 대해 아무 말도 못 합니다 — 미확인입니다. 4편 freqtrade 가 Dry-Run 을 기본값으로 둔 것과 대비되지만, 어느 쪽이 낫다기보다 성격이 다른 제품입니다.
- MCP 로는 실행을 못 합니다. AI 에게 시켜 쓸 것을 전제로 규약 문서까지 자동 생성하는 물건이 정작 실행은 계정을 요구하는 건 어긋나 보였습니다(규칙 자체는 저장소에 투명하게 공개돼 있습니다).
- 무겁고 크립토 전용입니다. PostgreSQL + Redis 필수, venv 866MB, 90일치 봉 하나에 91초. 1분봉 고정이라 4시간봉만 필요해도 1분봉을 다 받습니다. 주식도 전통 선물도 없습니다.
- 전략 장터에 수익률·승률이 앞면에 붙어 있습니다.
Strategies메뉴의 카드마다 PnL·최대낙폭·샤프·승률이 큼직하게 적혀 있고 PREMIUM 유료 전략도 섞여 있습니다. 이 글에서는 아무것도 받지 않았습니다.
비용 — 코드와 시세 0원(MIT · API 키 0개), 모델 안 씁니다(LLM 이 들어가지 않는 도구입니다). 유료는 실거래·페이퍼 라이브 플러그인과 장터의 PREMIUM 전략뿐입니다. 시간은 설치 8초 · 봉 90일치 91초 · 백테스트 0.41초 · 1,000 시나리오 9초.
7. 다음 행동
자기 전략으로 백테스트를 한 번 돌리고 그 결과를 바로 Monte Carlo 메뉴에 태워 보십시오. 9초입니다. 유의 지표가 0이면 그 전략은 아직 증거가 아니고, 그걸 아는 비용이 9초라는 게 이 도구를 쓸 이유입니다.
다음 편은 alsk1992/CloddsBot (★2.8k) 입니다. jesse 가 사람이 파이썬으로 규칙을 쓰고 그 규칙을 결정론으로 검증하는 도구였다면, CloddsBot 은 Claude 에 스킬 121개를 물려 판단을 시키는 쪽입니다 — 규칙이 코드가 아니라 대화에서 나오고, 그래서 막히는 자리가 정반대에 생깁니다.
weltiq 준비 — 3줄 1. 가입: {{CTA_URL}} 2. 마이 → 연결 관리에서 API 키 발급 3.
claude mcp add weltiq --header "Authorization: Bearer <키>" https://weltiq.ai/mcp내보낸 체결 원장을 이 글의 5절 그대로 jesse 의 몬테카를로에 태워 볼 수 있습니다.
이 글의 모든 명령·출력·숫자는 2026-09-22 에 실제로 돌려서 얻었습니다. 거래소 계정도 API 키도 만들지 않았고, 공개 시세만 조회했으며 나간 주문은 한 건도 없습니다. 어떤 매매 의견도 아닙니다. 여기 적지 않은 시행착오·원문 로그·명령 전문은 검증 기록에 있습니다.