개요
이 글은 Kiwoom Auto 프로그램이 키움증권 OpenAPI+로 실행하는
래리 윌리엄스 변동성 돌파(Volatility Breakout) 데이트레이딩 전략을
정리한 문서입니다. 핵심 구현은 VolatilityBreakoutStrategy,
실행·주문은 매매 앱, 시세·TR은 키움 브로커 모듈이 담당합니다.
1. 전체 흐름
- 코스피 종목 로드 → 단가·검색 필터 → 사용자가 체크한 종목만 매매 대상
- 자동매매 시작 시
opt10081로 시가·전일 고저·이평·동적 K 보강 - 실시간 시세(FID 10·13·14·27) 구독
- 매 틱: 보유 종목 방어 매도 검사 후, 미보유 종목 매수 검사
- 1초 폴링: 설정 청산 시각에 잔고 전 종목 시장가 매도
2. 데이터
2.1 종목 유니버스
- 코스피 전체 종목 로드 후 최소·최대 단가 필터 (기본 2만~15만원)
- 선택: KOSPI200 등록 목록만 사용
- UI 체크박스로 최종 매매 종목 확정 (동시 구독 종목 수 한도 있음)
2.2 OHLC 보강 (opt10081)
매매 시작 시 종목별 일봉 TR 조회:
- 당일 시가, 전일 고가·저가
- 전일 거래량, MA5·MA20
- 동적 K — 최근 5일 「노이즈」평균을 0.4~0.85로 클램프
노이즈 = 1 - |종가-시가| / (고가-저가) // 꼬리가 길수록 1에 가까움 동적 K = clamp( 5일 노이즈 평균, k_min, k_max )
2.3 실시간 FID
| FID | 항목 | 용도 |
|---|---|---|
| 10 | 현재가 | 돌파·손절 판단 |
| 13 | 누적거래량 | 거래량 필터 |
| 14 | 누적거래대금 | 거래대금 필터 |
| 27 | 매도1호가 | 지정가 매수 가격 |
3. 핵심 수식 — 변동성 돌파
목표가 (매수 트리거)
전일 고저폭 = 전일 고가 - 전일 저가 유효 K = 동적K (있으면) 또는 고정 k (기본 0.6) 목표가 = 당일 시가 + 전일 고저폭 × 유효 K
Z-Score (과열 필터)
Z = (현재가 - 당일 시가) / 전일 고저폭
목표가를 돌파해도 Z ≥ 2.5(기본)이면 이미 과열로 보고 매수하지 않습니다.
4. 매수 알고리즘
4.1 매수 허용 시간
- 앱 운영 구간: 운영 시작~종료, 청산 시각(기본 14:55) 이전만 매수
- 전략 매수 마감:
buy_cutoff_time(기본 11:00) 이후 신규 매수 금지
4.2 매수 전제 (즉시 제외)
- 선택 유니버스에 포함된 종목
- 이번 세션에 아직 매수하지 않음 (보유 시드 포함)
- 주문 전송 후 체결 대기 중이 아님
- 당일 동일 종목 재매수 금지 (파일로 영속)
4.3 돌파 조건
현재가 >= 목표가
4.4 진입 필터 (돌파 후 모두 통과)
| 필터 | 기본 | 설명 |
|---|---|---|
| 매수 마감 | 11:00 | 장 초반 돌파만 |
| 거래대금 | 20억 이상 | 당일 누적 거래대금 |
| 거래량 비율 | 전일×20% | 당일 누적 / 전일 거래량 |
| MA 정배열 | ON | 시가 > MA5, 현재가 > MA20 |
| Z 상한 | < 2.5 | 과열 종목 제외 |
4.5 수량 산정
시장가 슬리피지를 가정한 보수적 수량:
예산 = min(종목당 예산, 남은 매수가능 현금) 상한 금액 = 예산 × 1.05 스트레스 가격 = 주문가 × 1.08 수량 = floor(상한 금액 / 스트레스 가격)
4.6 주문 방식
- 기본: 매도1호가 지정가 (슬리피지 완화)
- 옵션 해제 시: 시장가
4.7 기존 잔고
매매 시작 시 계좌에 이미 있는 선택 종목은 추가 매수하지 않습니다.
설정 청산 시각에는 잔고 전 종목이 매도 대상입니다.
5. 매도 알고리즘
5.1 방어 매도 (실시간, 보유 종목마다 매 틱)
방어1 — Z 급락
Z < -3.5 → 전량 시장가 매도
방어3 — Williams Midpoint 이탈
중간가 = (전일 저가 + 진입 평단) / 2 현재가 < 중간가 → 전량 시장가 매도
방어4 — 비율 손절
수익률 ≤ -5% → 전량 시장가 매도
5.2 설정 청산 (폴링, 세션당 1회)
현재 시각 ≥ force_sell_time (기본 14:55) → 잔고 TR 조회 → 보유 전 종목 시장가 매도
사유: 「설정 청산 시각 — 계좌 보유 전량 시장가 매도」
5.3 수동 청산
UI 「보유 전량 시장가 매도」 버튼으로 즉시 전량 매도 가능.
6. 주문·체결
- SendOrder 실패 시 최대 3회 재시도
- Chejan 체결 통보로 포지션·매매일지 갱신
- 미체결 주문은 설정 시간 초과 시 자동 취소 → 매수 재시도 가능
7. 주요 파라미터 (기본값)
| 항목 | 기본 | 역할 |
|---|---|---|
| k | 0.6 | 고정 K |
| 동적 K | ON | 노이즈 기반 K (0.4~0.85) |
| 종목당 예산 | 30만원 | 매수 금액 상한 |
| 진입 Z 최대 | 2.5 | 과열 필터 |
| 거래대금 하한 | 20억 | 유동성 필터 |
| 매수 마감 | 11:00 | 신규 매수 중단 |
| 청산 시각 | 14:55 | 전량 매도 |
| Z 급락 | -3.5 | 방어1 |
| 손절 | -5% | 방어4 |
8. 설계 철학
- 장 초반 돌파만 매수 (11시 이후·청산 전 매수 중단)
- 가짜 돌파 필터 — 거래대금·거래량·이평·Z
- 슬리피지 방어 — 지정가 매수, 보수적 수량
- 다층 손절 — Z급락 / Midpoint / -5%
- 당일 전량 청산 — 데이트레이딩 (오버나이트 의도 없음)
9. 평일 타임라인 예시
- 08:30 — 운영·자동매매 시작, OHLC 보강, 실시간 구독
- 08:30~11:00 — 매수 가능 구간
- 장중 — 틱마다 방어 매도 + 돌파 매수
- 14:55 — 설정 청산, 잔고 전량 시장가 매도
- 15:00 이후 — 평가 이력 기록, 블로그·텔레그램 알림
Kiwoom Auto · 래리 윌리엄스 변동성 돌파 자동매매

