galaxis-po/quant.md
zephyrdark f51f3cc4bf docs: add KJB strategy design doc, implementation plan, and quant notes
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 15:25:00 +09:00

13 KiB
Executable File
Raw Permalink Blame History

김종봉 주식 전략 퀀트 구현 상세 가이드

📌 전략 개요

출처

  • 영상 1: "이 방법만 알고 있으면 종잣돈 천만원으로 금방 1억 법니다" (GZw3wTgMTwE, 2023-08-09)
  • 영상 2: "이 방법만 알고 있다면 종잣돈 천만원으로 금방 1억 법니다" (Ps9tzVhHpu0, 2024-01-30)
  • 채널: 월급쟁이부자들TV
  • 전략가: 김종봉

핵심 철학

  • 목표 수익률: 월 10% (연 약 120%)
  • 자금 증대 목표: 1,000만원 → 1억원 (1년 내)
  • 투자 기간: 단기중기 (보유 기간 수일수주)
  • 핵심 원칙: "시장(코스피)을 이기는 종목"에만 투자

🎯 구체적 매매 규칙

1. 초기 자금 및 포트폴리오 구성

항목 기준
시드 머니 1,000만원 (초보자는 100만원 연습 추천)
분산 종목 수 5~10개
종목당 투자금 100만원 (1,000만원 기준) 또는 5~10만원 (100만원 기준)
현금 비중 약 30% (하락장 대비)
리밸런싱 주기 3개월 (분기별 성과 검증)

2. 종목 선정 기준 (필수 필터)

A. 유동성 필터

✅ 일 거래대금 >= 2,000억원 (2조 아님, 2천억)

대상 종목 예시:

  • 삼성전자
  • SK하이닉스
  • LG전자
  • LG이노텍
  • 네이버
  • 카카오
  • LG에너지솔루션

B. 시가총액 필터

✅ 시가총액 순위: 1~30위 (대형주 중심)

C. 상대강도 필터 (핵심)

✅ 종목 수익률 > 코스피 수익률 (최근 2주~1개월)
✅ 특히 삼성전자 > 코스피 일 때 시장 강세 신호

구현 방법:

# 상대강도 지수 (Relative Strength Index vs Market)
RS = (종목 수익률 / 코스피 수익률) * 100
# RS > 100이면 시장 대비 강함

D. 차트 패턴 필터

✅ 장대양봉 출현 (전일 대비 5% 이상 상승 + 거래량 폭증)
✅ 박스권 돌파 (직전 고점 갱신)
✅ 상승 추세 중 조정 후 지지선 터치

장대양봉 정의:

  • 종가 >= 시가 + (고가 - 저가) × 0.7
  • 거래대금 >= 직전 20일 평균 × 1.5

3. 진입 규칙

시나리오 작성 (필수)

매매 전 반드시 기록:

1. 진입가: [예시] 삼성전자 72,000원
2. 목표가: [예시] 75,600원 (+5%)
3. 손절가: [예시] 69,840원 (-3%)
4. 근거: 코스피 지지선 반등 + 삼성전자 박스권 상단 돌파

진입 타이밍

조건 설명
조건 1 코스피 3선(지지·저항·추세) 차트에서 지지선 근처
조건 2 박스권 상단 돌파 후 재진입 (돌파 확인 1~2일 후)
조건 3 장대양봉 발생 다음날 시초가 근처
진입 방식 지정가 주문 (고점 근처에서 대기)

4. 청산 규칙

A. 익절 (Profit Taking)

✅ 1차 익절: +5% 도달 시 50% 물량 청산
✅ 2차 익절: +10% 도달 시 나머지 50% 청산
✅ 목표: 주당 5% 수익 (주 1~2회 매매)

B. 손절 (Stop Loss)

❌ 손절 기준: -3% ~ -10%
❌ 원칙: 시나리오 이탈 시 즉시 손절
❌ 예시: 진입가 72,000원 → 손절가 69,840원 (-3%)

C. 트레일링 스톱

- 5% 이상 수익 발생 시 손절선을 진입가(본전)로 상향
- 10% 이상 수익 시 손절선을 +5% 지점으로 상향

5. 리스크 관리

항목 기준
종목당 최대 손실 -3% (초기 자본의 0.3%)
포트폴리오 최대 손실 -10% (초기 자본 기준)
승률 목표 60% 이상
손익비 1:1.5 이상 (손실 3% vs 수익 5%)
월간 목표 수익률 10%
연간 목표 수익률 120% (복리 고려 시 약 113%)

🔧 퀀트 구현 상세

필요 데이터

1. 시장 데이터

  • 코스피 지수: 일봉 OHLCV (최소 1년 이상)
  • 삼성전자: 일봉 OHLCV (선행지표로 활용)

2. 종목 데이터

필수 컬럼:
- 날짜 (Date)
- 시가 (Open)
- 고가 (High)
- 저가 (Low)
- 종가 (Close)
- 거래량 (Volume)
- 거래대금 (Value = Close × Volume)
- 시가총액 (Market Cap)

3. 데이터 소스

  • 한국거래소 API (공식, 실시간)
  • FinanceDataReader (무료, Python 라이브러리)
  • 증권사 API (키움, 이베스트 등, 실전 매매 시)
  • 야후 파이낸스 (yfinance, 해외 주식 포함)

구현 단계

Phase 1: 데이터 수집 및 전처리

import pandas as pd
import FinanceDataReader as fdr

# 1. 코스피 지수
kospi = fdr.DataReader('KS11', '2020-01-01')

# 2. 시가총액 상위 30개 종목
krx = fdr.StockListing('KRX')
top30 = krx.nlargest(30, 'Marcap')

# 3. 개별 종목 데이터
stocks = {}
for code in top30['Code']:
    stocks[code] = fdr.DataReader(code, '2020-01-01')

Phase 2: 필터링 로직

def filter_liquidity(df, threshold=200_000_000_000):
    """거래대금 2000억 이상 필터"""
    df['Value'] = df['Close'] * df['Volume']
    return df[df['Value'] >= threshold]

def relative_strength(stock_return, market_return):
    """상대강도 계산"""
    return (stock_return / market_return) * 100

def detect_breakout(df, lookback=20):
    """박스권 돌파 감지"""
    df['Highest'] = df['High'].rolling(lookback).max()
    df['Breakout'] = df['Close'] > df['Highest'].shift(1)
    return df

def detect_large_candle(df, threshold=0.05):
    """장대양봉 감지 (5% 이상)"""
    df['Daily_Return'] = df['Close'].pct_change()
    df['Volume_Ratio'] = df['Volume'] / df['Volume'].rolling(20).mean()
    df['Large_Candle'] = (df['Daily_Return'] >= threshold) & (df['Volume_Ratio'] >= 1.5)
    return df

Phase 3: 신호 생성

def generate_signals(stock_df, kospi_df):
    """매수/매도 신호 생성"""
    signals = pd.DataFrame(index=stock_df.index)
    
    # 상대강도
    stock_ret = stock_df['Close'].pct_change(10)  # 2주
    market_ret = kospi_df['Close'].pct_change(10)
    signals['RS'] = (stock_ret / market_ret) * 100
    
    # 매수 신호
    signals['Buy'] = (
        (signals['RS'] > 100) &  # 시장 대비 강함
        (stock_df['Breakout']) &  # 박스권 돌파
        (stock_df['Large_Candle'])  # 장대양봉
    )
    
    return signals

Phase 4: 백테스팅 엔진

class KimJongBongStrategy:
    def __init__(self, initial_capital=10_000_000):
        self.capital = initial_capital
        self.cash = initial_capital * 0.7  # 30% 현금 보유
        self.positions = {}
        self.max_stocks = 10
        self.position_size = initial_capital / self.max_stocks
        
    def enter_position(self, code, price, date):
        """진입"""
        shares = int(self.position_size / price)
        cost = shares * price
        if cost <= self.cash:
            self.positions[code] = {
                'shares': shares,
                'entry_price': price,
                'entry_date': date,
                'stop_loss': price * 0.97,  # -3%
                'target': price * 1.05  # +5%
            }
            self.cash -= cost
            return True
        return False
    
    def exit_position(self, code, price, date, reason):
        """청산"""
        if code in self.positions:
            pos = self.positions[code]
            proceeds = pos['shares'] * price
            self.cash += proceeds
            profit = (price / pos['entry_price'] - 1) * 100
            del self.positions[code]
            return profit
        return 0
    
    def check_exits(self, date, prices):
        """익절/손절 체크"""
        for code in list(self.positions.keys()):
            pos = self.positions[code]
            current_price = prices[code]
            
            # 손절
            if current_price <= pos['stop_loss']:
                self.exit_position(code, current_price, date, 'stop_loss')
            
            # 익절
            elif current_price >= pos['target']:
                self.exit_position(code, current_price, date, 'take_profit')

Phase 5: 성과 평가

def calculate_metrics(returns):
    """성과 지표"""
    total_return = (returns + 1).prod() - 1
    sharpe = returns.mean() / returns.std() * (252 ** 0.5)
    max_dd = (returns.cumsum() - returns.cumsum().cummax()).min()
    
    return {
        'Total Return': f"{total_return:.2%}",
        'Sharpe Ratio': f"{sharpe:.2f}",
        'Max Drawdown': f"{max_dd:.2%}",
        'Win Rate': f"{(returns > 0).sum() / len(returns):.2%}"
    }

📊 백테스팅 파라미터

권장 설정

파라미터 설명
백테스팅 기간 2020-01-01 ~ 2024-12-31 최소 3년 이상
초기 자본 10,000,000원 영상 기준
리밸런싱 분기별 (3개월) 성과 검증 및 종목 교체
수수료 0.015% (매수) + 0.25% (매도, 세금 포함) 실전 반영
슬리피지 0.1% 체결가 불리함
벤치마크 코스피 지수 (KS11) 비교 대상

최적화 대상

  1. 상대강도 기간: 10일 (2주) vs 20일 (1개월) vs 60일 (3개월)
  2. 손절 비율: -3% vs -5% vs -10%
  3. 익절 비율: +5% vs +7% vs +10%
  4. 종목 수: 5개 vs 10개 vs 15개
  5. 현금 비중: 20% vs 30% vs 50%

🚀 실전 적용 로드맵

Step 1: 백테스팅 (1~2주)

  • 과거 데이터로 전략 검증
  • 연평균 수익률, 최대 낙폭, 승률 확인
  • 벤치마크 대비 초과 수익 여부 평가

Step 2: 페이퍼 트레이딩 (1개월)

  • 실시간 데이터로 모의 투자
  • 신호 발생 빈도 및 정확도 체크
  • 감정 개입 없이 기계적 실행 연습

Step 3: 소액 실전 (3개월)

  • 100만원으로 시작
  • 510개 종목, 종목당 1020만원
  • 매매 일지 기록 (진입/청산 근거, 수익률)

Step 4: 본격 운용 (6개월 이후)

  • 1,000만원 투입
  • 분기별 성과 리뷰
  • 전략 개선 (필터 추가, 파라미터 최적화)

⚠️ 주의사항

전략의 한계

  1. 백테스팅 없음: 영상은 실제 통계 검증 없이 경험 기반
  2. 생존 편향: 성공 사례 중심, 실패 사례 미공개
  3. 시장 환경 의존: 상승장에서 유리, 하락장에서 취약
  4. 거래 비용: 잦은 매매 시 수수료+세금 누적

리스크 관리 필수

  • 과최적화 주의: 과거 데이터에만 맞춘 전략은 미래 실패
  • 레버리지 금지: 신용/미수 사용 시 손실 확대
  • 분산 투자: 한 종목에 30% 이상 투자 금지
  • 감정 통제: 손절/익절 원칙 엄수

📦 필요 기술 스택

Python 라이브러리

pip install pandas numpy yfinance FinanceDataReader
pip install backtrader vectorbt ta-lib
pip install matplotlib seaborn plotly

개발 환경

  • 로컬: Jupyter Notebook / VS Code
  • 클라우드: Google Colab (무료) / AWS SageMaker
  • 데이터베이스: SQLite (소규모) / PostgreSQL (대규모)

자동매매 연동 (선택)

  • 증권사 API: 키움증권 Open API, 이베스트투자증권 xingAPI
  • 프레임워크: PyQt5 (키움), gRPC (이베스트)

📚 참고 자료

추가 학습

  1. : "퀀트 투자 무작정 따라하기", "파이썬을 이용한 금융 데이터 분석"
  2. 강의: 패스트캠퍼스 퀀트 트레이딩, 인프런 주식 자동매매
  3. 커뮤니티: 네이버 카페 "시스템트레이딩", GitHub quant 저장소

관련 전략

  • 모멘텀 전략: 과거 수익률 상위 종목 매수
  • 브레이크아웃: 52주 신고가 돌파
  • 평균회귀: 과매도 구간 매수

체크리스트

구현 전 확인사항

  • 데이터 소스 확보 (최소 3년 일봉)
  • 백테스팅 환경 구축 (Python + 라이브러리)
  • 초기 자본 및 목표 수익률 설정
  • 리스크 허용 범위 결정 (최대 손실 -10%?)
  • 매매 일지 양식 작성

실전 전 확인사항

  • 백테스팅 결과 만족 (연 10% 이상, 샤프 1 이상)
  • 페이퍼 트레이딩 1개월 이상
  • 손절 원칙 테스트 (감정 개입 없이 실행 가능?)
  • 증권사 계좌 개설 (API 사용 가능 여부 확인)
  • 세금 및 수수료 계산 완료

🎯 최종 목표

기간 시드 목표 월 수익률 비고
0개월 1,000만원 - - 시작
3개월 1,000만원 1,300만원 10% 1분기
6개월 1,300만원 1,700만원 10% 2분기
9개월 1,700만원 2,200만원 10% 3분기
12개월 2,200만원 1억원 10% 목표 달성

복리 효과 시뮬레이션:

월 10% × 12개월 = 약 213% (단리)
월 10% 복리 = (1.1)^12 - 1 = 약 213.8%
1,000만원 × 3.138 = 3,138만원 (현실적 목표)

💬 추가 문의사항

구현 과정에서 필요한 사항을 알려주시면:

  1. 전체 Python 코드 (백테스팅 시스템)
  2. 단계별 모듈 (데이터 수집 → 신호 생성 → 백테스팅)
  3. Jupyter Notebook (인터랙티브 실습)
  4. 자동매매 연동 (증권사 API 통합)

맞춤형으로 제공해 드리겠습니다.


작성일: 2026-02-19
버전: 1.0
출처: 김종봉 전략 유튜브 영상 (월급쟁이부자들TV)