시황이 바뀌면 전략도 바뀐다 — 5단계 시황 인식 기반 단타 자동매매의 설계 원리
시황을 5단계(강세·약세상승·횡보·약세하락·급락)로 자동 판별하고, 각 국면에 맞는 단타 전략·손절 배수·리스크 관리를 동적으로 전환하는 자동매매 시스템의 설계 원리를 다룬 글이다.

오늘 아침 시장이 강하게 열렸다. 어제와 완전히 다른 분위기다. 당신의 자동매매 봇은 이 차이를 알고 있는가?
대부분의 단타 자동매매 프로그램은 시장 분위기와 무관하게 똑같은 전략을 반복한다. 횡보장에서도 돌파 전략, 급락장에서도 돌파 전략. 조건이 맞으면 사고, 맞지 않으면 기다린다. 그게 전부다. 그래서 강세장에서는 수익을 내다가 시장이 바뀌는 순간 같은 설정으로 연속 손실을 맞는다. 프로그램이 나쁜 게 아니다. 처음부터 시장을 읽도록 설계되지 않은 것뿐이다.
우리는 이 구조적 결함을 정면으로 파고들었다. 시황을 먼저 읽고, 그 시황에 맞는 전략을 선택하고, 리스크를 시장 변동성에 맞게 동적으로 조절한다. 매 60초, 시스템은 시장이 어떤 국면에 있는지 판단하고 전략을 재설정한다.
시장은 하나가 아니다 — 5가지 얼굴을 읽는다
우리 시스템의 첫 번째 질문은 늘 같다. "지금 시장은 어떤 상태인가?"
이 질문에 답하기 위해 시스템은 매일 아침 KOSPI 20일선과 60일선의 위치, 그리고 공포 지수인 V-KOSPI를 확인한다. 두 지표의 조합으로 시장은 다섯 가지 국면 중 하나로 분류된다.
**강세장 (Strong Bullish)**은 KOSPI 20일선이 60일선 위에 있고 V-KOSPI가 20 이하인 상태다. 시장이 안정적으로 오르고 있다. 공포가 없다. 이때는 공격적으로 모멘텀을 탈 수 있다.
**약세상승 (Weak Bullish)**은 추세는 살아있지만 확신이 부족한 상태다. 시장이 오르긴 하는데 어딘가 불안하다. 조심스럽게 추세에 편승해야 한다.
**횡보장 (Sideways)**은 방향성이 없는 상태다. 20일선과 60일선이 엉켜 있다. 돌파를 노리는 전략은 여기서 반복적으로 속임수를 당한다. 다른 접근이 필요하다.
**약세하락 (Weak Bearish)**은 시장이 아래를 향하고 있다. 이 국면에서 단타 시스템은 매매를 하지 않는다. 아무것도 안 하는 것이 전략이다.
**급락장 (Crash)**은 시장이 순간적으로 붕괴하는 상태다. V-KOSPI가 35를 넘거나 KOSPI가 장중 5% 이상 빠졌다. 공황이다. 그런데 이 공황 속에도 기회가 있다. 다만 매우 선택적으로, 매우 짧게.
시황 판단에는 히스테리시스가 적용된다. 한 번의 신호로 즉시 전환하지 않는다. 연속 2거래일 동일한 신호가 확인돼야 국면이 바뀐다. 시장 노이즈에 전략이 흔들리지 않게 하는 안전장치다.
국면마다 다른 전략을 꺼내든다
시황이 결정되면 시스템은 그 국면에 최적화된 전략을 자동으로 선택한다. 사용자가 개입할 필요가 없다. 매일 아침 전략을 바꿀 필요도 없다.
강세장에는 모멘텀 전략이 나선다.
*ORB (Opening Range Breakout)*는 장이 열리는 처음 10분, 09:00봉과 09:05봉의 고가를 기록해둔다. 09:10 이후, 현재 종가가 이 고가를 뚫고 올라가면서 거래량이 평소의 2배 이상 터지는 순간 진입한다. 장 초반 기관과 외국인이 방향을 잡아가는 흐름에 올라타는 전략이다.
GapAndGo는 전일 대비 2% 이상 갭상승으로 시작한 종목을 노린다. 시초가 5분 봉이 양봉으로 마감되고 거래량이 3배 이상 쏟아지면, 이 갭이 단순한 소음이 아니라 강한 매수세의 신호라고 판단한다. 09:05에서 09:35 사이, 갭 상승의 초반 흐름에 올라탄다.
약세상승에는 VWAP이 기준선이 된다.
VWAP은 당일 거래 가중 평균가다. 이 선 아래에서 거래되던 종목이 거래량을 동반하며 VWAP을 뚫고 올라오는 순간, 매수세가 일중 평균을 회복했다는 신호다. 확신이 없는 장세에서도 이 전환점은 비교적 신뢰할 수 있다.
횡보장에는 역발상 전략이 작동한다.
돌파 전략이 맞지 않는 장에서 오히려 효과적인 전략이 있다. VWAP Reversion은 주가가 VWAP에서 ATR 1.5배 이상 이탈해 낙하한 뒤 양봉으로 돌아서고 RSI가 40 이하일 때 진입한다. 과도하게 눌린 가격이 평균으로 회귀하는 움직임을 포착한다.
RSI Extreme은 RSI가 30 이하로 떨어지고 볼린저밴드 하단을 이탈한 직후 양봉이 나타나는 순간을 노린다. 극단적 과매도에서의 기술적 반등이다.
급락장에는 딱 하나의 전략만 가동된다.
StockPanicBounce는 장중 고가 대비 5% 이상 빠진 종목이 오후 2시 이후, 아래꼬리가 봉 전체 범위의 60% 이상인 망치형으로 마감되고 거래량이 2배 이상 터질 때만 진입한다. 공황 이후 진정될 때 나타나는 기술적 반등을 노리는 전략으로, 시간과 형태 조건을 모두 충족할 때만 작동한다.
그리고 약세하락장에서는 아무것도 하지 않는다. 가장 중요한 전략 중 하나다.
손절선이 시장 숨결에 맞춰 움직인다
종목을 샀다. 이제 어디서 팔 것인가? 고정된 퍼센트로 손절하고 익절하는 방식은 단순하지만 조잡하다. 변동성이 큰 날에는 손절선이 너무 좁아 정상적인 가격 흔들림에 쓸려나간다. 변동성이 낮은 날에는 손절선이 너무 넓어 손실이 커진다.
우리 시스템은 **ATR(Average True Range)**을 사용한다. ATR은 최근 14개 5분봉 기준으로 계산한 시장의 실제 변동 폭이다. 삼성전자가 하루에 200~400원 정도 흔들린다면 ATR은 그 수치를 반영한다. 시장이 조용한 날은 작아지고, 격렬한 날은 커진다.
진입가에서 ATR 배수를 적용해 세 개의 선이 그어진다.
- 손절선(SL): 진입가 − ATR × 배수. 여기까지 내려오면 무조건 자른다.
- 익절선(TP): 진입가 + ATR × 배수. 여기까지 오르면 확정한다.
- 트레일링 스톱: 고점이 갱신될 때마다 올라오는 후행 손절선.
그리고 이 배수가 시황에 따라 달라진다. 강세장에서는 손절선을 조금 넓게 잡고(ATR × 0.8), 익절선도 더 멀리 잡는다(ATR × 2.5). 횡보장에서는 타이트하게(SL × 0.6, TP × 1.5). 시장이 조용할 때는 좁게, 시장이 강할 때는 넓게. 리스크 파라미터가 시장 상태에 맞춰 자동으로 조정된다.
구체적인 예를 보자. 강세장, 진입가 70,000원, ATR 300원이라면:
손절선 = 70,000 − 300 × 0.8 = 69,760원
익절선 = 70,000 + 300 × 2.5 = 70,750원
트레일링 = 70,000 − 300 × 1.5 = 69,550원
주가가 70,400원까지 오르면 트레일링 스톱이 70,400 − 450 = 69,950원으로 올라온다. 이후 다시 내려오면 69,950원에서 자동 매도된다. 수익의 일부를 무조건 챙기는 구조다.
연속으로 잃을 때 시스템이 먼저 멈춘다
단타는 빠르다. 그리고 빠른 만큼 손실도 빠르게 쌓인다. 연속 손절이 이어지는 날, 인간 트레이더는 감정이 흔들린다. 만회 심리로 더 큰 포지션을 잡거나 원칙을 어기기 시작한다. 자동매매 시스템이라고 다르지 않다. 손절 조건이 맞으면 계속 사고, 계속 잃는 것을 반복할 수 있다.
우리 시스템은 연속 손실에 대한 자동 보호 장치를 내장하고 있다.
당일 연속 3회 손절이 발생하면 그날 신규 진입이 전면 중단된다. 오늘은 더 이상 싸우지 않는다. 2거래일 연속 손실이 이어지면 다음 거래는 투자금을 50%로 줄인다. 3거래일 연속이면 24시간 쿨다운에 들어간다. 시장을 이기려는 것이 아니라, 최악의 국면에서 살아남는 것이 먼저다.
시장이 무너지기 시작하면 두 단계로 대응한다
시장의 일중 급락은 어떤 단타 전략도 무력화시킨다. 방향이 없는 것이 아니라, 모든 것이 아래로 향하는 상황이다.
Level 1은 경보다. V-KOSPI가 25를 넘거나 KOSPI가 장중 3% 이상 빠지면 신규 진입이 중단된다. 기존 포지션은 그대로 두되, 새로운 매수는 하지 않는다.
Level 2는 탈출이다. V-KOSPI 35 이상이거나 KOSPI가 5% 이상 급락하면 보유 중인 모든 단타 포지션을 즉시 시장가 청산한다. 이유를 묻지 않는다. 먼저 살고 나서 생각한다.
당일에 시작해서 당일에 끝낸다
단타는 오버나이트 리스크를 안고 가지 않는다. 밤새 악재 뉴스가 터지거나, 다음 날 갭하락으로 시작하면 손절선이 의미를 잃는다.
오후 3시 15분이 되면 시스템은 알람을 울린다. 15분 안에, trading_style = "daytrading"으로 열린 모든 포지션이 시장가로 청산된다. 수익이든 손실이든, 오늘 열린 것은 오늘 닫힌다. 3시 20분 장 마감까지 모든 자리를 비운다.
하루 동안 시스템이 하는 일
09:00 — 장이 열린다. 시황 판단이 완료돼 있다. 오늘 어떤 전략이 적용될지 이미 결정됐다.
09:05 ~ 09:35 — GapAndGo 전략이 갭상승 종목을 스캔한다. 조건이 맞으면 즉시 진입.
09:10 ~ 11:00 — ORB 전략이 시초가 고점 돌파를 기다린다. 거래량을 동반하면 진입.
이후 — 60초마다 보유 포지션의 SL/TP/트레일링을 체크한다. VWAP 돌파, VWAP 회귀, RSI 극단 전략이 실시간으로 신호를 스캔한다.
14:00 이후 — 급락장이라면 StockPanicBounce가 망치형 종목을 탐색한다.
15:15 — 강제 청산 카운트다운 시작.
15:20 — 포지션 전량 청산 완료. 오늘 하루 종료.
왜 이 방식이 더 견고한가
기존 단타 자동매매의 문제는 전략이 하나라는 것이 아니다. 언제나 같은 전략을 쓴다는 것이다. 강세장에도, 횡보장에도, 급락장에도 같은 조건, 같은 배수, 같은 기준.
우리 시스템은 시장이 어떤 얼굴을 하고 있느냐에 따라 다르게 행동한다. 공격할 때 공격하고, 방어할 때 방어하고, 싸우지 말아야 할 때는 가만히 있는다. 손절선은 오늘의 시장 변동성을 기준으로 설정되고, 연속 손실이 쌓이면 시스템 스스로 브레이크를 밟는다. 하루가 끝나면 포지션도 끝난다.
전략을 매일 바꿀 필요가 없다. 시황이 바뀌면 전략도 자동으로 바뀐다. 사용자가 챙겨야 할 것은 하나다. 봇이 켜져 있는지 확인하는 것.
기술적 기반
시황 판별은 매일 08:50 KST 기준으로 실행되며 결과는 데이터베이스에 이력으로 저장된다. 모든 전략 신호 생성은 yfinance 기반 5분봉 OHLCV 데이터를 사용하며, 최근 100봉(약 1.5거래일)을 분석 기반으로 삼는다. ATR은 Wilder EMA 방식으로 5분봉 14기간 기준 계산된다. 쿨다운 상태와 급락 방어 레벨은 Redis에 저장되어 실시간으로 관리된다. 모든 진입과 청산은 entry_strategy, exit_reason, market_regime 필드와 함께 거래 기록에 저장되어 어떤 시황에서 어떤 전략으로 어떤 결과를 냈는지 추적할 수 있다.
마치며
시장을 예측하는 것은 불가능하다. 하지만 시장의 상태를 읽고, 그 상태에 맞는 방식으로 대응하는 것은 가능하다. 강할 때 공격하고, 불확실할 때 보수적으로 접근하고, 위험할 때 물러나는 것. 이것은 고수익 전략이 아니다. 살아남는 전략이다.
그리고 살아남는 시스템만이 복리의 혜택을 누릴 수 있다.
오늘 시황은 어떤가. 시스템은 이미 알고 있다.