시스템 트레이딩 비기너 - MT4 자동매매 시스템 구축 사례

지난번 유튜브 영상 필터링에 이어, 이번엔 배운 내용을 활용해서 실시간 경제 뉴스를 분석해서 MT4 자동매매 신호를 생성하는 시스템을 만들어봤습니다

왜 만들게 되었나요?

FX 마진 거래를 하면서 느낀 점들이 있었어요:

  • 중요한 뉴스 놓침: 새벽에 나온 미국 고용지표 발표를 못 보고 큰 손실

  • 24시간 모니터링 불가: 낮에 직장 생활하면서 실시간 대응 어려움

  • 감정적 판단: 손실 보면 멘탈 나가서 더 큰 손실로 이어짐

  • 정보 과부하: 어떤 뉴스가 정말 중요한지 판단 어려움

수업에서 배운 "데이터 → 분석 → 자동화"를 적용하면 이 문제들을 해결할 수 있겠다 싶었어요!

💡 어떻게 만들었나요?

1단계: 경제 뉴스 자동 수집

유튜브 채널들에서 실시간으로 영상 수집:

  • 한국경제TV, 삼프로TV, 연합뉴스 등

  • 1시간마다 자동 체크

  • 새 영상 발견 시 즉시 다운로드

# 1시간마다 실행되는 스케줄러
def sync_news_videos():
    """새로운 경제 영상 자동 수집"""
    
    # 최근 1시간 내 업로드된 영상 확인
    new_videos = youtube.sync_latest(hours=1)
    
    print(f"📺 새 영상 {len(new_videos)}개 발견!")
    
    for video in new_videos:
        # GPT-4로 중요도 판단
        if is_important_news(video):
            # 자막 추출
            transcript = extract_transcript(video)
            # 분석 대기 큐에 추가
            analysis_queue.add(video, transcript)

2단계: GPT-4로 뉴스 분석

제목과 자막을 GPT-4가 분석해서 매매 신호 생성:

def analyze_news_for_trading(title, transcript):
    """뉴스를 분석해서 매매 신호 추출"""
    
    prompt = f"""
    다음 경제 뉴스를 분석해서 FX 매매 신호를 생성해줘:
    
    제목: {title}
    내용: {transcript}
    
    다음 형식으로 답변:
    1. 영향받는 통화: USD, EUR, JPY 등
    2. 예상 방향: BUY(상승) 또는 SELL(하락)
    3. 중요도: HIGH, MEDIUM, LOW
    4. 근거: 왜 그렇게 판단했는지 (2-3문장)
    
    예시:
    통화: USD
    방향: BUY
    중요도: HIGH
    근거: 미국 고용지표가 예상치를 상회했습니다. 
          이는 연준의 금리 인상 가능성을 높여 달러 강세로 이어질 것입니다.
    """
    
    response = gpt4.ask(prompt)
    return parse_signal(response)

실제 분석 결과 예시

📊 실시간 뉴스 분석 결과

[2025-12-03 09:15] 美 11월 고용지표 발표
───────────────────────────────────────
통화쌍: USD/JPY
신호: BUY (매수)
중요도: ⭐⭐⭐⭐⭐ HIGH

📝 분석:
- 비농업 고용 증가: 예상 15만 → 실제 22만
- 실업률: 3.7% 유지 (양호)
- 시간당 임금: 전월 대비 0.4% 상승

💡 전략:
달러 강세 예상 → USD/JPY 매수 진입
진입가: 149.50
목표가: 150.20 (+70pips)
손절가: 149.20 (-30pips)

⚠️ 주의: 15분 이내 빠른 진입 권장
───────────────────────────────────────

3단계: MT4 연동

분석 결과를 MT4에 자동으로 전달:

# MT4와 통신하는 간단한 서버
from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/api/signals')
def get_trading_signals():
    """MT4가 호출하는 API - 매매 신호 전달"""
    
    # 최근 5분 내 생성된 신호 조회
    signals = db.get_recent_signals(minutes=5)
    
    return jsonify({
        'signals': [
            {
                'symbol': 'USDJPY',
                'type': 'BUY',
                'entry': 149.50,
                'tp': 150.20,  # Take Profit
                'sl': 149.20,  # Stop Loss
                'importance': 'HIGH',
                'reason': '미국 고용지표 호조...'
            }
        ]
    })

MT4 EA(Expert Advisor)에서 이 API를 1분마다 체크:

// MT4 EA 코드 (간소화)
void OnTimer() {
    // 1분마다 서버에서 신호 확인
    string signals = GetSignalsFromServer();
    
    if(signals != "") {
        // 신호 파싱
        string symbol = ParseSymbol(signals);
        int type = ParseType(signals);  // BUY or SELL
        double entry = ParseEntry(signals);
        double tp = ParseTP(signals);
        double sl = ParseSL(signals);
        
        // HIGH 중요도 신호만 자동 실행
        string importance = ParseImportance(signals);
        if(importance == "HIGH") {
            // 자동 주문 실행
            OrderSend(symbol, type, 0.1, entry, 3, sl, tp);
            Print("자동 주문 실행: ", symbol, " ", type);
        }
    }
}

🎯 실제 사용 결과

1주일 테스트 결과

📊 2025년 11월 25일 ~ 12월 1일 (1주일)

🔔 총 신호 수: 23개
   - HIGH: 8개
   - MEDIUM: 11개
   - LOW: 4개

✅ 실행된 거래: 8개 (HIGH 신호만)
   - 승: 5개 (+350 pips)
   - 패: 3개 (-90 pips)
   - 승률: 62.5%
   - 순수익: +260 pips

💰 수익: $780 (0.1 lot 기준)

놀라웠던 점

1. 새벽 뉴스도 놓치지 않음

[2025-11-28 03:30] 美 FOMC 의사록 공개
→ 즉시 분석 → USD 매수 신호
→ 자동 진입: USD/JPY 148.80
→ 결과: +65 pips 수익 ✅

(잠자는 동안 자동으로!)

2. 감정 배제

  • 손실 나도 시스템은 다음 신호만 기다림

  • 복수 매매 같은 감정적 거래 완전 제거

  • 리스크 관리 철저 (손절 자동 설정)

3. 거짓 뉴스 필터링

❌ 거부된 신호 예시:
"삼성전자 신제품 출시"
→ GPT-4 판단: FX 시장에 영향 없음
→ 신호 생성 안 함

🛠️ 시스템 구성

전체 흐름도

📺 유튜브 영상 수집
    ↓
🤖 GPT-4 뉴스 분석
    ↓
📊 매매 신호 생성
    ↓
💾 데이터베이스 저장
    ↓
🔌 API 서버
    ↓
💹 MT4 EA
    ↓
💰 자동 매매 실행

사용한 기술

백엔드

  • Python + FastAPI

  • PostgreSQL (신호 저장)

  • GPT-4 API (뉴스 분석)

자동매매

  • MT4 Platform

  • MQL4 (EA 프로그래밍)

  • HTTP 통신 (Python ↔ MT4)

스케줄링

  • Cron (리눅스 스케줄러)

  • 1시간마다 영상 수집

  • 5분마다 신호 확인

💡 핵심 노하우

1. 신호 등급 구분이 중요

처음엔 모든 뉴스를 다 거래했다가 과매매로 손실:

# 개선 전: 모든 신호 실행 → 승률 40%
if signal:
    execute_trade(signal)

# 개선 후: HIGH 신호만 실행 → 승률 62%
if signal.importance == "HIGH":
    execute_trade(signal)

2. 프롬프트 엔지니어링

GPT-4한테 어떻게 물어보느냐가 핵심:

❌ 나쁜 예:

"이 뉴스가 달러에 어떤 영향을 줄까?"
→ 애매한 답변만 나옴

✅ 좋은 예:

"다음 경제지표를 바탕으로:
1. 영향받는 통화쌍 (USD/JPY, EUR/USD 등)
2. 방향 (BUY/SELL)
3. 중요도 (HIGH/MEDIUM/LOW)
4. 구체적 근거 (2-3문장)
를 제시해줘"
→ 명확하고 실행 가능한 답변

3. 리스크 관리 자동화

# 포지션 크기 자동 계산
def calculate_lot_size(signal):
    """신호 중요도에 따라 로트 크기 조절"""
    
    balance = get_account_balance()
    risk_percent = 0.02  # 계좌의 2%만 리스크
    
    if signal.importance == "HIGH":
        return balance * risk_percent / 100
    elif signal.importance == "MEDIUM":
        return balance * risk_percent / 200  # 절반
    else:
        return 0  # LOW는 실행 안 함

😅 실패 사례도...

1. 중복 신호 처리 안 함

→ 같은 뉴스로 3번 진입해서 과매매 → 해결: 1시간 내 동일 뉴스 필터링

2. 스프레드 미고려

→ 새벽 시간 스프레드 넓어서 손실 → 해결: 스프레드 10pips 이상이면 실행 안 함

3. 경제지표 일정 미반영

→ 중요 지표 발표 직전 진입해서 급변동 → 해결: 지표 발표 30분 전후는 거래 중지

💭 느낀 점

처음엔 "자동매매는 프로만 하는 거 아니야?" 싶었는데, 수업에서 배운 기초만으로도 충분히 만들 수 있더라고요!

특히 GPT-4 덕분에 복잡한 뉴스 분석 로직을 일일이 코딩할 필요가 없어졌어요. 예전이었으면 "고용지표", "실업률", "GDP" 같은 키워드마다 if-else 수백 줄 짜야 했을 텐데...

가장 큰 배움

  1. 완벽한 시스템은 없다: 승률 60%면 충분 (리스크 관리가 핵심)

  2. 작게 시작하자: 처음부터 거창하게 만들지 말고, 한 기능씩 추가

  3. 감정 제거: 시스템만 믿고 내 판단은 최소화

수업에서 "시스템 트레이딩"이라는 게 거창한 게 아니라, "반복 작업 → 자동화 → 개선"의 반복이라는 걸 배웠어요.

이 시스템도 처음엔 "유튜브 영상 하나 분석해보자"로 시작해서, 여기까지 왔습니다. 미리미리 수업에 집중할 걸.... 이라는 아쉬움만 남는 19기 였습니다. ㅠㅠ

20기에도 개설해 주신다면... 열심히 진행해 보겠습니다. !!

3
2개의 답글

뉴스레터 무료 구독

👉 이 게시글도 읽어보세요