주식매매 자동 알고리즘

개요

이 글은 Kiwoom Auto 프로그램이 키움증권 OpenAPI+로 실행하는
래리 윌리엄스 변동성 돌파(Volatility Breakout) 데이트레이딩 전략을
정리한 문서입니다. 핵심 구현은 VolatilityBreakoutStrategy,
실행·주문은 매매 앱, 시세·TR은 키움 브로커 모듈이 담당합니다.

1. 전체 흐름

  1. 코스피 종목 로드 → 단가·검색 필터 → 사용자가 체크한 종목만 매매 대상
  2. 자동매매 시작 시 opt10081로 시가·전일 고저·이평·동적 K 보강
  3. 실시간 시세(FID 10·13·14·27) 구독
  4. 매 틱: 보유 종목 방어 매도 검사 후, 미보유 종목 매수 검사
  5. 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. 설계 철학

  1. 장 초반 돌파만 매수 (11시 이후·청산 전 매수 중단)
  2. 가짜 돌파 필터 — 거래대금·거래량·이평·Z
  3. 슬리피지 방어 — 지정가 매수, 보수적 수량
  4. 다층 손절 — Z급락 / Midpoint / -5%
  5. 당일 전량 청산 — 데이트레이딩 (오버나이트 의도 없음)

9. 평일 타임라인 예시

  • 08:30 — 운영·자동매매 시작, OHLC 보강, 실시간 구독
  • 08:30~11:00 — 매수 가능 구간
  • 장중 — 틱마다 방어 매도 + 돌파 매수
  • 14:55 — 설정 청산, 잔고 전량 시장가 매도
  • 15:00 이후 — 평가 이력 기록, 블로그·텔레그램 알림

Kiwoom Auto · 래리 윌리엄스 변동성 돌파 자동매매

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤