POSTGRESQL QUANT · 시뮬레이션

시계열 데이터 · SQL · 백테스트

종목의 과거 가격으로 이동평균 전략을 시험하고, 결과를 DB에 기록하는 화면입니다.

PostgreSQL 연결 상태를 확인하는 중입니다.
처음이라면 이것만 하세요

3단계로 백테스트 실행하기

  1. 1
    종목 코드를 확인하세요

    아래 입력칸의 기본값 005930을 그대로 두거나, 000660·KRW-BTC로 바꿉니다.

  2. 2
    먼저 “OHLCV 조회”를 누르세요

    과거 가격 데이터가 표로 보이면 준비 완료입니다. 그다음 MA 시그널로 BUY·SELL 후보를 확인합니다.

  3. 3
    전략을 골라 실행하세요

    아래 전략 버튼을 누르면 실제 체결 수, 손익, 수익률, MDD가 저장됩니다.

무엇을 보면 되나요? 처음에는 총수익률과 MDD만 함께 보세요. 수익률이 높아도 MDD가 너무 크면 위험이 큰 전략일 수 있습니다.

★

실제 실행 가능한 5가지 전략

전략을 클릭하면 실제 OHLCV로 계산하고 체결 로그와 성과를 PostgreSQL에 저장합니다.

전략을 하나 눌러 보세요. 언제 매수·매도하는지, 실제 계산 결과, 실패할 수 있는 시장을 함께 표시합니다.

전략을 선택하세요.규칙과 실제 계산 결과가 표시됩니다.
같은 전략도 종목·기간·수수료·슬리피지에 따라 결과가 달라집니다. 실제 사용 전에는 다른 기간과 종목으로 재검증하세요.
αβ

알파 · 베타와 멀티팩터 분석

종목 수익률을 시장·규모·가치·수익성·투자·모멘텀 팩터로 나누어 봅니다.

알파는 시장 요인을 제외하고 남은 초과수익의 추정치이며, 베타는 시장 움직임에 대한 민감도입니다. 버튼을 누르면 CAPM과 Fama-French 스타일 6팩터 노출도를 계산해 저장합니다.

먼저 아래 시뮬레이션에서 종목 코드를 확인한 뒤 분석을 실행하세요.
팩터 수익률은 현재 교육용 샘플입니다. 실제 기대수익률이나 매수 추천이 아니며, 운영 환경에서는 검증된 팩터 데이터로 교체해야 합니다.
01

데이터 탐색 및 SQL

조회 전용 SQL 템플릿만 실행하며 입력값은 바인딩 처리됩니다.

조회 유형을 선택하면 실행 SQL을 표시합니다.
종목과 조회 유형을 선택하세요.
02

기본 MA 20/50 백테스트

수수료 0.015% · 슬리피지 0.05% · 종가 신호 → 다음 봉 시가 체결 · 초기자본 1,000만원 · 최근 3년

아직 실행하지 않았습니다.
01

데이터셋 구성

백테스트에 필요한 가격 데이터를 날짜별 한 줄씩 저장합니다.

핵심: 한 행은 한 종목의 한 시점입니다. 종가만 쓰는 전략이라도 시가·고가·저가·거래량을 같이 저장해 두면 이후 전략을 확장하기 쉽습니다.

식별 정보

symbol
종목 코드입니다. 예: 005930, KRW-BTC
trade_time
캔들이 끝난 시각입니다. 일봉이라면 매 거래일 1개 행입니다.

가격 정보 (OHLC)

open / high / low / close
시가·고가·저가·종가입니다. 차트와 변동성 전략의 기본 재료입니다.
adjusted_close
분할·배당 등으로 가격 비교가 왜곡되지 않도록 보정한 종가입니다.

거래량

volume
해당 캔들에서 거래된 수량입니다. 돌파 신호의 신뢰도를 확인할 때 사용합니다.
권장 주기
처음에는 일봉부터 시작하고, 전략이 안정된 뒤 분봉·시간봉을 별도 데이터셋으로 추가합니다.
예시 행005930 | 2026-08-12 00:00:00+00 | 71,200 | 72,050 | 70,900 | 71,650 | 12,450,000 | 71,650

현재 로컬 샘플 데이터는 005930, 000660, KRW-BTC의 결정론적 예제 OHLCV입니다. 운영 시에는 검증한 공급자의 수정주가·상장폐지 종목 정보를 적재하세요.

ERD

시스템 전체 데이터 저장소와 ERD

회원·모의투자, 퀀트 연구, AI 지식은 목적과 부하 특성이 달라 서로 다른 저장소에 분리됩니다.

MariaDB · 서비스 트랜잭션

회원과 모의투자 기록

member를 기준으로 보유 포지션·주문·메모·앱 API 키·오류 로그가 연결됩니다. 실제 증권사 API Key/Secret은 DB에 저장하지 않습니다.

PostgreSQL · Quant 연구

시계열·백테스트 결과

market_data에서 전략을 실행하고, 체결 로그와 성과 지표를 저장합니다. 회원 계정 DB와 FK로 연결하지 않는 독립 연구 저장소입니다.

Qdrant · AI 지식 검색

벡터 문서 컬렉션

market_knowledge 컬렉션에 문서 본문·카테고리·임베딩을 저장합니다. 관계형 테이블이 아니므로 ERD의 FK 대상은 아닙니다.

member (1) ──< stock_position
member (1) ──< stock_order
member (1) ──< crypto_order
member (1) ──< hold_crypto >── (1) upbit_market
member (1) ──< alternative_position
member (1) ──< alternative_order
member (1) ──< hts_watch_memo
member (1) ──< api_key
member (0..1) ──< system_error_log
market_data (OHLCV, symbol + trade_time)
strategies (1) ──< trade_logs
strategies (1) ──< performance_metrics
factor_returns ──[분석 입력]──> factor_exposures

데이터 경계

브라우저는 DB에 직접 접속하지 않습니다. 모든 저장·조회는 Nginx를 거쳐 Flask API에서 인증·검증한 뒤 수행합니다. 증권사 인증정보는 kis.key·kb*.key 또는 AWS SSM에 두며, 로그에도 마스킹합니다.

운영 원칙

주문 이력은 수정하지 않는 이벤트성 기록으로 남기고, 포지션 테이블은 현재 잔고를 빠르게 조회하기 위한 요약값으로 유지합니다. 외래키는 동일 DB 내부에서만 사용하며, Quant·Qdrant와는 API 경계로 분리합니다.

04

PostgreSQL Quant 스키마와 데이터 흐름

가격 데이터 → 전략 → 체결 → 성과 지표 순서로 연결됩니다.

1

market_data

종목별 OHLCV 원천 데이터입니다. 시간 범위 파티션과 BRIN 인덱스로 대량 시계열 조회를 빠르게 합니다.

→
2

strategies

전략 이름과 파라미터를 JSONB로 저장합니다. 예: 빠른선 20일, 느린선 50일, 수수료율.

→
3

trade_logs

BUY·SELL 체결, 수량, 수수료, 슬리피지와 실현 손익을 남깁니다.

→
4

performance_metrics

수익률, 연환산 수익률, Sharpe ratio, MDD, 거래 수를 전략 단위로 보관합니다.

왜 market_data를 날짜 파티션으로 나누나요?

2025년 데이터만 조회할 때 PostgreSQL이 해당 파티션만 읽도록 해 전체 테이블 검색을 줄입니다. 종목·시간 복합 인덱스는 특정 종목 차트 조회에, BRIN 인덱스는 긴 시간 범위 스캔에 유리합니다.

왜 전략과 거래 로그를 분리하나요?

같은 전략을 비용·수량만 바꿔 여러 번 실행할 수 있고, 각각의 체결 내역을 재현할 수 있습니다. 수익률 숫자만 남기는 것보다 검증과 오류 추적이 쉽습니다.

05

처음 사용하는 방법과 사례

아래 순서로 실행하면 데이터 확인부터 결과 해석까지 이어집니다.

  1. 종목 코드를 입력합니다.005930처럼 데이터셋에 있는 코드를 입력하고 OHLCV 조회를 누릅니다.
  2. 가격 데이터의 기간·누락을 확인합니다.종가가 비정상적으로 0이거나 날짜가 빠진 구간이 있으면 전략 실행 전에 정리합니다.
  3. MA 시그널을 확인합니다.MA20이 MA50을 상향 돌파하면 BUY, 하향 돌파하면 SELL 후보가 됩니다. 신호가 없는 HOLD 행도 정상입니다.
  4. 백테스트를 실행합니다.실행 결과는 새 전략 번호와 함께 DB에 저장됩니다. 같은 전략을 다시 실행하면 별도 실행 기록으로 남습니다.
  5. 거래 로그와 MDD를 검토합니다.수익률이 플러스여도 최대 낙폭이 크면 실제 운용 난도가 높을 수 있습니다.
사례 A · 골든크로스

005930, MA20이 MA50 상향 돌파

시그널 조회에서 BUY가 보이면 다음 캔들의 체결가, 수수료와 슬리피지를 포함해 매수합니다. 이후 SELL이 나올 때까지 보유하는 단순 추세추종 예시입니다.

  • 좋은 점: 규칙이 명확하고 기록하기 쉽습니다.
  • 주의: 횡보장에서는 거짓 신호가 반복될 수 있습니다.
사례 B · 결과 해석

수익률보다 MDD를 함께 보기

예를 들어 총수익률이 12%여도 MDD가 -35%라면 중간에 큰 손실을 견뎌야 했다는 뜻입니다. 다른 기간·다른 종목에도 적용해 일관성을 확인하세요.

  • Sharpe가 높을수록 변동성 대비 효율을 참고할 수 있습니다.
  • 과거 결과는 미래 수익을 보장하지 않습니다.
백테스트 체크리스트미래 가격을 신호에 쓰지 않았는지 · 수수료/슬리피지를 넣었는지 · 상장폐지 종목을 제외하지 않았는지 · 학습 구간과 검증 구간을 분리했는지 확인하세요.