Changes: - Added new API endpoints for continuing and confirming Optuna jobs, allowing for better management of ongoing studies. - Introduced detailed logging for tick feed tracking and order book processing, improving traceability of vendor performance during backtests. - Updated database schema to include new fields for managing Optuna study results, enhancing the ability to track study progress and outcomes. - Refactored existing functions to utilize the new logging and tracking features, ensuring consistency across the backtesting framework. Impact: - These enhancements improve the robustness and transparency of the Optuna backtesting process, facilitating better analysis and optimization of trading strategies.
1052 lines
93 KiB
Markdown
1052 lines
93 KiB
Markdown
# kis_bot 코드 아키텍처 & 의존성 맵
|
|
|
|
> **자동 생성 문서** — AST 기반 import 정적 분석 결과
|
|
> DB 스키마는 [db_erd.md](./db_erd.md) 를 함께 참조하세요.
|
|
|
|
---
|
|
|
|
## 📊 프로젝트 통계
|
|
|
|
| 항목 | 값 |
|
|
|------|-----|
|
|
| 총 Python 파일 수 | **372** 개 |
|
|
| 총 코드 라인 수 | **164,876** 줄 |
|
|
| DB 테이블 수 | **50** 개 (→ [db_erd.md](./db_erd.md)) |
|
|
| DB 참조 파일 수 | **94** 개 |
|
|
|
|
### 주요 외부 라이브러리 의존성
|
|
|
|
| 라이브러리 | 사용 파일 수 |
|
|
|------------|------------|
|
|
| `utils` | 78 |
|
|
| `kiwoom_rest_api` | 67 |
|
|
| `PySide2` | 52 |
|
|
| `tr` | 52 |
|
|
| `argparse` | 50 |
|
|
| `requests` | 32 |
|
|
| `engine` | 26 |
|
|
| `optuna` | 20 |
|
|
| `dotenv` | 19 |
|
|
| `pandas` | 18 |
|
|
| `pythoncom` | 16 |
|
|
| `win32com` | 16 |
|
|
| `websocket` | 13 |
|
|
| `asyncio` | 13 |
|
|
| `google` | 11 |
|
|
| `ws` | 11 |
|
|
| `holding_bot` | 10 |
|
|
| `signal` | 10 |
|
|
| `base` | 10 |
|
|
| `atexit` | 9 |
|
|
|
|
---
|
|
|
|
## 🏗️ 레이어 아키텍처 (계층도)
|
|
|
|
```mermaid
|
|
graph TD
|
|
subgraph "🏠 진입점 (Entry Points)"
|
|
A[holding_bot.py]
|
|
A2[scalping_bot.py]
|
|
A3[momentum_bot.py]
|
|
end
|
|
subgraph "⚙️ 전략 엔진 (kis_trader/engine)"
|
|
B[momentum_engine.py]
|
|
B2[tail_engine.py]
|
|
B3[scalping_engine.py]
|
|
B4[momentum_hts_logic.py]
|
|
end
|
|
subgraph "🔬 백테스트 (kis_trader/backtest)"
|
|
C[momentum_backtest_common.py]
|
|
C2[param_search_momentum.py]
|
|
C3[optuna_momentum.py]
|
|
C4[bt_candle_source.py]
|
|
end
|
|
subgraph "🗄️ 데이터 레이어"
|
|
D[(kis_quant_db)]
|
|
D2[database.py]
|
|
D3[kis_trader/utils/env.py]
|
|
end
|
|
subgraph "📡 실시간 데이터"
|
|
E[ws_candles]
|
|
E2[ws_ticks]
|
|
E3[ls_ws_*]
|
|
end
|
|
A --> B
|
|
A2 --> B3
|
|
B --> B4
|
|
B --> C
|
|
C2 --> C3
|
|
C --> C4
|
|
C --> D2
|
|
B --> D2
|
|
D2 --> D
|
|
D3 --> D2
|
|
D --> E
|
|
D --> E2
|
|
```
|
|
|
|
---
|
|
|
|
## 🔗 핵심 허브 파일 (많이 import 되는 모듈 Top 20)
|
|
|
|
> 이 파일들을 수정할 때 가장 많은 사이드 이펙트가 발생합니다.
|
|
|
|
| 순위 | 모듈 | 의존하는 파일 수 | 주요 의존자 |
|
|
|------|------|-----------------|------------|
|
|
| 1 | `database` | 97 | `_test_ls_condition_realtime.py`, `_verify_shared_e2e.py`, `_verify_shared_e2e_breakout.py` 외 94개 |
|
|
| 2 | `kis_trader.utils.env` | 89 | `_test_kiwoom_condition_list.py`, `_test_kiwoom_condition_realtime.py`, `_test_ls_condition_realtime.py` 외 86개 |
|
|
| 3 | `kis_trader.backtest` | 31 | `_verify_shared_e2e.py`, `_verify_shared_e2e_breakout.py`, `backtest_web.py` 외 28개 |
|
|
| 4 | `kis_trader.backtest.backtest_portfolio_common` | 31 | `backtest_web.py`, `breakout_backtest_common.py`, `breakout_portfolio_backtest.py` 외 28개 |
|
|
| 5 | `kis_trader.engine` | 26 | `backtest_web.py`, `diag_backtest_4_30.py`, `dart_backtest_common.py` 외 23개 |
|
|
| 6 | `kis_trader.backtest.shared_ticks` | 17 | `_verify_columnar_bitid.py`, `_verify_shared_e2e.py`, `_verify_shared_e2e_breakout.py` 외 14개 |
|
|
| 7 | `kis_trader.ws.kis_ws` | 15 | `_test_kiwoom_condition_list.py`, `_test_kiwoom_condition_realtime.py`, `etf_ver1.py` 외 12개 |
|
|
| 8 | `kis_trader.utils.trade_time` | 14 | `backtest_web.py`, `backtest_portfolio_common.py`, `dbband_backtest_common.py` 외 11개 |
|
|
| 9 | `kis_trader.engine.indicator_cache` | 14 | `database.py`, `breakout_backtest_common.py`, `breakout_portfolio_backtest.py` 외 11개 |
|
|
| 10 | `kis_trader.engine.tail_tick_replay` | 13 | `_verify_columnar_bitid.py`, `param_search_optuna.py`, `scalping_portfolio_backtest.py` 외 10개 |
|
|
| 11 | `kis_trader.backtest.universe_history_source` | 13 | `backtest_web.py`, `breakout_backtest_common.py`, `momentum_backtest_common.py` 외 10개 |
|
|
| 12 | `kis_trader.backtest.param_search_momentum` | 12 | `_verify_shared_e2e.py`, `backtest_web.py`, `diag_momentum_backtest.py` 외 9개 |
|
|
| 13 | `kis_trader.backtest.breakout_tick_loader` | 12 | `_verify_shared_e2e_breakout.py`, `backtest_web.py`, `breakout_backtest_common.py` 외 9개 |
|
|
| 14 | `kis_trader.backtest.backtest_env_timeline` | 12 | `backtest_web.py`, `breakout_backtest_common.py`, `breakout_portfolio_backtest.py` 외 9개 |
|
|
| 15 | `kis_trader.database.db_manager` | 12 | `backtest_web.py`, `breakout_backtest_common.py`, `dbband_backtest_common.py` 외 9개 |
|
|
| 16 | `kis_trader.engine.momentum_engine` | 12 | `backtest_web.py`, `backtest_env_timeline.py`, `momentum_backtest_common.py` 외 9개 |
|
|
| 17 | `kis_trader.strategies.breakout` | 12 | `backtest_web.py`, `backtest_env_timeline.py`, `breakout_backtest_common.py` 외 9개 |
|
|
| 18 | `kis_trader.backtest.trigger_snapshot_loader` | 12 | `backtest_portfolio_common.py`, `breakout_portfolio_backtest.py`, `momentum_portfolio_backtest.py` 외 9개 |
|
|
| 19 | `kis_trader.utils.logger` | 12 | `breakout_backtest_common.py`, `ls_history_loaders.py`, `momentum_backtest_common.py` 외 9개 |
|
|
| 20 | `kis_trader.backtest.optuna_common` | 12 | `optuna_breakout.py`, `optuna_dart.py`, `optuna_momentum.py` 외 9개 |
|
|
|
|
---
|
|
|
|
## 🗄️ DB 테이블 ↔ 코드 파일 연관 맵
|
|
|
|
> [db_erd.md](./db_erd.md) 의 각 테이블을 실제로 읽고/쓰는 파일 목록입니다.
|
|
> DB 스키마를 변경하면 아래 파일들을 반드시 확인하세요.
|
|
|
|
| DB 테이블 | 참조 파일들 | ERD 링크 |
|
|
|-----------|------------|---------|
|
|
| `active_trades` | `backtest_web.py`, `database.py`, `etf_ver1.py`, `holding_bot.py` 외 15개 | [ERD](./db_erd.md#active_trades) |
|
|
| `active_trades_paper` | `backtest_web.py`, `us_momentum.py` | [ERD](./db_erd.md#active_trades_paper) |
|
|
| `ai_analysis_log` | `database.py`, `mm_butler.py` | [ERD](./db_erd.md#ai_analysis_log) |
|
|
| `buy_execution_log` | `database.py`, `kis_long_ver1.py` | [ERD](./db_erd.md#buy_execution_log) |
|
|
| `config_breakout` | `backtest_web.py`, `database.py`, `param_search_breakout.py`, `apply_unified_risk_env.py` 외 2개 | [ERD](./db_erd.md#config_breakout) |
|
|
| `config_dart` | `backtest_web.py`, `database.py` | [ERD](./db_erd.md#config_dart) |
|
|
| `config_dbband` | `database.py`, `dbband_engine.py`, `prune_env_config_strategy_columns.py` | [ERD](./db_erd.md#config_dbband) |
|
|
| `config_momentum` | `backtest_web.py`, `database.py`, `backtest_portfolio_common.py`, `param_search_momentum.py` 외 5개 | [ERD](./db_erd.md#config_momentum) |
|
|
| `config_range_break` | `backtest_web.py`, `database.py`, `range_break_engine.py`, `prune_env_config_strategy_columns.py` | [ERD](./db_erd.md#config_range_break) |
|
|
| `config_scalp` | `backtest_web.py`, `database.py`, `param_search_apply_snapshot.py`, `param_search_scalping.py` 외 5개 | [ERD](./db_erd.md#config_scalp) |
|
|
| `config_short` | `backtest_web.py`, `database.py`, `tail_env_keys.py`, `apply_unified_risk_env.py` 외 3개 | [ERD](./db_erd.md#config_short) |
|
|
| `config_updow` | `database.py`, `apply_unified_risk_env.py`, `migrate_split_env_config.py`, `prune_env_config_strategy_columns.py` | [ERD](./db_erd.md#config_updow) |
|
|
| `config_us_momentum` | `database.py`, `optuna_momentum.py`, `param_search_momentum.py`, `prune_env_config_strategy_columns.py` | [ERD](./db_erd.md#config_us_momentum) |
|
|
| `daily_summary` | `database.py` | [ERD](./db_erd.md#daily_summary) |
|
|
| `dart_disclosures` | `backtest_web.py`, `database.py`, `dart_backtest_common.py`, `dart_engine.py` 외 1개 | [ERD](./db_erd.md#dart_disclosures) |
|
|
| `dart_watchlist` | `backtest_web.py`, `database.py`, `dart_engine.py`, `dart_order_tracker.py` | [ERD](./db_erd.md#dart_watchlist) |
|
|
| `env_config` | `_test_ls_condition_realtime.py`, `backtest_web.py`, `check_account_config.py`, `copy_env_row_to_latest.py` 외 48개 | [ERD](./db_erd.md#env_config) |
|
|
| `env_config_ext` | `backtest_web.py`, `database.py`, `optuna_common.py`, `migrate_split_env_config.py` 외 1개 | [ERD](./db_erd.md#env_config_ext) |
|
|
| `holding_candles` | `backtest_web.py`, `holding_bot.py`, `kis_holding_ver1.py` | [ERD](./db_erd.md#holding_candles) |
|
|
| `holding_min_candles` | `backtest_web.py`, `holding_bot.py`, `dbband_backtest_common.py`, `dbband_param_search.py` 외 4개 | [ERD](./db_erd.md#holding_min_candles) |
|
|
| `holding_stock_config` | `holding_bot.py`, `kis_holding_ver1.py` | [ERD](./db_erd.md#holding_stock_config) |
|
|
| `kv_store` | `database.py` | [ERD](./db_erd.md#kv_store) |
|
|
| `ls_candidates_history` | `backtest_web.py`, `database.py`, `param_search_optuna.py`, `db_manager.py` 외 2개 | [ERD](./db_erd.md#ls_candidates_history) |
|
|
| `ls_universe_history` | `database.py`, `collect_ls_condition_history.py`, `collect_ls_universe_history.py` | [ERD](./db_erd.md#ls_universe_history) |
|
|
| `ls_ws_candles` | `backtest_web.py`, `database.py`, `breakout_backtest_common.py`, `scalping_backtest_common.py` 외 2개 | [ERD](./db_erd.md#ls_ws_candles) |
|
|
| `ls_ws_orderbook` | `database.py`, `ls_ws.py` | [ERD](./db_erd.md#ls_ws_orderbook) |
|
|
| `ls_ws_ticks` | `database.py`, `breakout_backtest_common.py`, `optuna_breakout.py`, `optuna_scalping.py` 외 2개 | [ERD](./db_erd.md#ls_ws_ticks) |
|
|
| `ls_ws_vi` | `database.py`, `ls_ws.py` | [ERD](./db_erd.md#ls_ws_vi) |
|
|
| `order_execution_history` | `database.py` | [ERD](./db_erd.md#order_execution_history) |
|
|
| `orders` | `backtest_web.py`, `db_manager.py`, `us_momentum.py`, `kiwoom_trader_ver2.py` | [ERD](./db_erd.md#orders) |
|
|
| `permanent_subscriptions` | `us_momentum.py`, `test_ls_ws.py` | [ERD](./db_erd.md#permanent_subscriptions) |
|
|
| `stock_meta` | `backtest_web.py`, `database.py`, `fetch_stock_meta.py`, `param_search_apply_snapshot.py` 외 8개 | [ERD](./db_erd.md#stock_meta) |
|
|
| `stock_share_meta` | `database.py`, `param_search_breakout.py`, `fill_stock_share_meta.py`, `test_kiwoom_ws_sub_limit.py` | [ERD](./db_erd.md#stock_share_meta) |
|
|
| `target_candidates` | `backtest_web.py`, `database.py`, `diag_backtest_4_30.py`, `param_search_momentum.py` 외 26개 | [ERD](./db_erd.md#target_candidates) |
|
|
| `target_candidates_history` | `backtest_web.py`, `database.py`, `diag_backtest_4_30.py`, `param_search_momentum.py` 외 17개 | [ERD](./db_erd.md#target_candidates_history) |
|
|
| `trade_history` | `backtest_web.py`, `database.py`, `kis_long_ver1.py`, `kis_long_ver2.py` 외 15개 | [ERD](./db_erd.md#trade_history) |
|
|
| `trade_history_paper` | `backtest_web.py` | [ERD](./db_erd.md#trade_history_paper) |
|
|
| `ws_candles` | `backtest_web.py`, `database.py`, `diag_backtest_4_30.py`, `breakout_backtest_common.py` 외 24개 | [ERD](./db_erd.md#ws_candles) |
|
|
| `ws_orderbook` | `database.py`, `backtest_portfolio_common.py`, `optuna_scalping.py`, `param_search_breakout.py` 외 6개 | [ERD](./db_erd.md#ws_orderbook) |
|
|
| `ws_program` | `database.py`, `backtest_portfolio_common.py`, `optuna_scalping.py`, `param_search_breakout.py` 외 3개 | [ERD](./db_erd.md#ws_program) |
|
|
| `ws_ticks` | `_verify_shared_e2e.py`, `_verify_shared_e2e_breakout.py`, `backtest_web.py`, `database.py` 외 21개 | [ERD](./db_erd.md#ws_ticks) |
|
|
| `ws_ticks_us` | `backtest_web.py`, `database.py`, `breakout_tick_loader.py`, `momentum_backtest_common.py` 외 2개 | [ERD](./db_erd.md#ws_ticks_us) |
|
|
|
|
---
|
|
|
|
## 📂 전략별 파일 분류
|
|
|
|
### DART공시
|
|
|
|
| 파일 | 라인 수 | 레이어 | 내부 의존 |
|
|
|------|---------|--------|----------|
|
|
| `dart_backtest_common.py` | 142 | 🔬 백테스트 | `database`, `backtest`, `engine` +1 |
|
|
| `optuna_dart.py` | 104 | 🔬 백테스트 | `database`, `optuna_common`, `param_search_dart` +1 |
|
|
| `param_search_dart.py` | 95 | 🔬 백테스트 | `database`, `dart_backtest_common`, `engine` +1 |
|
|
| `dart_engine.py` | 380 | ⚙️ 엔진 | `database`, `scalping_engine`, `env` |
|
|
| `dart_order_tracker.py` | 642 | 📦 kis_trader | `database`, `db_manager`, `dart_watchlist` +3 |
|
|
| `dart_watchlist.py` | 168 | 📦 kis_trader | `env`, `logger` |
|
|
| `dart_strategy.py` | 248 | 📦 kis_trader | |
|
|
|
|
### 공매도/숏
|
|
|
|
| 파일 | 라인 수 | 레이어 | 내부 의존 |
|
|
|------|---------|--------|----------|
|
|
| `kis_short_ver1.py` | 3,826 | 🏠 루트 | `database` |
|
|
| `kis_short_ver2.py` | 3,885 | 🏠 루트 | `database` |
|
|
| `kis_short_ver3.py` | 3,610 | 🏠 루트 | `database` |
|
|
| `update_env_short.py` | 140 | 🏠 루트 | `database` |
|
|
|
|
### 공통
|
|
|
|
| 파일 | 라인 수 | 레이어 | 내부 의존 |
|
|
|------|---------|--------|----------|
|
|
| `_test_kiwoom_condition_list.py` | 180 | 🏠 루트 | `env`, `kis_ws` |
|
|
| `_test_kiwoom_condition_realtime.py` | 228 | 🏠 루트 | `env`, `kis_ws` |
|
|
| `_test_ls_condition_realtime.py` | 693 | 🏠 루트 | `database`, `ls_token`, `env` |
|
|
| `_verify_columnar_bitid.py` | 236 | 🏠 루트 | `shared_ticks`, `momentum_tick_replay`, `tail_tick_replay` +1 |
|
|
| `_verify_shared_e2e.py` | 152 | 🏠 루트 | `database`, `backtest`, `momentum_backtest_common` +3 |
|
|
| `auto_ai_reporter.py` | 263 | 🏠 루트 | |
|
|
| `backtest_web.py` | 9,455 | 🔬 백테스트 | `database`, `backtest`, `backtest_env_timeline` +43 |
|
|
| `carrot_region_sel.py` | 366 | 🏠 루트 | |
|
|
| `check_account_config.py` | 103 | 🏠 루트 | `database` |
|
|
| `check_db.py` | 28 | 🏠 루트 | |
|
|
| `config_schema.py` | 150 | 🏠 루트 | |
|
|
| `copy_env_row_to_latest.py` | 40 | 🏠 루트 | `database` |
|
|
| `database.py` | 5,014 | 🗄️ DB 레이어 | `paper_store`, `indicator_cache`, `env` +1 |
|
|
| `diag_backtest_4_30.py` | 198 | 🔬 백테스트 | `database`, `engine` |
|
|
| `etf_backtest.py` | 404 | 🔬 백테스트 | |
|
|
| `etf_ver1.py` | 887 | 🏠 루트 | `database`, `kis_ws` |
|
|
| `export_sniper.py` | 132 | 🏠 루트 | |
|
|
| `fetch_stock_meta.py` | 327 | 🏠 루트 | `database`, `kis_ws` |
|
|
| `holding_bot.py` | 2,577 | 🏠 루트 | `database`, `kis_ws` |
|
|
| `init_db.py` | 78 | 🏠 루트 | `database` |
|
|
| `kis_approval_manager.py` | 404 | 🏠 루트 | |
|
|
| `kis_holding_ver1.py` | 492 | 🏠 루트 | `database` |
|
|
| `kis_long_alert.py` | 267 | 🏠 루트 | `database` |
|
|
| `kis_long_ver1.py` | 1,953 | 🏠 루트 | `database` |
|
|
| `kis_long_ver2.py` | 1,008 | 🏠 루트 | `database` |
|
|
| `kis_token_manager.py` | 466 | 🏠 루트 | `database` |
|
|
| `__init__.py` | 3 | 📦 kis_trader | |
|
|
| `__init__.py` | 1 | 🔬 백테스트 | |
|
|
| `backtest_env_timeline.py` | 158 | 🔬 백테스트 | `breakout_backtest_common`, `env_timeline`, `dbband_engine` +5 |
|
|
| `backtest_portfolio_common.py` | 919 | 🔬 백테스트 | `database`, `trigger_snapshot_loader`, `daily_profit_halt` +5 |
|
|
| `backtest_web.py` | 49 | 🔬 백테스트 | |
|
|
| `bt_web_jobs.py` | 443 | 🔬 백테스트 | `kr_trading_day` |
|
|
| `env_timeline.py` | 106 | 🔬 백테스트 | |
|
|
| `ls_history_loaders.py` | 228 | 🔬 백테스트 | `logger` |
|
|
| `optuna_briefing.py` | 432 | 🔬 백테스트 | `database`, `env` |
|
|
| `optuna_common.py` | 672 | 🔬 백테스트 | `database`, `optuna_briefing`, `env` |
|
|
| `optuna_daily_trail_recommend.py` | 315 | 🔬 백테스트 | `param_search_apply_snapshot`, `env` |
|
|
| `optuna_mode_combo.py` | 278 | 🔬 백테스트 | `optuna_postprocess_topn`, `optuna_tpe_common`, `env` |
|
|
| `optuna_post_progress.py` | — | 🔬 백테스트 | (후처리 진행 로그, 웹 바) |
|
|
| `optuna_postprocess_topn.py` | — | 🔬 백테스트 | `optuna_orderbook_recommend`, `optuna_whipsaw_recommend`, `optuna_post_progress` |
|
|
| `optuna_rerun_postprocess.py` | — | 🔬 백테스트 | `optuna_postprocess_topn`, `optuna_momentum` |
|
|
| `optuna_search_space.py` | 89 | 🔬 백테스트 | `param_search_breakout`, `param_search_momentum`, `param_search_scalping` +1 |
|
|
| `optuna_tpe_common.py` | 218 | 🔬 백테스트 | |
|
|
| `optuna_web_jobs.py` | 1,121 | 🔬 백테스트 | `backtest_portfolio_common`, `optuna_common`, `optuna_study_store` +6 |
|
|
| `optuna_study_store.py` | — | 🔬 백테스트 | `optuna_study_result` 테이블 (JSON 대체, 총 횟수 후처리 게이트) |
|
|
| `param_apply_ai.py` | 314 | 🔬 백테스트 | `database`, `backtest_portfolio_common` |
|
|
| `param_search_apply_snapshot.py` | 648 | 🔬 백테스트 | `database`, `backtest`, `backtest_portfolio_common` +4 |
|
|
| `param_search_cli_common.py` | 110 | 🔬 백테스트 | |
|
|
| `param_search_dates.py` | 94 | 🔬 백테스트 | `env`, `kr_trading_day` |
|
|
| `param_search_optuna.py` | 1,033 | 🔬 백테스트 | `database`, `backtest`, `backtest_portfolio_common` +21 |
|
|
| `param_search_pool.py` | 711 | 🔬 백테스트 | `env` |
|
|
| `shared_ticks.py` | 507 | 🔬 백테스트 | `whipsaw_filter` |
|
|
| `trigger_snapshot_loader.py` | 564 | 🔬 백테스트 | `orderbook_filter`, `program_filter`, `env` +3 |
|
|
| `universe_history_source.py` | 81 | 🔬 백테스트 | `env` |
|
|
| `universe_timeline.py` | 271 | 🔬 백테스트 | `universe_history_source`, `db_manager`, `env` |
|
|
| `__init__.py` | 4 | 🗄️ DB 레이어 | |
|
|
| `db_manager.py` | 857 | 🗄️ DB 레이어 | `database`, `momentum_universe_timeline`, `universe_history_source` +1 |
|
|
| `paper_store.py` | 500 | 🗄️ DB 레이어 | `strategy_ids` |
|
|
| `__init__.py` | 5 | ⚙️ 엔진 | |
|
|
| `atr_series.py` | 37 | ⚙️ 엔진 | |
|
|
| `candle_rollup.py` | 158 | ⚙️ 엔진 | |
|
|
| `daily_profit_halt.py` | 811 | ⚙️ 엔진 | `env`, `logger` |
|
|
| `ema_trend_filter.py` | 84 | ⚙️ 엔진 | |
|
|
| `indicator_cache.py` | 412 | ⚙️ 엔진 | `ema_trend_filter`, `momentum_engine`, `env` |
|
|
| `limit_entry_common.py` | 196 | ⚙️ 엔진 | |
|
|
| `ls_feed_gate.py` | 20 | ⚙️ 엔진 | `env`, `ls_ws` |
|
|
| `feed_fallback.py` | — | ⚙️ 엔진 | `env` |
|
|
| `mid_enroll_entry_gate.py` | 241 | ⚙️ 엔진 | `env` |
|
|
| `orderbook_env.py` | 187 | ⚙️ 엔진 | `env` |
|
|
| `orderbook_filter.py` | 276 | ⚙️ 엔진 | `env`, `orderbook_cache`, `trigger_eval_recorder` |
|
|
| `live_sell_price.py` | — | ⚙️ 엔진 | `env` |
|
|
| `post_sell_candle_backfill.py` | 439 | ⚙️ 엔진 | `database`, `candle_rollup`, `env` +2 |
|
|
| `program_filter.py` | 229 | ⚙️ 엔진 | `env`, `program_cache`, `trigger_eval_recorder` |
|
|
| `strategy_eod.py` | 149 | ⚙️ 엔진 | |
|
|
| `tick_exit_common.py` | 384 | ⚙️ 엔진 | `shared_ticks`, `scalping_engine`, `whipsaw_filter` +2 |
|
|
| `trigger_eval_collect.py` | 76 | ⚙️ 엔진 | `env` |
|
|
| `whipsaw_filter.py` | 570 | ⚙️ 엔진 | `shared_ticks`, `env` |
|
|
| `__init__.py` | 5 | 📦 kis_trader | |
|
|
| `account_cash.py` | 174 | 📦 kis_trader | |
|
|
| `kis_client.py` | 1,553 | 📦 kis_trader | `api_reject_log`, `non_stock` |
|
|
| `order_manager.py` | 2,381 | 📦 kis_trader | `post_sell_candle_backfill`, `us_momentum_env_keys`, `api_reject_log` |
|
|
| `orderbook_sell.py` | 131 | 📦 kis_trader | |
|
|
| `orphan_reconcile.py` | 571 | 📦 kis_trader | |
|
|
| `main.py` | 2,353 | 📦 kis_trader | |
|
|
| `__init__.py` | 4 | 📦 kis_trader | |
|
|
| `condition_manager.py` | 446 | 📦 kis_trader | |
|
|
| `kiwoom_condition_manager.py` | 790 | 📦 kis_trader | |
|
|
| `ls_chart.py` | 239 | 📦 kis_trader | `database` |
|
|
| `ls_condition_manager.py` | 821 | 📦 kis_trader | `ls_token` |
|
|
| `ls_token.py` | 231 | 📦 kis_trader | `env` |
|
|
| `ls_ws_validator.py` | 168 | 📦 kis_trader | |
|
|
| `market_guard.py` | 572 | 📦 kis_trader | |
|
|
| `ranking_manager.py` | 350 | 📦 kis_trader | |
|
|
| `ws_manager.py` | 1,849 | 📦 kis_trader | `stock_share` |
|
|
| `ws_validator.py` | 227 | 📦 kis_trader | |
|
|
| `__init__.py` | 1 | 📦 kis_trader | |
|
|
| `__init__.py` | 5 | 📦 kis_trader | |
|
|
| `apply_unified_risk_env.py` | 81 | 📦 kis_trader | `database` |
|
|
| `approx_param_search_from_log.py` | 131 | 📦 kis_trader | `db_manager` |
|
|
| `backfill_trigger_eval_from_log.py` | 318 | 📦 kis_trader | `db_manager` |
|
|
| `fill_kiwoom_candles.py` | 405 | 📦 kis_trader | `database`, `env`, `kis_ws` |
|
|
| `fill_stock_share_meta.py` | 190 | 📦 kis_trader | `database`, `stock_share`, `env` +1 |
|
|
| `migrate_split_env_config.py` | 105 | 📦 kis_trader | `database` |
|
|
| `prune_env_config_strategy_columns.py` | 188 | 📦 kis_trader | `database`, `env` |
|
|
| `rebuild_universe_history_from_logs.py` | 418 | 📦 kis_trader | `database`, `db_manager` |
|
|
| `show_account_snapshot.py` | 323 | 📦 kis_trader | `kis_client`, `env` |
|
|
| `test_kis_ws_diagnostic.py` | 403 | 📦 kis_trader | `kis_client`, `env` |
|
|
| `verify_three_paths.py` | 231 | 📦 kis_trader | `param_search_scalping`, `momentum_engine`, `scalping_engine` +3 |
|
|
| `__init__.py` | 1 | 📦 kis_trader | |
|
|
| `stock_share.py` | 210 | 📦 kis_trader | `env`, `logger` |
|
|
| `__init__.py` | 30 | 📦 kis_trader | |
|
|
| `base.py` | 1,126 | 📦 kis_trader | `ls_feed_gate`, `mid_enroll_entry_gate` |
|
|
| `__init__.py` | 1 | 🛠️ 유틸 | |
|
|
| `api_reject_log.py` | 242 | 🛠️ 유틸 | `env` |
|
|
| `env.py` | 159 | 🛠️ 유틸 | `database` |
|
|
| `kis_ws_session_windows.py` | 149 | 🛠️ 유틸 | |
|
|
| `ls_ws_session_windows.py` | — | 🛠️ 유틸 | `env`, `session_hm` |
|
|
| `kr_trading_day.py` | 232 | 🛠️ 유틸 | `env` |
|
|
| `live_portfolio_common.py` | 328 | 🛠️ 유틸 | |
|
|
| `logger.py` | 219 | 🛠️ 유틸 | |
|
|
| `non_stock.py` | 157 | 🛠️ 유틸 | |
|
|
| `position_sizing.py` | 41 | 🛠️ 유틸 | |
|
|
| `request_handler.py` | 208 | 🛠️ 유틸 | |
|
|
| `session_hm.py` | 26 | 🛠️ 유틸 | |
|
|
| `stock_name.py` | 97 | 🛠️ 유틸 | |
|
|
| `strategy_ids.py` | 124 | 🛠️ 유틸 | |
|
|
| `trade_time.py` | 32 | 🛠️ 유틸 | |
|
|
| `universe_source.py` | 59 | 🛠️ 유틸 | |
|
|
| `usd_krw_fx.py` | 410 | 🛠️ 유틸 | `env`, `request_handler` |
|
|
| `live_config_schema.py` | 915 | 📦 kis_trader | `orderbook_env` |
|
|
| `__init__.py` | 22 | 📦 kis_trader | |
|
|
| `kis_ws.py` | 2,656 | 📦 kis_trader | `candle_rollup`, `env`, `kis_ws_session_windows` |
|
|
| `kis_ws_overseas.py` | 591 | 📦 kis_trader | `env`, `kis_ws_session_windows` |
|
|
| `kiwoom_ws.py` | 938 | 📦 kis_trader | `env` |
|
|
| `ls_ws.py` | — | 📦 kis_trader | `database`, `ls_chart`, `ls_token`, `ls_ws_session_windows` |
|
|
| `orderbook_cache.py` | 287 | 📦 kis_trader | |
|
|
| `program_cache.py` | 157 | 📦 kis_trader | |
|
|
| `tick_recorder.py` | 287 | 📦 kis_trader | |
|
|
| `trigger_eval_recorder.py` | 270 | 📦 kis_trader | |
|
|
| `trigger_snapshot_recorder.py` | 268 | 📦 kis_trader | |
|
|
| `kis_ws.py` | 3 | 🏠 루트 | `kis_ws` |
|
|
| `__init__.py` | 0 | 🏠 루트 | |
|
|
| `api.py` | 0 | 🏠 루트 | |
|
|
| `api_async.py` | 0 | 🏠 루트 | |
|
|
| `__init__.py` | 0 | 🏠 루트 | |
|
|
| `token.py` | 109 | 🏠 루트 | |
|
|
| `__init__.py` | 0 | 🏠 루트 | |
|
|
| `main.py` | 88 | 🏠 루트 | |
|
|
| `config.py` | 60 | 🏠 루트 | |
|
|
| `__init__.py` | 0 | 🏠 루트 | |
|
|
| `async_client.py` | 49 | 🏠 루트 | |
|
|
| `base.py` | 224 | 🏠 루트 | |
|
|
| `base_api.py` | 56 | 🏠 루트 | |
|
|
| `sync_client.py` | 43 | 🏠 루트 | |
|
|
| `__init__.py` | 0 | 🏠 루트 | |
|
|
| `account.py` | 2,050 | 🏠 루트 | |
|
|
| `analysis.py` | 108 | 🏠 루트 | |
|
|
| `chart.py` | 739 | 🏠 루트 | |
|
|
| `credit_order.py` | 291 | 🏠 루트 | |
|
|
| `elw.py` | 1,113 | 🏠 루트 | |
|
|
| `etf.py` | 621 | 🏠 루트 | |
|
|
| `foreign_institution.py` | 234 | 🏠 루트 | |
|
|
| `investor.py` | 115 | 🏠 루트 | |
|
|
| `market_condition.py` | 1,111 | 🏠 루트 | |
|
|
| `order.py` | 317 | 🏠 루트 | |
|
|
| `rank_info.py` | 2,311 | 🏠 루트 | |
|
|
| `sector.py` | 507 | 🏠 루트 | |
|
|
| `slb.py` | 287 | 🏠 루트 | |
|
|
| `stockinfo.py` | 1,608 | 🏠 루트 | |
|
|
| `theme.py` | 175 | 🏠 루트 | |
|
|
| `trading.py` | 107 | 🏠 루트 | |
|
|
| `trader.py` | 325 | 🏠 루트 | |
|
|
| `websocket.py` | 321 | 🏠 루트 | |
|
|
| `websocket_constants.py` | 186 | 🏠 루트 | |
|
|
| `websocket_helper.py` | 283 | 🏠 루트 | |
|
|
| `kiwoom_trader_dual.py` | 1,131 | 🏠 루트 | |
|
|
| `kiwoom_trader_ver2.py` | 3,179 | 🏠 루트 | `database` |
|
|
| `kiwoom_universe_scanner.py` | 684 | 🏠 루트 | `database` |
|
|
| `kiwoom_ws.py` | 3 | 🏠 루트 | `kiwoom_ws` |
|
|
| `config.py` | 43 | 🏠 루트 | |
|
|
| `run.py` | 23 | 🏠 루트 | |
|
|
| `ws_candle_agg.py` | 122 | 🏠 루트 | |
|
|
| `balance_window.py` | 135 | 🏠 루트 | |
|
|
| `button_holder.py` | 15 | 🏠 루트 | |
|
|
| `main.py` | 303 | 🏠 루트 | |
|
|
| `main_window.py` | 272 | 🏠 루트 | |
|
|
| `order_window.py` | 351 | 🏠 루트 | |
|
|
| `rockwidget.py` | 22 | 🏠 루트 | |
|
|
| `search_window.py` | 130 | 🏠 루트 | |
|
|
| `second_window.py` | 31 | 🏠 루트 | |
|
|
| `slider.py` | 17 | 🏠 루트 | |
|
|
| `test.py` | 100 | 🏠 루트 | |
|
|
| `third_window.py` | 31 | 🏠 루트 | |
|
|
| `k3_real.py` | 63 | 🏠 루트 | |
|
|
| `s3_real.py` | 63 | 🏠 루트 | |
|
|
| `tr_0424.py` | 813 | 🏠 루트 | |
|
|
| `tr_1857.py` | 245 | 🏠 루트 | |
|
|
| `tr_cancel_order.py` | 118 | 🏠 루트 | |
|
|
| `tr_kh.py` | 72 | 🏠 루트 | |
|
|
| `tr_master.py` | 67 | 🏠 루트 | |
|
|
| `tr_order.py` | 197 | 🏠 루트 | |
|
|
| `tr_pending.py` | 326 | 🏠 루트 | |
|
|
| `tr_redo_order.py` | 115 | 🏠 루트 | |
|
|
| `tr_sc0.py` | 108 | 🏠 루트 | |
|
|
| `tr_sc1.py` | 97 | 🏠 루트 | |
|
|
| `tr_sc2.py` | 82 | 🏠 루트 | |
|
|
| `tr_sc3.py` | 88 | 🏠 루트 | |
|
|
| `ui_search_window.py` | 67 | 🏠 루트 | |
|
|
| `ui_second_window.py` | 35 | 🏠 루트 | |
|
|
| `ui_test.py` | 65 | 🏠 루트 | |
|
|
| `ui_third_window.py` | 34 | 🏠 루트 | |
|
|
| `server.py` | 448 | 🏠 루트 | |
|
|
| `fetch_spec.py` | 269 | 🏠 루트 | |
|
|
| `server.py` | 417 | 🏠 루트 | |
|
|
| `ml_predictor.py` | 230 | 🏠 루트 | `database` |
|
|
| `mm_butler.py` | 1,235 | 🏠 루트 | `database`, `env` |
|
|
| `mm_remote.py` | 290 | 🏠 루트 | `database` |
|
|
| `modify_db_schema.py` | 37 | 🏠 루트 | |
|
|
| `news_analyzer.py` | 215 | 🏠 루트 | |
|
|
| `permanent_subs.py` | 319 | 🏠 루트 | `env` |
|
|
| `ai_recommend_notice.py` | 337 | 🏠 루트 | `database` |
|
|
| `back_test.py` | 164 | 🏠 루트 | |
|
|
| `risk_manager.py` | 307 | 🏠 루트 | |
|
|
| `balance_window.py` | 135 | 🏠 루트 | |
|
|
| `button_holder.py` | 15 | 🏠 루트 | |
|
|
| `main.py` | 303 | 🏠 루트 | |
|
|
| `main_window.py` | 272 | 🏠 루트 | |
|
|
| `order_window.py` | 351 | 🏠 루트 | |
|
|
| `rockwidget.py` | 22 | 🏠 루트 | |
|
|
| `search_window.py` | 130 | 🏠 루트 | |
|
|
| `second_window.py` | 31 | 🏠 루트 | |
|
|
| `slider.py` | 17 | 🏠 루트 | |
|
|
| `test.py` | 100 | 🏠 루트 | |
|
|
| `third_window.py` | 31 | 🏠 루트 | |
|
|
| `k3_real.py` | 63 | 🏠 루트 | |
|
|
| `s3_real.py` | 63 | 🏠 루트 | |
|
|
| `tr_0424.py` | 813 | 🏠 루트 | |
|
|
| `tr_1857.py` | 245 | 🏠 루트 | |
|
|
| `tr_cancel_order.py` | 118 | 🏠 루트 | |
|
|
| `tr_kh.py` | 72 | 🏠 루트 | |
|
|
| `tr_master.py` | 67 | 🏠 루트 | |
|
|
| `tr_order.py` | 197 | 🏠 루트 | |
|
|
| `tr_pending.py` | 326 | 🏠 루트 | |
|
|
| `tr_redo_order.py` | 115 | 🏠 루트 | |
|
|
| `tr_sc0.py` | 108 | 🏠 루트 | |
|
|
| `tr_sc1.py` | 97 | 🏠 루트 | |
|
|
| `tr_sc2.py` | 82 | 🏠 루트 | |
|
|
| `tr_sc3.py` | 88 | 🏠 루트 | |
|
|
| `ui_search_window.py` | 67 | 🏠 루트 | |
|
|
| `ui_second_window.py` | 35 | 🏠 루트 | |
|
|
| `ui_test.py` | 65 | 🏠 루트 | |
|
|
| `ui_third_window.py` | 34 | 🏠 루트 | |
|
|
| `_diag_mom_2min_gap.py` | 124 | 🏠 루트 | `database` |
|
|
| `_diag_mom_tick_today.py` | 99 | 🏠 루트 | `database` |
|
|
| `backfill_trade_candles.py` | 70 | 🏠 루트 | `database`, `post_sell_candle_backfill` |
|
|
| `collect_ls_condition_history.py` | 654 | 🏠 루트 | `database`, `env` |
|
|
| `collect_ls_universe_history.py` | 401 | 🏠 루트 | `database` |
|
|
| `copy_env_row_to_latest.py` | 0 | 🏠 루트 | |
|
|
| `kis_error_watch_mm.py` | 387 | 🏠 루트 | `env`, `logger` |
|
|
| `market_open_sim_smoke.py` | 362 | 🏠 루트 | `backtest`, `engine`, `kis_client` +6 |
|
|
| `post_optuna_mid_enroll_verify.py` | 214 | 🏠 루트 | `database`, `backtest`, `us_momentum_web_backtest` +2 |
|
|
| `query_kiwoom_condition_snapshot.py` | 454 | 🏠 루트 | `database`, `env`, `kis_ws` |
|
|
| `run_strategy_backtest_cli.py` | 256 | 🔬 백테스트 | `kr_trading_day` |
|
|
| `smoke_candle_upsert_rollup.py` | 144 | 🏠 루트 | `candle_rollup`, `kis_ws` |
|
|
| `verify_live_portfolio_align.py` | 125 | 🏠 루트 | `strategies`, `live_portfolio_common` |
|
|
| `verify_optuna_tpe_apply_dryrun.py` | 153 | 🏠 루트 | `backtest_portfolio_common`, `param_search_apply_snapshot`, `param_search_scalping` +1 |
|
|
| `verify_optuna_tpe_parity_checklist.py` | 283 | 🏠 루트 | `backtest_portfolio_common`, `optuna_breakout_tpe_space`, `optuna_briefing` +6 |
|
|
| `smart_executor.py` | 259 | 🏠 루트 | |
|
|
| `star.py` | 11 | 🏠 루트 | |
|
|
| `test_kiwoom_token.py` | 339 | 🏠 루트 | `database` |
|
|
| `test_kiwoom_ws.py` | 196 | 🏠 루트 | `database`, `kis_ws`, `kiwoom_ws` |
|
|
| `test_kiwoom_ws_sub_limit.py` | 453 | 🏠 루트 | `database`, `env`, `kis_ws` +1 |
|
|
| `test_ls_ws.py` | 998 | 🏠 루트 | `database` |
|
|
| `test_psearch.py` | 299 | 🏠 루트 | `kis_client`, `env` |
|
|
| `tmp_mom_smoke_web.py` | 46 | 🏠 루트 | |
|
|
| `trend_divergence.py` | 248 | 🏠 루트 | |
|
|
| `update_env.py` | 145 | 🏠 루트 | `database` |
|
|
| `update_env_etf.py` | 61 | 🏠 루트 | `database` |
|
|
| `update_env_simple.py` | 71 | 🏠 루트 | `database` |
|
|
|
|
### 꼬리잡기(Tail)
|
|
|
|
| 파일 | 라인 수 | 레이어 | 내부 의존 |
|
|
|------|---------|--------|----------|
|
|
| `optuna_tail_tpe_space.py` | 188 | 🔬 백테스트 | `optuna_tpe_common` |
|
|
| `tail_backtest_common.py` | 840 | 🔬 백테스트 | `backtest_env_timeline`, `backtest_portfolio_common`, `momentum_backtest_common` +12 |
|
|
| `tail_bt_web_jobs.py` | 14 | 🔬 백테스트 | `bt_web_jobs` |
|
|
| `tail_exit_ab_test.py` | 122 | 🔬 백테스트 | `database`, `backtest`, `engine` |
|
|
| `tail_mfe_analysis.py` | 305 | 🔬 백테스트 | `database`, `backtest`, `engine` +1 |
|
|
| `tail_param_search.py` | 1,948 | 🔬 백테스트 | `database`, `backtest`, `backtest_portfolio_common` +13 |
|
|
| `tail_tick_loader.py` | 18 | 🔬 백테스트 | `breakout_tick_loader` |
|
|
| `tail_engine.py` | 2,788 | ⚙️ 엔진 | `database`, `backtest_env_timeline`, `trigger_snapshot_loader` +15 |
|
|
| `tail_env_keys.py` | 471 | ⚙️ 엔진 | `database`, `env` |
|
|
| `tail_tick_replay.py` | 303 | ⚙️ 엔진 | `shared_ticks`, `candle_rollup`, `limit_entry_common` +1 |
|
|
| `tail_catch.py` | 503 | 📦 kis_trader | `tail_tick_replay` |
|
|
| `append_tail_optuna_compare.py` | 180 | 🏠 루트 | `database`, `backtest`, `engine` |
|
|
| `run_tail_backtest_cli.py` | 376 | 🔬 백테스트 | `database`, `backtest`, `backtest_portfolio_common` +4 |
|
|
| `tail_live_bt_forensics.py` | 158 | 🏠 루트 | `database`, `backtest`, `universe_timeline` +2 |
|
|
| `tail_symbol_gate_verify_20260709.py` | 126 | 🏠 루트 | `database`, `backtest`, `engine` +1 |
|
|
| `tail_engine.py` | 3 | ⚙️ 엔진 | `tail_engine` |
|
|
|
|
### 더블볼린저
|
|
|
|
| 파일 | 라인 수 | 레이어 | 내부 의존 |
|
|
|------|---------|--------|----------|
|
|
| `dbband_backtest_common.py` | 381 | 🔬 백테스트 | `backtest_portfolio_common`, `db_manager`, `dbband_engine` +1 |
|
|
| `dbband_param_search.py` | 157 | 🔬 백테스트 | `database`, `backtest`, `backtest_portfolio_common` +3 |
|
|
| `dbband_engine.py` | 972 | ⚙️ 엔진 | `database`, `backtest_env_timeline`, `dbband_env_keys` +3 |
|
|
| `dbband_env_keys.py` | 212 | ⚙️ 엔진 | |
|
|
| `dbband_stock_cfg.py` | 343 | 📦 kis_trader | |
|
|
| `dbband_strategy.py` | 228 | 📦 kis_trader | |
|
|
|
|
### 레인지브레이크
|
|
|
|
| 파일 | 라인 수 | 레이어 | 내부 의존 |
|
|
|------|---------|--------|----------|
|
|
| `param_search_range_break.py` | 299 | 🔬 백테스트 | `database`, `backtest`, `backtest_portfolio_common` +6 |
|
|
| `range_break_backtest_common.py` | 239 | 🔬 백테스트 | `backtest_env_timeline`, `backtest_portfolio_common`, `breakout_tick_loader` +5 |
|
|
| `range_break_portfolio_backtest.py` | 402 | 🔬 백테스트 | `backtest_env_timeline`, `backtest_portfolio_common`, `range_break_engine` +5 |
|
|
| `range_break_engine.py` | 460 | ⚙️ 엔진 | `database`, `range_break_portfolio_backtest`, `range_break_env_keys` +2 |
|
|
| `range_break_env_keys.py` | 88 | ⚙️ 엔진 | |
|
|
| `range_break.py` | 303 | 📦 kis_trader | |
|
|
|
|
### 모멘텀
|
|
|
|
| 파일 | 라인 수 | 레이어 | 내부 의존 |
|
|
|------|---------|--------|----------|
|
|
| `compare_web_cli_momentum.py` | 62 | 🏠 루트 | |
|
|
| `diag_momentum_backtest.py` | 173 | 🔬 백테스트 | `database`, `backtest`, `param_search_momentum` |
|
|
| `momentum_backtest_common.py` | 659 | 🔬 백테스트 | `backtest_env_timeline`, `backtest_portfolio_common`, `breakout_tick_loader` +12 |
|
|
| `momentum_exit_ab_test.py` | 100 | 🔬 백테스트 | `database`, `backtest`, `engine` |
|
|
| `momentum_portfolio_backtest.py` | 930 | 🔬 백테스트 | `backtest_env_timeline`, `backtest_portfolio_common`, `momentum_tick_loader` +11 |
|
|
| `momentum_random_benchmark.py` | 565 | 🔬 백테스트 | `database`, `backtest`, `backtest_portfolio_common` +4 |
|
|
| `momentum_rr_crossval.py` | 466 | 🔬 백테스트 | `database`, `backtest`, `backtest_portfolio_common` +4 |
|
|
| `momentum_rr_quick_eval.py` | 113 | 🔬 백테스트 | `backtest`, `backtest_portfolio_common`, `momentum_rr_crossval` +1 |
|
|
| `momentum_tick_loader.py` | 19 | 🔬 백테스트 | `breakout_tick_loader` |
|
|
| `momentum_universe_timeline.py` | 125 | 🔬 백테스트 | `momentum_backtest_common`, `universe_history_source`, `universe_timeline` +2 |
|
|
| `optuna_momentum.py` | 689 | 🔬 백테스트 | `database`, `backtest`, `backtest_portfolio_common` +18 |
|
|
| `optuna_momentum_tpe_space.py` | 159 | 🔬 백테스트 | `optuna_tpe_common`, `param_search_momentum` |
|
|
| `param_search_momentum.py` | 2,577 | 🔬 백테스트 | `database`, `backtest`, `backtest_portfolio_common` +17 |
|
|
| `us_momentum_web_backtest.py` | 400 | 🔬 백테스트 | `backtest`, `us_momentum_env_keys`, `us_momentum_stock_cfg` +2 |
|
|
| `momentum_chase_patterns.py` | 228 | ⚙️ 엔진 | `env` |
|
|
| `momentum_engine.py` | 673 | ⚙️ 엔진 | `database`, `momentum_portfolio_backtest`, `momentum_env_keys` +6 |
|
|
| `momentum_env_keys.py` | 249 | ⚙️ 엔진 | |
|
|
| `momentum_hts_logic.py` | 587 | ⚙️ 엔진 | `momentum_chase_patterns`, `momentum_env_keys`, `orderbook_filter` +5 |
|
|
| `momentum_tick_replay.py` | 620 | ⚙️ 엔진 | `shared_ticks`, `momentum_engine`, `whipsaw_filter` +2 |
|
|
| `us_momentum_env.py` | 193 | ⚙️ 엔진 | `env` |
|
|
| `us_momentum_env_keys.py` | 296 | ⚙️ 엔진 | `env` |
|
|
| `compare_momentum_scan_memo.py` | 233 | 📦 kis_trader | `backtest`, `momentum_backtest_common`, `param_search_momentum` |
|
|
| `momentum.py` | 360 | 📦 kis_trader | `tail_tick_replay` |
|
|
| `us_momentum.py` | 1,123 | 📦 kis_trader | `database`, `tail_tick_replay` |
|
|
| `us_momentum_stock_cfg.py` | 378 | 📦 kis_trader | |
|
|
| `momentum_engine.py` | 3 | ⚙️ 엔진 | `momentum_engine` |
|
|
| `momentum_ratchet_ab_715.py` | 191 | 🏠 루트 | `optuna_common`, `optuna_momentum`, `param_search_momentum` +1 |
|
|
|
|
### 미국모멘텀
|
|
|
|
| 파일 | 라인 수 | 레이어 | 내부 의존 |
|
|
|------|---------|--------|----------|
|
|
| `us_momentum_web_backtest.py` | 400 | 🔬 백테스트 | `backtest`, `us_momentum_env_keys`, `us_momentum_stock_cfg` +2 |
|
|
| `us_momentum_env.py` | 193 | ⚙️ 엔진 | `env` |
|
|
| `us_momentum_env_keys.py` | 296 | ⚙️ 엔진 | `env` |
|
|
| `us_momentum.py` | 1,123 | 📦 kis_trader | `database`, `tail_tick_replay` |
|
|
| `us_momentum_stock_cfg.py` | 378 | 📦 kis_trader | |
|
|
|
|
### 브레이크아웃
|
|
|
|
| 파일 | 라인 수 | 레이어 | 내부 의존 |
|
|
|------|---------|--------|----------|
|
|
| `_verify_shared_e2e_breakout.py` | 156 | 🏠 루트 | `database`, `backtest`, `breakout_backtest_common` +3 |
|
|
| `breakout_backtest_common.py` | 624 | 🔬 백테스트 | `backtest_env_timeline`, `backtest_portfolio_common`, `breakout_tick_loader` +9 |
|
|
| `breakout_portfolio_backtest.py` | 504 | 🔬 백테스트 | `backtest_env_timeline`, `backtest_portfolio_common`, `trigger_snapshot_loader` +10 |
|
|
| `breakout_tick_loader.py` | 529 | 🔬 백테스트 | `database`, `candle_rollup` |
|
|
| `optuna_breakout.py` | 524 | 🔬 백테스트 | `database`, `backtest`, `backtest_portfolio_common` +19 |
|
|
| `optuna_breakout_tpe_space.py` | 96 | 🔬 백테스트 | `optuna_tpe_common` |
|
|
| `param_search_breakout.py` | 1,587 | 🔬 백테스트 | `database`, `backtest`, `backtest_portfolio_common` +14 |
|
|
| `breakout.py` | 2,047 | 📦 kis_trader | `breakout_portfolio_backtest`, `shared_ticks`, `tail_tick_replay` +2 |
|
|
|
|
### 스캘핑
|
|
|
|
| 파일 | 라인 수 | 레이어 | 내부 의존 |
|
|
|------|---------|--------|----------|
|
|
| `holding_param_search.py` | 210 | 🔬 백테스트 | `database` |
|
|
| `optuna_scalping.py` | 599 | 🔬 백테스트 | `database`, `backtest`, `backtest_portfolio_common` +16 |
|
|
| `optuna_scalping_tpe_space.py` | 88 | 🔬 백테스트 | `optuna_tpe_common` |
|
|
| `param_search_scalping.py` | 1,661 | 🔬 백테스트 | `database`, `backtest`, `backtest_portfolio_common` +11 |
|
|
| `scalping_backtest_common.py` | 408 | 🔬 백테스트 | `backtest`, `backtest_env_timeline`, `backtest_portfolio_common` +9 |
|
|
| `scalping_portfolio_backtest.py` | 506 | 🔬 백테스트 | `backtest_env_timeline`, `backtest_portfolio_common`, `momentum_portfolio_backtest` +7 |
|
|
| `scalping_engine.py` | 1,346 | ⚙️ 엔진 | `database`, `scalping_portfolio_backtest`, `momentum_engine` +5 |
|
|
| `scalping.py` | 434 | 📦 kis_trader | `tail_tick_replay` |
|
|
| `scalping_bot.py` | 261 | 🏠 루트 | `database` |
|
|
| `scalping_logic.py` | 45 | 🏠 루트 | `engine` |
|
|
| `kis_scalping_ver1.py` | 1,658 | 🏠 루트 | `database` |
|
|
| `kis_scalping_ver2.py` | 1,596 | 🏠 루트 | `database` |
|
|
| `scalping_engine.py` | 3 | ⚙️ 엔진 | `scalping_engine` |
|
|
| `_diag_scalp_live_bt_20260716.py` | 317 | 🏠 루트 | `database`, `scalping_backtest_common`, `scalping_engine` |
|
|
|
|
### 업다운
|
|
|
|
| 파일 | 라인 수 | 레이어 | 내부 의존 |
|
|
|------|---------|--------|----------|
|
|
| `param_search_updow.py` | 409 | 🔬 백테스트 | `database`, `backtest_portfolio_common`, `param_search_apply_snapshot` +3 |
|
|
| `param_search_updow_us.py` | 284 | 🔬 백테스트 | `database`, `strategies`, `updow_holding_cfg` +1 |
|
|
| `param_search_updown_box.py` | 276 | 🔬 백테스트 | `database`, `param_search_dates`, `engine` +2 |
|
|
| `updown_box.py` | 958 | ⚙️ 엔진 | |
|
|
| `updow_buy.py` | 1,383 | 📦 kis_trader | `scalping_engine` |
|
|
| `updow_holding_cfg.py` | 590 | 📦 kis_trader | |
|
|
| `updow_strategy.py` | 769 | 📦 kis_trader | |
|
|
| `updown_box_stock_cfg.py` | 221 | 📦 kis_trader | |
|
|
| `updown_feed.py` | 198 | 📦 kis_trader | |
|
|
| `updown_scan.py` | 154 | 📦 kis_trader | |
|
|
| `updown_watchlist.py` | 419 | 📦 kis_trader | |
|
|
| `updowbuyy.py` | 36 | 🏠 루트 | `updow_buy` |
|
|
|
|
---
|
|
|
|
## 📋 전체 파일 의존성 상세 (All Files)
|
|
|
|
| 파일 | 라인 | 내부 모듈 의존 | 외부 라이브러리 |
|
|
|------|------|---------------|----------------|
|
|
| `_test_kiwoom_condition_list.py` | 180 | `kis_trader.utils.env`, `kis_trader.ws.kis_ws` | `websocket` |
|
|
| `_test_kiwoom_condition_realtime.py` | 228 | `kis_trader.utils.env`, `kis_trader.ws.kis_ws` | `websocket` |
|
|
| `_test_ls_condition_realtime.py` | 693 | `database`, `kis_trader.network.ls_token`, `kis_trader.utils.env` | `argparse`, `requests`, `websocket` |
|
|
| `_verify_columnar_bitid.py` | 236 | `kis_trader.backtest.shared_ticks`, `kis_trader.engine.momentum_tick_replay`, `kis_trader.engine.tail_tick_replay`, `kis_trader.engine.whipsaw_filter` | - |
|
|
| `_verify_shared_e2e.py` | 152 | `database`, `kis_trader.backtest`, `kis_trader.backtest.momentum_backtest_common`, `kis_trader.backtest.momentum_tick_loader`, `kis_trader.backtest.param_search_momentum`, `kis_trader.backtest.shared_ticks` | - |
|
|
| `_verify_shared_e2e_breakout.py` | 156 | `database`, `kis_trader.backtest`, `kis_trader.backtest.breakout_backtest_common`, `kis_trader.backtest.breakout_tick_loader`, `kis_trader.backtest.param_search_breakout`, `kis_trader.backtest.shared_ticks` | - |
|
|
| `auto_ai_reporter.py` | 263 | - | `dotenv`, `google`, `requests`, `sqlite3` |
|
|
| `backtest_scalping/holding_param_search.py` | 210 | `database` | `argparse`, `holding_bot` |
|
|
| `backtest_web.py` | 9,455 | `database`, `kis_trader.backtest`, `kis_trader.backtest.backtest_env_timeline`, `kis_trader.backtest.backtest_portfolio_common`, `kis_trader.backtest.breakout_backtest_common`, `kis_trader.backtest.breakout_tick_loader`, `kis_trader.backtest.dart_backtest_common`, `kis_trader.backtest.dbband_param_search`, `kis_trader.backtest.momentum_backtest_common`, `kis_trader.backtest.param_search_breakout`, `kis_trader.backtest.param_search_momentum`, `kis_trader.backtest.scalping_backtest_common`, `kis_trader.backtest.tail_param_search`, `kis_trader.backtest.universe_history_source`, `kis_trader.backtest.universe_timeline`, `kis_trader.backtest.us_momentum_web_backtest`, `kis_trader.database.db_manager`, `kis_trader.database.paper_store`, `kis_trader.engine`, `kis_trader.engine.candle_rollup`, `kis_trader.engine.daily_profit_halt`, `kis_trader.engine.dbband_env_keys`, `kis_trader.engine.limit_entry_common`, `kis_trader.engine.momentum_engine`, `kis_trader.engine.tail_env_keys`, `kis_trader.engine.updown_box`, `kis_trader.execution.account_cash`, `kis_trader.execution.kis_client`, `kis_trader.execution.order_manager`, `kis_trader.execution.orphan_reconcile`, `kis_trader.scan.dart_order_tracker`, `kis_trader.scan.dart_watchlist`, `kis_trader.strategies`, `kis_trader.strategies.base`, `kis_trader.strategies.breakout`, `kis_trader.strategies.range_break`, `kis_trader.strategies.updown_box_stock_cfg`, `kis_trader.strategies.updown_watchlist`, `kis_trader.strategies.us_momentum_stock_cfg`, `kis_trader.utils.env`, `kis_trader.utils.kr_trading_day`, `kis_trader.utils.stock_name`, `kis_trader.utils.strategy_ids`, `kis_trader.utils.trade_time`, `kis_trader.utils.usd_krw_fx`, `kis_trader.web.live_config_schema` | `config_schema`, `flask`, `holding_bot`, `kis_holding_ver1`, `permanent_subs` |
|
|
| `carrot_region_sel.py` | 366 | - | `bs4`, `mm_sender`, `requests`, `telegram` |
|
|
| `check_account_config.py` | 103 | `database` | - |
|
|
| `check_db.py` | 28 | - | `sqlite3` |
|
|
| `compare_web_cli_momentum.py` | 62 | - | - |
|
|
| `config_schema.py` | 150 | - | - |
|
|
| `copy_env_row_to_latest.py` | 40 | `database` | - |
|
|
| `database.py` | 5,014 | `kis_trader.database.paper_store`, `kis_trader.engine.indicator_cache`, `kis_trader.utils.env`, `kis_trader.utils.strategy_ids` | `config_schema`, `pymysql` |
|
|
| `diag_backtest_4_30.py` | 198 | `database`, `kis_trader.engine` | - |
|
|
| `diag_momentum_backtest.py` | 173 | `database`, `kis_trader.backtest`, `kis_trader.backtest.param_search_momentum` | `argparse` |
|
|
| `etf_backtest.py` | 404 | - | `numpy`, `pandas`, `requests`, `yfinance` |
|
|
| `etf_ver1.py` | 887 | `database`, `kis_trader.ws.kis_ws` | `pandas`, `requests` |
|
|
| `export_sniper.py` | 132 | - | `bs4`, `requests` |
|
|
| `fetch_stock_meta.py` | 327 | `database`, `kis_trader.ws.kis_ws` | `argparse`, `requests` |
|
|
| `holding_bot.py` | 2,577 | `database`, `kis_trader.ws.kis_ws` | `argparse`, `kis_token_manager`, `kiwoom_rest_api`, `requests` |
|
|
| `init_db.py` | 78 | `database` | - |
|
|
| `kis_approval_manager.py` | 404 | - | `requests` |
|
|
| `kis_holding_ver1.py` | 492 | `database` | `argparse`, `holding_bot` |
|
|
| `kis_long_alert.py` | 267 | `database` | `kis_long_ver1` |
|
|
| `kis_long_ver1.py` | 1,953 | `database` | `google`, `hmac`, `kis_token_manager`, `ml_predictor`, `pandas`, `requests` |
|
|
| `kis_long_ver2.py` | 1,008 | `database` | `kis_long_ver1`, `news_analyzer`, `pandas` |
|
|
| `kis_token_manager.py` | 466 | `database` | `argparse`, `requests` |
|
|
| `kis_trader/__init__.py` | 3 | - | - |
|
|
| `kis_trader/backtest/__init__.py` | 1 | - | - |
|
|
| `kis_trader/backtest/backtest_env_timeline.py` | 158 | `kis_trader.backtest.breakout_backtest_common`, `kis_trader.backtest.env_timeline`, `kis_trader.engine.dbband_engine`, `kis_trader.engine.momentum_engine`, `kis_trader.engine.range_break_engine`, `kis_trader.engine.scalping_engine`, `kis_trader.engine.tail_engine`, `kis_trader.strategies.breakout` | - |
|
|
| `kis_trader/backtest/backtest_portfolio_common.py` | 919 | `database`, `kis_trader.backtest.trigger_snapshot_loader`, `kis_trader.engine.daily_profit_halt`, `kis_trader.engine.scalping_engine`, `kis_trader.engine.strategy_eod`, `kis_trader.utils.env`, `kis_trader.utils.position_sizing`, `kis_trader.utils.trade_time` | - |
|
|
| `kis_trader/backtest/backtest_web.py` | 49 | - | `backtest_web`, `runpy` |
|
|
| `kis_trader/backtest/breakout_backtest_common.py` | 624 | `kis_trader.backtest.backtest_env_timeline`, `kis_trader.backtest.backtest_portfolio_common`, `kis_trader.backtest.breakout_tick_loader`, `kis_trader.backtest.ls_history_loaders`, `kis_trader.backtest.universe_history_source`, `kis_trader.backtest.universe_timeline`, `kis_trader.database.db_manager`, `kis_trader.engine.indicator_cache`, `kis_trader.share.stock_share`, `kis_trader.strategies.breakout`, `kis_trader.utils.env`, `kis_trader.utils.logger` | - |
|
|
| `kis_trader/backtest/breakout_portfolio_backtest.py` | 504 | `kis_trader.backtest.backtest_env_timeline`, `kis_trader.backtest.backtest_portfolio_common`, `kis_trader.backtest.trigger_snapshot_loader`, `kis_trader.engine.atr_series`, `kis_trader.engine.indicator_cache`, `kis_trader.engine.mid_enroll_entry_gate`, `kis_trader.engine.scalping_engine`, `kis_trader.engine.tick_exit_common`, `kis_trader.engine.whipsaw_filter`, `kis_trader.share.stock_share`, `kis_trader.strategies.base`, `kis_trader.strategies.breakout`, `kis_trader.utils.env` | - |
|
|
| `kis_trader/backtest/breakout_tick_loader.py` | 529 | `database`, `kis_trader.engine.candle_rollup` | `pymysql`, `utils` |
|
|
| `kis_trader/backtest/bt_web_jobs.py` | 443 | `kis_trader.utils.kr_trading_day` | - |
|
|
| `kis_trader/backtest/dart_backtest_common.py` | 142 | `database`, `kis_trader.backtest`, `kis_trader.engine`, `kis_trader.scan.dart_order_tracker` | - |
|
|
| `kis_trader/backtest/dbband_backtest_common.py` | 381 | `kis_trader.backtest.backtest_portfolio_common`, `kis_trader.database.db_manager`, `kis_trader.engine.dbband_engine`, `kis_trader.utils.trade_time` | - |
|
|
| `kis_trader/backtest/dbband_param_search.py` | 157 | `database`, `kis_trader.backtest`, `kis_trader.backtest.backtest_portfolio_common`, `kis_trader.engine`, `kis_trader.engine.dbband_env_keys`, `kis_trader.strategies` | `argparse`, `holding_bot` |
|
|
| `kis_trader/backtest/env_timeline.py` | 106 | - | `bisect` |
|
|
| `kis_trader/backtest/ls_history_loaders.py` | 228 | `kis_trader.utils.logger` | - |
|
|
| `kis_trader/backtest/momentum_backtest_common.py` | 659 | `kis_trader.backtest.backtest_env_timeline`, `kis_trader.backtest.backtest_portfolio_common`, `kis_trader.backtest.breakout_tick_loader`, `kis_trader.backtest.momentum_tick_loader`, `kis_trader.backtest.momentum_universe_timeline`, `kis_trader.backtest.universe_history_source`, `kis_trader.backtest.universe_timeline`, `kis_trader.database.db_manager`, `kis_trader.engine.indicator_cache`, `kis_trader.engine.momentum_engine`, `kis_trader.engine.momentum_hts_logic`, `kis_trader.engine.momentum_tick_replay`, `kis_trader.utils.env`, `kis_trader.utils.logger`, `kis_trader.ws.kis_ws` | - |
|
|
| `kis_trader/backtest/momentum_exit_ab_test.py` | 100 | `database`, `kis_trader.backtest`, `kis_trader.engine` | - |
|
|
| `kis_trader/backtest/momentum_portfolio_backtest.py` | 930 | `kis_trader.backtest.backtest_env_timeline`, `kis_trader.backtest.backtest_portfolio_common`, `kis_trader.backtest.momentum_tick_loader`, `kis_trader.backtest.momentum_universe_timeline`, `kis_trader.backtest.shared_ticks`, `kis_trader.backtest.trigger_snapshot_loader`, `kis_trader.engine.indicator_cache`, `kis_trader.engine.mid_enroll_entry_gate`, `kis_trader.engine.momentum_engine`, `kis_trader.engine.momentum_tick_replay`, `kis_trader.engine.whipsaw_filter`, `kis_trader.strategies.base`, `kis_trader.utils.env`, `kis_trader.utils.session_hm` | - |
|
|
| `kis_trader/backtest/momentum_random_benchmark.py` | 565 | `database`, `kis_trader.backtest`, `kis_trader.backtest.backtest_portfolio_common`, `kis_trader.backtest.momentum_portfolio_backtest`, `kis_trader.backtest.param_search_momentum`, `kis_trader.engine.momentum_engine`, `kis_trader.engine.momentum_hts_logic` | `argparse` |
|
|
| `kis_trader/backtest/momentum_rr_crossval.py` | 466 | `database`, `kis_trader.backtest`, `kis_trader.backtest.backtest_portfolio_common`, `kis_trader.backtest.param_search_cli_common`, `kis_trader.backtest.param_search_momentum`, `kis_trader.engine`, `kis_trader.utils.env` | `argparse` |
|
|
| `kis_trader/backtest/momentum_rr_quick_eval.py` | 113 | `kis_trader.backtest`, `kis_trader.backtest.backtest_portfolio_common`, `kis_trader.backtest.momentum_rr_crossval`, `kis_trader.backtest.param_search_momentum` | - |
|
|
| `kis_trader/backtest/momentum_tick_loader.py` | 19 | `kis_trader.backtest.breakout_tick_loader` | - |
|
|
| `kis_trader/backtest/momentum_universe_timeline.py` | 125 | `kis_trader.backtest.momentum_backtest_common`, `kis_trader.backtest.universe_history_source`, `kis_trader.backtest.universe_timeline`, `kis_trader.engine.momentum_engine`, `kis_trader.utils.env` | - |
|
|
| `kis_trader/backtest/optuna_breakout.py` | 524 | `database`, `kis_trader.backtest`, `kis_trader.backtest.backtest_portfolio_common`, `kis_trader.backtest.breakout_backtest_common`, `kis_trader.backtest.breakout_tick_loader`, `kis_trader.backtest.ls_history_loaders`, `kis_trader.backtest.optuna_breakout_tpe_space`, `kis_trader.backtest.optuna_common`, `kis_trader.backtest.optuna_daily_trail_recommend`, `kis_trader.backtest.optuna_mode_combo`, `kis_trader.backtest.optuna_search_space`, `kis_trader.backtest.param_search_breakout`, `kis_trader.backtest.param_search_cli_common`, `kis_trader.backtest.shared_ticks`, `kis_trader.backtest.tail_param_search`, `kis_trader.backtest.trigger_snapshot_loader`, `kis_trader.backtest.universe_history_source`, `kis_trader.engine`, `kis_trader.engine.indicator_cache`, `kis_trader.share.stock_share`, `kis_trader.strategies.breakout`, `kis_trader.utils.env` | `atexit`, `ctypes`, `optuna` |
|
|
| `kis_trader/backtest/optuna_breakout_tpe_space.py` | 96 | `kis_trader.backtest.optuna_tpe_common` | `optuna` |
|
|
| `kis_trader/backtest/optuna_briefing.py` | 432 | `database`, `kis_trader.utils.env` | `anthropic`, `argparse`, `google` |
|
|
| `kis_trader/backtest/optuna_common.py` | 672 | `database`, `kis_trader.backtest.optuna_briefing`, `kis_trader.utils.env` | `optuna`, `pymysql` |
|
|
| `kis_trader/backtest/optuna_daily_trail_recommend.py` | 315 | `kis_trader.backtest.param_search_apply_snapshot`, `kis_trader.utils.env` | - |
|
|
| `kis_trader/backtest/optuna_dart.py` | 104 | `database`, `kis_trader.backtest.optuna_common`, `kis_trader.backtest.param_search_dart`, `kis_trader.engine` | `optuna` |
|
|
| `kis_trader/backtest/optuna_mode_combo.py` | 278 | `kis_trader.backtest.optuna_daily_trail_recommend`, `kis_trader.backtest.optuna_tpe_common`, `kis_trader.utils.env` | - |
|
|
| `kis_trader/backtest/optuna_momentum.py` | 689 | `database`, `kis_trader.backtest`, `kis_trader.backtest.backtest_portfolio_common`, `kis_trader.backtest.momentum_backtest_common`, `kis_trader.backtest.momentum_tick_loader`, `kis_trader.backtest.optuna_common`, `kis_trader.backtest.optuna_daily_trail_recommend`, `kis_trader.backtest.optuna_mode_combo`, `kis_trader.backtest.optuna_momentum_tpe_space`, `kis_trader.backtest.optuna_search_space`, `kis_trader.backtest.param_search_cli_common`, `kis_trader.backtest.param_search_momentum`, `kis_trader.backtest.shared_ticks`, `kis_trader.backtest.tail_param_search`, `kis_trader.backtest.trigger_snapshot_loader`, `kis_trader.backtest.universe_history_source`, `kis_trader.engine`, `kis_trader.engine.indicator_cache`, `kis_trader.engine.momentum_tick_replay`, `kis_trader.engine.us_momentum_env_keys`, `kis_trader.utils.env` | `atexit`, `ctypes`, `optuna` |
|
|
| `kis_trader/backtest/optuna_momentum_tpe_space.py` | 159 | `kis_trader.backtest.optuna_tpe_common`, `kis_trader.backtest.param_search_momentum` | `optuna` |
|
|
| `kis_trader/backtest/optuna_scalping.py` | 599 | `database`, `kis_trader.backtest`, `kis_trader.backtest.backtest_portfolio_common`, `kis_trader.backtest.breakout_tick_loader`, `kis_trader.backtest.ls_history_loaders`, `kis_trader.backtest.optuna_common`, `kis_trader.backtest.optuna_daily_trail_recommend`, `kis_trader.backtest.optuna_mode_combo`, `kis_trader.backtest.optuna_scalping_tpe_space`, `kis_trader.backtest.optuna_search_space`, `kis_trader.backtest.param_search_cli_common`, `kis_trader.backtest.param_search_scalping`, `kis_trader.backtest.shared_ticks`, `kis_trader.backtest.tail_param_search`, `kis_trader.backtest.trigger_snapshot_loader`, `kis_trader.backtest.universe_history_source`, `kis_trader.engine`, `kis_trader.engine.indicator_cache`, `kis_trader.utils.env` | `atexit`, `ctypes`, `optuna` |
|
|
| `kis_trader/backtest/optuna_scalping_tpe_space.py` | 88 | `kis_trader.backtest.optuna_tpe_common` | `optuna` |
|
|
| `kis_trader/backtest/optuna_search_space.py` | 89 | `kis_trader.backtest.param_search_breakout`, `kis_trader.backtest.param_search_momentum`, `kis_trader.backtest.param_search_scalping`, `kis_trader.backtest.tail_param_search` | `optuna` |
|
|
| `kis_trader/backtest/optuna_tail_tpe_space.py` | 188 | `kis_trader.backtest.optuna_tpe_common` | `optuna` |
|
|
| `kis_trader/backtest/optuna_tpe_common.py` | 218 | - | `optuna` |
|
|
| `kis_trader/backtest/optuna_web_jobs.py` | 1,121 | `kis_trader.backtest.backtest_portfolio_common`, `kis_trader.backtest.optuna_common`, `kis_trader.backtest.optuna_daily_trail_recommend`, `kis_trader.backtest.param_search_breakout`, `kis_trader.backtest.param_search_momentum`, `kis_trader.backtest.param_search_scalping`, `kis_trader.backtest.tail_param_search`, `kis_trader.backtest.universe_history_source`, `kis_trader.utils.kr_trading_day` | `optuna` |
|
|
| `kis_trader/backtest/param_apply_ai.py` | 314 | `database`, `kis_trader.backtest.backtest_portfolio_common` | `google`, `param_search_scalping`, `tail_param_search` |
|
|
| `kis_trader/backtest/param_search_apply_snapshot.py` | 648 | `database`, `kis_trader.backtest`, `kis_trader.backtest.backtest_portfolio_common`, `kis_trader.engine.orderbook_env`, `kis_trader.engine.us_momentum_env_keys`, `kis_trader.strategies`, `kis_trader.strategies.breakout` | `argparse`, `holding_bot`, `tail_param_search` |
|
|
| `kis_trader/backtest/param_search_breakout.py` | 1,587 | `database`, `kis_trader.backtest`, `kis_trader.backtest.backtest_portfolio_common`, `kis_trader.backtest.breakout_backtest_common`, `kis_trader.backtest.breakout_tick_loader`, `kis_trader.backtest.optuna_common`, `kis_trader.backtest.param_search_apply_snapshot`, `kis_trader.backtest.param_search_cli_common`, `kis_trader.backtest.param_search_dates`, `kis_trader.backtest.param_search_pool`, `kis_trader.backtest.shared_ticks`, `kis_trader.backtest.trigger_snapshot_loader`, `kis_trader.engine`, `kis_trader.engine.indicator_cache`, `kis_trader.share.stock_share`, `kis_trader.strategies.breakout`, `kis_trader.utils.env` | `argparse`, `atexit`, `ctypes`, `heapq` |
|
|
| `kis_trader/backtest/param_search_cli_common.py` | 110 | - | `argparse` |
|
|
| `kis_trader/backtest/param_search_dart.py` | 95 | `database`, `kis_trader.backtest.dart_backtest_common`, `kis_trader.engine`, `kis_trader.utils.env` | - |
|
|
| `kis_trader/backtest/param_search_dates.py` | 94 | `kis_trader.utils.env`, `kis_trader.utils.kr_trading_day` | - |
|
|
| `kis_trader/backtest/param_search_momentum.py` | 2,577 | `database`, `kis_trader.backtest`, `kis_trader.backtest.backtest_portfolio_common`, `kis_trader.backtest.momentum_backtest_common`, `kis_trader.backtest.momentum_tick_loader`, `kis_trader.backtest.optuna_common`, `kis_trader.backtest.param_search_apply_snapshot`, `kis_trader.backtest.param_search_cli_common`, `kis_trader.backtest.param_search_dates`, `kis_trader.backtest.param_search_pool`, `kis_trader.backtest.shared_ticks`, `kis_trader.backtest.trigger_snapshot_loader`, `kis_trader.engine`, `kis_trader.engine.indicator_cache`, `kis_trader.engine.momentum_hts_logic`, `kis_trader.engine.momentum_tick_replay`, `kis_trader.engine.us_momentum_env_keys`, `kis_trader.strategies.breakout`, `kis_trader.strategies.us_momentum_stock_cfg`, `kis_trader.utils.env` | `argparse`, `atexit`, `ctypes`, `heapq`, `permanent_subs` |
|
|
| `kis_trader/backtest/param_search_optuna.py` | 1,033 | `database`, `kis_trader.backtest`, `kis_trader.backtest.backtest_portfolio_common`, `kis_trader.backtest.optuna_breakout`, `kis_trader.backtest.optuna_common`, `kis_trader.backtest.optuna_daily_trail_recommend`, `kis_trader.backtest.optuna_dart`, `kis_trader.backtest.optuna_mode_combo`, `kis_trader.backtest.optuna_momentum`, `kis_trader.backtest.optuna_scalping`, `kis_trader.backtest.optuna_search_space`, `kis_trader.backtest.optuna_tail_tpe_space`, `kis_trader.backtest.param_search_cli_common`, `kis_trader.backtest.param_search_dates`, `kis_trader.backtest.param_search_pool`, `kis_trader.backtest.shared_ticks`, `kis_trader.backtest.tail_param_search`, `kis_trader.backtest.tail_tick_loader`, `kis_trader.backtest.trigger_snapshot_loader`, `kis_trader.backtest.universe_history_source`, `kis_trader.engine`, `kis_trader.engine.indicator_cache`, `kis_trader.engine.tail_tick_replay`, `kis_trader.utils.env` | `argparse`, `atexit`, `ctypes`, `optuna` |
|
|
| `kis_trader/backtest/param_search_pool.py` | 711 | `kis_trader.utils.env` | `atexit`, `ctypes` |
|
|
| `kis_trader/backtest/param_search_range_break.py` | 299 | `database`, `kis_trader.backtest`, `kis_trader.backtest.backtest_portfolio_common`, `kis_trader.backtest.param_search_cli_common`, `kis_trader.backtest.param_search_dates`, `kis_trader.backtest.param_search_pool`, `kis_trader.engine.range_break_engine`, `kis_trader.strategies.breakout`, `kis_trader.utils.env` | `argparse`, `heapq` |
|
|
| `kis_trader/backtest/param_search_scalping.py` | 1,661 | `database`, `kis_trader.backtest`, `kis_trader.backtest.backtest_portfolio_common`, `kis_trader.backtest.breakout_tick_loader`, `kis_trader.backtest.optuna_common`, `kis_trader.backtest.param_search_apply_snapshot`, `kis_trader.backtest.param_search_cli_common`, `kis_trader.backtest.param_search_dates`, `kis_trader.backtest.param_search_pool`, `kis_trader.backtest.scalping_backtest_common`, `kis_trader.backtest.shared_ticks`, `kis_trader.engine`, `kis_trader.engine.orderbook_env`, `kis_trader.utils.env` | `argparse`, `atexit`, `ctypes`, `heapq`, `param_apply_ai` |
|
|
| `kis_trader/backtest/param_search_updow.py` | 409 | `database`, `kis_trader.backtest.backtest_portfolio_common`, `kis_trader.backtest.param_search_apply_snapshot`, `kis_trader.backtest.param_search_dates`, `kis_trader.strategies`, `kis_trader.strategies.updow_holding_cfg` | `argparse`, `holding_bot` |
|
|
| `kis_trader/backtest/param_search_updow_us.py` | 284 | `database`, `kis_trader.strategies`, `kis_trader.strategies.updow_holding_cfg`, `kis_trader.utils.kr_trading_day` | `argparse`, `holding_bot` |
|
|
| `kis_trader/backtest/param_search_updown_box.py` | 276 | `database`, `kis_trader.backtest.param_search_dates`, `kis_trader.engine`, `kis_trader.strategies.updown_watchlist`, `kis_trader.utils.env` | `argparse`, `holding_bot` |
|
|
| `kis_trader/backtest/range_break_backtest_common.py` | 239 | `kis_trader.backtest.backtest_env_timeline`, `kis_trader.backtest.backtest_portfolio_common`, `kis_trader.backtest.breakout_tick_loader`, `kis_trader.backtest.universe_timeline`, `kis_trader.database.db_manager`, `kis_trader.engine.range_break_engine`, `kis_trader.engine.tick_exit_common`, `kis_trader.utils.logger` | - |
|
|
| `kis_trader/backtest/range_break_portfolio_backtest.py` | 402 | `kis_trader.backtest.backtest_env_timeline`, `kis_trader.backtest.backtest_portfolio_common`, `kis_trader.engine.range_break_engine`, `kis_trader.engine.scalping_engine`, `kis_trader.engine.tick_exit_common`, `kis_trader.share.stock_share`, `kis_trader.strategies.breakout`, `kis_trader.utils.env` | - |
|
|
| `kis_trader/backtest/scalping_backtest_common.py` | 408 | `kis_trader.backtest`, `kis_trader.backtest.backtest_env_timeline`, `kis_trader.backtest.backtest_portfolio_common`, `kis_trader.backtest.breakout_tick_loader`, `kis_trader.backtest.ls_history_loaders`, `kis_trader.backtest.universe_history_source`, `kis_trader.backtest.universe_timeline`, `kis_trader.database.db_manager`, `kis_trader.engine`, `kis_trader.engine.tick_exit_common`, `kis_trader.utils.env`, `kis_trader.utils.logger` | - |
|
|
| `kis_trader/backtest/scalping_portfolio_backtest.py` | 506 | `kis_trader.backtest.backtest_env_timeline`, `kis_trader.backtest.backtest_portfolio_common`, `kis_trader.backtest.momentum_portfolio_backtest`, `kis_trader.backtest.trigger_snapshot_loader`, `kis_trader.engine.mid_enroll_entry_gate`, `kis_trader.engine.scalping_engine`, `kis_trader.engine.strategy_eod`, `kis_trader.engine.tail_tick_replay`, `kis_trader.engine.tick_exit_common`, `kis_trader.utils.env` | - |
|
|
| `kis_trader/backtest/shared_ticks.py` | 507 | `kis_trader.engine.whipsaw_filter` | `numpy` |
|
|
| `kis_trader/backtest/tail_backtest_common.py` | 840 | `kis_trader.backtest.backtest_env_timeline`, `kis_trader.backtest.backtest_portfolio_common`, `kis_trader.backtest.momentum_backtest_common`, `kis_trader.backtest.tail_tick_loader`, `kis_trader.backtest.universe_history_source`, `kis_trader.backtest.universe_timeline`, `kis_trader.database.db_manager`, `kis_trader.engine.candle_rollup`, `kis_trader.engine.indicator_cache`, `kis_trader.engine.tail_engine`, `kis_trader.engine.tail_tick_replay`, `kis_trader.utils.env`, `kis_trader.utils.logger`, `kis_trader.utils.trade_time`, `kis_trader.ws.kis_ws` | - |
|
|
| `kis_trader/backtest/tail_bt_web_jobs.py` | 14 | `kis_trader.backtest.bt_web_jobs` | - |
|
|
| `kis_trader/backtest/tail_exit_ab_test.py` | 122 | `database`, `kis_trader.backtest`, `kis_trader.engine` | - |
|
|
| `kis_trader/backtest/tail_mfe_analysis.py` | 305 | `database`, `kis_trader.backtest`, `kis_trader.engine`, `kis_trader.utils.trade_time` | `argparse` |
|
|
| `kis_trader/backtest/tail_param_search.py` | 1,948 | `database`, `kis_trader.backtest`, `kis_trader.backtest.backtest_portfolio_common`, `kis_trader.backtest.optuna_common`, `kis_trader.backtest.param_search_cli_common`, `kis_trader.backtest.param_search_dates`, `kis_trader.backtest.param_search_pool`, `kis_trader.backtest.shared_ticks`, `kis_trader.backtest.tail_tick_loader`, `kis_trader.backtest.trigger_snapshot_loader`, `kis_trader.engine`, `kis_trader.engine.indicator_cache`, `kis_trader.engine.orderbook_env`, `kis_trader.engine.tail_env_keys`, `kis_trader.engine.tail_tick_replay`, `kis_trader.utils.env` | `argparse`, `atexit`, `ctypes`, `heapq`, `param_apply_ai` |
|
|
| `kis_trader/backtest/tail_tick_loader.py` | 18 | `kis_trader.backtest.breakout_tick_loader` | - |
|
|
| `kis_trader/backtest/trigger_snapshot_loader.py` | 564 | `kis_trader.engine.orderbook_filter`, `kis_trader.engine.program_filter`, `kis_trader.utils.env`, `kis_trader.ws.orderbook_cache`, `kis_trader.ws.program_cache`, `kis_trader.ws.trigger_eval_recorder` | - |
|
|
| `kis_trader/backtest/universe_history_source.py` | 81 | `kis_trader.utils.env` | - |
|
|
| `kis_trader/backtest/universe_timeline.py` | 271 | `kis_trader.backtest.universe_history_source`, `kis_trader.database.db_manager`, `kis_trader.utils.env` | `bisect` |
|
|
| `kis_trader/backtest/us_momentum_web_backtest.py` | 400 | `kis_trader.backtest`, `kis_trader.engine.us_momentum_env_keys`, `kis_trader.strategies.us_momentum_stock_cfg`, `kis_trader.utils.env`, `kis_trader.utils.usd_krw_fx` | `permanent_subs` |
|
|
| `kis_trader/database/__init__.py` | 4 | - | `db_manager` |
|
|
| `kis_trader/database/db_manager.py` | 857 | `database`, `kis_trader.backtest.momentum_universe_timeline`, `kis_trader.backtest.universe_history_source`, `kis_trader.utils.stock_name` | - |
|
|
| `kis_trader/database/paper_store.py` | 500 | `kis_trader.utils.strategy_ids` | - |
|
|
| `kis_trader/engine/__init__.py` | 5 | - | - |
|
|
| `kis_trader/engine/atr_series.py` | 37 | - | - |
|
|
| `kis_trader/engine/candle_rollup.py` | 158 | - | - |
|
|
| `kis_trader/engine/daily_profit_halt.py` | 811 | `kis_trader.utils.env`, `kis_trader.utils.logger` | - |
|
|
| `kis_trader/engine/dart_engine.py` | 380 | `database`, `kis_trader.engine.scalping_engine`, `kis_trader.utils.env` | - |
|
|
| `kis_trader/engine/dbband_engine.py` | 972 | `database`, `kis_trader.backtest.backtest_env_timeline`, `kis_trader.engine.dbband_env_keys`, `kis_trader.engine.tick_exit_common`, `kis_trader.utils.env`, `kis_trader.utils.trade_time` | - |
|
|
| `kis_trader/engine/dbband_env_keys.py` | 212 | - | - |
|
|
| `kis_trader/engine/ema_trend_filter.py` | 84 | - | - |
|
|
| `kis_trader/engine/indicator_cache.py` | 412 | `kis_trader.engine.ema_trend_filter`, `kis_trader.engine.momentum_engine`, `kis_trader.utils.env` | - |
|
|
| `kis_trader/engine/limit_entry_common.py` | 196 | - | `utils` |
|
|
| `kis_trader/engine/ls_feed_gate.py` | 20 | `kis_trader.utils.env`, `kis_trader.ws.ls_ws` | - |
|
|
| `kis_trader/engine/mid_enroll_entry_gate.py` | 241 | `kis_trader.utils.env` | - |
|
|
| `kis_trader/engine/momentum_chase_patterns.py` | 228 | `kis_trader.utils.env` | - |
|
|
| `kis_trader/engine/momentum_engine.py` | 673 | `database`, `kis_trader.backtest.momentum_portfolio_backtest`, `kis_trader.engine.momentum_env_keys`, `kis_trader.engine.momentum_hts_logic`, `kis_trader.engine.momentum_tick_replay`, `kis_trader.engine.strategy_eod`, `kis_trader.utils.env`, `kis_trader.utils.session_hm`, `kis_trader.utils.trade_time` | - |
|
|
| `kis_trader/engine/momentum_env_keys.py` | 249 | - | - |
|
|
| `kis_trader/engine/momentum_hts_logic.py` | 587 | `kis_trader.engine.momentum_chase_patterns`, `kis_trader.engine.momentum_env_keys`, `kis_trader.engine.orderbook_filter`, `kis_trader.engine.program_filter`, `kis_trader.engine.whipsaw_filter`, `kis_trader.utils.env`, `kis_trader.utils.session_hm`, `kis_trader.utils.trade_time` | - |
|
|
| `kis_trader/engine/momentum_tick_replay.py` | 620 | `kis_trader.backtest.shared_ticks`, `kis_trader.engine.momentum_engine`, `kis_trader.engine.whipsaw_filter`, `kis_trader.utils.env`, `kis_trader.utils.trade_time` | - |
|
|
| `kis_trader/engine/orderbook_env.py` | 187 | `kis_trader.utils.env` | - |
|
|
| `kis_trader/engine/orderbook_filter.py` | 276 | `kis_trader.utils.env`, `kis_trader.ws.orderbook_cache`, `kis_trader.ws.trigger_eval_recorder` | `orderbook_env`, `trigger_eval_collect` |
|
|
| `kis_trader/engine/live_sell_price.py` | — | `kis_trader.utils.env` | `base` 매도 현재가 |
|
|
| `kis_trader/engine/feed_fallback.py` | — | `kis_trader.utils.env` | 실매·옵투나 읽기 2초 폴백 |
|
|
| `kis_trader/engine/post_sell_candle_backfill.py` | 439 | `database`, `kis_trader.engine.candle_rollup`, `kis_trader.utils.env`, `kis_trader.utils.logger`, `kis_trader.ws.kis_ws` | - |
|
|
| `kis_trader/engine/program_filter.py` | 229 | `kis_trader.utils.env`, `kis_trader.ws.program_cache`, `kis_trader.ws.trigger_eval_recorder` | `trigger_eval_collect` |
|
|
| `kis_trader/engine/range_break_engine.py` | 460 | `database`, `kis_trader.backtest.range_break_portfolio_backtest`, `kis_trader.engine.range_break_env_keys`, `kis_trader.strategies.breakout`, `kis_trader.utils.trade_time` | - |
|
|
| `kis_trader/engine/range_break_env_keys.py` | 88 | - | - |
|
|
| `kis_trader/engine/scalping_engine.py` | 1,346 | `database`, `kis_trader.backtest.scalping_portfolio_backtest`, `kis_trader.engine.momentum_engine`, `kis_trader.engine.orderbook_filter`, `kis_trader.engine.strategy_eod`, `kis_trader.engine.tick_exit_common`, `kis_trader.utils.env`, `kis_trader.utils.trade_time` | - |
|
|
| `kis_trader/engine/strategy_eod.py` | 149 | - | - |
|
|
| `kis_trader/engine/tail_engine.py` | 2,788 | `database`, `kis_trader.backtest.backtest_env_timeline`, `kis_trader.backtest.trigger_snapshot_loader`, `kis_trader.engine.atr_series`, `kis_trader.engine.candle_rollup`, `kis_trader.engine.indicator_cache`, `kis_trader.engine.limit_entry_common`, `kis_trader.engine.mid_enroll_entry_gate`, `kis_trader.engine.orderbook_filter`, `kis_trader.engine.program_filter`, `kis_trader.engine.strategy_eod`, `kis_trader.engine.tail_env_keys`, `kis_trader.engine.tail_tick_replay`, `kis_trader.engine.tick_exit_common`, `kis_trader.engine.whipsaw_filter`, `kis_trader.utils.env`, `kis_trader.utils.position_sizing`, `kis_trader.utils.trade_time` | - |
|
|
| `kis_trader/engine/tail_env_keys.py` | 471 | `database`, `kis_trader.utils.env` | - |
|
|
| `kis_trader/engine/tail_tick_replay.py` | 303 | `kis_trader.backtest.shared_ticks`, `kis_trader.engine.candle_rollup`, `kis_trader.engine.limit_entry_common`, `kis_trader.utils.env` | - |
|
|
| `kis_trader/engine/tick_exit_common.py` | 384 | `kis_trader.backtest.shared_ticks`, `kis_trader.engine.scalping_engine`, `kis_trader.engine.whipsaw_filter`, `kis_trader.utils.env`, `kis_trader.utils.trade_time` | - |
|
|
| `kis_trader/engine/trigger_eval_collect.py` | 76 | `kis_trader.utils.env` | - |
|
|
| `kis_trader/engine/updown_box.py` | 958 | - | `scalping_engine`, `strategies`, `utils` |
|
|
| `kis_trader/engine/us_momentum_env.py` | 193 | `kis_trader.utils.env` | - |
|
|
| `kis_trader/engine/us_momentum_env_keys.py` | 296 | `kis_trader.utils.env` | - |
|
|
| `kis_trader/engine/whipsaw_filter.py` | 570 | `kis_trader.backtest.shared_ticks`, `kis_trader.utils.env` | - |
|
|
| `kis_trader/execution/__init__.py` | 5 | - | `kis_client`, `order_manager` |
|
|
| `kis_trader/execution/account_cash.py` | 174 | - | `utils` |
|
|
| `kis_trader/execution/kis_client.py` | 1,553 | `kis_trader.utils.api_reject_log`, `kis_trader.utils.non_stock` | `kis_token_manager`, `pandas`, `utils` |
|
|
| `kis_trader/execution/order_manager.py` | 2,381 | `kis_trader.engine.post_sell_candle_backfill`, `kis_trader.engine.us_momentum_env_keys`, `kis_trader.utils.api_reject_log` | `account_cash`, `database`, `kis_client`, `orderbook_sell`, `utils` |
|
|
| `kis_trader/execution/orderbook_sell.py` | 131 | - | `utils` |
|
|
| `kis_trader/execution/orphan_reconcile.py` | 571 | - | `engine`, `utils` |
|
|
| `kis_trader/main.py` | 2,353 | - | `database`, `engine`, `execution`, `network`, `permanent_subs`, `strategies`, `utils`, `ws` |
|
|
| `kis_trader/network/__init__.py` | 4 | - | `ws_manager` |
|
|
| `kis_trader/network/condition_manager.py` | 446 | - | `utils` |
|
|
| `kis_trader/network/kiwoom_condition_manager.py` | 790 | - | `condition_manager`, `utils`, `websocket`, `ws` |
|
|
| `kis_trader/network/ls_chart.py` | 239 | `database` | `pandas`, `utils`, `ws` |
|
|
| `kis_trader/network/ls_condition_manager.py` | 821 | `kis_trader.network.ls_token` | `condition_manager`, `utils` |
|
|
| `kis_trader/network/ls_token.py` | 231 | `kis_trader.utils.env` | `requests` |
|
|
| `kis_trader/network/ls_ws_validator.py` | 168 | - | `utils` |
|
|
| `kis_trader/network/market_guard.py` | 572 | - | `utils` |
|
|
| `kis_trader/network/ranking_manager.py` | 350 | - | `utils` |
|
|
| `kis_trader/network/ws_manager.py` | 1,849 | `kis_trader.share.stock_share` | `permanent_subs`, `utils`, `ws` |
|
|
| `kis_trader/network/ws_validator.py` | 227 | - | `utils` |
|
|
| `kis_trader/scan/__init__.py` | 1 | - | - |
|
|
| `kis_trader/scan/dart_order_tracker.py` | 642 | `database`, `kis_trader.database.db_manager`, `kis_trader.scan.dart_watchlist`, `kis_trader.utils.env`, `kis_trader.utils.logger`, `kis_trader.utils.request_handler` | `argparse`, `zipfile` |
|
|
| `kis_trader/scan/dart_watchlist.py` | 168 | `kis_trader.utils.env`, `kis_trader.utils.logger` | - |
|
|
| `kis_trader/scripts/__init__.py` | 5 | - | - |
|
|
| `kis_trader/scripts/apply_unified_risk_env.py` | 81 | `database` | - |
|
|
| `kis_trader/scripts/approx_param_search_from_log.py` | 131 | `kis_trader.database.db_manager` | `argparse` |
|
|
| `kis_trader/scripts/backfill_trigger_eval_from_log.py` | 318 | `kis_trader.database.db_manager` | `argparse` |
|
|
| `kis_trader/scripts/compare_momentum_scan_memo.py` | 233 | `kis_trader.backtest`, `kis_trader.backtest.momentum_backtest_common`, `kis_trader.backtest.param_search_momentum` | `argparse` |
|
|
| `kis_trader/scripts/fill_kiwoom_candles.py` | 405 | `database`, `kis_trader.utils.env`, `kis_trader.ws.kis_ws` | `argparse` |
|
|
| `kis_trader/scripts/fill_stock_share_meta.py` | 190 | `database`, `kis_trader.share.stock_share`, `kis_trader.utils.env`, `kis_trader.ws.kis_ws` | `argparse` |
|
|
| `kis_trader/scripts/migrate_split_env_config.py` | 105 | `database` | `config_schema` |
|
|
| `kis_trader/scripts/prune_env_config_strategy_columns.py` | 188 | `database`, `kis_trader.utils.env` | `argparse`, `config_schema` |
|
|
| `kis_trader/scripts/rebuild_universe_history_from_logs.py` | 418 | `database`, `kis_trader.database.db_manager` | `argparse` |
|
|
| `kis_trader/scripts/show_account_snapshot.py` | 323 | `kis_trader.execution.kis_client`, `kis_trader.utils.env` | `argparse` |
|
|
| `kis_trader/scripts/test_kis_ws_diagnostic.py` | 403 | `kis_trader.execution.kis_client`, `kis_trader.utils.env` | `argparse`, `requests`, `websocket` |
|
|
| `kis_trader/scripts/verify_three_paths.py` | 231 | `kis_trader.backtest.param_search_scalping`, `kis_trader.engine.momentum_engine`, `kis_trader.engine.scalping_engine`, `kis_trader.engine.tail_engine`, `kis_trader.strategies.breakout`, `kis_trader.utils.env` | `backtest_web`, `scalping_engine` |
|
|
| `kis_trader/share/__init__.py` | 1 | - | - |
|
|
| `kis_trader/share/stock_share.py` | 210 | `kis_trader.utils.env`, `kis_trader.utils.logger` | - |
|
|
| `kis_trader/strategies/__init__.py` | 30 | - | `base`, `breakout`, `dart_strategy`, `dbband_strategy`, `momentum`, `range_break`, `scalping`, `tail_catch`, `updow_strategy`, `us_momentum` |
|
|
| `kis_trader/strategies/base.py` | 1,126 | `kis_trader.engine.ls_feed_gate`, `kis_trader.engine.mid_enroll_entry_gate` | `backtest`, `database`, `engine`, `execution`, `network`, `utils` |
|
|
| `kis_trader/strategies/breakout.py` | 2,047 | `kis_trader.backtest.breakout_portfolio_backtest`, `kis_trader.backtest.shared_ticks`, `kis_trader.engine.tail_tick_replay`, `kis_trader.utils.env`, `kis_trader.utils.trade_time` | `base`, `engine`, `share`, `utils` |
|
|
| `kis_trader/strategies/dart_strategy.py` | 248 | - | `base`, `engine`, `scan`, `utils` |
|
|
| `kis_trader/strategies/dbband_stock_cfg.py` | 343 | - | `engine`, `holding_bot`, `utils` |
|
|
| `kis_trader/strategies/dbband_strategy.py` | 228 | - | `base`, `dbband_stock_cfg`, `engine`, `utils` |
|
|
| `kis_trader/strategies/momentum.py` | 360 | `kis_trader.engine.tail_tick_replay` | `base`, `engine`, `utils` |
|
|
| `kis_trader/strategies/range_break.py` | 303 | - | `base`, `engine`, `utils` |
|
|
| `kis_trader/strategies/scalping.py` | 434 | `kis_trader.engine.tail_tick_replay` | `base`, `engine`, `utils` |
|
|
| `kis_trader/strategies/tail_catch.py` | 503 | `kis_trader.engine.tail_tick_replay` | `base`, `engine`, `execution`, `utils` |
|
|
| `kis_trader/strategies/updow_buy.py` | 1,383 | `kis_trader.engine.scalping_engine` | `bisect`, `engine`, `utils` |
|
|
| `kis_trader/strategies/updow_holding_cfg.py` | 590 | - | `engine`, `holding_bot`, `updow_buy`, `utils` |
|
|
| `kis_trader/strategies/updow_strategy.py` | 769 | - | `base`, `engine`, `execution`, `updow_buy`, `updow_holding_cfg`, `updown_box_stock_cfg`, `updown_scan`, `updown_watchlist`, `utils` |
|
|
| `kis_trader/strategies/updown_box_stock_cfg.py` | 221 | - | - |
|
|
| `kis_trader/strategies/updown_feed.py` | 198 | - | `utils` |
|
|
| `kis_trader/strategies/updown_scan.py` | 154 | - | `engine`, `updown_watchlist`, `utils` |
|
|
| `kis_trader/strategies/updown_watchlist.py` | 419 | - | `utils` |
|
|
| `kis_trader/strategies/us_momentum.py` | 1,123 | `database`, `kis_trader.engine.tail_tick_replay` | `base`, `engine`, `execution`, `momentum`, `permanent_subs`, `us_momentum_stock_cfg`, `utils` |
|
|
| `kis_trader/strategies/us_momentum_stock_cfg.py` | 378 | - | `permanent_subs` |
|
|
| `kis_trader/utils/__init__.py` | 1 | - | - |
|
|
| `kis_trader/utils/api_reject_log.py` | 242 | `kis_trader.utils.env` | - |
|
|
| `kis_trader/utils/env.py` | 159 | `database` | - |
|
|
| `kis_trader/utils/kis_ws_session_windows.py` | 149 | - | `env`, `session_hm` |
|
|
| `kis_trader/utils/ls_ws_session_windows.py` | — | - | `env`, `session_hm` |
|
|
| `kis_trader/utils/kr_trading_day.py` | 232 | `kis_trader.utils.env` | - |
|
|
| `kis_trader/utils/live_portfolio_common.py` | 328 | - | `backtest`, `utils` |
|
|
| `kis_trader/utils/logger.py` | 219 | - | `env`, `requests` |
|
|
| `kis_trader/utils/non_stock.py` | 157 | - | `env` |
|
|
| `kis_trader/utils/position_sizing.py` | 41 | - | `utils` |
|
|
| `kis_trader/utils/request_handler.py` | 208 | - | `logger`, `requests` |
|
|
| `kis_trader/utils/session_hm.py` | 26 | - | - |
|
|
| `kis_trader/utils/stock_name.py` | 97 | - | - |
|
|
| `kis_trader/utils/strategy_ids.py` | 124 | - | - |
|
|
| `kis_trader/utils/trade_time.py` | 32 | - | - |
|
|
| `kis_trader/utils/universe_source.py` | 59 | - | `env` |
|
|
| `kis_trader/utils/usd_krw_fx.py` | 410 | `kis_trader.utils.env`, `kis_trader.utils.request_handler` | - |
|
|
| `kis_trader/web/live_config_schema.py` | 915 | `kis_trader.engine.orderbook_env` | - |
|
|
| `kis_trader/ws/__init__.py` | 22 | - | `kis_ws`, `kiwoom_ws`, `tick_recorder` |
|
|
| `kis_trader/ws/kis_ws.py` | 2,656 | `kis_trader.engine.candle_rollup`, `kis_trader.utils.env`, `kis_trader.utils.kis_ws_session_windows` | `kis_approval_manager`, `kis_long_ver1`, `pandas`, `requests`, `websocket` |
|
|
| `kis_trader/ws/kis_ws_overseas.py` | 591 | `kis_trader.utils.env`, `kis_trader.utils.kis_ws_session_windows` | `kis_approval_manager`, `requests`, `websocket` |
|
|
| `kis_trader/ws/kiwoom_ws.py` | 938 | `kis_trader.utils.env` | `kis_long_ver1`, `kis_ws`, `orderbook_cache`, `program_cache`, `websocket` |
|
|
| `kis_trader/ws/ls_ws.py` | — | `database`, `kis_trader.network.ls_chart`, `kis_trader.network.ls_token`, `kis_trader.utils.env`, `kis_trader.utils.ls_ws_session_windows`, `kis_trader.ws.orderbook_cache` | `requests`, `websocket` |
|
|
| `kis_trader/ws/orderbook_cache.py` | 287 | - | - |
|
|
| `kis_trader/ws/program_cache.py` | 157 | - | - |
|
|
| `kis_trader/ws/tick_recorder.py` | 287 | - | `utils` |
|
|
| `kis_trader/ws/trigger_eval_recorder.py` | 270 | - | `orderbook_cache`, `program_cache`, `utils` |
|
|
| `kis_trader/ws/trigger_snapshot_recorder.py` | 268 | - | `orderbook_cache`, `program_cache`, `utils` |
|
|
| `kis_ws.py` | 3 | `kis_trader.ws.kis_ws` | - |
|
|
| `kiwoom_rest_api/__init__.py` | 0 | - | - |
|
|
| `kiwoom_rest_api/api.py` | 0 | - | - |
|
|
| `kiwoom_rest_api/api_async.py` | 0 | - | - |
|
|
| `kiwoom_rest_api/auth/__init__.py` | 0 | - | - |
|
|
| `kiwoom_rest_api/auth/token.py` | 109 | - | `kiwoom_rest_api` |
|
|
| `kiwoom_rest_api/cli/__init__.py` | 0 | - | - |
|
|
| `kiwoom_rest_api/cli/main.py` | 88 | - | `kiwoom_rest_api`, `rich`, `typer` |
|
|
| `kiwoom_rest_api/config.py` | 60 | - | - |
|
|
| `kiwoom_rest_api/core/__init__.py` | 0 | - | - |
|
|
| `kiwoom_rest_api/core/async_client.py` | 49 | - | `httpx`, `kiwoom_rest_api` |
|
|
| `kiwoom_rest_api/core/base.py` | 224 | - | `httpx`, `kiwoom_rest_api` |
|
|
| `kiwoom_rest_api/core/base_api.py` | 56 | - | `kiwoom_rest_api` |
|
|
| `kiwoom_rest_api/core/sync_client.py` | 43 | - | `httpx`, `kiwoom_rest_api` |
|
|
| `kiwoom_rest_api/koreanstock/__init__.py` | 0 | - | - |
|
|
| `kiwoom_rest_api/koreanstock/account.py` | 2,050 | - | `kiwoom_rest_api` |
|
|
| `kiwoom_rest_api/koreanstock/analysis.py` | 108 | - | `kiwoom_rest_api` |
|
|
| `kiwoom_rest_api/koreanstock/chart.py` | 739 | - | `kiwoom_rest_api` |
|
|
| `kiwoom_rest_api/koreanstock/credit_order.py` | 291 | - | `kiwoom_rest_api` |
|
|
| `kiwoom_rest_api/koreanstock/elw.py` | 1,113 | - | `kiwoom_rest_api` |
|
|
| `kiwoom_rest_api/koreanstock/etf.py` | 621 | - | `kiwoom_rest_api` |
|
|
| `kiwoom_rest_api/koreanstock/foreign_institution.py` | 234 | - | `kiwoom_rest_api` |
|
|
| `kiwoom_rest_api/koreanstock/investor.py` | 115 | - | `kiwoom_rest_api` |
|
|
| `kiwoom_rest_api/koreanstock/market_condition.py` | 1,111 | - | `kiwoom_rest_api` |
|
|
| `kiwoom_rest_api/koreanstock/order.py` | 317 | - | `kiwoom_rest_api` |
|
|
| `kiwoom_rest_api/koreanstock/rank_info.py` | 2,311 | - | `kiwoom_rest_api` |
|
|
| `kiwoom_rest_api/koreanstock/sector.py` | 507 | - | `kiwoom_rest_api` |
|
|
| `kiwoom_rest_api/koreanstock/slb.py` | 287 | - | `kiwoom_rest_api` |
|
|
| `kiwoom_rest_api/koreanstock/stockinfo.py` | 1,608 | - | `kiwoom_rest_api` |
|
|
| `kiwoom_rest_api/koreanstock/theme.py` | 175 | - | `kiwoom_rest_api` |
|
|
| `kiwoom_rest_api/koreanstock/trading.py` | 107 | - | `kiwoom_rest_api` |
|
|
| `kiwoom_rest_api/trader.py` | 325 | - | `numpy`, `pandas` |
|
|
| `kiwoom_rest_api/websocket.py` | 321 | - | `config`, `websockets` |
|
|
| `kiwoom_rest_api/websocket_constants.py` | 186 | - | - |
|
|
| `kiwoom_rest_api/websocket_helper.py` | 283 | - | `websocket`, `websocket_constants` |
|
|
| `kiwoom_trader_dual.py` | 1,131 | - | `dotenv`, `kiwoom_rest_api`, `numpy`, `pandas`, `requests` |
|
|
| `kiwoom_trader_ver2.py` | 3,179 | `database` | `dotenv`, `export_sniper`, `kiwoom_rest_api`, `ml_predictor`, `news_analyzer`, `numpy`, `pandas`, `requests`, `risk_manager`, `smart_executor`, `trend_divergence` |
|
|
| `kiwoom_universe_scanner.py` | 684 | `database` | `dotenv`, `kiwoom_rest_api`, `requests` |
|
|
| `kiwoom_ws.py` | 3 | `kis_trader.ws.kiwoom_ws` | - |
|
|
| `kiwwom_trader/config.py` | 43 | - | `dotenv` |
|
|
| `kiwwom_trader/run.py` | 23 | - | `config`, `scalping_bot` |
|
|
| `kiwwom_trader/scalping_bot.py` | 261 | `database` | `config`, `kiwoom_rest_api`, `scalping_logic`, `ws_candle_agg` |
|
|
| `kiwwom_trader/scalping_logic.py` | 45 | `kis_trader.engine` | - |
|
|
| `kiwwom_trader/ws_candle_agg.py` | 122 | - | `kiwoom_rest_api` |
|
|
| `ls_sample/sample_python/balance_window.py` | 135 | - | `PySide2`, `pythoncom`, `tr`, `win32com` |
|
|
| `ls_sample/sample_python/button_holder.py` | 15 | - | - |
|
|
| `ls_sample/sample_python/main.py` | 303 | - | `PySide2`, `apscheduler`, `balance_window`, `dotenv`, `main_window`, `pythoncom`, `tr`, `win32com` |
|
|
| `ls_sample/sample_python/main_window.py` | 272 | - | `PySide2`, `dotenv`, `order_window`, `pythoncom`, `search_window`, `tr`, `win32com` |
|
|
| `ls_sample/sample_python/order_window.py` | 351 | - | `PySide2`, `pythoncom`, `tr`, `win32com` |
|
|
| `ls_sample/sample_python/rockwidget.py` | 22 | - | - |
|
|
| `ls_sample/sample_python/search_window.py` | 130 | - | `PySide2`, `pythoncom`, `tr`, `ui`, `win32com` |
|
|
| `ls_sample/sample_python/second_window.py` | 31 | - | - |
|
|
| `ls_sample/sample_python/slider.py` | 17 | - | - |
|
|
| `ls_sample/sample_python/test.py` | 100 | - | - |
|
|
| `ls_sample/sample_python/third_window.py` | 31 | - | - |
|
|
| `ls_sample/sample_python/tr/k3_real.py` | 63 | - | - |
|
|
| `ls_sample/sample_python/tr/s3_real.py` | 63 | - | - |
|
|
| `ls_sample/sample_python/tr/tr_0424.py` | 813 | - | `apscheduler`, `dotenv`, `pythoncom`, `tr`, `win32com` |
|
|
| `ls_sample/sample_python/tr/tr_1857.py` | 245 | - | - |
|
|
| `ls_sample/sample_python/tr/tr_cancel_order.py` | 118 | - | `dotenv` |
|
|
| `ls_sample/sample_python/tr/tr_kh.py` | 72 | - | - |
|
|
| `ls_sample/sample_python/tr/tr_master.py` | 67 | - | - |
|
|
| `ls_sample/sample_python/tr/tr_order.py` | 197 | - | `PySide2`, `balance_window`, `dotenv`, `pythoncom`, `tr`, `win32com` |
|
|
| `ls_sample/sample_python/tr/tr_pending.py` | 326 | - | `PySide2`, `balance_window`, `dotenv`, `pythoncom`, `tr`, `win32com` |
|
|
| `ls_sample/sample_python/tr/tr_redo_order.py` | 115 | - | `dotenv` |
|
|
| `ls_sample/sample_python/tr/tr_sc0.py` | 108 | - | - |
|
|
| `ls_sample/sample_python/tr/tr_sc1.py` | 97 | - | - |
|
|
| `ls_sample/sample_python/tr/tr_sc2.py` | 82 | - | - |
|
|
| `ls_sample/sample_python/tr/tr_sc3.py` | 88 | - | - |
|
|
| `ls_sample/sample_python/ui/ui_search_window.py` | 67 | - | `PySide2` |
|
|
| `ls_sample/sample_python/ui/ui_second_window.py` | 35 | - | `PySide2` |
|
|
| `ls_sample/sample_python/ui/ui_test.py` | 65 | - | - |
|
|
| `ls_sample/sample_python/ui/ui_third_window.py` | 34 | - | - |
|
|
| `mcp/kiwoom-docs-mcp/server.py` | 448 | - | `fastmcp` |
|
|
| `mcp/ls-docs-mcp/fetch_spec.py` | 269 | - | `argparse` |
|
|
| `mcp/ls-docs-mcp/server.py` | 417 | - | `fastmcp` |
|
|
| `ml_predictor.py` | 230 | `database` | `numpy`, `pandas`, `sklearn` |
|
|
| `mm_butler.py` | 1,235 | `database`, `kis_trader.utils.env` | `anthropic`, `google`, `kis_long_ver2`, `news_analyzer`, `requests` |
|
|
| `mm_remote.py` | 290 | `database` | `kis_long_ver1`, `requests` |
|
|
| `modify_db_schema.py` | 37 | - | `sqlite3` |
|
|
| `momentum_engine.py` | 3 | `kis_trader.engine.momentum_engine` | - |
|
|
| `news_analyzer.py` | 215 | - | `anthropic`, `bs4`, `requests` |
|
|
| `permanent_subs.py` | 319 | `kis_trader.utils.env` | - |
|
|
| `remove/legacy_standalone_bots/ai_recommend_notice.py` | 337 | `database` | `google`, `requests` |
|
|
| `remove/legacy_standalone_bots/back_test.py` | 164 | - | `sqlite3` |
|
|
| `remove/legacy_standalone_bots/kis_scalping_ver1.py` | 1,658 | `database` | `google`, `kis_token_manager`, `kis_ws`, `ml_predictor`, `pandas`, `requests`, `risk_manager` |
|
|
| `remove/legacy_standalone_bots/kis_scalping_ver2.py` | 1,596 | `database` | `google`, `kis_token_manager`, `kis_ws`, `ml_predictor`, `pandas`, `requests`, `risk_manager`, `scalping_engine` |
|
|
| `remove/legacy_standalone_bots/kis_short_ver1.py` | 3,826 | `database` | `google`, `hmac`, `ml_predictor`, `mm_remote`, `pandas`, `requests`, `risk_manager` |
|
|
| `remove/legacy_standalone_bots/kis_short_ver2.py` | 3,885 | `database` | `google`, `hmac`, `kis_token_manager`, `kis_ws`, `ml_predictor`, `mm_remote`, `pandas`, `requests`, `risk_manager` |
|
|
| `remove/legacy_standalone_bots/kis_short_ver3.py` | 3,610 | `database` | `google`, `hmac`, `kis_token_manager`, `kis_ws`, `ml_predictor`, `mm_remote`, `pandas`, `requests`, `risk_manager`, `tail_engine` |
|
|
| `remove/legacy_standalone_bots/update_env_short.py` | 140 | `database` | - |
|
|
| `remove/legacy_standalone_bots/updowbuyy.py` | 36 | `kis_trader.strategies.updow_buy` | - |
|
|
| `risk_manager.py` | 307 | - | `numpy`, `pandas` |
|
|
| `sample_python/balance_window.py` | 135 | - | `PySide2`, `pythoncom`, `tr`, `win32com` |
|
|
| `sample_python/button_holder.py` | 15 | - | - |
|
|
| `sample_python/main.py` | 303 | - | `PySide2`, `apscheduler`, `balance_window`, `dotenv`, `main_window`, `pythoncom`, `tr`, `win32com` |
|
|
| `sample_python/main_window.py` | 272 | - | `PySide2`, `dotenv`, `order_window`, `pythoncom`, `search_window`, `tr`, `win32com` |
|
|
| `sample_python/order_window.py` | 351 | - | `PySide2`, `pythoncom`, `tr`, `win32com` |
|
|
| `sample_python/rockwidget.py` | 22 | - | - |
|
|
| `sample_python/search_window.py` | 130 | - | `PySide2`, `pythoncom`, `tr`, `ui`, `win32com` |
|
|
| `sample_python/second_window.py` | 31 | - | - |
|
|
| `sample_python/slider.py` | 17 | - | - |
|
|
| `sample_python/test.py` | 100 | - | - |
|
|
| `sample_python/third_window.py` | 31 | - | - |
|
|
| `sample_python/tr/k3_real.py` | 63 | - | - |
|
|
| `sample_python/tr/s3_real.py` | 63 | - | - |
|
|
| `sample_python/tr/tr_0424.py` | 813 | - | `apscheduler`, `dotenv`, `pythoncom`, `tr`, `win32com` |
|
|
| `sample_python/tr/tr_1857.py` | 245 | - | - |
|
|
| `sample_python/tr/tr_cancel_order.py` | 118 | - | `dotenv` |
|
|
| `sample_python/tr/tr_kh.py` | 72 | - | - |
|
|
| `sample_python/tr/tr_master.py` | 67 | - | - |
|
|
| `sample_python/tr/tr_order.py` | 197 | - | `PySide2`, `balance_window`, `dotenv`, `pythoncom`, `tr`, `win32com` |
|
|
| `sample_python/tr/tr_pending.py` | 326 | - | `PySide2`, `balance_window`, `dotenv`, `pythoncom`, `tr`, `win32com` |
|
|
| `sample_python/tr/tr_redo_order.py` | 115 | - | `dotenv` |
|
|
| `sample_python/tr/tr_sc0.py` | 108 | - | - |
|
|
| `sample_python/tr/tr_sc1.py` | 97 | - | - |
|
|
| `sample_python/tr/tr_sc2.py` | 82 | - | - |
|
|
| `sample_python/tr/tr_sc3.py` | 88 | - | - |
|
|
| `sample_python/ui/ui_search_window.py` | 67 | - | `PySide2` |
|
|
| `sample_python/ui/ui_second_window.py` | 35 | - | `PySide2` |
|
|
| `sample_python/ui/ui_test.py` | 65 | - | - |
|
|
| `sample_python/ui/ui_third_window.py` | 34 | - | - |
|
|
| `scalping_engine.py` | 3 | `kis_trader.engine.scalping_engine` | - |
|
|
| `scripts/_diag_mom_2min_gap.py` | 124 | `database` | - |
|
|
| `scripts/_diag_mom_tick_today.py` | 99 | `database` | - |
|
|
| `scripts/_diag_scalp_live_bt_20260716.py` | 317 | `database`, `kis_trader.backtest.scalping_backtest_common`, `kis_trader.engine.scalping_engine` | - |
|
|
| `scripts/append_tail_optuna_compare.py` | 180 | `database`, `kis_trader.backtest`, `kis_trader.engine` | `argparse` |
|
|
| `scripts/backfill_trade_candles.py` | 70 | `database`, `kis_trader.engine.post_sell_candle_backfill` | `argparse` |
|
|
| `scripts/collect_ls_condition_history.py` | 654 | `database`, `kis_trader.utils.env` | `argparse`, `websocket` |
|
|
| `scripts/collect_ls_universe_history.py` | 401 | `database` | `argparse` |
|
|
| `scripts/copy_env_row_to_latest.py` | 0 | - | - |
|
|
| `scripts/kis_error_watch_mm.py` | 387 | `kis_trader.utils.env`, `kis_trader.utils.logger` | `argparse`, `select` |
|
|
| `scripts/market_open_sim_smoke.py` | 362 | `kis_trader.backtest`, `kis_trader.engine`, `kis_trader.execution.kis_client`, `kis_trader.network.market_guard`, `kis_trader.scripts`, `kis_trader.strategies`, `kis_trader.strategies.base`, `kis_trader.utils.env`, `kis_trader.utils.kr_trading_day` | `backtest_web`, `unittest` |
|
|
| `scripts/momentum_ratchet_ab_715.py` | 191 | `kis_trader.backtest.optuna_common`, `kis_trader.backtest.optuna_momentum`, `kis_trader.backtest.param_search_momentum`, `kis_trader.utils.env` | - |
|
|
| `scripts/post_optuna_mid_enroll_verify.py` | 214 | `database`, `kis_trader.backtest`, `kis_trader.backtest.us_momentum_web_backtest`, `kis_trader.engine.momentum_engine`, `kis_trader.utils.env` | `argparse` |
|
|
| `scripts/query_kiwoom_condition_snapshot.py` | 454 | `database`, `kis_trader.utils.env`, `kis_trader.ws.kis_ws` | `argparse`, `websocket` |
|
|
| `scripts/run_strategy_backtest_cli.py` | 256 | `kis_trader.utils.kr_trading_day` | `argparse`, `backtest_web` |
|
|
| `scripts/run_tail_backtest_cli.py` | 376 | `database`, `kis_trader.backtest`, `kis_trader.backtest.backtest_portfolio_common`, `kis_trader.engine`, `kis_trader.engine.tail_tick_replay`, `kis_trader.utils.kr_trading_day`, `kis_trader.utils.stock_name` | `argparse` |
|
|
| `scripts/smoke_candle_upsert_rollup.py` | 144 | `kis_trader.engine.candle_rollup`, `kis_trader.ws.kis_ws` | - |
|
|
| `scripts/tail_live_bt_forensics.py` | 158 | `database`, `kis_trader.backtest`, `kis_trader.backtest.universe_timeline`, `kis_trader.engine`, `kis_trader.engine.tail_engine` | `argparse` |
|
|
| `scripts/tail_symbol_gate_verify_20260709.py` | 126 | `database`, `kis_trader.backtest`, `kis_trader.engine`, `kis_trader.engine.tail_tick_replay` | - |
|
|
| `scripts/verify_live_portfolio_align.py` | 125 | `kis_trader.strategies`, `kis_trader.utils.live_portfolio_common` | - |
|
|
| `scripts/verify_optuna_tpe_apply_dryrun.py` | 153 | `kis_trader.backtest.backtest_portfolio_common`, `kis_trader.backtest.param_search_apply_snapshot`, `kis_trader.backtest.param_search_scalping`, `kis_trader.backtest.tail_param_search` | `argparse` |
|
|
| `scripts/verify_optuna_tpe_parity_checklist.py` | 283 | `kis_trader.backtest.backtest_portfolio_common`, `kis_trader.backtest.optuna_breakout_tpe_space`, `kis_trader.backtest.optuna_briefing`, `kis_trader.backtest.optuna_common`, `kis_trader.backtest.optuna_momentum_tpe_space`, `kis_trader.backtest.optuna_scalping_tpe_space`, `kis_trader.backtest.optuna_tail_tpe_space`, `kis_trader.backtest.optuna_tpe_common`, `kis_trader.utils.env` | `optuna` |
|
|
| `smart_executor.py` | 259 | - | - |
|
|
| `star.py` | 11 | - | - |
|
|
| `tail_engine.py` | 3 | `kis_trader.engine.tail_engine` | - |
|
|
| `test_kiwoom_token.py` | 339 | `database` | `argparse`, `getpass`, `requests` |
|
|
| `test_kiwoom_ws.py` | 196 | `database`, `kis_trader.ws.kis_ws`, `kis_trader.ws.kiwoom_ws` | `argparse` |
|
|
| `test_kiwoom_ws_sub_limit.py` | 453 | `database`, `kis_trader.utils.env`, `kis_trader.ws.kis_ws`, `kis_trader.ws.kiwoom_ws` | `argparse` |
|
|
| `test_ls_ws.py` | 998 | `database` | `argparse`, `requests`, `websocket` |
|
|
| `test_psearch.py` | 299 | `kis_trader.execution.kis_client`, `kis_trader.utils.env` | `argparse` |
|
|
| `tmp_mom_smoke_web.py` | 46 | - | `backtest_web` |
|
|
| `trend_divergence.py` | 248 | - | `pandas`, `pytrends`, `yfinance` |
|
|
| `update_env.py` | 145 | `database` | - |
|
|
| `update_env_etf.py` | 61 | `database` | - |
|
|
| `update_env_simple.py` | 71 | `database` | - |
|
|
---
|
|
|
|
## 수동 노트: 조건검색 유니버스 (LS / 키움) — 2026-08-04
|
|
|
|
> AST 자동생성 본문과 별도. 재생성 시 이 섹션을 유지·재첨부할 것.
|
|
|
|
### 허브 파일
|
|
|
|
| 파일 | 역할 |
|
|
|------|------|
|
|
| `kis_trader/network/condition_common.py` | **필수 공통만** — `JOB_KO`, `normalize_job_flag`, `job_kind`, `rows_for_codes` |
|
|
| `kis_trader/network/condition_job_events.py` | 진입/재진입/이탈 → `condition_job_events` |
|
|
| `kis_trader/network/condition_manager.py` | 멤버십 `_apply_result` (push/pop) · KIS REST 폴링 본체 |
|
|
| `kis_trader/network/kiwoom_condition_manager.py` | 키움 CNSRREQ 시드 + REAL I/D |
|
|
| `kis_trader/network/ls_condition_manager.py` | LS t1866→**t1859(REST 시드)**→t1860/AFR(델타) |
|
|
|
|
시드·프로토콜(t1859 / CNSRREQ / AFR / REAL)은 **합치지 않음** (브로커 분기 유발).
|
|
|
|
### LS 시드 공백 (키움에 없던 실패 모드)
|
|
|
|
1. t1859 = REST 원샷. `rsp_cd=09000` 검색결과없음 가능 (HTS UI·키움 조건명과 **다른 스냅**).
|
|
2. AFR = N/R/O 델타만 — **풀목록 재전송 없음**.
|
|
3. `LS_CONDITION_SNAPSHOT_REFRESH_SEC=0` (기본) = 주기 전체교체 OFF (정상).
|
|
4. RAM=0 이면 **`LS_T1859_EMPTY_RETRY_SEC`(기본 15)** 로 t1859 재시도.
|
|
- **`=0` = 재시도 OFF** (무한 연타 아님 · 영구 0 위험).
|
|
- RAM>0 되면 재시도 안 함. REST 폭주 방지.
|
|
5. 빈 t1859 결과는 `ls_candidates_history` 에 **저장하지 않음**.
|
|
|
|
### 관련 ENV
|
|
|
|
| 키 | 기본 | 의미 |
|
|
|----|------|------|
|
|
| `LS_CONDITION_SNAPSHOT_REFRESH_SEC` | 0 | 주기 t1859 (AFR live+종목있으면 스킵) |
|
|
| `LS_T1859_EMPTY_RETRY_SEC` | 1 | RAM0만 재시드(초). 공식 t1859 1건/초 · 실간격≥TR_GAP(1.1). 0=OFF |
|
|
| `LS_T1859_ALLOW_SHRINK` | false | t1859 축소 전체교체 허용 |
|
|
| `CONDITION_JOB_EVENTS_SAVE` | true | job 이벤트 INSERT |
|
|
|
|
웹「조건 이벤트」탭: `/api/condition_job_events`, `/api/condition_parity`.
|
|
|
|
## 수동 노트: 호가필터 TTL (2026-08-15)
|
|
|
|
> AST 재생성 시 이 섹션 유지.
|
|
|
|
- 판정: `kis_trader/engine/orderbook_filter.py` `_fetch_snapshot` — `WS_ORDERBOOK_FILTER_MAX_AGE_SEC`(기본 0). 사진 없음+필터 ON → `WS_ORDERBOOK_FILTER_REJECT_IF_EMPTY`(기본 true).
|
|
- 실매 매수·매도 현재가: `WSManager.get_price()` 생략=읽기 폴백 나이(`LIVE_FEED_FALLBACK_MAX_AGE_SEC` 기본 3초)로 메인→2차→3차. 한투 호가는 `kis_ws_ob`(2키)만 — 메인 `H0STASP0` 폴백 금지. 분봉 pick: `CANDLE_GARBAGE_FALLBACK` + `dedupe_by_read_pairs`(메인 WS→2차→LS→REST→rollup). `max_age_sec=None` 만 마지막 RAM(`get_price_last`). 매도 4차는 `live_sell_price.py` 키움 ka10007 + 쿨다운(시세 실키, `KIS_MOCK` 모의키 금지). 한투 `inquire_price` 60초 캐시 금지. EOD는 마지막 WS→REST→매수가 폴백. 호가 `get_orderbook_snapshot` 도 같은 폴백 체인 — `FILTER_MAX_AGE=0` 과 저장 TTL 을 합쳐 만료=`None`=필터 ON 통과 구멍을 만들지 말 것.
|
|
- 저장: `trigger_snapshot_recorder` — `WS_ORDERBOOK_TICK_MAX_AGE_SEC`(기본 30). **공유 금지.**
|
|
- 캐시: `orderbook_cache.get(..., max_age_sec)` — `<=0` 이면 나이 무시.
|
|
- 후처리 격자: `optuna_common.ensure_optuna_gate_env_defaults` `OPTUNA_OB_ENTRY_*` / `ASK_MULT_*`.
|
|
- 구 JSON 후처리만: `optuna_rerun_postprocess.py`.
|
|
|
|
## 수동 노트: 루트 레거시 파일 (2026-08-17)
|
|
|
|
> AST 재생성 시 이 섹션 유지.
|
|
|
|
실매 `kis_trader.main` 이 안 쓰는 파일은 `remove/` (**나중에 통째 삭제**).
|
|
웹·알람이 **아직 쓰는** `holding_bot` / `news_analyzer` / `kis_long_ver*` 는 `legacy/` (`ensure_legacy_root`).
|
|
`remove` 를 지워도 `legacy/` 는 남긴다.
|
|
상세 `legacy/README.md`, `remove/README.md`.
|