【Python × MT5】일일 손실 -5% 시 즉시 실격인 프로프펌(FTMO)에 도전! 자율형 AI 헤지펀드에서 파생시킨 '미국 주식
요약
본 기사는 자율형 AI 헤지펀드 'Lumina AI'를 기반으로, 프로 트레이딩 펌(Prop Firm)의 극한 제약 조건에 맞춘 데이트레이딩 특화 모델 'Lumina-Prop'을 설계하고 구현한 과정을 공유합니다. MT5와 Python을 통합하여 Level 2 호가 정보(DOM) 스나이퍼 기능을 활용했으며, 일일 -5% 손실 제한 등 엄격한 규칙을 자동화로 돌파하는 아키텍처를 제시합니다.
핵심 포인트
- Lumina-Prop은 프로프펌의 극한 제약 조건(-5% 일일 드로우다운)에 맞춘 데이트레이딩 특화 AI입니다.
- MT5와 Python을 통합하여 Level 2 호가 정보(DOM)를 활용하는 아키텍처를 구축했습니다.
- 자체적인 리스크 관리 시스템으로, 손실 임계치 도달 시 하드록 또는 강제 청산 기능을 구현했습니다.
- 본래의 Lumina AI는 미국/일본 현물 스윙 트레이딩에 초점을 맞추고 있습니다.
지난주, 개인적으로 개발한 자율형 AI 헤지펀드 『Lumina AI』의 아키텍처 해설 기사를 Qiita에 게시했고, 매우 감사하게도 많은 반향과 관심을 받았습니다.
본래의 Lumina AI는 **'미국 주식 및 일본 주식 현물 스윙 트레이딩(수일~수주 보유)'**을 주요 전장으로 하며, 5명의 AI 투자자(워렌 버핏, 벤저민 그레이엄, 캐시 우드, 리스크 관리자, CIO)에 의한 멀티 에이전트 합의와, FRED 순유동성 및 Alpha158 수리 인자, Rust 상주 감시견을 통한 철벽 방어 시스템을 특징으로 합니다.
하지만 운용을 계속하면서 하나의 강력한 야망이 솟아올랐습니다.
'이 자율 AI의 두뇌와 방어 시스템을 극한까지 날카롭게 다듬는다면, 전 세계 프로 트레이더들이 치열하게 경쟁하는 '프로프펌(자기 자본금 없이 수천만 원 규모의 운용 자금을 획득하는 시험)'을 완벽하게 자동화로 돌파할 수 있지 않을까?'
이에 이번에는 본래의 퀀트 설계 사상을 기반으로, 일일 드로우다운 -5% 시 즉시 실격이라는 극한의 제약 조건 하에서 싸우는 **'미국 주식 데이트레이딩 특화 AI(Lumina-Prop)'**를 처음부터 설계하고 구현했습니다.
본 기사에서는 Linux VPS 환경에서 MetaTrader 5 (MT5)와 Python을 통합하여, Level 2 호가 정보(DOM) 스나이퍼 및 수많은 까다로운 난관(시간 외 거래 거부, 스프레드 급확대, RPyC 직렬화 장애 등)을 돌파한 아키텍처의 전반적인 모습을 공유합니다.
프로프펌(Proprietary Trading Firm)이란 트레이더에게 심사(챌린지 테스트)를 부과하고, 합격한 트레이더에게 회사의 운용 자금(10만 달러200만 달러 등)을 맡겨 이익의 8090%를 보상으로 분배하는 회사입니다.
그중에서도 세계 최대 규모인 'FTMO' 등이 유명하지만, 그 합격 규칙은 인간의 정신과 알고리즘의 내구성을 산산조각 낼 정도로 엄격합니다.
| 규칙 항목 | FTMO의 제약 | Lumina-Prop의 자율 방어선 |
|---|---|---|
| 일일 최대 손실 제한 | 하루에 원금의 -5.0% 손실 시 영구 실격 | -3.5%에서 당일 모든 주문을 하드록(Hard Lock) 처리 |
| 전체 최대 손실 제한 | 누적 원금의 -10.0% 손실 시 영구 실격 | -8.0%에서 모든 포지션을 강제 청산 및 동결 |
| 목표 이익 | +10.0% (Free Trial 또는 Phase 1) | 리스크 대비 보상 비율 1:2.0의 고정밀 스나이프 |
| 오버나이트(Overnight) | 다음 날로 넘어가는 갭다운이 치명적 | 뉴욕 장 마감 전(JST 기준 04:45)에 모든 포지션을 강제 정리 |
| 경제 지표 발표 | CPI나 FOMC 발표 전후의 급등락 스프레드 | 지표 발표 전후 5분간 완전 거래 정지 (블랙아웃) |
Lumina와 Lumina-Prop 비교: 트레이딩 전략 및 기술적 차이점
| 비교 항목 | ① 본가 Lumina (현물 스윙) | ② 프로프 Lumina (미국 주식 데이트레이딩 특화) |
|---|---|---|
| 주요 전장 | IBKR (Interactive Brokers) | FTMO (MetaTrader 5 / CFD) |
| 운용 스타일 | 현물 스윙 트레이드 (수일~수주 보유) | 미국 주식 데이트레이딩 (수분~수시간/일 단위) |
| 거래 방향 | 롱 온리 (현물 매수만) | 롱 & 숏 (매수 및 공매도 양방향) |
| 핵심 금융공학 지표 | ・MPT (현대 포트폴리오 이론)・ HRP (계층적 리스크 패리티 분산)・ Qlib Alpha158 요인 수리 모델・ FRED 미국 달러 실질 순유동성 이론・ 시장 브레드스 (S&P500 SMA200 유지율)・ Options GEX (감마 익스포저) | |
| ・시장 미세 구조 (Market Microstructure)・ OFI (Order Flow Imbalance: 주문 흐름 불균형)・ 5분봉 VWAP (거래량 가중 평균 가격) 실행・ Level 2 DOM (호가창 정보) 수급 스나이프・ 스프레드 급확대 마찰 방어(Guard)・ 점프 확산 (지표 충격) 완전 차단 | ||
| 의사 결정 아키텍처 | 5인 AI 합의 (LLM 추론) + 재무 해자 (F-Score≧6) | |
| ※워렌 버핏/벤저민 그레이엄의 장기 성장력 및 저평가도 고려 | ||
| 100% 결정론적 수리 알고리즘 | ||
| ※LLM은 거래 시간 전 뉴스 발굴에만 한정 | ||
| 오버나이트 (Overnight) | 있음 (Stage 2 상승 추세 추종) | |
| 완전 금지 (한국 시간 04:45에 무조건 모든 포지션 청산) | ||
| 파멸 확률 제어 | 완만한 드로우다운 회복 허용 | |
| '일일 -5% 시 영구 실격'에 대한 하드록 (일일 -3.5% 시 당일 전 주문 물리적 차단) |
시장 미세 구조 이론 (Market Microstructure)과 OFI (주문 흐름 불균형):
퀀트 논문(Cont, Kukanov & Stoikov 등)에서 실증된 호가 정보의 수리 모델을 채택했습니다. 단순히 가격의 상하 움직임이 아니라, **'매수 호가와 매도 호가의 출입 속도 (호가 업데이트 압력)'**를 실시간으로 측정하여, 대형 기관이 어느 방향으로 매집(또는 투매)하고 있는지를 순식간에 판정합니다.
기관 투자자 실행 벤치마크 (VWAP) 동조화:
거래량 가중 평균 가격(VWAP)을 기준으로 삼아, 5분봉 레벨에서의 돌파(Breakout) 및 되돌림(Pullback/지지-저항)을 포착합니다.
팻테일 점프 리스크 근절 (한국 시간 04:45 강제 청산):
데이트레이딩에서 가장 무서운 것은, 포지션을 보유한 다음 날 아침에 발생하는 '실적 발표나 지정학적 리스크로 인한 시초가 대폭 하락(Gap Down)'입니다. Lumina-Prop은 미국 시장 마감 15분 전에 모든 포지션을 강제 청산하고, 보유 잔고를 현금 100%로 되돌림으로써 오버나이트 리스크를 수리적으로 제로화합니다.
Lumina-Prop은 본가 Lumina (IBKR 현물 스윙)과는 프로세스, DB, 설정 파일을 완전히 분리하여 Linux VPS 상의 독립 체임버에서 24시간 자율 가동됩니다.
+---------------------------------------------------------------------------------+
| Linux VPS (Ubuntu) |
| |
...
MT5 공식 Python 라이브러리(MetaTrader5)는 Windows 네이티브 C 확장으로 제공되어, Linux 환경에서는 import MetaTrader5가 직접 작동하지 않습니다.
이에 따라, Docker 컨테이너 내에서 Wine을 경유하여 Windows 버전 MT5를 구동하고, 컨테이너 내부의 Wine Python 프로세스에서 rpyc.classic 서버(포트 8001)를 띄워, 호스트 측 네이티브 Linux Python으로부터 RPC를 통해 MT5 API를 투명하게 조작하는 아키텍처를 채택했습니다.
데이트레이딩에서는 15분봉이나 일봉 지표만 보고 진입하는 것은 자살 행위입니다. Lumina-Prop은 cis 씨의 수급 사상과 퀀트의 OFI (Order Flow Imbalance: 주문 흐름 불균형)를 융합시킨 스나이퍼 로직을 탑재하고 있습니다.
롱(매수) 조건: 5분봉이 VWAP를 강하게 돌파(또는 반발) + MT5의 매수 호가 거래량이 매도 호가 거래량을 압도함 (OFI > +18.0) + 대규모 아이스버그 매수 물량 감지
숏(매도) 조건: 5분봉이 VWAP를 하방 돌파 + 매도 호가의 압력 (OFI < -18.0) + 대규모 노출 물량의 철회
# 레벨 2 DOM(호가창 정보)에서 미체결 불균형(Imbalance)을 계산하는 로직 발췌
def get_mt5_order_book(self, symbol: str) -> dict:
mt5 = self._get_mt5_instance()
...
진입 후에는 LLM의 추론 주기(15분)를 기다리지 않고, **10초 간격의 고속 루프(Watchdog Sentinel)**가 작동합니다.
ATR 기반 동적 스탑로스(Trailing Stop): 미실현 이익이 쌓일수록 스탑라인을 자동으로 올리고 손익분기점(建値)을 확보합니다.
- 04:45 JST (미국 장 마감 15분 전) 무조건 전체 청산: 데이트레이딩의 기본 원칙으로서, **포지션을 다음 날로 이월하는 것(Overnight)**은 100% 금지됩니다. 장 마감 직전 스프레드 확대와 결산/야간 선물 갭으로 인한 일일 실격 리스크를 물리적으로 근절했습니다.
시그널 계산에 사용되는 외부 데이터 소스와 실제로 체결시키는 MT5 측의 호가 사이에 시간 지연이나 괴리가 존재하는 경우, 진입하는 순간부터 마이너스 상태로 시작합니다.
주문 직전에 MT5의 최신 호가를 가져와 **시그널 가격과의 괴리가 0.15% (15 bps)**를 초과할 경우에는 발주를 즉시 폐기(Abort)하는 방벽을 배치했습니다.
여기서가 본 기사에서 가장 공유하고 싶었던 **'실제로 구동해 봐야만 깨닫는 현실적인 함정'**입니다.
시장 개장 전 (22:30 JST 이전)의 호가를 보고 시장가 주문(Market Order)을 브로커에게 전송했을 때, 거래소로부터 즉시 거부되었습니다.
미국 거래소에서는 프리마켓 등 시간 외 세션에서는 **'지정가 주문(LIMIT)이면서 Outside RTH (일반 거래 시간 외 플래그=True)'**여야만 접수됩니다.
더 나아가, 재시도 루프가 폭주하여 이중 발주를 일으키는 것을 방지하기 위해 클라이언트 주문 ID(UUIDv5)를 이용한 서버 측의 Idempotency Guard를 결합했습니다.
미국 시장이 개장한 직후 몇 분 동안은 마켓 메이커의 호가가 정해지지 않아 Bid/Ask 스프레드가 평소의 수 배에서 십여 배(30~50 bps 이상)로 확대됩니다.
여기서 진입하면 슬리피지만으로 큰 손실을 보기 때문에, **'개장 후 5분간 (09:30~09:35 ET)은 진입을 완전히 중단하는 골든 윈도우 제한'**과 **'실시간 스프레드 > 0.35%일 경우 발주 차단 가드'**를 구현했습니다.
Linux 측의 Python에서 RPyC를 통해 mt5.order_send(request)를 호출했을 때, 다음과 같은 알 수 없는 에러로 거부되었습니다.
(-2, 'Unnamed arguments not allowed')
조사한 결과, RPyC를 통해 Python 딕셔너리 {"action": ...}를 전달하자 Wine 측의 C 확장(MetaTrader5.pyd) 내부의 PyDict_CheckExact가 '순수한 CPython 네이티브 딕셔너리가 아니라 RPyC의 Proxy netref 객체'라고 판단하여 거부하고 있었습니다.
해결책으로, Wine Python 측에서 json.loads()를 직접 eval 실행시켜, Wine 프로세스 내에서 100% 순수한 CPython 딕셔너리를 재구축하여 전달함으로써 완벽하게 해결했습니다.
# RPyC의 netref 딕셔너리 거부 회피를 위한 네이티브 CPython 딕셔너리 재구축
clean_json_str = json.dumps(request)
ret = rpyc_conn.eval(f"_mt5.order_send(_json.loads({repr(clean_json_str)}))")
현재, Lumina-Prop은 VPS 위에서 systemctl 데몬으로 구동되며, FTMO의 무료 트라이얼($100,000 데모 환경)을 통해 밤낮으로 포워드 테스트를 진행하고 있습니다.
스윙 운용(Lumina 본가 / IBKR 현물): 엄선된 종목을 중장기적으로 천천히 키워나가는 '성장의 요새' -
데이 트레이딩 운용(Lumina-Prop / FTMO): 일일 손실을 엄격하게 봉쇄하는 동시에, 자기 자본에 리스크 없이 수익을 흡수하는 '공격적인 창'
이 두 개의 독립된 AI 시스템이 완성됨으로써, 포트폴리오의 리스크 분산과 수익 기회가 극적으로 진화했습니다.
이번에 구현한 자율형 AI 헤지펀드의 핵심 설계 및 코드군은 GitHub에서 오픈 소스(CC BY-NC 4.0: 비영리 한정 라이선스)로 공개하고 있습니다.
'AI × 금융공학', '개인 개발을 통해 프로프펌에 도전하는 알고리즘 설계'에 관심 있는 엔지니어분들께 본 글이 조금이라도 참고가 되기를 바랍니다. 만약 재미있으셨다면, GitHub의 Star나 Qiita의 좋아요/스토리를 남겨주시면 큰 힘이 될 것 같습니다!
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기