Changes: - Added a new API endpoint for managing permanent subscriptions, allowing users to enable or disable subscriptions dynamically. - Implemented a function to fill candle data from Kiwoom, ensuring that only relevant data is inserted into the database. - Introduced a mechanism to handle master subscription states, improving the management of subscription statuses. - Updated the database schema to include new fields for managing subscription states and order book filtering. Impact: - These enhancements improve the flexibility and reliability of the trading system, allowing for better management of subscriptions and order book data, while reducing the risk of data inconsistencies. 히스토리 align 제거 븅신같은 초기설계 아예 제거 진입모드에 구멍메움 호가진입을 켜도 호가가 안들어올때 호가 안보고 그냥 사버림
3.5 KiB
Optuna 파라미터 탐색 및 호가 수급 최적화 구조 가이드 (옵투나.md)
이 문서는 백테스트 웹·CLI의 Optuna 2단계와, 호가 후처리 격자·적용 분리를 정리한다.
관련: docs/호가.md §8 · kis_trader/backtest/optuna_postprocess_topn.py · optuna_orderbook_recommend.py · optuna_rerun_postprocess.py
최종 갱신: 2026-08-15
1. 투-스테이지
Stage 1 캔들 TPE (param_search_optuna.py)
RSI·손익·트레일 등 차트 축. 호가 ON/OFF는 넣지 않음.
Stage 2 후처리 (attach_topn_postprocess)
gated TopN(+mode/live) 체결을 호가 스냅으로 재생.
진입 스프/잔량/매도벽 · EXIT_OB · STOP_OB · 휩쏘.
Stage 2는 이미 난 체결 + 근처 ws_orderbook/ls_ws_orderbook.
실매 “호가 RAM 없음 → 필터 ON인데 통과” 는 WS_ORDERBOOK_FILTER_REJECT_IF_EMPTY(기본 true) + WS_ORDERBOOK_FILTER_MAX_AGE_SEC (B안, docs/호가.md). 1과목 차트 TPE와 별개.
구 JSON만 Stage 2 다시:
python3 -u kis_trader/backtest/optuna_rerun_postprocess.py \
--result-json kis_trader/backtest/results/optuna_<전략>_tpe_<TS>.json
# --apply-best 없음. 실매 DB 안 바뀜.
웹 Optuna 버튼도 완료 시 후처리를 붙인다 (optuna_postprocess_topn).
orderbook_recommend 블록 + postprocess_topn 이 JSON에 실림.
2. 진입 후처리 격자 (env_config_ext)
ensure_optuna_gate_env_defaults → OPTUNA_OB_*.
OPTUNA_OB_AXIS_TRIALS=0 이면 OPTUNA_OB_RECOMMEND_TRIALS(기본 1000)/축.
| 키 | 널널 검사 기본 (2026-08-15) |
|---|---|
OPTUNA_OB_ENTRY_SPREAD_MIN / MAX |
0.1 ~ 8.0 |
OPTUNA_OB_ENTRY_RATIO_MIN / MAX |
0.05 ~ 1.5 |
OPTUNA_OB_ENTRY_ASK_MULT_MIN / MAX |
1.0 ~ 80.0 (매도벽, L3 ask_qty_l3) |
OPTUNA_OB_LOOKBACK_MIN |
30 (분) |
잔여 체결 < 원본 30% → trial 무효. 너무 센 컷은 고르지 못하게 하는 가드.
결과는 orderbook_filter_enabled=True 고정(후처리가 “끌지”를 탐색하지 않음).
apply 패치에 벽이 있으면 {전략}_ORDERBOOK_ENTRY_ASK_MAX_MULT.
3. 꼬리 TPE 진입모드 (웹 체크)
엔진 실매 기본은 TAIL_ENTRY_MODE → limit_atr (limit_entry_common.short_entry_mode).
웹 꼬리 탭 셀렉트 기본도 limit_atr. Optuna TPE는 예외: 진입을 탐색하지 않고 스터디마다 고정. 예전 코드는 align 하드코딩.
웹 Optuna 탭: align / limit_atr 체크.
- 기본: align만 (기존 TPE와 동일).
- 둘 다: 스터디 2개 순차 (한 TPE에 categorical 혼입 없음).
--apply-best없음.
CLI: --entry-mode align|limit_atr · 순차 스크립트 TAIL_OPTUNA_ENTRY_MODES="align limit_atr".
4. 실매 DB 적용 분리
| 구분 | 차트 캔들 | 호가 후처리 숫자 |
|---|---|---|
--apply-best (기본 미사용) |
차트 축 | 호가 합의 자동 각인 아님 |
웹 Optuna 「적용」 upto |
차트 + 선택 시 entry/exit/stop (build_upto_env_patch) |
upto=entry 이상이면 호가 패치가 들어갈 수 있음 |
| 전용 스크립트 | — | scripts/apply_optuna_ob_consensus.py --strategy MOMENTUM |
후처리 재실행만 하면 JSON만 갱신. DB는 안 바뀜. 1일 best는 과적합 가능.
5. 웹 표기
out_data["orderbook_recommend"] · postprocess_topn.postprocess_by_anchor.
진입 합의 예: orderbook_max_spread_pct / orderbook_min_bid_ask_ratio / orderbook_entry_ask_max_mult.