클로드 코드로 만드는 5자산 자동매매 봇

투자 선택은 본인의 선택입니다. 이 문서는 손실을 책임지지 않습니다. 자동매매 봇이 어려운 건 코딩 실력이 아니라 순서인데, 이 자료는 클로드 코드로 봇을 만들고 과거 데이터로 검증하고 2주간 가짜 돈으로 돌린 뒤 통과한 다음 실계좌로 넘어가는 순서를 그대로 따라 하게 해줍니다.

⚡ 복사해서 바로 시작하는 프롬프트: 설치부터 검증까지 AI에게 맡기기
역할: <파이썬 트레이딩 봇 프로젝트의 개발 환경 설치와 연결 검증을 맡는 담당>
맥락: <이 컴퓨터에는 파이썬과 Alpaca SDK가 아직 설치되지 않았을 수 있다. 나는 자동매매 봇을 처음 만들어보는 초보자이고, 지금은 모의계좌 연결까지만 확인하려 한다.>
입력: <운영체제와 셸: macOS / zsh>, <기술 스택: Python 3.10 이상, alpaca-py>, <목표: Alpaca 모의계좌에 연결해 잔고를 읽어오기까지 확인>
작업: <① `python3 --version`과 `pip show alpaca-py`로 설치 여부를 먼저 확인한다 → ② 없으면 가상환경을 만들고 `pip install alpaca-py python-dotenv`로 설치한다 → ③ `.env`에서 모의계좌 키를 읽어 계좌 잔고를 실제로 한 번 불러온다 → ④ 마지막에 Alpaca가 무엇이고 모의계좌와 실계좌가 어떻게 다른지, 앞으로 어떻게 쓰면 되는지 초보자 눈높이로 세 줄 안에 설명한다>
제약: <API 키와 시크릿 값을 화면이나 로그에 출력하지 않는다. 실계좌 주소(api.alpaca.markets)에는 접속하지 않는다. 주문은 한 건도 넣지 않는다.>
출력: <실행한 명령, 확인된 버전, 만든 파일, 연결 결과, 남은 오류>
검증: <`python -c "import alpaca; print(alpaca.__version__)"`가 버전을 출력할 것. 이어서 모의계좌 잔고 조회가 성공하고 계좌 상태가 ACTIVE로 나올 것. 둘 중 하나라도 실패하면 완료로 보고하지 말고 원인과 다음 조치를 제시할 것.>

Quick Start

아래 명령이 작업 폴더를 만들고 필요한 도구를 한 번에 설치합니다. 맥이나 리눅스 터미널에 그대로 붙여넣으세요.

mkdir paper-trading-bot && cd paper-trading-bot
python3 -m venv .venv && source .venv/bin/activate
pip install alpaca-py pandas python-dotenv pytest

성공하면 마지막 줄에 Successfully installed alpaca-py-...가 뜹니다. 터미널 맨 앞에 (.venv)가 붙어 있으면 정상입니다.

가상환경: 이 폴더에서만 쓰는 도구 상자입니다. 컴퓨터 전체 설정을 건드리지 않아서, 망가져도 폴더만 지우면 됩니다.

이어서 클로드 코드를 설치하고 실행합니다.

curl -fsSL https://claude.ai/install.sh | bash
claude

터미널에 클로드 코드 화면이 열리면 준비가 끝난 겁니다. 여기에 STEP 2의 프롬프트를 붙여넣게 됩니다.

STEP 1부터 8까지 전체 흐름과 실계좌 게이트


이 자료의 출발점: 원본에 소개된 사례

원본 캐러셀에는 한 여성의 사례가 나옵니다. 클로드로 트레이딩 봇을 만들어 5개 시장을 동시에 감시하고 24시간 매매하게 했습니다.

받는 건 하루 두 통의 메시지뿐입니다. 아침엔 지금 시장이 어떤지, 밤엔 봇이 오늘 어떻게 했는지 옵니다. 그게 관여의 전부이고 화면 보는 시간은 0입니다.

시장마다 붙인 전략이 다릅니다. 지수는 평균 회귀, 암호화폐는 모멘텀 돌파, 원자재는 추세 추종입니다.

포지션 크기는 변동성에 따라 자동으로 조절됩니다. 그래서 5개 자산 어디서든 감수하는 위험은 똑같이 유지됩니다. 원본이 내건 숫자는 **월 3,000달러(약 400만 원)**입니다.

월 400만 원은 원본에 소개된 사례의 숫자입니다. 사례를 인용한 것이고, 같은 결과를 보장하지는 않습니다.

이 자료가 다루는 건 그 여성이 만든 것과 같은 작동 구조를 내 손으로 만드는 방법입니다. 먼저 모의투자로 전 과정을 검증하고, 여기를 통과한 다음 STEP 8에서 실계좌로 넘어갑니다.

순서는 백테스트 → 2주 모의투자 → 실계좌입니다. 앞 두 단계를 건너뛰고 실계좌로 가지 않습니다.

모의투자(페이퍼 트레이딩): 실제 시장 시세를 받아오되 주문은 가상으로만 체결하는 연습 환경입니다. Alpaca는 이메일만 있으면 전 세계 누구나 모의 전용 계정을 만들 수 있고, 기본 잔고 10만 달러로 시작합니다.


준비물

시작 전에 다섯 가지가 필요합니다. 모의투자 단계까지는 돈이 들지 않습니다.

  1. 클로드 코드: 여러 파일짜리 시스템을 한 번에 만드는 작업이라 상위 코딩 모델이 유리합니다. 원본은 Claude Fable을 썼지만 Claude Opus 5로도 충분히 됩니다. Sonnet 계열로도 만들어집니다.
  2. Alpaca 계정: 수수료 무료 증권사이고 모의투자와 실거래 API를 둘 다 지원합니다. 모의투자는 무료이고 입금이 필요 없습니다.
  3. 파이썬 3.10 이상: 봇 코드가 도는 실행 환경입니다.
  4. 24시간 켜져 있는 컴퓨터 또는 VPS: 봇이 시장을 계속 감시하려면 꺼지면 안 됩니다. 월 5~10달러짜리 DigitalOcean이나 Railway VPS면 충분합니다.
  5. 하루 두 번 브리핑을 보낼 수단: 원본은 Claude Cowork로 텔레그램과 슬랙에 아침·저녁 요약을 보냅니다. 이 자료는 STEP 7에서 텔레그램과 예약 두 가지 방법을 다룹니다.

VPS: 항상 켜져 있는 남의 컴퓨터를 빌려 쓰는 것입니다. 내 노트북을 닫아도 봇은 그 컴퓨터에서 계속 돕니다.


STEP 1. 모의계좌와 키 준비하기: 10분

이 단계에서는 봇이 접속할 증권사 계정을 만듭니다. 키가 없으면 시세도 못 받아오고 주문도 못 넣습니다.

Alpaca 가입 페이지에서 이메일로 계정을 만듭니다. 로그인하면 화면 왼쪽 위에서 Paper(모의) 계정을 선택할 수 있습니다.

모의계좌 대시보드에서 API 키와 시크릿을 발급받으세요. 시크릿은 발급 순간에 한 번만 보이니 그때 복사해 둡니다.

실계좌 키가 아니라 모의계좌 키인지 반드시 확인하세요. 두 키는 생김새가 같아서 눈으로는 구분이 안 됩니다. 대신 접속 주소가 다릅니다.

프로젝트 폴더에 .env 파일을 만들고 아래 네 줄을 넣습니다. 이 명령은 파일을 새로 만들어 값을 채웁니다.

cat > .env << 'EOF'
ALPACA_API_KEY=여기에_모의계좌_키
ALPACA_SECRET_KEY=여기에_모의계좌_시크릿
ALPACA_PAPER=true
TELEGRAM_DRY_RUN=true
EOF

성공하면 아무 메시지도 안 나옵니다. 폴더에 .env 파일이 생겼으면 된 겁니다.

이제 키가 제대로 읽히는지만 확인합니다. 이 명령은 키 값을 보여주지 않고 있는지 없는지만 알려줍니다.

python -c "from dotenv import load_dotenv; import os; load_dotenv(); print('키 있음:', bool(os.getenv('ALPACA_API_KEY'))); print('모의 모드:', os.getenv('ALPACA_PAPER'))"

키 있음: True모의 모드: true가 나와야 합니다. 키 값 자체는 절대 화면에 띄우지 마세요.


STEP 2. 프롬프트 하나로 봇 만들기: 15분

이 단계에서는 코드를 직접 짜지 않습니다. 무엇을 만들지 정확히 적어주고 클로드 코드에게 맡깁니다.

만들 구조는 자산 5개에 전략 3개입니다. 시장마다 움직이는 방식이 달라서 같은 규칙을 쓰면 한쪽이 계속 손해를 봅니다.

자산 5개에 전략 3개를 나눠 붙이는 구조

금과 원유는 선물이 아니라 ETF를 씁니다. Alpaca가 주식·ETF·암호화폐를 다루기 때문입니다.

ETF: 여러 자산을 묶어 주식처럼 사고팔 수 있게 만든 상품입니다. 금 ETF는 금값을 따라가지만 금 자체와 가격이 1

붙어 움직이지는 않습니다.

클로드 코드 화면에 아래 프롬프트를 통째로 붙여넣으세요. 이 단계에서는 파일만 만들고 주문은 넣지 않습니다.

파이썬 3.10 이상과 Alpaca 공식 SDK(alpaca-py)로 5자산 트레이딩 봇을 만들어줘. 기본 동작은 모의투자다.

거래 대상과 전략:
- SPY(S&P 500 ETF): 15분봉. 20기간 단순이동평균과 표준편차를 계산해. 평균보다 1.5 표준편차 아래로 내려가면 롱, 1.5 표준편차 위로 올라가면 숏. 가격이 이동평균으로 돌아오면 청산.
- QQQ(나스닥 100 ETF): 같은 평균 회귀 전략인데 변동성이 커서 기준만 1.8 표준편차로 잡아.
- BTC/USD(비트코인): 1시간봉. 20기간 최고가와 최저가를 추적해. 20기간 최고가를 돌파하면서 거래량이 20기간 평균의 1.5배 이상이면 롱. 같은 거래량 조건으로 20기간 최저가를 깨면 숏 또는 롱 청산. 2×ATR 트레일링 스톱을 걸어.
- GLD(금 ETF), USO(원유 ETF): 4시간봉. 50기간과 200기간 지수이동평균을 계산해. 50 EMA가 200 EMA를 위로 뚫으면 롱, 아래로 뚫으면 청산 또는 숏. 3×ATR 트레일링 스톱을 걸어.
- GLD와 USO는 원자재 선물이 아니라 ETF 대리 자산이라고 README에 명시해줘

포지션 사이징과 기록:
- 14기간 ATR을 계산해. 1 ATR만큼 역행하면 손실이 정확히 자기자본의 1%가 되게 수량을 잡아. 조용한 자산은 크게, 변동성 큰 자산은 작게 잡혀야 하고 감수하는 위험은 항상 일정해야 해.
- 모든 거래에 자기자본 1% 하드 스톱을 예외 없이 걸어.
- 상관 필터: SPY와 QQQ가 둘 다 롱이면 BTC/USD 신규 롱을 열지 마.
- 모든 체결을 trades.csv에 남겨. 시각, 자산, 방향, 진입가, 청산가, 손익, 수량을 기록해.
- 일별 손익은 daily_pnl.csv에 남겨.
- 전략별 주기로 신호를 확인하는 연속 루프로 돌리고, API 끊김과 휴장을 처리해.

안전 규칙 (하나도 빠뜨리지 마):
1. 기본값은 모의투자다. 환경변수가 하나도 없으면 무조건 모의 엔드포인트(paper-api.alpaca.markets)로만 접속해.
2. 실계좌는 세 가지가 동시에 충족될 때만 열려. ① ALPACA_PAPER=false ② ALPACA_LIVE_CONFIRM=I_UNDERSTAND_REAL_MONEY ③ 명령에 --live 플래그를 직접 붙임. 하나라도 없으면 실계좌로 가지 말고 모의로 내려서 실행하고, 왜 내려갔는지 화면에 알려줘.
3. 실계좌 모드로 시작할 때는 화면 맨 위에 실계좌 경고 배너, 현재 잔고, 이번 설정에서 한 번 매매에 잃을 수 있는 최대 금액을 출력하고 10초 카운트다운 뒤에 시작해. 로그 파일에도 실계좌 여부를 매 줄 남겨.
4. 한 번 매매에 거는 위험은 현재 잔고의 1%로 제한해. 주문 수량은 (잔고 × 0.01) ÷ 손절까지의 거리로 계산하고, 손절 거리가 0 이하면 주문을 건너뛰어.
5. 잔고 최고점 대비 10% 이상 떨어지면 신규 주문을 막고, 열린 주문을 취소하고, 보유 포지션을 정리한 뒤 STOPPED 상태를 파일에 저장해.
6. STOPPED 상태는 사람이 resume 명령을 입력하기 전까지 유지해.
7. 주문 전에 거래 가능 여부, 장 운영 시간, 최소 주문 수량, 중복 주문, 보유 현금을 검사해.
8. 주식 ETF는 미국 장중에만, BTC/USD는 24시간 거래로 일정을 분리해.
9. API 키와 시크릿은 .env에서만 읽고 로그·예외 메시지·리포트에 절대 출력하지 마.
10. 백테스트에서는 신호가 나온 봉의 종가로 체결하지 말고 다음 봉부터 체결해.
11. 수수료와 슬리피지 가정값을 config.yaml에 두고 결과에 항상 함께 출력해.
12. 텔레그램 전송은 기본 dry-run으로 만들고, 토큰이 없으면 오류 대신 콘솔 미리보기만 보여줘.

만들 파일:
main.py, config.yaml, .env.example, requirements.txt, README.md,
data.py, backtest.py, broker.py, portfolio.py, report.py,
strategies/mean_reversion.py, strategies/breakout.py, strategies/trend_following.py,
risk/manager.py,
tests/test_risk.py, tests/test_live_requires_triple_confirm.py, tests/test_no_lookahead.py

tests/test_live_requires_triple_confirm.py는 세 조건 중 하나라도 빠지면 실계좌로 가지 않고 모의로 강등된다는 걸 검증해야 해. 세 가지가 다 있을 때만 실계좌 경로가 열리는 것도 같이 검증해.

명령어 규격:
python main.py backtest --months 6
python main.py paper --dry-run
python main.py paper --once
python main.py live --once
python main.py status
python main.py stop --close-all
python main.py resume
python report.py morning --dry-run
python report.py evening --dry-run

먼저 파일 트리와 구현 계획을 보여주고, 내가 확인한 다음에 파일을 만들어.
파일을 다 만들면 pytest를 실행하고 실패를 고친 뒤 결과를 요약해.
어떤 주문도 실제로 실행하지 마.

클로드 코드가 계획을 먼저 보여줍니다. 파일 이름이 위 목록과 맞는지 눈으로 확인하고 진행시키세요.

작업이 끝나면 아래 세 가지가 있어야 합니다.

  • tests/test_live_requires_triple_confirm.py 파일이 존재합니다.
  • 환경변수가 없을 때 모의로 붙는 분기가 broker.py에 있습니다.
  • .env.example에는 예시값만 있고 진짜 키가 없습니다.

STEP 3. 실행 전에 코드 검수 시키기: 10분

이 단계는 건너뛰기 쉬운데 가장 값싼 안전장치입니다. AI가 만든 코드를 AI에게 다시 검수시키면 빠진 조건이 드러납니다.

클로드 코드에 아래 프롬프트를 넣으세요. 고치지 말고 보고만 하라고 지시하는 게 핵심입니다.

방금 만든 프로젝트를 수정하지 말고 검수만 해줘. 각 항목을 파일명과 줄 번호로 보고해.

- 환경변수가 하나도 없을 때 모의 엔드포인트로만 붙는 기본값 분기 위치
- 세 조건 중 하나라도 빠졌을 때 모의로 강등되는 위치
- 주문을 보내는 모든 위치
- dry-run에서 주문이 막히는 근거
- API 키나 시크릿이 로그에 노출될 수 있는 위치
- 거래당 1% 위험 계산식
- 10% 하락 정지 장치와 재시작 후 상태 보존 방식
- 백테스트가 다음 봉 가격으로 체결하는지
- 수수료와 슬리피지가 결과에 반영되는지
- 3중 잠금(ALPACA_PAPER=false + ALPACA_LIVE_CONFIRM + --live) 없이 실계좌로 전환될 수 있는 경로가 있는지
- 실계좌 모드에서 경고 배너·잔고·최대 손실액·카운트다운이 실제로 출력되는지

마지막 줄에 통과 또는 차단으로 판정해. 하나라도 불명확하면 차단으로 판정하고 수정 제안만 보여줘.

차단 판정이 나오면 거기서 멈추고 지적된 부분부터 고칩니다. 통과가 나와도 테스트는 직접 돌려야 합니다.

python -m pytest -q

N passed 형태로 전부 통과해야 합니다. 하나라도 실패하면 다음 단계로 가지 마세요.

순서를 지킨 경우와 건너뛴 경우의 차이


STEP 4. 6개월 백테스트 돌리기: 15분

이 단계에서는 과거 데이터로 전략을 되돌려 봅니다. 실시간으로 몇 주를 기다리지 않고 큰 오류를 미리 찾기 위해서입니다.

백테스트: 과거 가격 기록으로 전략을 다시 돌려보는 검사입니다. 미래를 예측하는 도구가 아니라, 규칙에 구멍이 있는지 찾는 도구입니다.

python main.py backtest --months 6

결과 표가 뜨고 results/ 폴더에 CSV와 그래프가 저장됩니다. 여기서 먼저 볼 건 수익률이 아닙니다.

  • 거래가 실제로 발생했는지 봅니다. 0건이면 신호 조건이 잘못된 겁니다.
  • 수수료와 슬리피지가 0으로 빠져 있지 않은지 확인합니다.
  • 최대 낙폭이 15%를 넘으면 다음 단계로 넘기지 말고 파라미터를 조정합니다.
  • 샤프 지수가 마이너스인 전략은 다음 단계로 넘기지 않습니다.
  • 자산 하나가 전체 수익을 거의 다 만들었다면 분산이 아니라 편중입니다.

리포트에는 자산별로 총 거래 수, 승률, 평균 수익, 평균 손실, 손익비, 최대 낙폭, 샤프 지수, 총 수익률이 나와야 합니다. 여기에 상관 필터를 켠 상태의 포트폴리오 합산 성과와 자산곡선 차트(backtest_results.png)까지 함께 봅니다.

슬리피지 기본 가정은 거래당 0.05%로 둡니다. 수수료는 0입니다. Alpaca가 수수료 무료라서 그렇습니다.

슬리피지: 내가 기대한 가격과 실제 체결 가격의 차이입니다. 시뮬레이션에서는 이 값을 가정으로 넣기 때문에, 0으로 두면 결과가 실제보다 좋게 나옵니다.

가정값을 바꿔서 두 번 더 돌려보세요. 숫자가 크게 흔들리면 그 전략은 비용에 취약한 겁니다.

python main.py backtest --months 6 --slippage-bps 5
python main.py backtest --months 6 --slippage-bps 10

두 결과의 수익률 차이가 크지 않아야 합니다. 한쪽만 좋으면 운에 기댄 전략입니다.

백테스트가 끝나면 누수 감사를 한 번 더 시킵니다.

방금 만들어진 results 폴더의 CSV를 읽고 백테스트 누수만 감사해줘.

확인할 것: 미래 가격 참조, 신호와 같은 봉에서의 체결, 수수료·슬리피지 누락,
자산별 거래시간 혼합, 데이터 빈 구간을 0으로 채운 부분,
같은 기간으로 파라미터를 맞추고 같은 기간으로 평가한 과최적화.

수익을 올릴 아이디어는 내지 말고, 오류 가능성만 높음/중간/낮음으로 보고해.

6개월은 시장의 모든 국면을 담기에 짧습니다. 이 검사는 합격증이 아니라 1차 걸러내기입니다.


STEP 5. 2주간 모의투자 돌리기: 하루 5분

이 단계에서는 실시간 시세로 주문 흐름을 확인합니다. 백테스트가 절대 못 잡는 문제들이 여기서 나옵니다.

먼저 주문 없이 계획만 출력해 봅니다. 이 명령은 무엇을 사고팔지 계산만 하고 실제로는 보내지 않습니다.

python main.py paper --dry-run

화면에 모의 모드 표시, 대상 자산, 예상 수량, 손절 거리, 위험 예산이 나오고 주문은 건너뛰었다는 문구가 보여야 합니다.

계획이 맞으면 모의계좌에서 한 번만 실행합니다.

python main.py paper --once
python main.py status

주문이 모의계좌에 접수되고, 상태 명령이 현재 포지션과 잔고를 보여줍니다.

이제 2주 동안 매일 아래를 확인하세요. 순서대로 하나씩 보면 됩니다.

  1. 같은 신호로 주문이 두 번 들어가지 않았는지 봅니다.
  2. 미국 장이 닫힌 시간에 ETF 주문이 막혔는지 봅니다.
  3. 비트코인과 ETF가 서로 다른 일정으로 도는지 봅니다.
  4. 주문 거절, 부분 체결, 네트워크 재시도가 기록에 남는지 봅니다.
  5. 프로그램을 껐다 켜도 같은 신호를 다시 보내지 않는지 봅니다.
  6. 봇이 보고한 포지션과 Alpaca 화면의 포지션이 일치하는지 봅니다.

이 단계를 건너뛰지 마세요. Alpaca 공식 문서도 모의투자가 실거래와 다르다고 명시합니다. 내 주문이 시장 가격에 주는 영향, 지연으로 생기는 체결 차이, 주문 대기 순서, 규제 수수료, 배당은 반영되지 않습니다.

그래서 모의투자 통과는 "수익이 난다"는 증거가 아니라 "코드가 안 깨진다"는 증거입니다.


STEP 6. 손실 한도 확인하기: 10분

이 단계에서는 봇이 스스로 멈추는지 확인합니다. 자동매매에서 가장 먼저 만들고 가장 마지막까지 지켜야 하는 부분입니다.

양보할 수 없는 5가지

1. 거래당 최대 1%. 한 번 매매에 거는 위험은 이 식으로 계산합니다.

위험 예산 = 현재 잔고 × 1%
주문 수량 = 위험 예산 ÷ (진입 가격 − 손절 가격)

순서가 중요합니다. 수량을 먼저 정하고 손절을 나중에 끼워 맞추면 1% 한도가 그냥 깨집니다. 손절 폭이 수량을 정하게 두세요.

2. ATR 기반 사이징. 금이 조용한 날엔 포지션이 커지고 비트코인이 요동치는 날엔 작아집니다. 자산 간 변동성이 크게 달라져도 잃을 수 있는 금액은 그대로입니다.

ATR: 최근 며칠 가격이 평균 얼마나 움직였는지 나타내는 변동성 자입니다.

3. 상관 필터. SPY와 QQQ가 이미 둘 다 롱인데 BTC까지 롱으로 열면, 서로 다른 자산 세 개가 아니라 같은 방향 베팅 하나를 세 배로 한 겁니다.

4. 하드 스톱, 예외 없음. 모든 거래는 진입할 때 손절이 정해집니다. 봇은 손절을 뒤로 옮기지 않고, 없애지 않고, "조금만 더 버텨보자"고 여유를 주지 않습니다. 한 번 정하면 움직이지 않습니다.

5. 최대 낙폭 정지. 고점 대비 10% 하락하면 전량 정리하고 사람이 수동으로 검토하기 전까지 멈춥니다. 이게 서킷 브레이커입니다.

거래당 1%와 고점 대비 10%를 지키는 방식

잔고 최고점은 실행할 때마다 파일에 저장합니다. 저장하지 않으면 프로그램을 껐다 켤 때마다 기준이 초기화돼서 정지 장치가 무력해집니다.

정지 장치가 실제로 도는지 테스트로 확인합니다.

python -m pytest tests/test_risk.py -q
python main.py stop --close-all
python main.py status

테스트가 통과하고, 정지 명령 뒤 상태가 STOPPED로 나와야 합니다. 여기서 자동으로 다시 켜지면 안 됩니다.


STEP 7. 아침저녁 리포트 자동화하기: 15분

이 단계에서 비로소 "차트를 안 보는" 상태가 됩니다. 하루 두 번 요약만 받고 나머지는 신경 쓰지 않는 구조를 만듭니다.

텔레그램의 BotFather에서 /newbot을 보내 봇을 하나 만들고 토큰을 받습니다. 그 봇에게 아무 메시지나 한 번 보낸 뒤 대화 ID를 확인합니다.

.env에 두 줄을 추가합니다.

TELEGRAM_BOT_TOKEN=여기에_봇_토큰
TELEGRAM_CHAT_ID=여기에_대화_ID

먼저 전송 없이 미리보기만 확인합니다. 이 명령은 메시지를 만들어 화면에만 보여줍니다.

python report.py morning --dry-run
python report.py evening --dry-run

아침 리포트에는 보유 포지션, 어제 손익, 위험 신호가 들어갑니다. 저녁 리포트에는 오늘 체결 내역, 당일 손익, 최고·최저 거래, 백테스트 대비 차이가 들어갑니다.

리포트 내용이 비어 있거나 두루뭉술하면 아래 프롬프트를 클로드 코드에 넣어 항목을 채우세요. 원본이 쓰던 구성 그대로입니다.

report.py의 아침 브리핑과 저녁 리포트 내용을 아래 항목대로 채워줘.

아침 브리핑 (7시, 200단어 이하):
- 5개 자산 전체 오픈 포지션과 진입가, 미실현 손익
- 어제 총 손익과 자산별 손익
- 주목할 시장 상황: VIX가 높은지, 지수가 추세인지 횡보인지, 암호화폐 거래량이 이상한지
- 최근 7일 승률
- 리스크 플래그: 1% 손절에 근접한 포지션이 있는지, 상관 필터가 신규 매매를 막고 있는지, 고점 대비 낙폭이 5%를 넘었는지

저녁 리포트 (21시, 200단어 이하):
- 오늘 총 체결 수와 어느 자산이었는지
- 오늘 손익을 금액과 자기자본 대비 %로
- 오늘의 베스트 거래와 워스트 거래 상세
- 현재 잔고
- 백테스트 기대치와 맞게 가고 있는지 벌어지고 있는지
- 손절이 걸린 거래가 있었는지와 손절이 제대로 작동했는지

두 리포트 모두 200단어를 넘기지 마. 숫자는 계산해서 넣고 지어내지 마.

내용이 맞으면 .envTELEGRAM_DRY_RUNfalse로 바꾸고 실제로 한 번 보냅니다.

python report.py morning

텔레그램에 메시지가 도착하면 성공입니다.

이제 예약만 걸면 됩니다. 두 가지 방법이 있습니다.

방법 1. 서버에서 직접 예약. 컴퓨터나 서버가 계속 켜져 있어야 합니다. crontab -e를 열고 아래 두 줄을 넣습니다. 시간은 서버 기준이니 먼저 date로 확인하세요.

0 8 * * * cd /절대경로/paper-trading-bot && .venv/bin/python report.py morning
0 20 * * * cd /절대경로/paper-trading-bot && .venv/bin/python report.py evening

저장하면 crontab: installing new crontab이 뜹니다. 다음 날 아침 8시에 첫 메시지가 옵니다.

방법 2. 클로드로 예약. 클로드 쪽에도 정해진 시각에 프롬프트를 자동 실행하는 기능이 있습니다. Cowork의 예약 작업은 유료 플랜에서 쓸 수 있고, 컴퓨터가 꺼져 있어도 원격에서 돌아갑니다. 다만 예약 작업은 내 컴퓨터의 로컬 파일에는 접근하지 못하니, 봇 기록 파일을 읽어야 한다면 방법 1이 맞습니다.

주문 실행 자체는 예약에 넣지 마세요. 예약하는 건 리포트뿐입니다. 주문 루프는 2주간 손으로 확인한 다음에 따로 설계하는 게 안전합니다.


STEP 8. 실계좌로 넘어가기: 20분

이 단계는 아래를 전부 만족했을 때만 옵니다. 하나라도 비어 있으면 앞 단계로 돌아갑니다.

  1. 모의투자를 2주 이상 돌렸습니다.
  2. 모의투자 결과가 백테스트 기대치에서 크게 벗어나지 않았습니다.
  3. 최종 체크리스트가 전부 체크됐습니다.
  4. 정지 명령이 실제로 작동하는 걸 눈으로 확인했습니다.

모의투자 2주에서 실계좌 소액 시작까지의 게이트

먼저 .env를 실계좌 키로 바꾸고 3중 잠금을 엽니다. 아래 네 줄이 실계좌 경로를 여는 열쇠입니다.

ALPACA_API_KEY=여기에_실계좌_키
ALPACA_SECRET_KEY=여기에_실계좌_시크릿
ALPACA_PAPER=false
ALPACA_LIVE_CONFIRM=I_UNDERSTAND_REAL_MONEY

저장해도 아무 메시지가 안 나옵니다. 값만 바뀌어 있으면 됩니다.

첫 실행은 한 번만 돌립니다. 이 명령은 실계좌로 한 사이클만 실행하고 멈춥니다.

python main.py live --once

실계좌 경고 배너, 현재 잔고, 한 번 매매에 잃을 수 있는 최대 금액, 10초 카운트다운이 순서대로 나와야 합니다. 하나라도 안 나오면 STEP 2로 돌아가 그 부분부터 고칩니다.

금액. Alpaca는 최소 입금액이 없습니다. 전부 잃어도 생활에 지장이 없는 금액으로 시작하세요. 1% 룰이니 1,000만 원 계좌면 한 번 매매에 최대 10만 원이 걸립니다. 원문 기준으로는 1만 달러 계좌에 100달러입니다.

24시간 가동. 봇이 시장을 계속 보려면 컴퓨터가 꺼지면 안 됩니다. 월 5~10달러짜리 VPS면 충분합니다. DigitalOcean이나 Railway를 씁니다.

자동 재시작. 프로그램이 죽어도 다시 뜨게 등록해 둡니다. 아래 명령은 PM2로 봇을 등록하고 서버가 재부팅돼도 살아나게 만듭니다.

npm install -g pm2
pm2 start .venv/bin/python --name trading-bot -- main.py live
pm2 save && pm2 startup

pm2 listtrading-botonline으로 보이면 정상입니다. systemd를 쓰면 아래 유닛 파일을 /etc/systemd/system/trading-bot.service에 넣고 등록합니다.

[Unit]
Description=Trading Bot
After=network.target

[Service]
WorkingDirectory=/절대경로/paper-trading-bot
ExecStart=/절대경로/paper-trading-bot/.venv/bin/python main.py live
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

sudo systemctl enable --now trading-bot으로 등록하면 systemctl status trading-botactive (running)이 뜹니다.

첫 주는 축소 운영. 자산 5개를 한 번에 열지 마세요. 1~2개로 시작해 리포트 숫자와 Alpaca 화면 숫자가 매일 일치하는지 확인한 뒤에 늘립니다.

멈추는 법을 먼저 익힙니다. 실계좌에서도 정지 명령을 한 번 눌러보고 포지션이 실제로 정리되는지 확인하세요.

python main.py stop --close-all
python main.py status

상태가 STOPPED로 바뀌고 보유 포지션이 0이 되어야 합니다.

실계좌에서는 원금을 전부 잃을 수 있습니다. 세금과 수수료는 각자 확인해야 합니다. 판단과 책임은 본인에게 있습니다.


운영 비용

한 달에 얼마나 드는지 정리하면 이렇습니다.

  • Alpaca: 무료 (수수료 무료 거래 + 모의투자 무료)
  • 클로드 구독: 월 20달러, 또는 API 종량제
  • VPS(24시간 가동): 월 5~10달러
  • 시세 데이터: Alpaca 기본 피드에 포함, 무료
  • 하루 두 번 브리핑: 클로드 구독에 포함
  • 합계 월 25~30달러 수준 (한화 약 3만5천~4만2천 원)

모의투자 단계까지는 VPS 없이 내 컴퓨터로도 됩니다. 그래서 STEP 7까지는 비용이 더 낮습니다.


최종 체크리스트

  • 모의계좌 키만 넣었습니다.
  • 환경변수가 없을 때 모의로 붙는 기본값이 코드에 있습니다.
  • 실계좌 전환은 3중 잠금 뒤에만 열립니다.
  • .env가 깃 추적에서 빠져 있습니다.
  • 테스트가 전부 통과했습니다.
  • 백테스트에 수수료와 슬리피지가 들어갔습니다.
  • 최대 낙폭이 15% 이하입니다.
  • 샤프 지수가 마이너스인 전략은 중단했습니다.
  • 2주간 모의투자에서 중복 주문, 거래시간, 재시작 문제를 확인했습니다.
  • 거래당 1%와 고점 대비 10% 정지 장치를 테스트했습니다.
  • 리포트 숫자와 Alpaca 화면 숫자가 일치합니다.

실계좌로 넘어가기 전

  • 모의투자를 2주 완주했습니다.
  • 모의 결과가 백테스트와 크게 어긋나지 않습니다.
  • 정지 명령이 실제로 작동하는 걸 확인했습니다.
  • 전부 잃어도 되는 금액으로 시작합니다.
  • VPS와 자동 재시작을 설정했습니다.
  • 첫 주는 자산 1~2개로 축소 운영합니다.
  • 손절을 옮기거나 없애지 않기로 정했습니다.

단계마다 확인해야 할 출력 화면


FAQ

정말 월 400만 원을 벌 수 있나요?

월 400만 원은 원본에 소개된 여성 사례의 숫자입니다. 사례를 인용한 것이지 이 자료가 약속하는 금액이 아닙니다.

백테스트나 모의투자 결과도 미래 수익을 보장하지 않습니다. 여기서 만드는 건 사례와 같은 검증 가능한 구조입니다.

얼마로 시작해야 하나요?

전부 잃어도 생활에 지장이 없는 금액입니다. Alpaca는 최소 입금액이 없어서 기준을 스스로 정해야 합니다.

1% 룰이 걸려 있으니 1,000만 원 계좌면 한 번 매매에 최대 10만 원이 걸립니다. 원문 기준으로는 1만 달러 계좌에 100달러입니다.

컴퓨터를 계속 켜둬야 하나요?

봇이 시장을 계속 감시해야 하니 꺼지면 안 됩니다. 월 5~10달러짜리 VPS를 빌리면 됩니다. DigitalOcean이나 Railway를 씁니다.

PM2나 systemd로 등록해 두면 프로그램이 죽어도 자동으로 다시 뜹니다.

한 달에 얼마나 드나요?

합쳐서 월 2530달러 수준입니다. 클로드 구독 20달러에 VPS 510달러가 붙고, Alpaca 거래 수수료와 시세 데이터는 무료입니다. 모의투자 단계까지는 VPS가 없어도 되니 더 적게 듭니다.

어떤 클로드 모델을 써야 하나요?

여러 파일을 한 번에 만드는 작업이라 코딩용 상위 모델이 유리합니다. 공식 문서는 복잡한 에이전트 코딩 작업에 Claude Opus 5를 먼저 권하고, 더 높은 성능이 필요하면 Claude Fable 5를 안내합니다. Claude Sonnet 5로도 이 프로젝트는 충분히 만들어집니다.

Claude Fable이 아니면 안 되나요?

원본은 Fable을 썼지만 Opus 5로도 충분히 만들어집니다. Sonnet 계열로도 됩니다. 여러 파일을 한 번에 만드는 작업이라 상위 코딩 모델이 유리할 뿐입니다.

프로그래밍을 전혀 몰라도 되나요?

코드를 직접 쓸 필요는 없지만, 읽고 판단하는 건 필요합니다. STEP 3의 검수 단계가 그래서 있습니다. 모르는 부분은 클로드에게 "이 파일이 무슨 일을 하는지 초보자 눈높이로 설명해줘"라고 물어보세요.

왜 금과 원유 대신 GLD와 USO를 쓰나요?

Alpaca는 주식과 ETF, 암호화폐를 다룹니다. 그래서 원자재 선물 대신 ETF를 대리 자산으로 씁니다. 두 ETF는 원자재 가격을 따라가지만 수익 구조가 같지는 않습니다.

샤프 지수가 양수면 바로 다음 단계로 가도 되나요?

아닙니다. 최대 낙폭이 15%를 넘는지 먼저 봅니다.

미래 데이터 참조, 수수료 누락, 과최적화가 없는지도 확인해야 합니다. 지표 하나로 전략을 승인하면 안 됩니다.

모의투자가 실거래와 얼마나 비슷한가요?

주문 흐름과 코드 안정성을 확인하기에는 충분합니다. 하지만 시장 충격, 실제 대기 순서, 지연으로 생기는 체결 차이는 재현되지 않습니다. 통과를 성과 인증으로 읽으면 안 됩니다.

텔레그램 메시지가 안 옵니다

봇에게 직접 메시지를 한 번 보냈는지, 대화 ID가 맞는지, TELEGRAM_DRY_RUNfalse인지 순서대로 확인하세요. 토큰 값 자체를 어디에도 붙여넣지는 마세요.

실계좌로 바꾸려면 뭘 고치나요?

STEP 8에 절차가 있습니다. .env에 실계좌 키를 넣고 3중 잠금(ALPACA_PAPER=false + ALPACA_LIVE_CONFIRM + --live)을 연 다음, 전부 잃어도 되는 소액으로 시작하고 VPS에 올려 24시간 돌립니다.


시작하기 전에 꼭 알아둘 것

  • 이 자료는 봇 만드는 법을 다룹니다. 돈을 번다고 보장하지 않습니다. 매매에는 원래 위험이 따르고, 개인투자자 다수가 손실을 봅니다.
  • 여기 나온 전략은 단순화된 교육용 예시입니다. 실제 퀀트 회사들은 수년간 팀을 꾸려 전략을 다듬고 인프라에 큰돈을 씁니다.
  • 실제 돈을 넣기 전에 항상 2주 이상 모의투자를 하고 백테스트를 충분히 돌립니다.
  • 전부 잃어도 되는 금액으로 시작합니다.
  • 브리핑으로 매일 확인합니다.
  • 포지션을 임의로 키우거나 손절을 없애지 않습니다.
  • 빌린 돈으로 매매하지 않습니다.
  • 과거 성과는 미래 수익을 보장하지 않습니다.
  • 원본의 월 400만 원은 한 사람이 보고한 결과이고 일반적인 결과가 아닙니다. 결과는 시장 상황, 계좌 규모, 전략 설정, 체결 품질에 따라 달라집니다.
  • 이 자료는 투자 자문이 아닙니다. 투자 판단과 그 결과는 본인 책임입니다.

공식 자료


이 자료가 도움됐다면

이런 AI 활용 자료를 인스타그램에 계속 올리고 있습니다.

  • : 다음 자료를 가장 먼저 받아볼 수 있습니다
  • 따라 하다 막힌 부분은 릴스 댓글로 남겨주세요. 다음 자료를 만들 때 참고합니다