WILD_SNIPER
실거래 검증 중Binance 스팟 자동 트레이딩 봇
시작: 2025-12
Binance 스팟 시장에서 변동성 큰 알트코인을 자동 진입·청산하는 Python 트레이딩 봇입니다.
ccxt 기반, ATR/ADX/RSI/Volume 다중 필터 + Kelly 사이징 + 트레일링 SL/TP. SAFE-XX 패치 시리즈로 실전에서 발견되는 문제(고아 포지션, 재접속, PID 락, SIGKILL 복구)를 하나씩 잡아왔습니다.
V4.x 실험 후 안정성을 위해 V3.7.1로 회귀하여 운영 중. 진짜 손실은 전략이 아니라 심볼 선택에 있었음을 데이터로 확인했습니다.
기술 스택
하이라이트
- •52건 실거래 데이터 분석 → 손실 67%가 단일 심볼(MOVR)에 집중
- •V3.7/V3.8/V3.9 백테스트 + walk-forward로 패치별 효과 검증
- •Paper mode 모니터링 시스템 (200건 단위 자동 비교)
- •PID 락 + SIGKILL 복구 + 재접속 자동화
일자별 빌드 기록
어떻게 만들어졌는지 시간순 기록. 코드는 공개해도 안전한 부분만, 민감 부분은 마킹.
2025-12
시작 — 단순 돌파 전략
첫 버전 V3.3. 변동성 큰 알트 페어에서 단순 돌파 진입 + 고정 TP/SL. 코드 ~600줄. 첫 라이브 테스트는 1주일 만에 -15% 손실로 종료.
2026-01
SAFE 시리즈 시작 — SAFE-05 고아 포지션 정리
봇이 죽으면 거래소에 고아(orphan) 포지션이 남아 다음 시작 시 충돌. 시작 시 모든 미체결·고아 포지션 자동 정리하는 SAFE-05 추가.
# SAFE-05: orphan cleanup at startup
def cleanup_orphans(exchange, allowed_symbols):
open_orders = exchange.fetch_open_orders()
for order in open_orders:
if order['symbol'] not in allowed_symbols:
exchange.cancel_order(order['id'], order['symbol'])
logger.warning(f"Cancelled orphan: {order['symbol']}")
positions = exchange.fetch_positions()
for pos in positions:
if pos['contracts'] > 0 and pos['symbol'] not in allowed_symbols:
# 안전을 위해 자동 청산은 안 하고 경고만, 사용자 확인
logger.error(f"ORPHAN POSITION: {pos['symbol']} {pos['contracts']}")2026-01
SAFE-06 FSM 상태 직렬화
FSM 상태(IDLE/BUYING/HOLDING/SELLING/STUCK)에 race condition 발생. 동시에 두 신호가 들어오면 상태 충돌. 상태 전이를 명시적 lock으로 직렬화.
2026-02
V3.7.0 — 안정화 베이스라인
SAFE-05~SAFE-08 누적 + 파라미터 튜닝. 라이브 데이터: 418건, 승률 67.5%, 평균 홀딩 1분 49초, 누적 +$3.00. 카테고리 최상위 승률.
2026-03
V3.8.0 — 한 번에 5개 변경한 실수
R:R 개선하려고 MIN_PROFIT 1.2→2.0, Trail Activate 0.6→2.5, Trail Callback 0.4→1.0, SL ATR 1.5→1.0, MAX_HOLD 900→1200 + FEAT-11 본절가 대기 동시 변경. 결과: 승률 67.5% → 46.9%. 어느 변경이 원인인지 분리 불가능.
2026-03
V3.9.x — 안전 패치 추가, 깨진 엣지 그대로
V3.8 위에 SAFE-15(블랙리스트) ~ SAFE-18 추가. 안전성↑ 그러나 V3.8.0의 깨진 엣지는 남음. V3.9.3 라이브 18건 22.2% 승률.
2026-04-22
V4.0/V4.1 — V3.7 전략 복원 + 안전 패치 머지
V3.7 전략 + SAFE-XX 안전 + ADX 30→25 / Volume 1.5→1.2 완화. paper mode 검증 후 라이브 — V4.1 52건 41.7% 승률, -$5.02.
2026-04-24
심볼별 분해 — 진짜 원인 발견
52건 손실의 67%가 단일 심볼(MOVR/USDT). KAT/USDT는 60% 승률 (V3.7 베이스라인 근접). 전략 엔진은 정상 — 심볼 선택이 깨진 것.
# 심볼별 PnL 분해 (V4.1 분석)
import pandas as pd
trades = pd.read_csv("trades_v4_1.csv")
by_symbol = trades.groupby("symbol").agg(
n=("pnl", "count"),
wr=("pnl", lambda s: (s > 0).mean()),
pnl=("pnl", "sum")
).sort_values("pnl")
print(by_symbol)
# MOVR/USDT 10 0.30 -1.72 ← 손실 67% 책임
# KAT/USDT 15 0.60 -0.20 ← V3.7 baseline 근접2026-04-25
V3.7.1 롤백 결정
V4.1 보강 vs V3.7.1 회귀 → 회귀 선택. 검증된 위치 + 한 번에 변수 하나 원칙. 이후 심볼 필터만 단독 PoC 후 V4.2 통합 예정.
2026-04-26
V3.7.1 첫날 78.3% 회복
롤백 후 60건 거래, 47승 13패, +$1.98 USDT. 잔고 625.36 → 627.28. V4.1 우하향에서 우상향으로 전환 확인.
빌드 일지
2026-04-27 · 프로젝트
Sweet Spot 0.8%는 7일 노이즈에 fit된 값이었다 — V4.2 → V4.3.1 백테 일지
V4.3.1 (Trail Activate 0.8%)는 7일 백테에서 +$0.601, PF 1.20을 찍었습니다. 같은 코드로 30일을 돌렸더니 -$1.65, PF 0.74가 나왔습니다. 오버피팅의 표준적 증상을 정면에서 만난 기록.
2026-04-27 · 프로젝트
정정 — 어제 일지의 숫자가 다른 베이스라인 위에 있었다
어제 발표한 V4.3.1 백테 일지에 데이터 출처 오류가 있었습니다. 'V4.3.1 7일 +$0.601'이라고 적힌 숫자는 실제로는 V4.4 (ADX 필터가 이미 적용된) 결과였습니다. Build in Public이 의미하는 게 이런 정정도 함께 공개하는 것이라 생각해서 적습니다.
2026-04-27 · AI Lab
AI 에이전트 셋업, 7번의 함정과 탈출 — ₩271,621 결제 폭탄에서 24시간 안에 월 $0까지
Gemini 무료라고 알고 쓰던 OpenClaw가 ₩271,621 청구서를 떨어뜨렸습니다. 그 후 24시간 동안 7번의 함정에 걸리며 셋업을 갈아탄 기록입니다. 결과는 월 $0 영구 운영. 무료라는 단어가 함정이 되는 순간을 데이터로 정리했습니다.
2026-04-26 · 프로젝트
WILD_SNIPER V3.7.1 롤백 첫날 — 60건 78.3% 승률
V4.1 실거래에서 41.7% 승률로 손실이 누적됐습니다. V3.7.1로 되돌린 첫날, 60건 거래 중 47승 13패. 전략을 바꾸지 않고 한 일이 결과를 바꿨습니다.
2026-04-26 · 회고
5개월 — wildeconforce가 어떻게 만들어졌나
AI 처음 만진 게 2025년 11월. 5개월 동안 7개 프로젝트가 쌓였습니다. 어떤 순서로, 왜 그 순서로 왔는지 정리합니다.
2026-04-24 · 프로젝트
WILD_SNIPER V4.1 실거래 52건 — 진짜 원인은 심볼 선택
승률 41.7%, 누적 -$5.02. Phase 1b 라고 분석한 게 사실은 한 심볼 (MOVR) 가 67% 손실 책임.
2026-04-22 · 프로젝트
WILD_SNIPER — V3.3에서 V4.0까지의 진화
5개월 동안 V3.3에서 V4.0까지 18개 버전. 각 버전이 왜 만들어졌고, 무엇이 깨졌고, 어떻게 고쳐졌나.