ChatOps supervised trading 구현 계획

For Hermes: 실제 코딩은 나중에 한다. 지금 문서는 구현 순서, 파일 경로, 검증 기준만 고정하는 계획 문서다.

Goal: Telegram 중심의 감독형 자동매매 시스템을 작은 코어부터 구축하고, 검증된 부품을 순차 이식해 실거래 전까지 안전하게 확장한다.

Architecture: 상위는 Event Router + Proposal Card + Approval Gate, 하위는 Risk Policy + Execution Adapter 구조로 나눈다. 처음에는 paper trading으로만 닫힌 루프를 만든 뒤, Upbit adapter와 Freqtrade adapter를 차례대로 붙인다.

Tech Stack: Python 3.11+, FastAPI, Telegram Bot API, pytest, pyupbit(초기 Upbit adapter), Freqtrade(후속), llm-wiki.


범위와 비범위

이번 계획에 포함

  • 새 repo 골격 정의
  • 1차 이식 순서 고정
  • 모듈 경계와 책임 정의
  • 단계별 검증 기준 정의

이번 계획에 포함하지 않음

  • 실제 코드 작성
  • 실제 repo 생성
  • 실거래 연결
  • 모델 선택/프롬프트 미세조정
  • 뉴스/감성/토론형 멀티에이전트 확장

최종 목표 구조

signal/event
  -> context snapshot
  -> proposal generation
  -> risk policy
  -> approval gate
  -> execution adapter
  -> result notification
  -> journal/vault

핵심 원칙:

  • AI는 설명과 제안 담당
  • 결정론적 정책이 먼저 차단
  • 사람 승인이 마지막 방아쇠
  • 실행기는 adapter로 격리

Repo 목표 구조

chatops-supervised-trading/
├── README.md
├── pyproject.toml
├── .env.example
├── src/chatops_trading/
│   ├── main.py
│   ├── config.py
│   ├── state.py
│   ├── event_router/
│   │   ├── api.py
│   │   ├── schemas.py
│   │   └── dedupe.py
│   ├── context/
│   │   ├── builder.py
│   │   ├── market_snapshot.py
│   │   └── portfolio_snapshot.py
│   ├── proposal/
│   │   ├── rule_engine.py
│   │   ├── ai_summary.py
│   │   └── card_renderer.py
│   ├── risk/
│   │   └── policy.py
│   ├── approval/
│   │   ├── policy.py
│   │   ├── telegram_gate.py
│   │   └── timeout.py
│   ├── execution/
│   │   ├── base.py
│   │   ├── router.py
│   │   ├── paper_executor.py
│   │   ├── upbit_executor.py
│   │   └── freqtrade_adapter.py
│   ├── portfolio/
│   │   └── paper_portfolio.py
│   ├── notifications/
│   │   ├── telegram.py
│   │   └── discord.py
│   ├── runtime/
│   │   ├── loop.py
│   │   ├── scheduler.py
│   │   └── commands.py
│   └── journal/
│       ├── tracker.py
│       ├── trade_log.py
│       └── vault_writer.py
└── tests/
    ├── risk/
    ├── approval/
    ├── execution/
    ├── portfolio/
    ├── event_router/
    └── runtime/

구현 단계 계획

Phase 0 — 저장소 뼈대 준비

Task 0.1: 새 repo 초기 구조 생성

Objective: 새 프로젝트의 기본 디렉토리 구조와 빈 모듈을 만든다.

Files:

  • Create: README.md
  • Create: pyproject.toml
  • Create: .env.example
  • Create: src/chatops_trading/**
  • Create: tests/**

Done when:

  • import 경로가 모두 결정됨
  • 빈 패키지 구조가 생김
  • 테스트 디렉토리도 함께 준비됨

Task 0.2: 공통 설정/상태 계약 고정

Objective: 환경변수와 런타임 상태의 canonical schema를 먼저 고정한다.

Files:

  • Create: src/chatops_trading/config.py
  • Create: src/chatops_trading/state.py
  • Create: tests/test_config_smoke.py
  • Create: tests/test_state_contract.py

Done when:

  • symbol, trading_mode, approval_status, risk result, proposal payload의 기본 필드가 문서화됨
  • 이후 모듈들이 같은 state 계약을 공유할 수 있음

Phase 1 — 리스크/승인 정책 이식

Task 1.1: Risk policy 이식

Objective: 기존 btc-trading-agents의 리스크 게이트를 순수 정책 모듈로 옮긴다.

Files:

  • Create: src/chatops_trading/risk/policy.py
  • Create: tests/risk/test_policy.py
  • Reference: btc-trading-agents/src/btc_analyzer/nodes/risk_gate.py
  • Reference: btc-trading-agents/tests/test_risk_gate.py

Scope:

  • 연속 손실 차단
  • 일일 손실 한도
  • 포지션 사이즈 cap
  • HOLD / LIQUIDATE / ALLOW 판정

Done when:

  • risk policy가 외부 의존성 없이 동작
  • 기존 경계값 테스트가 대부분 유지됨

Task 1.2: Approval policy 이식

Objective: 기존 HITL 판단 로직을 LangGraph 의존 없이 정책 함수로 분리한다.

Files:

  • Create: src/chatops_trading/approval/policy.py
  • Create: tests/approval/test_policy.py
  • Reference: btc-trading-agents/src/btc_analyzer/nodes/human_approval.py
  • Reference: btc-trading-agents/tests/test_human_approval.py

Scope:

  • live 모드면 무조건 승인 필요
  • confidence 낮으면 승인 필요
  • 포지션 사이즈 크면 승인 필요
  • None-safe 처리

Done when:

  • 승인 필요 여부만 판단하는 순수 함수가 분리됨
  • transport(Telegram/Discord/LangGraph interrupt)와 정책이 완전히 분리됨

Phase 2 — Paper trading 코어 이식

Task 2.1: Paper portfolio 이식

Objective: paper trading용 포지션/손익/일일 손익 추적기를 이식한다.

Files:

  • Create: src/chatops_trading/portfolio/paper_portfolio.py
  • Create: tests/portfolio/test_paper_portfolio.py
  • Reference: btc-trading-agents/src/btc_analyzer/paper_trading/portfolio.py
  • Reference: btc-trading-agents/tests/test_paper_trading.py

Scope:

  • buy / sell
  • fee 반영
  • realized / unrealized pnl
  • consecutive losses
  • daily pnl reset

Done when:

  • 포트폴리오 계산이 테스트로 고정됨
  • risk policy와 바로 연결 가능해짐

Task 2.2: Paper executor 이식

Objective: 정책 결과를 받아 BUY/SELL/HOLD/LIQUIDATE를 수행하는 paper execution 루프를 만든다.

Files:

  • Create: src/chatops_trading/execution/paper_executor.py
  • Create: tests/execution/test_paper_executor.py
  • Reference: btc-trading-agents/src/btc_analyzer/paper_trading/executor.py

Scope:

  • ALLOW / BLOCKED / LIQUIDATE 처리
  • portfolio snapshot 반환
  • hold/no price/no position 처리

Done when:

  • proposal payload 하나로 paper execution 결과를 낼 수 있음
  • Telegram 연결 전에도 로컬에서 완결된 시뮬레이션 가능

Phase 3 — 운영면 최소 루프 구축

Task 3.1: Proposal card 렌더러 작성

Objective: 사람이 읽고 승인할 수 있는 제안 카드 포맷을 고정한다.

Files:

  • Create: src/chatops_trading/proposal/card_renderer.py
  • Create: tests/proposal/test_card_renderer.py

Card fields:

  • symbol
  • trigger
  • rule summary
  • confidence
  • position size
  • stop loss / take profit
  • reason
  • risk status
  • timeout policy

Done when:

  • proposal dict Telegram 전송용 텍스트 포맷이 안정적으로 렌더링됨

Task 3.2: Telegram gate 구현

Objective: 승인 대기 / 승인 / 거부 / timeout auto-reject 흐름을 구현할 인터페이스를 정의한다.

Files:

  • Create: src/chatops_trading/approval/telegram_gate.py
  • Create: src/chatops_trading/approval/timeout.py
  • Create: src/chatops_trading/notifications/telegram.py
  • Create: tests/approval/test_telegram_gate.py

Scope:

  • pending proposal 저장
  • approve / reject command 처리
  • timeout 후 자동 거부

Done when:

  • transport가 붙지 않아도 gate state machine이 테스트 가능함

Task 3.3: 수동 명령 집합 정의

Objective: 운영 명령의 최소 셋을 먼저 고정한다.

Files:

  • Create: src/chatops_trading/runtime/commands.py
  • Create: tests/runtime/test_commands.py

Commands:

  • /scan
  • /status
  • /approve <id>
  • /reject <id>
  • /pause
  • /resume
  • /report daily

Done when:

  • 명령 라우팅 계약이 고정되고 이후 Telegram adapter가 얇아짐

Phase 4 — Event ingress 구축

Task 4.1: Event Router API 만들기

Objective: TradingView webhook과 수동 이벤트 입력을 받을 최소 API를 만든다.

Files:

  • Create: src/chatops_trading/event_router/api.py
  • Create: src/chatops_trading/event_router/schemas.py
  • Create: src/chatops_trading/event_router/dedupe.py
  • Create: tests/event_router/test_api.py

Endpoints:

  • POST /webhooks/tradingview
  • POST /events/manual
  • GET /health

Done when:

  • 이벤트가 표준 proposal input으로 변환됨
  • 중복 webhook 방지 로직이 존재함

Task 4.2: Context builder 만들기

Objective: 이벤트를 실행 가능한 proposal input으로 바꿀 컨텍스트 빌더를 만든다.

Files:

  • Create: src/chatops_trading/context/market_snapshot.py
  • Create: src/chatops_trading/context/portfolio_snapshot.py
  • Create: src/chatops_trading/context/builder.py
  • Create: tests/context/test_builder.py

Done when:

  • signal + current portfolio + risk state proposal input 생성 가능

Phase 5 — 실거래 adapter 추가

Task 5.1: Upbit executor 이식

Objective: 기존 업비트 실거래 실행기를 새 구조의 adapter로 옮긴다.

Files:

  • Create: src/chatops_trading/execution/upbit_executor.py
  • Create: tests/execution/test_upbit_executor.py
  • Reference: btc-trading-agents/src/btc_analyzer/real_trading/executor.py
  • Reference: btc-trading-agents/tests/test_real_trading.py

Done when:

  • dry_run / auth / buy / sell / liquidate 경로가 독립 adapter로 동작
  • 이름과 책임이 UpbitExecutor로 명확해짐

Task 5.2: Execution base/router 작성

Objective: paper/upbit/freqtrade를 공통 인터페이스로 통일한다.

Files:

  • Create: src/chatops_trading/execution/base.py
  • Create: src/chatops_trading/execution/router.py
  • Create: tests/execution/test_router.py

Done when:

  • 상위 서비스는 adapter 종류를 몰라도 execute 가능

Phase 6 — Freqtrade 연동

Task 6.1: Freqtrade adapter 초안

Objective: 상위 ChatOps 계층이 Freqtrade를 안전하게 호출할 최소 adapter를 만든다.

Files:

  • Create: src/chatops_trading/execution/freqtrade_adapter.py
  • Create: src/chatops_trading/integrations/freqtrade.py
  • Create: tests/execution/test_freqtrade_adapter.py

Initial scope:

  • 상태 조회
  • 신규 실행 요청
  • 포지션/주문 결과 조회
  • 실패 시 재시도/오류 포맷 정규화

Done when:

  • ChatOps 상위 레이어가 “직접 주문” 대신 “엔진 요청”으로 실행 가능

Phase 7 — 관측/기록 계층

Task 7.1: Journal / tracker 이식

Objective: 실행 결과와 제안 근거를 추적 가능한 아티팩트로 남긴다.

Files:

  • Create: src/chatops_trading/journal/tracker.py
  • Create: src/chatops_trading/journal/trade_log.py
  • Create: src/chatops_trading/journal/vault_writer.py
  • Create: tests/journal/test_tracker.py
  • Reference: btc-trading-agents/src/btc_analyzer/observability/tracker.py

Done when:

  • proposal / approval / execution / result가 하나의 추적 단위로 남음
  • llm-wiki 저장도 가능해짐

검증 기준

MVP 완료 기준

아래가 되면 “실전 전 MVP”로 본다.

  • webhook 없이도 수동 proposal 생성 가능
  • risk policy가 proposal을 판정 가능
  • approval policy가 승인 필요 여부 판단 가능
  • Telegram gate state machine이 pending/approve/reject/timeout 처리 가능
  • paper executor가 결과를 반환 가능
  • journal에 결과를 남길 수 있음

실거래 전 완료 기준

  • Upbit adapter dry_run 통과
  • approval 없이는 live 실행 불가
  • timeout auto reject 동작
  • 동일 proposal 중복 실행 방지
  • 일일 손실/연속 손실 차단 검증

당장 시작할 1차 작업 묶음

Workset A

  • config.py
  • state.py
  • risk/policy.py
  • approval/policy.py

Workset B

  • portfolio/paper_portfolio.py
  • execution/paper_executor.py

Workset C

  • proposal/card_renderer.py
  • approval/telegram_gate.py
  • notifications/telegram.py

이 세 묶음이 끝나면 실제 체감 가능한 작은 시스템이 된다.


이번 계획에서 의도적으로 미루는 것

  • LangGraph 도입
  • Bull/Bear 토론 구조
  • 뉴스/Reddit/Telegram 감성 파이프라인
  • 다중 거래소 동시 지원
  • KIS adapter
  • 웹 대시보드

즉, 지금은 설명 가능한 운영 루프를 만드는 것이 목표다.

결론

실제 코딩은 나중에 하되, 구현 순서는 아래로 고정한다.

  1. 정책 먼저 — risk / approval
  2. 시뮬레이션 다음 — paper portfolio / paper executor
  3. 운영면 연결 — Telegram gate / card renderer / commands
  4. 이벤트 연결 — webhook / context builder
  5. 실행 확장 — Upbit adapter / Freqtrade adapter
  6. 저널 정리 — tracker / vault writer

이 순서가 가장 작은 리스크로 ChatOps 감독형 자동매매 시스템에 도달하는 길이다.

  • 2026-04-22-open-source-automated-trading-stack-map
  • 2026-04-24-btc-trading-agents-reuse-map
  • 2026-04-24-chatops-trading-repo-skeleton-and-migration-order
  • 2026-04-22-open-source-automated-trading-stack-map
  • 2026-04-22-open-source-automated-trading-stack-map
  • moc-ai-agents-trading
  • harness