변경 사항 (Changes): 구문 오류(Syntax error) 및 토큰 낭비를 방지하기 위해 에이전트 쉘(Agent shell)과 파이썬 코드 스니펫에 다수의 신규 안전 규칙(Safety rules)을 추가함. 스키마 검증 및 적절한 SQL 포맷팅을 보장하기 위해 임시(Ad-hoc) 데이터베이스 쿼리 작성 가이드라인을 도입함. 코드 수정 후 UI 기능이 정상 작동하는지 확인하기 위해, 백테스트 웹 서비스 재시작 및 브라우저 검증에 대한 새로운 규칙을 구현함. 시스템 전반의 무결성(Integrity)을 유지하기 위해 실전 매매(Live trading), 웹 백테스팅, 파라미터 탐색(Parameter searches) 간의 일관성 검사(Consistency checks) 체계를 확립함. 기대 효과 (Impact): 이러한 개선 사항들은 트레이딩 시스템의 견고성(Robustness)과 신뢰성을 향상시키며, 에러 발생을 최소화하고 다양한 시스템 컴포넌트 간의 원활한 상호작용을 보장함.
5.2 KiB
5.2 KiB
돌파 실매↔백테 괴리 Q&A (2026-07-16 기준)
패치 적용 완료 (2026-07-17). 실매 봇은 재시작하지 않음. 백테 웹만 재시작.
1번 — 웜업 넣으면 되나?
네 → 적용됨.
- env:
BREAKOUT_BACKTEST_CANDLE_WARMUP_BARS(기본 50, DB 시드) prepend_breakout_candle_warmup— 기간 시작 전 1분봉 prepend- 포트폴리오
all_times는_backtest_period_start_key이후만 (전일 시계 오염 방지) - 모멘텀
MOMENTUM_BACKTEST_CANDLE_WARMUP_BARS와 동일 계열
2번 — 유니버스 sticky/grace
실매 따라가기 → 적용됨.
동작
- 공통
resolve_universe_exit_debounce_sec()→ 기본값 =CONDITION_EXIT_GRACE_SEC(운영 120) - 돌파/꼬리/모멘텀 타임라인
debounce_sec에 연결 - 전략별 오버라이드:
BREAKOUT_UNIVERSE_EXIT_DEBOUNCE_SEC/TAIL_*/MOMENTUM_*(있으면 우선,0=OFF)
09:07 1종 스냅샷 점검 결과
| event_time | n |
|---|---|
| 03:16 | 22 |
| 09:07 | 1 (248170만) |
| 09:11 | 2 |
- history는 effective 유니버스 저장 설계 → 09:07에 1종이면 그 tick의 live effective도 1종으로 보는 게 맞음 (저장이 grace를 빼먹은 버그로 단정하지 않음). 새벽 스냅샷 후 장초 첫 변동·콜드스타트 가능성이 큼.
- 디바운스 ON 시: 09:07 스냅샷에서도 overnight 종목을 120초 유지 → 09:11(약 4분 후)에는 신규 스냅샷 기준으로 정리. 실매 EXIT grace와 같은 전환 규칙.
영향 범위
- 백테 유니버스 재생 (돌파·꼬리·모멘텀 등 타임라인 사용 전략). 실매 주문 로직 자체는 변경 없음.
- 망가뜨리는 패치가 아니라 실매 grace 정합 쪽. 백테 거래수/PnL은 실매에 가까워지도록 바뀔 수 있음.
3번 — 슬롯 늘려서 테스트
사용자 검증용 (코드 변경 없음). 총한도/동시보유↑로 슬롯 경쟁 효과 확인.
4번 — 미청산 flatten / EOD
적용됨 (돌파·모멘텀·RANGE_BREAK).
- 공통
flatten_remaining_portfolio_trades— 루프 끝 미청산을 마지막 확정봉 종가로 장부 기록 eod_enabled면sell_reason=eod, 아니면bt_flatten- skip_stats:
bt_flatten_count - 모멘텀: 웜업은 기존, flatten은 이번에 추가 (이전 “미완” 해소)
(부수) invest_cap 이중 % 스케일
적용됨 (돌파·RANGE_BREAK).
_resolve_breakout_sl_pct_ui:stop_loss_pct(비율) → UI% ;sl_pct만 있으면 UI%/비율 자동 판별breakout_invest_amount_krw에 UI% 한 번만 전달 (×100 이중 제거)
패치 상태
| 순위 | 항목 | 상태 |
|---|---|---|
| 1 | 돌파 백테 전일 봉 웜업 | 완료 |
| 2 | 유니버스 sticky/grace 디바운스 + 09:07 점검 | 완료 |
| 3 | 슬롯/한도 검증용 백테 | 사용자 |
| 4 | 백테 종료 미청산 flatten | 완료 (돌파·모멘텀·레인지) |
| 부수 | invest_cap % 이중 스케일 |
완료 |
관련 파일
- 웜업·디바운스:
kis_trader/backtest/breakout_backtest_common.py - 공통 디바운스:
kis_trader/backtest/universe_timeline.py(resolve_universe_exit_debounce_sec) - flatten:
kis_trader/backtest/backtest_portfolio_common.py - 포트폴리오:
breakout_portfolio_backtest.py,momentum_portfolio_backtest.py,range_break_portfolio_backtest.py - 꼬리 디바운스:
tail_backtest_common.py - env 키:
database.py(BREAKOUT_BACKTEST_CANDLE_WARMUP_BARS등)
검증
py_compileOK- 스모크: debounce(03:16→09:07 유지→09:11 정리) / invest_cap(30만) / flatten(
eod) →SMOKE_OK - DB:
BREAKOUT_BACKTEST_CANDLE_WARMUP_BARS=50시드, config 컬럼 추가 kis_backtest_web.service재시작 (active+ HTTP 200)- 브라우저:
http://192.168.0.149:5050/→ 돌파매매 백테스트 탭 클릭, 폼·「백테스트 실행」버튼 정상 표시
잔여 / 다음 확인
| 순위 | 항목 | 상태 |
|---|---|---|
| 다음 | 2번 검증 — 장초 이노테나·한울: 실매 RAM/틱 vs DB 확정봉 직전봉약세 가설 검증 (후보, 미확정) |
다음 순서 |
| 후보 | 1번 A — 마지막 봉 경과 시 포트폴리오 루프에서 즉시 슬롯 해제 (전 전략 공통) | 대기 — 저유동은 C로도 분 생성 불가 시 필요 |
| 진행 | 1번 C — 판 뒤 1회 REST 백필 | 적용 (아래) |
| — | 3번 슬롯 경쟁 | 패스 |
1번 C 적용 (2026-07-17)
-
모듈:
kis_trader/engine/post_sell_candle_backfill.py -
실매 훅:
order_manager._finalize_sell_fill→ 매도 후 비동기 1회 (시세=키움 실키) -
env:
POST_SELL_CANDLE_BACKFILL(기본 true),POST_SELL_CANDLE_ROLLUP_3M, sleep 1~3초 -
즉시 백필 CLI:
scripts/backfill_trade_candles.py --like '2026-07-16%' -
로그:
/tmp/backfill_trade_candles_0716c.log(및 선행 0716b) -
한계: 거래 자체가 없는 분(저유동)은 REST에도 없음 → C만으로는 완전 메꿈 불가, A 보완 여지
-
웹 돌파 2026-07-16 재백테 ↔ 실매 비교는 C 반영 후 / 2번 검증과 병행
-
실매 봇: post-sell 훅 반영하려면 재시작 필요 (백필 CLI는 봇 없이 완료 가능)