freqtrade 설치부터 실전까지 — Dry-Run 을 문서 첫 절에 박아 둔 크립토 봇

별 5만 4천 개짜리 크립토 트레이딩 봇을 5초에 깔고, 키 없이 90일 봉을 받고, 모의 주문을 왕복시키고, 손절을 실제로 발동시킵니다. 그리고 백테스트가 나를 속이는지 봇에게 물어보는 법까지.

4편. freqtrade — "먼저 Dry-Run 으로 돌리세요"를 문서에 박아 둔 크립토 봇

이 글의 완료 조건: 독자는 API 키를 한 개도 만들지 않고 봉을 받아 백테스트를 돌린 뒤, 그 백테스트가 자기를 속이고 있는지 lookahead-analysis 로 확인하면 성공입니다.

하는 일 봉을 받고, 파이썬 전략으로 신호를 만들고, 거래소에 주문을 내고, 같은 전략을 백테스트로도 돌립니다. 여기에 웹 UI·텔레그램 제어·REST API·하이퍼옵트가 붙어 있습니다
맞는 사람 크립토만 하고, 파이썬으로 전략을 쓸 수 있고, 백테스트를 진지하게 하고 싶은 사람. 특히 자기 백테스트 결과를 못 믿겠다고 느껴 본 적이 있는 사람
안 맞는 사람 주식이 필요한 사람(크립토 전용) · 코드 없이 대화만으로 굴리고 싶은 사람 · 노트북을 24시간 켜 두기 어려운 사람(꺼져 있는 동안 손절은 아무도 안 지킵니다)
이 글의 결과물 키 없이 받은 90일치 봉, 4초짜리 백테스트 결과 한 장, 모의 주문이 왕복하고 손절이 발동한 기록, 그리고 일부러 심어 둔 미래 참조를 검사기가 잡아낸 출력
준비물·비용 코드 0원(GPL-3.0) · 모델 없음(LLM 을 쓰지 않는 도구입니다) · 시세 0원, API 키 0개 · weltiq 5절을 따라 할 때만
시간·난도 설치 5초, 첫 백테스트까지 1분. 난도 중 — venv 와 JSON 설정 파일을 만질 수 있어야 합니다
weltiq 와의 관계 실행은 안 붙습니다. freqtrade 가 모의 체결까지 자기 안에서 다 합니다. 붙는 자리는 자료 하나 — 양쪽 봉이 같은 값인지 대조했습니다(5절)
검증 환경·날짜 macOS 26.6.2 · arm64 · uv 0.10.12 · CPython 3.12.13 · freqtrade 2026.8 · CCXT 4.5.81 · 2026-09-21(명령·숫자) / 2026-09-22(화면)
제휴 고지 필자는 weltiq 로부터 이 연재의 원고료를 받습니다. 도구 평가는 필자가 직접 돌린 결과만 씁니다

거래소 계정도, API 키도 만들지 않았습니다. 거래소에는 공개 시세 조회만 했고, 이 글의 주문은 전부 freqtrade 자체 Dry-Run(모의) 안에서 일어났습니다. 거래소로 나간 주문은 한 건도 없습니다. 화면 캡처는 같은 환경·같은 설정으로 하루 뒤에 따로 찍어서, 그림 속 시세와 시각이 본문 숫자보다 하루 앞서 있습니다. FreqUI 포트도 기본 8080 대신 9160 입니다(그 노트북에서 8080 을 이미 쓰고 있었습니다).


1. 이게 뭔가요

freqtrade/freqtrade 는 파이썬으로 쓰인 오픈소스 크립토 트레이딩 봇입니다. 봉을 받아 오고, 전략 파일을 읽어 지표를 계산하고, 진입·청산 신호를 만들고, 주문을 내고, 포지션을 관리하고, 그 전부를 백테스트로도 돌립니다.

2017년 5월에 시작해 지금까지 돌아가고 있고, 포크가 1만 1천 개입니다. LLM 이 이 바닥에 오기 훨씬 전부터 있었고, 그래서 여기서 볼 것도 "AI 가 얼마나 잘하나"가 아니라 "봇이 갖춰야 할 것들을 9년 동안 어떻게 갖췄나" 쪽입니다.

항목 값 확인 방법
주소 github.com/freqtrade/freqtrade
라이선스 GPL-3.0 GitHub API
별 수 ★54,625 · 포크 11,325 (관측일 2026-09-21) GitHub API
마지막 푸시 2026-09-21 (이 글을 쓴 날) GitHub API
개설 2017-05-17 · 열린 이슈 30 · 아카이브 아님 GitHub API
버전 PyPI freqtrade 2026.8 · CCXT 4.5.81 freqtrade --version
거래소 78개 공식 지원 (-a 로 넓히면 104개) freqtrade list-exchanges

Dry-Run 이 말이 아니라 코드입니다

README 의 첫 절이 Disclaimer 이고, 거기 "항상 Dry-Run 으로 봇을 돌리는 것부터 시작하라"고 적혀 있습니다. 이런 문장은 많은 프로젝트가 씁니다. 다른 점은 코드가 그 말을 지킨다는 것입니다. 설치본을 열어 세 군데를 확인했습니다.

# freqtrade/constants.py:196
MINIMAL_CONFIG = {
    "stake_currency": "",
    "dry_run": True,
    ...
}

최소 설정에 dry_run: True 가 들어 있고, 설정에서 그 키를 아예 빼면 기본값이 Dry-Run 입니다(config.get("dry_run", True)). 실수로 지우면 실거래가 아니라 모의로 떨어집니다. 그리고 설정 마법사는 Dry-Run 여부를 맨 먼저, 기본값 「예」로 묻고, 아니라고 답해야만 API 키를 묻습니다. 이 글에서 키를 한 개도 안 만든 게 우연이 아니라 도구가 그렇게 설계돼 있어서입니다. (세 군데의 파일·줄 번호는 검증 기록에 있습니다.)

9년 된 프로젝트가 "일단 모의로"를 설정 마법사의 첫 질문 자리에 두고 유지해 왔다는 건 그 자체로 읽을 값이 있습니다.


2. 설치

필요한 건 파이썬 3.12 하나입니다. API 키도 거래소 계정도 안 만듭니다. 전용 가상환경을 파시길 권합니다 — 패키지를 83개 끌고 오고 그중에 ta-lib·scipy·pandas 같은 덩치가 섞여 있습니다.

uv venv -p 3.12 /private/tmp/tut-venvs/freqtrade
uv pip install --python /private/tmp/tut-venvs/freqtrade/bin/python freqtrade
freqtrade install-ui          # 웹 화면(FreqUI)은 따로 받습니다
freqtrade create-userdir --userdir ./user_data

캐시를 비우고 받아서 콜드 5.01초, 83패키지였습니다(캐시가 있으면 0.04초). 예전에는 ta-lib 때문에 C 라이브러리를 따로 깔아야 했는데 지금은 휠이 올라와 있어 그 단계가 없어졌습니다.

freqtrade --version 과 install-ui 출력

설치가 끝난 화면입니다. 위 칸의 Freqtrade Version: freqtrade 2026.8 이 보이면 봇은 깔린 것이고, 아래 칸의 UI already up-to-date, FreqUI Version 3.1.2 가 보이면 웹 화면까지 준비된 것입니다(처음이면 Downloading… 이 뜹니다). 이 한 줄을 건너뛰면 나중에 브라우저에 "Freqtrade UI not installed" 라는 회색 안내 페이지만 나옵니다.

마지막이 설정 파일입니다. freqtrade new-config 마법사는 대화형이라 스크립트에서 못 쓰므로 config.json 을 손으로 썼습니다. 핵심만 보면 이렇습니다(전문은 증적 폴더에).

{
    "max_open_trades": 3,
    "stake_currency": "USDT",
    "stake_amount": 100,
    "dry_run": true,
    "dry_run_wallet": 1000,
    "exchange": {
        "name": "binance", "key": "", "secret": "",
        "pair_whitelist": ["BTC/USDT", "ETH/USDT", "SOL/USDT"]
    },
    "api_server": {
        "enabled": true, "listen_ip_address": "127.0.0.1", "listen_port": 8080,
        "username": "tony", "password": "…", "jwt_secret_key": "…"
    },
    "force_entry_enable": true
}

key 와 secret 은 빈 문자열인 채로 둡니다. Dry-Run 에서는 안 씁니다.

막히는 자리

증상 원인 우회
Invalid configuration. Reason: '…' is too short jwt_secret_key 가 32자 미만 32자 이상으로. 필자도 여기서 처음 막혔습니다
new-config 가 스크립트에서 멈춤 대화형 마법사 config.json 을 직접 쓰거나 터미널에서 직접 실행
Market entry orders require entry_pricing.price_side = "other" 일부 명령이 시장가를 강제하는데 설정이 same entry_pricing·exit_pricing 의 price_side 를 other 로. 4절의 검사 명령에서 만납니다
DB 파일이 엉뚱한 데 생김 tradesv3.dryrun.sqlite 가 --userdir 이 아니라 현재 디렉터리에 생깁니다 항상 같은 폴더에서 실행하거나 --db-url 로 못 박으세요
브라우저에 "Freqtrade UI not installed" install-ui 를 안 돌렸습니다 freqtrade install-ui 뒤 봇을 다시 띄우세요

DB 파일 이름은 Dry-Run 이 tradesv3.dryrun.sqlite, 실거래가 tradesv3.sqlite 입니다. 파일 이름부터 갈라 둬서 모의 기록과 실거래 기록이 섞일 수가 없습니다.


3. 첫 결과

제일 작은 예제는 봉 받아 오기입니다. 계정도 키도 필요 없습니다.

freqtrade download-data -c config.json --userdir ./user_data --timeframes 1d 5m --days 90
freqtrade list-data -c config.json --userdir ./user_data
INFO - Instance is running with dry_run enabled
INFO - Downloaded data for BTC/USDT, 1d, spot with length 90.
INFO - Downloaded data for BTC/USDT, 5m, spot with length 26065.
real 26.70

      Found 6 pair / timeframe combinations.

이렇게 나오면 성공입니다. 26.7초에 일봉 270개와 5분봉 78,195개를 받았고, 키는 한 개도 안 썼습니다.

그다음은 예제 전략으로 백테스트입니다. 4.12초에 66건의 매매가 시뮬레이션됐습니다.

│ Total/Daily Avg Trades          │ 66 / 0.74           │
│ Final balance                   │ 1040.739 USDT       │
│ Total profit %                  │ 4.07%               │
│ Market change                   │ 56.16%              │
│ Win%                            │ 93.9%               │
│ Absolute drawdown               │ 10.184 USDT (0.97%) │

이 표에서 제일 중요한 줄은 수익률이 아니라 Market change 56.16% 입니다. 같은 기간에 그냥 들고 있었으면 56% 였고 이 전략은 4.07% 를 냈습니다. 승률 93.9% 짜리 전략이 시장한테 52%p 뒤진 겁니다. freqtrade 가 이 줄을 요약 표에 기본으로 넣어 둔다는 점을 짚고 싶습니다. 대단해 보일 결과 옆에 비교 기준을 나란히 붙여 둔 겁니다. (예제 전략의 예제 결과이고 어떤 매매 의견도 아닙니다.)

화면 띄우기 — FreqUI

띄우는 명령이 따로 없습니다. 봇을 띄우면 화면도 같이 뜹니다. 조건은 설정의 api_server.enabled 가 true 인 것 하나입니다. 매매 없이 화면만 보려면 freqtrade webserver 모드가 따로 있습니다.

freqtrade trade -c config.json --userdir ./user_data

freqtrade 봇 기동 로그 — Dry run is enabled, HTTP Server at 127.0.0.1:9160

봇을 띄운 터미널입니다. 두 줄만 보시면 됩니다 — Starting HTTP Server at 127.0.0.1:9160 이 화면 주소고, Dry run is enabled. All trades are simulated. 가 이게 모의라는 선언입니다. 맨 아래 dry_run_buy_BTC/USDT_… 는 잠시 뒤 화면에서 낸 모의 주문입니다.

주소는 기본 http://127.0.0.1:8080 이고 api_server.listen_port 로 바꿉니다. listen_ip_address 는 127.0.0.1 로 두십시오 — 0.0.0.0 으로 바꾸면 freqtrade 가 SECURITY WARNING - Local Rest Server listening to external connections 를 로그에 남깁니다. 강제 진입·강제 청산·봇 정지까지 되는 화면입니다.

FreqUI 로그인 창

로그인 창입니다. 계정을 새로 만드는 게 아니라 네 칸 중 API Url 에 봇 주소(http://127.0.0.1:9160)를, Username · Password 에 config.json 에 적어 둔 값을 넣습니다. Bot Name 은 화면에서 부를 별명이라 아무거나 쓰셔도 됩니다 — FreqUI 는 봇을 여러 개 등록해 한 화면에서 볼 수 있어서 있는 칸입니다. 비밀번호를 비워 두면 기동할 때 경고가 뜹니다. 비워 두지 마십시오.

FreqUI 첫 화면 — No bot selected

처음 연 화면입니다. 오른쪽 위 No bot selected 와 그 옆의 Login 버튼을 보십시오 — 이 상태에서는 아무 데이터도 안 나옵니다. 봇이 안 떠 있어도 이 화면까지는 나오기 때문에, 이 그림이 보인다고 봇이 도는 건 아닙니다.

FreqUI Dashboard — Dry 뱃지와 누적 손익

로그인 직후의 Dashboard 입니다. 봇 이름 옆의 초록색 Dry 뱃지를 제일 먼저 보십시오 — 이 계좌가 모의라는 표시이고, 실거래 봇에는 이 자리가 Live 로 바뀝니다. 그 오른쪽 Closed Profit −0.08% (−0.76) 와 Balance 989.247 USDT(dry) 는 전날 돌린 모의 매매 4건의 결과가 그대로 남아 있는 것입니다(W/L 0 / 4 — 네 건 다 졌습니다). 오른쪽 아래 Cumulative Profit 의 계단은 그 네 건이 21:10~21:25 사이에 하나씩 닫힌 자국입니다.

FreqUI Trade 화면 — 1분봉 차트와 보유 종목 손익

Trade 화면입니다. 오른쪽이 봇이 실제로 보고 있는 BTC/USDT 1분봉이고, 위에 ManualStrategy | 1m 이라고 지금 돌고 있는 전략 이름과 시간틀이 적혀 있습니다. 왼쪽 목록의 BTC/USDT 칸에 붙은 빨간 −0.14% (−0.141) 가 지금 들고 있는 모의 포지션의 실시간 손익입니다 — 종목 목록이 그대로 손익판이 됩니다.

텔레그램으로도 조종됩니다(telegram.enabled 를 켜면 봇 기동 때 같이 붙고, 채팅 ID 가 곧 인증입니다). 다만 이번에 텔레그램 봇을 실제로 만들지 않았습니다 — 설정과 코드로 확인한 내용이라 미확인으로 두고, 자세한 것은 검증 기록에 적었습니다.


4. 제일 잘 쓰는 법 — 백테스트가 나를 속이는지 봇에게 물어보기

먼저 돌려 본 것을 한눈에 적습니다. 전부 freqtrade 안에서, 키 없이 끝났습니다.

해 본 것 결과 걸린 시간
USDT 마켓 전체에서 후보 좁히기 (거래대금 → 상장기간 → 가격 → 스프레드 → 변동폭) 493 → 100 → 97 → 88 → 86 → 78개 9.04초
모의 주문 한 번 왕복 (ETH/USDT 진입 2728.80 → 청산 2725.35) 수수료 0.0999+0.0997, 손익 −0.32589189 USDT (−0.33%) 34초
손절 −0.2% 로 걸어 놓고 관찰 10분간 미발동 — 표시 손익에 왕복 수수료 0.2% 가 이미 포함이라 −0.4% 근처여야 걸립니다 10분
손절을 −0.05% 로 고쳐 재주문 진입 85198.18 → 91초 만에 Reason: stop_loss 91초
손절선 85155.59 와 실제 체결가 비교 85145.81 로 채워짐 — 9.78 달러(약 1.1bp) 아래 —
포지션을 연 채로 kill -9 뒤 재기동 Found open trade: Trade(id=2, …) — 수량·진입가·손절선 그대로 복구 20초

세 줄만 덧붙이면, 모의인데도 안 봐줍니다(손절선과 체결가가 다르게 기록됩니다), 손절폭을 바꾸려면 재시작해야 하고(reload_config 는 이미 열린 포지션의 손절선을 안 바꿉니다), 봇이 죽어 있는 동안은 아무도 안 지킵니다(복구는 "그동안의 일을 되돌린다"가 아니라 "그 자리에서 다시 시작한다"입니다). 각 항목의 원문 로그와 거래 레코드는 검증 기록에 그대로 있습니다.

FreqUI Open Trades — 모의 포지션 한 건

차트 아래 Open Trades 칸입니다. Open rate 85868.2 로 들어가서 Current rate 85884.98 인데 Current profit % −0.18% 로 빨간색입니다 — 가격은 올랐는데 손익은 마이너스입니다. 왕복 수수료 0.2% 가 이미 물려 있어서 그렇습니다. 모의라고 봐주지 않는다는 게 이 한 줄에 다 들어 있습니다. 맨 오른쪽 아이콘이 강제 청산 버튼입니다.

그리고 이게 이 도구의 자리입니다

백테스트에서 제일 흔하고 제일 안 보이는 사고가 미래 참조(lookahead bias) 입니다. 지표를 계산하다 실수로 아직 오지 않은 봉의 값을 지금 봉에 끌어오는 것. 그러면 백테스트 성적이 거짓말처럼 좋아지는데, 실전에서는 그 값이 없으니 전략이 통째로 무너집니다. shift() 부호 하나, rolling(center=True) 하나면 생깁니다.

freqtrade 에는 이걸 잡아내는 명령이 들어 있습니다. lookahead-analysis 입니다. 같은 전략을 전체 구간과 잘라 낸 구간으로 각각 돌려서, 과거 신호가 미래 데이터의 유무에 따라 달라지는지를 봅니다. 예제 전략에 물어보니 5.28초에 has_bias: No 가 나왔습니다.

그런데 이것만으로는 이 검사기가 진짜 잡는지를 모릅니다. 그래서 일부러 미래를 훔쳐보는 전략을 하나 썼습니다. 12봉(5분봉 기준 1시간) 뒤의 종가를 지금 봉으로 끌어오고, 그게 지금보다 0.5% 높으면 삽니다.

class CheatingStrategy(IStrategy):
    timeframe = "5m"
    minimal_roi = {"0": 100}      # ROI 로는 안 나가게
    stoploss = -0.99              # 손절로도 안 나가게

    def populate_indicators(self, dataframe, metadata):
        # shift(-12) = 12봉 뒤의 종가를 지금 봉에 끌어온다. 이게 미래 참조다.
        dataframe["future_close"] = dataframe["close"].shift(-12)
        return dataframe

    def populate_entry_trend(self, dataframe, metadata):
        dataframe.loc[dataframe["future_close"] > dataframe["close"] * 1.005,
                      "enter_long"] = 1
        return dataframe

백테스트를 돌리니 51일에 44.11%, 승률 92.8%, 최대 낙폭 0.06%. 이런 결과가 나오면 대부분 사람이 "드디어"라고 생각합니다. 낙폭 0.06% 는 사실상 손실 나는 구간이 없었다는 뜻이고, 현실에는 없는 숫자입니다.

이제 검사기에게 물어봅니다.

freqtrade lookahead-analysis -c config.json --userdir ./user_data \
  --strategy CheatingStrategy --timerange 20260801- --timeframe 5m
┃ strategy         ┃ has_bias ┃ total_signals ┃ biased_entry_signals ┃ biased_indicators                   ┃
│ CheatingStrategy │      Yes │            20 │                   20 │ future_close, enter_long, exit_long │

has_bias: Yes. 그리고 오염된 열 이름을 그대로 짚어 줍니다 — future_close. 필자가 문제를 심어 둔 바로 그 변수 이름입니다. 신호 20개 중 20개가 전부 편향으로 잡혔고, 3.10초 걸렸습니다. "뭔가 이상하다"가 아니라 "이 컬럼이다"까지 옵니다. 정상 전략은 No 로 통과시켰으니 잡는 쪽과 안 잡는 쪽이 둘 다 확인된 셈입니다.

다만 이건 미래 참조만 봅니다. 과최적화·생존 편향·유동성 무시는 못 잡고, has_bias: No 가 "이 전략이 좋다"는 뜻은 전혀 아닙니다 — 3절의 예제 전략은 No 를 받고도 시장에 52%p 뒤졌습니다.

왜 이게 이 도구의 자리인가. 백테스트를 돌리는 프레임워크는 많지만 자기 백테스트를 스스로 의심하는 명령을 제품 안에 넣어 둔 것은 드뭅니다. 9년 동안 사람들이 이 함정에 얼마나 많이 빠졌는지를 아는 프로젝트만 만들 수 있는 기능입니다. freqtrade 를 쓰신다면 전략을 만들 때마다 이 명령을 돌리는 습관이 여기서 얻을 수 있는 제일 큰 값입니다.


5. weltiq 로 옮기기 — 붙는 자리는 실행이 아니라 자료입니다

먼저 정직하게 적습니다. 이 도구는 weltiq 의 실행과 직접 붙는 자리가 없습니다. freqtrade 는 봉도 자기가 받고, 판단도 자기가 하고, 모의 체결도 자기가 하고, 기록도 자기 sqlite 에 남깁니다. 4절을 전부 freqtrade 안에서 돌린 게 그 증거입니다. 크립토를 freqtrade 로 하시는 분이 굳이 페이퍼 계좌를 덧붙일 이유가 없습니다.

붙는 자리는 하나, 자료입니다. freqtrade 가 바이낸스에서 받아 둔 일봉과 weltiq 의 /v1/bars 가 주는 일봉이 같은 값인지 BTC/USDT 30봉으로 맞춰 봤습니다.

weltiq n = 30   (첫 2026-08-23T09:00+09:00  마지막 2026-09-21T09:00+09:00)

겹치는 일봉 30개 중 네 값(OHLC) 모두 일치 30 · 다름 0
  2026-09-19  freqtrade o=80883.86 c=81249.99 | weltiq o=80883.86 c=81249.99  → 일치
  2026-09-20  freqtrade o=81249.99 c=81178.00 | weltiq o=81249.99 c=81178.00  → 일치

freqtrade 봉과 weltiq 봉 대조 출력

그 대조를 실제로 돌린 화면입니다. 맨 윗줄 마지막 2026-09-21T09:00:00 뒤의 +09:00 을 눈여겨보십시오 — 바로 아래에서 이야기할 라벨 차이가 여기 있습니다. 스크립트는 compare_bars.py 에 있고, 저장해 둔 두 파일만 읽으므로 거래소에도 API 에도 붙지 않습니다.

30개 전부 소수점까지 같았습니다. 그리고 둘 다 아직 안 끝난 오늘 봉을 빼고 있었습니다 — freqtrade 는 다운로드 때 data ends at … 경고와 함께 빼고, weltiq 는 확정 봉만 저장합니다. 같은 판단입니다.

다만 라벨이 하루 어긋나 보입니다. 이건 고장이 아니라 규약 차이입니다.

봉에 붙는 시각 같은 봉의 표기
freqtrade 시작 시각, UTC 2026-09-20 00:00 UTC
weltiq 끝나는 시각, 요청 시간대 2026-09-21T09:00:00+09:00

두 쪽 숫자를 나란히 놓으실 일이 있으면 한 봉 밀어서 맞추셔야 합니다. 위 대조도 그렇게 맞추고 나서 30/30 이 나왔습니다.

이 조합이 해 주지 않는 것도 적습니다. weltiq 의 /v1/bars 는 최대 720시간(30일) 까지만 줍니다. 90일치 봉을 받아다 백테스트를 돌리는 용도로는 안 맞고, 그건 freqtrade 의 download-data 가 26.7초에 하는 일입니다. 두 시스템의 봉이 같은 값이라는 확인은 양쪽 기록을 같은 자로 잴 수 있다는 뜻이지, 봉을 여기서 받으라는 뜻이 아닙니다.


6. 써 보니

좋았던 것

  1. Dry-Run 이 말이 아니라 코드입니다. 기본값이고, 설정 마법사의 첫 질문이고, 실수로 지우면 안전한 쪽으로 떨어지고, 모의일 때는 API 키를 묻지도 않습니다. DB 파일 이름까지 갈라 둡니다.
  2. 키 없이 여기까지 옵니다. 설치 5초, 봉 90일 26.7초, 백테스트 4.1초, 모의 주문 왕복 34초 — 계정 하나 안 만들고 했습니다.
  3. lookahead-analysis 가 진짜입니다. 일부러 심은 미래 참조를 잡았고 오염된 컬럼 이름까지 짚었습니다. 이 기능 하나만으로 이 도구를 쓸 이유가 됩니다.
  4. 모의인데도 안 봐줍니다. 손절선(85,155.59)과 체결가(85,145.81)가 다르게 기록되고, 수수료가 왕복으로 물려서 가격이 안 움직여도 −0.2% 입니다.

아쉬웠던 것

  1. 크립토 전용입니다. 주식도 전통 선물도 안 되고 확장 계획도 안 보입니다.
  2. 규칙을 무중단으로 못 바꿉니다. 손절폭을 바꾸려면 재시작해야 하고, 이미 열린 포지션은 재시작해도 옛 손절선을 들고 있습니다.
  3. 봇이 죽어 있는 동안은 아무도 안 지킵니다. 재시작하면 포지션은 돌아오지만 그 사이에 뚫린 손절은 그냥 지나갑니다. 노트북으로 돌리시는 분에게는 이게 실질적인 문제입니다.
  4. 서드파티 MCP 래퍼(kukapay/freqtrade-mcp, ★145)는 오늘 그대로는 안 깔립니다. 코드가 2025-04-05 이후 멈춰 있어 README 대로 설치하면 기동부터 실패하고, 두 줄 고쳐 붙여도 툴 17개 중 11개만 돌고 주문을 내는 툴이 안 됩니다. 대화로 굴릴 생각이셨다면 포크하거나 freqtrade 공식 REST 클라이언트를 직접 부르십시오 — 실패한 여섯 개의 원인은 검증 기록에 전부 있습니다.

비용

항목 값
코드·시세 0원 (GPL-3.0 · API 키 0개)
모델 없음 — LLM 을 쓰지 않는 도구입니다
시간 설치 5초 · 봉 90일 26.7초 · 백테스트 4.1초

7. 다음 편 예고

다음은 tradermonty/claude-trading-skills (★2.9k) 입니다. 성격이 정반대입니다 — freqtrade 는 봉도, 전략도, 체결도, 기록도 자기 것인 한 덩어리인 데 반해 claude-trading-skills 는 Claude 에게 붙여 쓰는 스킬 묶음이고 스스로 돌지 않습니다. 이번 편의 질문이 "붙을 자리가 없다"였다면 다음 편은 "비어 있는 그 자리에 무엇이 들어가야 하나" 가 됩니다.

weltiq 준비 — 3줄 1. 가입: {{CTA_URL}} 2. 마이 → 연결 관리에서 API 키 발급 3. claude mcp add weltiq --header "Authorization: Bearer <키>" https://weltiq.ai/mcp

freqtrade 가 못 가는 주식·해외 시장까지 같은 규칙을 걸어 보고 싶으시면 그때 보실 자리입니다.


이 글의 모든 명령·출력·숫자는 2026-09-21(명령)과 2026-09-22(화면)에 실제로 돌려서 얻었습니다. 실제 돈이 오간 주문은 없고 전부 모의입니다. 어떤 매매 의견도 아닙니다. 여기 적지 않은 시행착오·원문 로그·결함 목록은 검증 기록에 있습니다.