본문으로 건너뛰기
목차

😅 요즘 블로그가 뜸했던 이유
#

안녕하세요! 11월의 첫 포스팅이네요~ 😊

여러분, 눈치채셨나요? 요즘 블로그 업데이트가 좀 뜸했죠? 😅

사실은… 이런 걸 만들고 있었습니다!

Moon Seeker Trading Bot 대시보드 메인 화면
끈질긴 튜닝 끝에 탄생한 Moon Seeker Trading Bot. python-binance 버리고 직접 만들었어요! 🥹

Git 히스토리를 확인해보니 최초 커밋이 10월 13일이더라고요. 3주가 조금 넘었네요!

🕰️ 4년 전, 그때 그 좌절
#

사실 이 프로젝트, 처음 시도한 게 4년 전이었습니다.

당시에도 “나만의 자동매매 봇을 만들어보자!“는 열정은 넘쳤어요. 그런데…

프론트엔드, 백엔드, 데이터베이스, API 연동, 실시간 데이터 처리, 차트 구현… 어찌어찌 다 만들긴 했어요.

문제는 그 다음이었죠.

봇은 돌아가는데… 수익이 안 나는 거예요. 😰

차트를 어떻게 봐야 하는지, 언제 사고 언제 팔아야 하는지를 아예 몰랐거든요.

“아 이거… 기술 문제가 아니라 트레이딩 지식이 없는 게 문제구나…” 🤦‍♂️

결국 “나중에 공부하고 다시 하지 뭐~” 하면서 GitHub에 처박아두고 잊고 살았습니다. 😓

💡 Claude Code의 등장 - 다시 시작할 용기
#

그러다가 최근에 Claude Code를 쓰면서 생각이 들더라고요.

“어? 이거면 그때 못 만들었던 거 만들 수 있지 않을까?”

Claude Code는 제가 “이런 기능이 필요해"라고 말하면, 알아서 척척 만들어주더라고요. 마치 옆에 시니어 개발자가 앉아있는 것처럼요! 🤖

🚀 15일간의 개발 여정
#

첫 주: 순조로운 출발
#

“트레이딩 봇 대시보드 만들고 싶은데, 간단하게 할 수 있는 방법 없어?”

Claude Code가 Streamlit을 추천했고, 기본 UI는 금방 만들었어요.

import streamlit as st

st.title("🌙 Moon Seeker Trading Bot 📊 Dashboard")

“와, 이렇게 쉽게 되네?” 😍

그리고 찾아온 복병… 😱
#

“바이낸스 API 붙이려면 어떻게 해야 해?”

Claude Code가 추천한 건 python-binance 라이브러리였어요.

pip install python-binance
from binance.client import Client

# 테스트용으로 testnet 사용
client = Client(api_key, api_secret, testnet=True)

근데…

BinanceAPIException: Invalid API-key, IP, or permissions for action

“???” 🤔

3시간의 삽질 시작 😤
#

“Claude야, 이거 왜 안 되는데?”

이것저것 시도해봤어요:

  • API 키 재발급 → 안 됨
  • IP 화이트리스트 설정 → 안 됨
  • testnet URL 직접 지정 → 안 됨
  • python-binance 버전 바꿔보기 → 안 됨

공식 문서도 뒤지고, 스택오버플로우도 찾아보고, GitHub 이슈도 읽어봤어요.

근데 모두가 같은 증상을 호소하고 있더라고요.

“testnet이 작동 안 해요!”

진실 발견 💡
#

계속 삽질하다가… 바이낸스 공식 공지를 발견했어요.

바이낸스가 테스트넷 시스템을 완전히 바꿨더라고요! 😱

🔄 무슨 일이 있었나
#

기존 시스템 (2024년 이전)

  • Spot Testnet: testnet.binance.vision
  • Futures Testnet: testnet.binancefuture.com

새로운 시스템 (2024년~)

새로운 엔드포인트들
#

# Spot REST API
https://demo-api.binance.com

# Spot WebSocket
wss://demo-ws-api.binance.com

# Futures REST API  
https://demo-fapi.binance.com

# Futures WebSocket
wss://demo-fstream.binance.com

그래서 안 됐구나! 🤦‍♂️

python-binance는 옛날 testnet 주소를 사용하니까 당연히 안 되는 거였어요…

결단의 순간: “그냥 직접 만들자!” 💪
#

여기서 선택의 순간이 왔어요.

  1. python-binance 업데이트 기다리기 (언제?)
  2. 라이브러리 소스 뜯어서 고치기 (복잡함)
  3. REST API 직접 붙이기

“Claude야, python-binance 버리자. 그냥 REST API로 직접 붙이면 안 돼?”

“좋아요! 바이낸스 API 문서 보면서 만들어볼게요!”

이게… 진짜 삽질의 시작이자 배움의 시작이었습니다 ㅋㅋㅋ

직접 만들기 🛠️
#

1단계: BinanceClient 클래스 - Spot으로 시작

처음엔 Spot 거래만 생각하고 만들었어요:

class BinanceClient:
    """Binance API client wrapper with testnet support"""
    
    def __init__(self, config_path: str = "config/trading_config.yaml", 
                 logger=None, db_client=None):
        load_dotenv()
        
        # Get API credentials
        self.api_key = os.getenv('BINANCE_API_KEY')
        self.secret_key = os.getenv('BINANCE_SECRET_KEY')
        self.environment = os.getenv('ENVIRONMENT', 'testnet')
        
        # Spot 클라이언트만 초기화
        self.spot_client = SpotAPIClient(
            api_key=self.api_key,
            secret_key=self.secret_key,
            testnet=testnet
        )

“자, 이제 매수해서 오르면 팔면 되겠네!” 😎

그런데…

하락장에서는 수익을 못 내는 거예요! 😱

“아… Spot은 롱만 되니까 하락장에서 손 놓고 있어야 하는구나…”

그래서 결단! 선물로 바꾸자!

# Spot과 Futures 둘 다 지원하도록 리팩토링!
self.trading_mode = os.getenv('TRADING_MODE', 'spot')  # spot 또는 futures

# Initialize clients (Spot과 Futures 분리!)
self.spot_client = None
self.futures_client = None
self._initialize_client()

처음엔 Claude가 Spot이랑 Futures를 한 클래스에 다 때려박더라고요.

“야! 이거 유지보수 어떻게 해! 분리하라고!”

몇 번 갈궈서 결국 깔끔하게 분리했죠 ㅋㅋ

2단계: 환경별 클라이언트 초기화

testnet과 production을 쉽게 전환할 수 있게 만들었어요:

def _initialize_client(self):
    try:
        testnet = (self.environment == 'testnet')
        
        if testnet:
            self.logger.info("Connecting to Binance Testnet...")
        else:
            self.logger.warning("Connecting to Binance Production - USE WITH CAUTION!")
        
        # Spot API Client 초기화
        self.spot_client = SpotAPIClient(
            api_key=self.api_key,
            secret_key=self.secret_key,
            testnet=testnet
        )
        
        # Futures API Client 초기화
        self.futures_client = FuturesAPIClient(
            api_key=self.api_key,
            secret_key=self.secret_key,
            testnet=testnet
        )
        
        # 선물 모드일 경우 레버리지 설정
        if self.trading_mode == 'futures':
            self._initialize_futures_leverage()

.env 파일에서 ENVIRONMENT=testnet만 바꾸면 끝! 😎

3단계: 통합 계좌 정보 조회

Spot이랑 Futures API 응답이 달라서 통합하는 게 진짜 까다로웠어요:

def get_account_info(self):
    """자동으로 trading_mode에 따라 spot 또는 futures API 호출"""
    try:
        if self.trading_mode == 'futures':
            # 선물 계좌 정보를 spot 형식으로 변환!
            account = self.futures_client.get_account()
            
            balances = []
            for asset_info in account.get('assets', []):
                wallet_balance = float(asset_info['walletBalance'])
                available_balance = float(asset_info['availableBalance'])
                
                if wallet_balance > 0:
                    balances.append({
                        'asset': asset_info['asset'],
                        'free': str(available_balance),
                        'locked': str(wallet_balance - available_balance)
                    })
            
            return {
                'balances': balances,
                'totalWalletBalance': float(account['totalWalletBalance']),
                'totalUnrealizedProfit': float(account['totalUnrealizedProfit'])
            }
        else:
            return self.spot_client.get_account()

“Claude야, Futures 응답 형식 다르잖아! spot 형식으로 변환해줘야지!”

4단계: 선물 주문 기능

시장가, 손절, 익절 주문을 모두 구현했어요:

def futures_market_order(self, symbol: str, side: str, quantity: float, 
                          position_side: str = 'BOTH', reduce_only: bool = False):
    """선물 시장가 주문"""
    try:
        order = self.futures_client.create_order(
            symbol=symbol,
            side=side,
            position_side=position_side,
            order_type='MARKET',
            quantity=quantity,
            reduce_only=reduce_only
        )
        self.logger.info(
            f"선물 시장가 주문: {symbol} {side} {quantity}"
        )
        return order
    except Exception as e:
        # -4131 에러는 자동 롤백되므로 WARNING
        if '-4131' in str(e):
            self.logger.warning(f"선물 주문 실패 (자동 재시도): {e}")
        else:
            self.logger.error(f"선물 주문 실패: {e}")
        raise

“오! 드디어 주문도 되네!” 🎉

5단계: DB 기반 레버리지 관리

여기가 진짜 핵심! 심볼마다 다른 레버리지를 DB에서 관리해요:

def _initialize_futures_leverage(self):
    """선물 거래 레버리지 초기화 (심볼별 DB 설정)"""
    try:
        if self.db_client:
            # DB에서 활성화된 심볼 읽기
            db_symbols = self.db_client.get_enabled_symbols()
            
            # DB에서 심볼별 레버리지 설정
            for config in db_symbols:
                symbol = config['symbol']
                leverage = config.get('leverage', 1)
                
                try:
                    self.futures_client.change_leverage(
                        symbol=symbol,
                        leverage=leverage
                    )
                    self.logger.debug(f"{symbol} 레버리지 {leverage}배 설정")
                except Exception as e:
                    self.logger.warning(f"{symbol} 레버리지 설정 실패: {e}")

이제 DB에서 BTCUSDT는 3배, ETHUSDT는 2배 이런 식으로 관리할 수 있어요! 💪

삽질 하이라이트 🎬
#

삽질 1: timeInForce 파라미터

# STOP_MARKET 주문에 timeInForce 넣었다가 에러
# Bug #8 수정: STOP_MARKET에는 timeInForce 불필요!
def futures_stop_market_order(self, symbol: str, side: str, quantity: float,
                                stop_price: float, reduce_only: bool = True):
    order = self.futures_client.create_order(
        symbol=symbol,
        side=side,
        order_type='STOP_MARKET',
        stop_price=stop_price,
        quantity=quantity,
        reduce_only=reduce_only
        # timeInForce 제거!
    )

삽질 2: Spot에서 Futures로 전환

# 처음엔 Spot으로 테스트하다가 중간에 Futures로 바꿨는데
# FuturesAPIClient에 get_ticker_price() 메서드를 아직 안 만들어서
# 임시로 klines에서 최신 종가를 가져오는 방식으로 우회
def get_symbol_price(self, symbol: str):
    if self.trading_mode == 'futures':
        klines = self.futures_client.get_klines(symbol=symbol, interval='1m', limit=1)
        price = float(klines[0][4])  # 종가
    else:
        ticker = self.spot_client.get_ticker_price(symbol=symbol)
        price = float(ticker['price'])
    return price

삽질 3: 캔들 데이터 파싱

# 배열로 오는 캔들 데이터를 딕셔너리로 변환
parsed_klines = []
for kline in klines:
    parsed_klines.append({
        'open_time': kline[0],
        'open': float(kline[1]),
        'high': float(kline[2]),
        'low': float(kline[3]),
        'close': float(kline[4]),
        'volume': float(kline[5])
    })

매번 Claude가 틀릴 때마다 제가 잡아줬어요.

“야! 바이낸스 API 문서 다시 봐!” “timeInForce는 MARKET/STOP_MARKET에 안 쓴다니까!”

Claude Code를 제대로 갈궈야 제대로 된 코드가 나오더라고요 😅

🎯 Streamlit + 직접 만든 API 클라이언트
#

이제 제대로 작동하니까 Streamlit 대시보드 만드는 건 순식간이었어요!

import streamlit as st

st.title("🌙 Moon Seeker Trading Bot")

# 실시간 업데이트!
col1, col2, col3 = st.columns(3)

with col1:
    account = binance_client.get_account_info()
    balance = account['totalWalletBalance']
    st.metric("잔고", f"${balance:.2f}")

with col2:
    price = binance_client.get_symbol_price('BTCUSDT')
    st.metric("BTC 가격", f"${price:.2f}")

with col3:
    positions = binance_client.get_futures_position()
    open_pos = [p for p in positions if float(p['positionAmt']) != 0]
    st.metric("오픈 포지션", len(open_pos))

완벽! 😍

📊 현재 상태 - 작동은 하는데…
#

Moon Seeker Trading Bot Dashboard
#

📈 핵심 지표 모니터링

  • 총 거래수와 변동 추이
  • 승률 및 손익 통계
  • 총 손익 (USDT)
  • 평균 거래당 손익

📊 실시간 데이터

  • WebSocket으로 실시간 가격 업데이트
  • 포지션 변동 실시간 반영
  • 잔고 변화 즉시 표시

🎨 UI/UX

  • 다크 테마 (Streamlit 기본!)
  • 반응형 레이아웃
  • 기간별 필터링

🔧 기술 스택

  • ✅ Streamlit 대시보드
  • ✅ 바이낸스 REST API 직접 구현
  • ✅ WebSocket 실시간 연결
  • ✅ Demo Trading 완벽 지원
  • ✅ python-binance? 안 씀! ㅋㅋ

4년 전 혼자서 몇 달 걸려도 못 만들었던 걸… 3주 만에 돌아가게는 만들었어요! 🎉

그리고 놀랍게도… 처음엔 잘 됐어요!

🤔 라이브러리 vs 직접 구현
#

처음엔 “라이브러리 쓰면 쉽겠지?“라고 생각했는데…

오히려 직접 만드니까 더 좋았어요!

직접 만들어서 좋은 점
#

1. 완전한 제어

  • 원하는 대로 커스터마이징 가능
  • 디버깅 쉬움 (내가 짠 코드니까)
  • 새 기능 바로 추가 가능

2. 최신 API 바로 적용

  • Demo Trading 나오자마자 바로 적용
  • 라이브러리 업데이트 기다릴 필요 없음
  • 바이낸스 API 변경사항 즉시 반영

3. 불필요한 코드 없음

  • 필요한 기능만 구현
  • 가볍고 빠름
  • 의존성 최소화

4. 배우는 게 많음

  • REST API 동작 원리 이해
  • Spot/Futures 차이점 학습
  • 레버리지 관리 방법 습득

python-binance의 한계
#

물론 라이브러리도 장점은 있어요:

  • 빠른 프로토타이핑
  • 검증된 코드
  • 많은 예제

하지만:

  • 최신 API 반영 느림 (Demo Trading!)
  • 블랙박스라 디버깅 어려움
  • 불필요한 기능 많아 무거움

결론: 직접 만드는 게 더 낫더라! 💪

🎉 초심자의 행운? Spot 트레이딩 시절
#

처음 Spot 트레이딩으로 시작했을 때는… 놀랍게도 잘 됐어요!

Demo Trading에서 일일 70~100달러씩 수익이 나더라고요! 😍

“와, 나 트레이딩 천재인가?” ㅋㅋㅋ

여러 지표를 조합해서 썼어요:

  • RSI로 과매도/과매수 확인
  • MACD로 추세 파악
  • 이동평균선으로 지지/저항 체크
  • 이것저것 섞어서!

복잡하게 생각 안 하고 여러 지표가 동의하면 진입하는 방식이었어요.

그냥 직관적으로 조합했는데… 잘 되더라고요!

욕심이 생기다
#

“이 정도면 실전 투입해도 되는 거 아냐?”

근데 뭔가 찝찝했어요.

  • Spot은 롱만 가능 (하락장에선 손 놓고 있어야 함)
  • 지표를 그냥 섞어 쓰는 게 맞나?
  • 더 체계적으로 만들고 싶다!

그래서 결정했어요:

  • Futures로 전환! (숏도 가능)
  • 진입/청산 로직 체계적으로 분리
  • 선행/후행 지표 역할 구분
  • 더 과학적인 시스템!

“이제 제대로 만들어보자!” 💪

그런데…

😱 욕심이 부른 현실의 벽
#

Futures로 전환하고, 로직을 정교하게 만들기 시작했어요.

그런데 뭔가 이상했어요.

첫 번째 시도: Futures + 통합 로직
#

Spot에서 쓰던 방식을 그대로 Futures에 적용했어요.

RSI 과매도면 롱 진입 → RSI 과매수면 청산 RSI 과매수면 숏 진입 → RSI 과매도면 청산

간단하잖아요?

근데 자꾸 손실이 나는 거예요. 😰

“어? Spot에서는 잘 됐는데?”

첫 번째 시도: 진입과 청산을 같이 판단
#

처음엔 진입할 때 쓴 지표로 청산도 판단했거든요.

RSI가 과매수면 매수 → RSI가 과매도면 매도

간단하잖아요? 근데 이게 문제였어요!

Claude의 첫 번째 조언
#

“진입 신호는 잘 잡는데 청산 타이밍을 못 잡겠어. 어떻게 하면 좋을까?”

Claude가 알려준 핵심:

  • 진입할 때는 추세를 봐야 하고
  • 나올 때는 수익/손실 보호가 우선
  • 두 개는 완전히 다른 로직으로 작동해야 함!

“아… 그래서 안 됐구나!” 💡

그런데… 😱
#

진입/청산 로직을 완전히 분리해서 다시 돌렸어요.

그리고 이틀 연속 가상 자금 100달러씩 증발했습니다. 😰

“엥? Claude 조언대로 했는데 왜 더 안 돼?” 🤯

다행히 Demo Trading이라 실제 돈은 아니었지만… 가상이어도 아프더라고요 ㅠㅠ

실전이었으면 완전 멘붕이었을 듯합니다.

문제는 청산 로직이었다
#

진입/청산 분리는 맞았는데, 청산 로직 자체가 엉망이었던 거예요!

  • 손절선이 너무 타이트해서 조금만 흔들려도 튕겨나가거나
  • 반대로 너무 느슨해서 수익이 다 날아가거나

청산 로직을 계속 튜닝하고 조정했어요:

  • 손절선을 적절한 위치로
  • 익절은 단계별로 (일부는 빨리, 일부는 길게)
  • 추세가 강할 때는 더 끌고 가기

그리고 드디어… 🎉

Demo Trading에서 일일 10~20달러 정도 수익이 나기 시작했어요! 💰

“드디어 되네!” 😭

계속 정교하게 만들기
#

청산 로직 해결하고 나니, 진입 쪽도 개선하고 싶어지더라고요.

선행지표와 후행지표 분리 - 새로운 개념!

Spot 시절엔 여러 지표를 썼지만, 구분 없이 섞어서 썼거든요.

Claude가 새로운 개념을 알려줬어요:

“진입 시그널도 선행지표와 후행지표를 분리해서 봐야 해요.”

  • 선행지표: 가격 변동에 앞서 신호 (오더북 불균형, 펀딩비, 거래량 급증 등)
  • 후행지표: 이미 발생한 추세 확인 (RSI, MACD, 이동평균선 등)

“선행지표로 신호 포착 → 후행지표로 확인 → 진입”

이렇게 역할을 분리하니까 훨씬 체계적이더라고요!

Spot 때는 그냥 섞어서 썼는데, 이제는 각각의 역할이 명확해졌어요!

앙상블 투표 전략까지

여기서 한 발 더 나갔어요.

“여러 지표를 동시에 보면서 ‘투표’하듯이 결정하면 어떨까?”

Claude 아이디어:

  • RSI 매수 신호 → 30점 (가중치 30%)
  • MACD 매수 신호 → 40점 (가중치 40%)
  • 이동평균선 매수 신호 → 30점 (가중치 30%)
  • 총 100점 중 70점 이상이면 진입!

단순히 “몇 개 이상 동의하면 진입"이 아니라, 각 전략마다 가중치를 줘서 점수를 매기는 방식이에요!

중요도가 높은 지표는 가중치를 높게 주고, 총점이 일정 % 이상일 때만 진입하는 거죠.

예를 들어:

  • RSI만 신호 → 30점 (진입 안 함)
  • RSI + 이동평균선 → 60점 (진입 안 함)
  • RSI + MACD → 70점 (진입!)
  • 3개 다 신호 → 100점 (강력한 진입!)

단일 지표보다 훨씬 안정적이에요! 💪

아직도 튜닝 중 🔧
#

일일 10~20달러는 수익이 나지만, 아직 만족 못 해요:

  • 변동성 큰 날은 여전히 불안정
  • 타이밍이 애매할 때 손실
  • 포지션 크기 조절도 개선 필요

그리고 솔직히… Spot 시절만큼은 못 벌어요. 😅

  • Spot 시절: 일일 70~100달러 (직관적 조합)
  • 지금: 일일 10~20달러 (체계적 분리)

“이게 뭐야? 역주행?” ㅋㅋㅋ

하지만 포기 안 해요!

직관적 조합이 초심자의 행운이었을 수도 있고, 체계적 시스템이 완성되면 더 안정적일 거라고 믿어요.

계속 시스템을 정교하게 만들어가는 중입니다! 💪

직관 vs 체계… 정답은 뭘까? 🤔

💪 AI 활용의 기술 - 코딩부터 전략까지
#

이번 프로젝트에서 AI를 두 가지 방식으로 활용했어요.

1. Claude Code - 코딩 어시스턴트
#

Claude Code가 잘하는 것:

  • 보일러플레이트 코드 작성
  • 기본 구조 설계
  • 문서 읽고 요약하기
  • Streamlit UI 뚝딱

Claude Code가 못하는 것:

  • 최신 API 모름 (Demo Trading)
  • 세부 설정 놓침 (timeInForce, reduce_only)
  • Edge case 처리 (재연결, 에러 핸들링)
  • 미묘한 버그 찾기

2. Claude - 트레이딩 전략 어드바이저 🆕
#

이건 예상 못 한 발견이었어요!

차트 보는 법을 몰라서 막막할 때, Claude한테 물어봤거든요.

“진입 신호는 잘 잡는데 청산 타이밍을 못 잡겠어.”

Claude가 제안한 전략들:

  • 진입/청산 로직 완전 분리
  • 선행지표/후행지표 구분 사용
  • 앙상블 투표 방식 (여러 지표의 합의)

“오… AI한테 트레이딩 배우네?” 🤯

검색하면 나오는 뻔한 얘기가 아니라, 제 상황에 맞는 구체적인 조언을 해주더라고요!

제대로 활용하는 법
#

1. 명확하게 지시 (코딩)

❌ "바이낸스 API 연결해줘"
✅ "바이낸스 Demo Trading Futures API 연결해줘. 
    URL은 https://demo-fapi.binance.com이고,
    Spot과 Futures 클라이언트를 분리해서 만들어"

2. 구체적인 상황 설명 (전략)

❌ "트레이딩 전략 알려줘"
✅ "진입 신호는 잘 잡는데, 청산 타이밍에서 자꾸 손실이 나.
    진입할 때는 RSI랑 이동평균선 크로스를 보고 있어.
    청산은 어떻게 판단하면 좋을까?"

3. 틀렸을 때 정확히 지적 (코딩)

❌ "이거 안 되는데?"
✅ "STOP_MARKET 주문에는 timeInForce 파라미터 안 넣어.
    바이낸스 API 문서 다시 확인해봐"

4. 칭찬도 하기 ㅋㅋ

"오! 이제 되네! 잘했어!"
"이 아이디어 완전 괜찮은데? 바로 적용해볼게!"

Claude Code로 코드 짜고, Claude로 전략 짜는 이 조합… 정말 강력해요! 💪

🎯 지금 하고 있는 것들
#

우선순위 1: 전략 튜닝 (현재 진행 중!)

  • ✅ 진입/청산 로직 분리 완료
  • 🔄 매매 타이밍 계속 최적화 중
  • 🔄 변동성 큰 날 대응 로직 개선
  • 🔄 포지션 크기 자동 조절 추가 예정

현재 성과 (Demo Trading):

  • 일일 평균 10~20달러 수익
  • Spot 시절(70~100달러)보다는 못함 😅
  • 하지만 일관성은 개선 중
  • 큰 변동성엔 여전히 약함

우선순위 2: 데이터 기반 최적화

  • 과거 데이터로 백테스팅
  • 어떤 시장 상황에서 잘 작동하는지 분석
  • 손실 패턴 찾아서 개선

나중에 할 것들:

  • 자동 거래 알고리즘 다양화
  • 텔레그램 봇 (거래 알림, 일일 리포트)
  • 실전 전환 (Demo에서 안정적으로 수익 나올 때까지!)

실전 투입은 아직 멀었어요. 일일 수익이 안정적으로 나올 때까지 계속 튜닝할 겁니다! 💪

🌟 이번에 배운 것들
#

1. 라이브러리는 만능이 아니다
#

python-binance 같은 잘 만든 라이브러리도:

  • API 변경사항 반영 느림
  • 새 시스템(Demo Trading) 지원 안 됨

때로는 직접 만드는 게 더 빠르고 확실해요!

2. 공식 문서가 답이다
#

바이낸스 API 공식 문서만 제대로 봤어도:

  • Demo Trading 시스템 바로 알 수 있었고
  • REST API 엔드포인트 찾을 수 있었고
  • Spot/Futures 차이점 파악했을 거예요

인터넷 검색보다 공식 문서!

3. AI는 개발자이자 트레이더 멘토다
#

코딩 어시스턴트로서의 Claude Code:

  • 기본 코드는 빠르게 짜주고
  • 반복 작업은 순식간에 처리하고
  • 리팩토링도 알아서 해줘요

전략 어드바이저로서의 Claude:

  • 진입/청산 분리 아이디어 제공
  • 선행지표/후행지표 개념 설명
  • 앙상블 투표 전략 제안

하지만:

  • 최신 정보는 제가 알려줘야 하고
  • 틀린 부분은 제가 잡아줘야 하고
  • 최종 결정은 제가 해야 해요

AI + 사람 = 최강 조합! 💪

특히 이번에 깨달은 건… AI를 단순히 코딩 도구로만 쓰지 말고 전략 파트너로 활용할 수 있다는 거예요! 🤯

4. 삽질은 배움이다
#

3시간 동안 python-binance 갈기면서:

  • 바이낸스 시스템 변경 알게 됐고
  • REST API 직접 구현 배웠고
  • Spot/Futures 통합 방법 익혔고
  • Claude 갈궈내는 법 터득했어요 ㅋㅋ

삽질 = 성장 🚀

5. 기술과 트레이딩은 완전히 다른 세계
#

4년 전:

  • 봇 만들기 성공 ✅
  • 차트 보는 법 몰라서 수익 못 냄 ❌

지금:

  • API 연동은 Claude Code 덕분에 더 쉬워짐
  • 차트 분석과 전략은… 여전히 어렵지만 😅
  • 진입/청산 로직 분리하니까 조금씩 나아지는 중!

Demo Trading에서 이틀 연속 가상 자금 날린 뒤, 로직을 완전히 뜯어고쳤어요.

지금은 일일 10~20달러 정도 수익 보고 있지만… 아직 안정적이진 않아요.

“작동하는 봇 ≠ 돈 버는 봇”

4년이 지났지만, 이제야 조금씩 감을 잡아가는 중입니다.

개발자가 트레이더가 되기까지… 갈 길이 멉니다! 📚

6. 직관적 조합 vs 체계적 분리
#

Spot 시절 (직관적 조합):

  • 여러 지표 사용 (RSI, MACD, 이동평균선)
  • 역할 구분 없이 섞어서 판단
  • 일일 70~100달러 수익 ✅

지금 (체계적 분리):

  • 같은 지표들을 쓰지만…
  • 진입/청산 분리, 선행/후행 구분, 앙상블 가중치…
  • 일일 10~20달러 수익 😅

더 체계적으로 만들었는데 오히려 수익이 줄었어요!

이게 뭐지?

  • 직관이 맞았던 걸까?
  • 체계화가 덜 된 걸까?
  • 아니면 과최적화(overfitting)?

아직 모르겠어요. 계속 실험 중입니다.

“체계적이다 = 좋다"가 아니더라고요. 💭

💬 함께 성장해요
#

여러분도 비슷한 경험 있으세요?

  • 바이낸스 Demo Trading으로 삽질?
  • python-binance 안 돼서 고생?
  • 라이브러리 버리고 직접 구현?
  • Claude Code 갈궈가며 개발?
  • 봇은 만들었는데 수익을 못 내는 중? 😅
  • 진입/청산 로직은 어떻게 구성하셨나요?
  • AI한테 트레이딩 전략 조언 받아보신 분? 🤖
  • 직관적으로 조합 vs 체계적으로 분리, 어떤 게 더 잘 됐나요? 💭

댓글로 경험 공유해주세요! 😊

특히 “체계적으로 만들수록 오히려 안 됐다” 는 경험 있으신 분들! 저만 그런 건지, 아니면 과최적화(overfitting) 함정인지 궁금해요 ㅋㅋ

REST API 직접 구현 방법 더 자세히 알고 싶으신 분들도 댓글 남겨주세요!


P.S. python-binance 안 될 때 포기하지 않고 직접 만든 건… 제 선택이었어요.

Claude Code를 갈궈서 Spot/Futures 통합 클라이언트를 만든 것도 제 끈기였고요.

그런데 아이러니하게도…

직관적으로 조합했을 때(Spot)가 더 잘 됐고, 체계적으로 분리할수록(Futures) 수익이 줄었어요. 😅

이게 초심자의 행운인지, 직관의 힘인지, 아니면 과최적화인지는 아직 모르겠어요.

하지만 Demo Trading에서 실패하길 잘했어요. 실전이었으면… 🥲

안 되면 직접 만들면 됩니다! 💪

그리고 만든 다음엔… 끈질기게 튜닝하면 됩니다! 🚀

(언젠가 Spot 시절을 넘어서는 날이 오겠죠…? 🙏)

바이낸스 Demo Trading 정보:

본 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.


💬 댓글