Files
kis_bot/docs/like_mcp.md/db_erd.md
Your Name 2c915c9508 feat(db): ENV 키·스키마 확장 및 거래일/포트폴리오 DB 헬퍼
OrderWorker·수집통계·영구구독 알람 env 등록과 TradeDB/db_manager 조회·마이그레이션을 보강한다.
kr_trading_day 헬퍼와 ERD 문서를 함께 갱신한다.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-08-28 16:45:36 +09:00

4981 lines
314 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# kis_quant_db — ERD & DDL Reference
> **DB**: `kis_quant_db` @ `192.168.0.141:3306`
> **Engine**: MariaDB / InnoDB · charset: `utf8mb4`
> **총 테이블 수**: 50개
> **컬럼 COMMENT**: **전 테이블·전 컬럼** 채움(2026-08-04, empty=0).
> 재적용: `python3 scripts/sql/fill_all_db_column_comments.py --apply`
> SQL덤프: `scripts/sql/all_db_column_comments.generated.sql`
> (config 전용 구버전: `fill_all_config_env_column_comments.py` / `all_config_env_column_comments.generated.sql`)
> 호가컷 정밀: `config_*_ob_column_comments.sql` · 토큰/세션 정밀: `token_session_strategy_column_comments.sql` · 해설 `docs/증권사_토큰_시세.md`
---
## 목차
- [📊 트레이딩 핵심 (Active Trades & Orders)](#-트레이딩-핵심-active-trades--orders)
- [⚙️ 전략 설정 (Strategy Config)](#-전략-설정-strategy-config)
- [🌍 환경 설정 (Env Config)](#-환경-설정-env-config)
- [📡 실시간 마켓 데이터 (WebSocket / Market Data)](#-실시간-마켓-데이터-websocket--market-data)
- [🔍 종목 스캔 / 후보 (Universe & Candidates)](#-종목-스캔--후보-universe--candidates)
- [📈 전략별 종목 설정 (Per-Stock Config)](#-전략별-종목-설정-per-stock-config)
- [📰 DART 공시](#-dart-공시)
- [🤖 AI 분석](#-ai-분석)
- [📋 주문 실행 로그](#-주문-실행-로그)
- [🔬 Optuna 스터디 결과](#-optuna-스터디-결과)
---
## ERD (주요 관계)
> 명시적 FK 제약이 없으므로 코드 상 참조 관계를 표현합니다.
```mermaid
erDiagram
active_trades {
varchar code PK
varchar strategy PK
double avg_buy_price
int current_qty
varchar status
}
trade_history {
int id PK
varchar code
varchar strategy
double pnl
}
target_candidates_history {
int id PK
varchar code
varchar strategy
}
env_config {
int id PK
varchar created_at
}
env_config_ext {
varchar env_key PK
text env_value
}
env_auth_config {
int id PK
varchar created_at
text KIS_APP_KEY_REAL
text KIS_APP_KEY_OB_REAL
}
ws_candles {
varchar code
varchar candle_time PK
double close
}
config_momentum {
int id PK
varchar created_at
}
active_trades ||--o{ trade_history : "청산→기록"
active_trades ||--o{ target_candidates_history : "후보→진입"
env_config ||--o{ config_momentum : "설정 스냅샷"
env_config_ext ||--|| env_config : "확장 KV"
env_auth_config ||--|| env_config : "앱키/시크릿/ID"
ws_candles ||--o{ active_trades : "가격 참조"
```
---
## 테이블 상세
### 📊 트레이딩 핵심 (Active Trades & Orders)
#### `active_trades`
**PK**: `code`, `strategy`
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `code` 🔑 | `varchar(20)` | NOT NULL | | 실보유: 종목코드 (KR 6자리 / US 티커) |
| `name` | `varchar(100)` | NOT NULL | | 실보유: 종목명 |
| `strategy` 🔑 | `varchar(50)` | NOT NULL | MANUAL | 실보유: 전략 ID (SHORT/MOMENTUM/BREAKOUT/US_MOMENTUM 등) |
| `avg_buy_price` | `double` | NOT NULL | | 실보유: 평균 매수가 |
| `current_price` | `double` | NULL | NULL | 실보유: 최근 평가/현재가 스냅샷 |
| `stop_price` | `double` | NULL | NULL | 실보유: 손절가 |
| `target_price` | `double` | NULL | NULL | 실보유: 목표가 |
| `max_price` | `double` | NULL | NULL | 실보유: 보유 중 고점(트레일·어깨컷용) |
| `atr_entry` | `double` | NULL | NULL | 실보유: 진입 시점 ATR |
| `target_qty` | `int(11)` | NOT NULL | | 실보유: 목표 수량 |
| `current_qty` | `int(11)` | NOT NULL | | 실보유: 현재 보유 수량 |
| `total_invested` | `double` | NULL | NULL | 실보유: 총 투자금액 |
| `status` | `text` | NOT NULL | | 실보유: 상태 |
| `buy_date` | `text` | NOT NULL | | 실보유: 매수 시각/일자 |
| `updated_at` | `text` | NOT NULL | | 실보유: 마지막 갱신 시각 |
| `size_class` | `text` | NULL | NULL | 실보유: 사이즈 등급(소/중/대 등) |
| `rsi` | `double` | NULL | NULL | 실보유: 진입/기록 시점 RSI |
| `volume_ratio` | `double` | NULL | NULL | 실보유: 거래량 배수(기록 스냅샷) |
| `tail_length_pct` | `double` | NULL | NULL | 실보유: 꼬리 길이%(기록 스냅샷) |
| `ma5_gap_pct` | `double` | NULL | NULL | 실보유: MA5 괴리%(기록 스냅샷) |
| `ma20_gap_pct` | `double` | NULL | NULL | 실보유: MA20 괴리%(기록 스냅샷) |
| `foreign_net_buy` | `double` | NULL | NULL | 실보유: 외국인 순매수(기록 스냅샷) |
| `institution_net_buy` | `double` | NULL | NULL | 실보유: 기관 순매수(기록 스냅샷) |
| `market_hour` | `double` | NULL | NULL | 실보유: 장중 시각 메타 |
| `is_mock` | `tinyint(1)` | NULL | NULL | 1=모의(KIS_MOCK) · 0=실전 · NULL=이관 전 미상 |
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `active_trades` (
`code` varchar(20) NOT NULL,
`name` varchar(100) NOT NULL,
`strategy` varchar(50) NOT NULL DEFAULT 'MANUAL',
`avg_buy_price` double NOT NULL,
`current_price` double DEFAULT NULL,
`stop_price` double DEFAULT NULL,
`target_price` double DEFAULT NULL,
`max_price` double DEFAULT NULL,
`atr_entry` double DEFAULT NULL,
`target_qty` int(11) NOT NULL,
`current_qty` int(11) NOT NULL,
`total_invested` double DEFAULT NULL,
`status` text NOT NULL,
`buy_date` text NOT NULL,
`updated_at` text NOT NULL,
`size_class` text DEFAULT NULL,
`rsi` double DEFAULT NULL,
`volume_ratio` double DEFAULT NULL,
`tail_length_pct` double DEFAULT NULL,
`ma5_gap_pct` double DEFAULT NULL,
`ma20_gap_pct` double DEFAULT NULL,
`foreign_net_buy` double DEFAULT NULL,
`institution_net_buy` double DEFAULT NULL,
`market_hour` double DEFAULT NULL,
`is_mock` tinyint(1) DEFAULT NULL,
PRIMARY KEY (`code`,`strategy`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
#### `active_trades_paper`
**PK**: `code`, `strategy`
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `code` 🔑 | `varchar(20)` | NOT NULL | | 페이퍼보유: 종목코드 (KR 6자리 / US 티커) |
| `name` | `varchar(100)` | NOT NULL | | 페이퍼보유: 종목명 |
| `strategy` 🔑 | `varchar(50)` | NOT NULL | MANUAL | 페이퍼보유: 전략 ID (SHORT/MOMENTUM/BREAKOUT/US_MOMENTUM 등) |
| `avg_buy_price` | `double` | NOT NULL | | 페이퍼보유: 평균 매수가 |
| `current_price` | `double` | NULL | NULL | 페이퍼보유: 최근 평가/현재가 스냅샷 |
| `stop_price` | `double` | NULL | NULL | 페이퍼보유: 손절가 |
| `target_price` | `double` | NULL | NULL | 페이퍼보유: 목표가 |
| `max_price` | `double` | NULL | NULL | 페이퍼보유: 보유 중 고점(트레일·어깨컷용) |
| `atr_entry` | `double` | NULL | NULL | 페이퍼보유: 진입 시점 ATR |
| `target_qty` | `int(11)` | NOT NULL | | 페이퍼보유: 목표 수량 |
| `current_qty` | `int(11)` | NOT NULL | | 페이퍼보유: 현재 보유 수량 |
| `total_invested` | `double` | NULL | NULL | 페이퍼보유: 총 투자금액 |
| `status` | `varchar(20)` | NOT NULL | | 페이퍼보유: 상태 |
| `buy_date` | `varchar(30)` | NOT NULL | | 페이퍼보유: 매수 시각/일자 |
| `updated_at` | `varchar(30)` | NOT NULL | | 페이퍼보유: 마지막 갱신 시각 |
| `size_class` | `varchar(20)` | NULL | NULL | 페이퍼보유: 사이즈 등급(소/중/대 등) |
| `fill_mode` | `varchar(16)` | NOT NULL | paper | 페이퍼보유: FILL MODE (fill_mode) |
| `note` | `varchar(200)` | NULL | NULL | 페이퍼보유: 메모 |
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `active_trades_paper` (
`code` varchar(20) NOT NULL,
`name` varchar(100) NOT NULL,
`strategy` varchar(50) NOT NULL DEFAULT 'MANUAL',
`avg_buy_price` double NOT NULL,
`current_price` double DEFAULT NULL,
`stop_price` double DEFAULT NULL,
`target_price` double DEFAULT NULL,
`max_price` double DEFAULT NULL,
`atr_entry` double DEFAULT NULL,
`target_qty` int(11) NOT NULL,
`current_qty` int(11) NOT NULL,
`total_invested` double DEFAULT NULL,
`status` varchar(20) NOT NULL,
`buy_date` varchar(30) NOT NULL,
`updated_at` varchar(30) NOT NULL,
`size_class` varchar(20) DEFAULT NULL,
`fill_mode` varchar(16) NOT NULL DEFAULT 'paper',
`note` varchar(200) DEFAULT NULL,
PRIMARY KEY (`code`,`strategy`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
#### `orders`
**PK**: `id` | AUTO_INCREMENT=7429
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `bigint(20)` | NOT NULL | | 실주문: PK · AUTO_INCREMENT |
| `ord_no` | `varchar(30)` | NOT NULL | | 실주문: 증권사 주문번호 |
| `strategy_id` | `varchar(40)` | NOT NULL | | 실주문: 전략 ID |
| `code` | `varchar(20)` | NOT NULL | | 실주문: 종목코드 (KR 6자리 / US 티커) |
| `name` | `varchar(100)` | NOT NULL | | 실주문: 종목명 |
| `side` | `varchar(8)` | NOT NULL | | 실주문: 매수/매도 구분 |
| `qty` | `int(11)` | NOT NULL | | 실주문: 수량(주) |
| `price` | `double` | NULL | 0 | 실주문: 주문/체결 가격 |
| `filled_qty` | `int(11)` | NOT NULL | 0 | 실주문: 체결 수량 |
| `filled_avg_price` | `double` | NULL | 0 | 실주문: 체결 평균가 |
| `status` | `varchar(16)` | NOT NULL | SUBMITTED | 실주문: 상태 |
| `msg_cd` | `varchar(20)` | NULL | NULL | 실주문: 응답 코드 |
| `msg1` | `varchar(300)` | NULL | NULL | 실주문: 응답 메시지 |
| `ord_date` | `varchar(10)` | NOT NULL | | 실주문: 주문일 |
| `submitted_at` | `varchar(30)` | NOT NULL | | 실주문: 주문 제출 시각 |
| `filled_at` | `varchar(30)` | NULL | NULL | 실주문: 체결 시각 |
| `raw_json` | `mediumtext` | NULL | NULL | 실주문: 원본 응답 JSON |
| `is_mock` | `tinyint(1)` | NULL | NULL | 1=모의(KIS_MOCK) · 0=실전 · NULL=이관 전 미상 |
**인덱스**:
- `uq_ord_no_ctx`: (`ord_no`, `strategy_id`, `code`, `side`, `ord_date`, `is_mock`)
- `idx_strategy_date`: (`strategy_id`, `ord_date`)
- `idx_code_date`: (`code`, `ord_date`)
- `idx_orders_mock_date`: (`is_mock`, `ord_date`)
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `orders` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`ord_no` varchar(30) NOT NULL,
`strategy_id` varchar(40) NOT NULL,
`code` varchar(20) NOT NULL,
`name` varchar(100) NOT NULL DEFAULT '',
`side` varchar(8) NOT NULL,
`qty` int(11) NOT NULL,
`price` double DEFAULT 0,
`filled_qty` int(11) NOT NULL DEFAULT 0,
`filled_avg_price` double DEFAULT 0,
`status` varchar(16) NOT NULL DEFAULT 'SUBMITTED',
`msg_cd` varchar(20) DEFAULT NULL,
`msg1` varchar(300) DEFAULT NULL,
`ord_date` varchar(10) NOT NULL,
`submitted_at` varchar(30) NOT NULL,
`filled_at` varchar(30) DEFAULT NULL,
`raw_json` mediumtext DEFAULT NULL,
`is_mock` tinyint(1) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uq_ord_no_ctx` (`ord_no`,`strategy_id`,`code`,`side`,`ord_date`,`is_mock`),
KEY `idx_strategy_date` (`strategy_id`,`ord_date`),
KEY `idx_code_date` (`code`,`ord_date`),
KEY `idx_orders_mock_date` (`is_mock`,`ord_date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
#### `orders_paper`
**PK**: `id` | AUTO_INCREMENT=7
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `bigint(20)` | NOT NULL | | 페이퍼주문: PK · AUTO_INCREMENT |
| `ord_no` | `varchar(40)` | NOT NULL | | 페이퍼주문: 증권사 주문번호 |
| `strategy_id` | `varchar(40)` | NOT NULL | | 페이퍼주문: 전략 ID |
| `code` | `varchar(20)` | NOT NULL | | 페이퍼주문: 종목코드 (KR 6자리 / US 티커) |
| `name` | `varchar(100)` | NOT NULL | | 페이퍼주문: 종목명 |
| `side` | `varchar(8)` | NOT NULL | | 페이퍼주문: 매수/매도 구분 |
| `qty` | `int(11)` | NOT NULL | | 페이퍼주문: 수량(주) |
| `price` | `double` | NULL | 0 | 페이퍼주문: 주문/체결 가격 |
| `filled_qty` | `int(11)` | NOT NULL | 0 | 페이퍼주문: 체결 수량 |
| `filled_avg_price` | `double` | NULL | 0 | 페이퍼주문: 체결 평균가 |
| `status` | `varchar(16)` | NOT NULL | FILLED | 페이퍼주문: 상태 |
| `msg_cd` | `varchar(20)` | NULL | NULL | 페이퍼주문: 응답 코드 |
| `msg1` | `varchar(300)` | NULL | NULL | 페이퍼주문: 응답 메시지 |
| `ord_date` | `varchar(10)` | NOT NULL | | 페이퍼주문: 주문일 |
| `submitted_at` | `varchar(30)` | NOT NULL | | 페이퍼주문: 주문 제출 시각 |
| `filled_at` | `varchar(30)` | NULL | NULL | 페이퍼주문: 체결 시각 |
| `raw_json` | `mediumtext` | NULL | NULL | 페이퍼주문: 원본 응답 JSON |
**인덱스**:
- `uq_paper_ord_no_ctx`: (`ord_no`, `strategy_id`, `code`, `side`, `ord_date`)
- `idx_paper_strategy_date`: (`strategy_id`, `ord_date`)
- `idx_paper_code_date`: (`code`, `ord_date`)
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `orders_paper` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`ord_no` varchar(40) NOT NULL,
`strategy_id` varchar(40) NOT NULL,
`code` varchar(20) NOT NULL,
`name` varchar(100) NOT NULL DEFAULT '',
`side` varchar(8) NOT NULL,
`qty` int(11) NOT NULL,
`price` double DEFAULT 0,
`filled_qty` int(11) NOT NULL DEFAULT 0,
`filled_avg_price` double DEFAULT 0,
`status` varchar(16) NOT NULL DEFAULT 'FILLED',
`msg_cd` varchar(20) DEFAULT NULL,
`msg1` varchar(300) DEFAULT NULL,
`ord_date` varchar(10) NOT NULL,
`submitted_at` varchar(30) NOT NULL,
`filled_at` varchar(30) DEFAULT NULL,
`raw_json` mediumtext DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uq_paper_ord_no_ctx` (`ord_no`,`strategy_id`,`code`,`side`,`ord_date`),
KEY `idx_paper_strategy_date` (`strategy_id`,`ord_date`),
KEY `idx_paper_code_date` (`code`,`ord_date`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
#### `trade_history`
**PK**: `id` | AUTO_INCREMENT=4399
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `int(11)` | NOT NULL | | 실청산이력: PK · AUTO_INCREMENT |
| `code` | `varchar(20)` | NOT NULL | | 실청산이력: 종목코드 (KR 6자리 / US 티커) |
| `name` | `varchar(100)` | NOT NULL | | 실청산이력: 종목명 |
| `strategy` | `varchar(50)` | NULL | NULL | 실청산이력: 전략 ID (SHORT/MOMENTUM/BREAKOUT/US_MOMENTUM 등) |
| `buy_price` | `double` | NOT NULL | | 실청산이력: 매수가 |
| `sell_price` | `double` | NOT NULL | | 실청산이력: 매도가 |
| `qty` | `int(11)` | NOT NULL | | 실청산이력: 수량(주) |
| `profit_rate` | `double` | NOT NULL | | 실청산이력: 수익률(비율) |
| `realized_pnl` | `double` | NOT NULL | | 실청산이력: 실현손익 |
| `hold_minutes` | `int(11)` | NULL | NULL | 실청산이력: 보유 분 |
| `buy_date` | `varchar(30)` | NULL | NULL | 실청산이력: 매수 시각/일자 |
| `sell_date` | `varchar(30)` | NOT NULL | | 실청산이력: 매도 시각/일자 |
| `sell_reason` | `varchar(200)` | NULL | NULL | 실청산이력: 매도 사유 |
| `env_snapshot` | `text` | NULL | NULL | 실청산이력: 체결 시점 env/파라미터 JSON 스냅샷 |
| `size_class` | `varchar(20)` | NULL | NULL | 실청산이력: 사이즈 등급(소/중/대 등) |
| `rsi` | `double` | NULL | NULL | 실청산이력: 진입/기록 시점 RSI |
| `volume_ratio` | `double` | NULL | NULL | 실청산이력: 거래량 배수(기록 스냅샷) |
| `tail_length_pct` | `double` | NULL | NULL | 실청산이력: 꼬리 길이%(기록 스냅샷) |
| `ma5_gap_pct` | `double` | NULL | NULL | 실청산이력: MA5 괴리%(기록 스냅샷) |
| `ma20_gap_pct` | `double` | NULL | NULL | 실청산이력: MA20 괴리%(기록 스냅샷) |
| `foreign_net_buy` | `double` | NULL | NULL | 실청산이력: 외국인 순매수(기록 스냅샷) |
| `institution_net_buy` | `double` | NULL | NULL | 실청산이력: 기관 순매수(기록 스냅샷) |
| `market_hour` | `double` | NULL | NULL | 실청산이력: 장중 시각 메타 |
| `is_mock` | `tinyint(1)` | NULL | NULL | 1=모의(KIS_MOCK) · 0=실전 · NULL=이관 전 미상 |
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `trade_history` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`code` varchar(20) NOT NULL,
`name` varchar(100) NOT NULL,
`strategy` varchar(50) DEFAULT NULL,
`buy_price` double NOT NULL,
`sell_price` double NOT NULL,
`qty` int(11) NOT NULL,
`profit_rate` double NOT NULL,
`realized_pnl` double NOT NULL,
`hold_minutes` int(11) DEFAULT NULL,
`buy_date` varchar(30) DEFAULT NULL,
`sell_date` varchar(30) NOT NULL,
`sell_reason` varchar(200) DEFAULT NULL,
`env_snapshot` text DEFAULT NULL,
`size_class` varchar(20) DEFAULT NULL,
`is_mock` tinyint(1) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
#### `trade_history_paper`
**PK**: `id` | AUTO_INCREMENT=2
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `int(11)` | NOT NULL | | 페이퍼청산이력: PK · AUTO_INCREMENT |
| `code` | `varchar(20)` | NOT NULL | | 페이퍼청산이력: 종목코드 (KR 6자리 / US 티커) |
| `name` | `varchar(100)` | NOT NULL | | 페이퍼청산이력: 종목명 |
| `strategy` | `varchar(50)` | NULL | NULL | 페이퍼청산이력: 전략 ID (SHORT/MOMENTUM/BREAKOUT/US_MOMENTUM 등) |
| `buy_price` | `double` | NOT NULL | | 페이퍼청산이력: 매수가 |
| `sell_price` | `double` | NOT NULL | | 페이퍼청산이력: 매도가 |
| `qty` | `int(11)` | NOT NULL | | 페이퍼청산이력: 수량(주) |
| `profit_rate` | `double` | NOT NULL | | 페이퍼청산이력: 수익률(비율) |
| `realized_pnl` | `double` | NOT NULL | | 페이퍼청산이력: 실현손익 |
| `hold_minutes` | `int(11)` | NULL | NULL | 페이퍼청산이력: 보유 분 |
| `buy_date` | `varchar(30)` | NULL | NULL | 페이퍼청산이력: 매수 시각/일자 |
| `sell_date` | `varchar(30)` | NOT NULL | | 페이퍼청산이력: 매도 시각/일자 |
| `sell_reason` | `varchar(200)` | NULL | NULL | 페이퍼청산이력: 매도 사유 |
| `env_snapshot` | `text` | NULL | NULL | 페이퍼청산이력: 체결 시점 env/파라미터 JSON 스냅샷 |
| `size_class` | `varchar(20)` | NULL | NULL | 페이퍼청산이력: 사이즈 등급(소/중/대 등) |
| `fill_mode` | `varchar(16)` | NOT NULL | paper | 페이퍼청산이력: FILL MODE (fill_mode) |
**인덱스**:
- `idx_thp_strategy_sell`: (`strategy`, `sell_date`)
- `idx_thp_code_sell`: (`code`, `sell_date`)
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `trade_history_paper` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`code` varchar(20) NOT NULL,
`name` varchar(100) NOT NULL,
`strategy` varchar(50) DEFAULT NULL,
`buy_price` double NOT NULL,
`sell_price` double NOT NULL,
`qty` int(11) NOT NULL,
`profit_rate` double NOT NULL,
`realized_pnl` double NOT NULL,
`hold_minutes` int(11) DEFAULT NULL,
`buy_date` varchar(30) DEFAULT NULL,
`sell_date` varchar(30) NOT NULL,
`sell_reason` varchar(200) DEFAULT NULL,
`env_snapshot` text DEFAULT NULL,
`size_class` varchar(20) DEFAULT NULL,
`fill_mode` varchar(16) NOT NULL DEFAULT 'paper',
PRIMARY KEY (`id`),
KEY `idx_thp_strategy_sell` (`strategy`,`sell_date`),
KEY `idx_thp_code_sell` (`code`,`sell_date`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
#### `buy_execution_log`
**PK**: `id`
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `int(11)` | NOT NULL | | PK · AUTO_INCREMENT |
| `code` | `varchar(20)` | NOT NULL | | 종목코드 (KR 6자리 / US 티커) |
| `name` | `varchar(100)` | NOT NULL | | 종목명 |
| `strategy` | `varchar(50)` | NOT NULL | | 전략 ID (SHORT/MOMENTUM/BREAKOUT/US_MOMENTUM 등) |
| `buy_date` | `varchar(10)` | NOT NULL | | 매수 시각/일자 |
| `executed_at` | `varchar(30)` | NOT NULL | | buy_execution_log: EXECUTED AT (executed_at) |
| `amount` | `double` | NOT NULL | | buy_execution_log: AMOUNT (amount) |
| `qty` | `int(11)` | NOT NULL | | 수량(주) |
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `buy_execution_log` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`code` varchar(20) NOT NULL,
`name` varchar(100) NOT NULL,
`strategy` varchar(50) NOT NULL,
`buy_date` varchar(10) NOT NULL,
`executed_at` varchar(30) NOT NULL,
`amount` double NOT NULL,
`qty` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
#### `daily_summary`
**PK**: `date`
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `date` 🔑 | `varchar(10)` | NOT NULL | | daily_summary: DATE (date) |
| `start_asset` | `double` | NULL | NULL | daily_summary: START ASSET (start_asset) |
| `end_asset` | `double` | NULL | NULL | daily_summary: END ASSET (end_asset) |
| `total_trades` | `int(11)` | NULL | NULL | daily_summary: TOTAL TRADES (total_trades) |
| `win_trades` | `int(11)` | NULL | NULL | daily_summary: WIN TRADES (win_trades) |
| `total_pnl` | `double` | NULL | NULL | daily_summary: TOTAL PNL (total_pnl) |
| `win_rate` | `double` | NULL | NULL | daily_summary: WIN RATE (win_rate) |
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `daily_summary` (
`date` varchar(10) NOT NULL,
`start_asset` double DEFAULT NULL,
`end_asset` double DEFAULT NULL,
`total_trades` int(11) DEFAULT NULL,
`win_trades` int(11) DEFAULT NULL,
`total_pnl` double DEFAULT NULL,
`win_rate` double DEFAULT NULL,
PRIMARY KEY (`date`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
### ⚙️ 전략 설정 (Strategy Config)
#### `config_momentum`
**PK**: `id` | AUTO_INCREMENT=387
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `int(11)` | NOT NULL | | PK · AUTO_INCREMENT |
| `created_at` | `varchar(30)` | NOT NULL | | 설정행 생성시각 |
| `MOMENTUM_LIVE_BACKTEST_ALIGN` | `text` | NULL | NULL | 모멘텀: LIVE BACKTEST ALIGN (MOMENTUM_LIVE_BACKTEST_ALIGN) |
| `MOMENTUM_LIVE_SIGNAL_LOOKBACK_BARS` | `text` | NULL | NULL | 모멘텀: LIVE SIGNAL LOOKBACK 봉수 (MOMENTUM_LIVE_SIGNAL_LOOKBACK_BARS) |
| `STRATEGY_MOMENTUM_ENABLED` | `text` | NULL | NULL | 국내모멘텀 ON/OFF. 다음루프 신규매수중단(보유청산유지). WS구독해제 안함. 기동시OFF→켜려면재시작 |
| `MOMENTUM_UNIVERSE_SOURCE` | `text` | NULL | NULL | 모멘텀 유니버스 · ls_condition=LS 동명 AFR · 시세는 키움/한투 유지 · 매니저 최초 기동은 봇 재시작 필요할 수 있음 · 키움으로 자동 폴백 안 함 |
| `RANK_MOMENTUM_SORT` | `text` | NULL | NULL | 모멘텀: RANK MOMENTUM SORT (RANK_MOMENTUM_SORT) |
| `RANK_MOMENTUM_LIMIT` | `text` | NULL | NULL | 모멘텀: RANK MOMENTUM LIMIT (RANK_MOMENTUM_LIMIT) |
| `CONDITION_MOMENTUM_NAME` | `text` | NULL | NULL | 모멘텀: CONDITION MOMENTUM NAME (CONDITION_MOMENTUM_NAME) |
| `CONDITION_MOMENTUM_SEQ` | `text` | NULL | NULL | 모멘텀: CONDITION MOMENTUM SEQ (CONDITION_MOMENTUM_SEQ) |
| `MOMENTUM_CAND_LIMIT` | `text` | NULL | NULL | 모멘텀 후보 상한 · 0=무제한 · 조건검색/랭킹이 N개 줘도 상위 N개만 매수체크·WS구독 · 전 전략 합산이 키움 WS 100종 한도를 넘지 않게 조절 |
| `MOMENTUM_TIME_START` | `text` | NULL | NULL | 모멘텀: 매수시작 (MOMENTUM_TIME_START) |
| `MOMENTUM_TIME_END` | `text` | NULL | NULL | 모멘텀: 매수종료 (MOMENTUM_TIME_END) |
| `MOMENTUM_MAX_STOCKS` | `text` | NULL | NULL | 모멘텀 동시 종목 |
| `MOMENTUM_MAX_BUY_AMOUNT` | `text` | NULL | NULL | 모멘텀: 1회최대매수금액 (MOMENTUM_MAX_BUY_AMOUNT) |
| `MOMENTUM_MAX_DAILY` | `text` | NULL | NULL | 모멘텀: 일일매수횟수상한 (MOMENTUM_MAX_DAILY) |
| `MOMENTUM_RSI_MIN` | `text` | NULL | NULL | 모멘텀: RSI하한 (MOMENTUM_RSI_MIN) |
| `MOMENTUM_RSI_MAX` | `text` | NULL | NULL | 모멘텀: RSI상한 (MOMENTUM_RSI_MAX) |
| `MOMENTUM_VOL_MULT` | `text` | NULL | NULL | 모멘텀: 거래량배수 (MOMENTUM_VOL_MULT) |
| `MOMENTUM_VOL_WIN` | `text` | NULL | NULL | 모멘텀: 거래량윈도우 (MOMENTUM_VOL_WIN) |
| `MOMENTUM_TIME_END_HM` | `text` | NULL | NULL | 모멘텀: 매수종료 HHMM (MOMENTUM_TIME_END_HM) |
| `MOMENTUM_MAX_FROM_OPEN_PCT` | `text` | NULL | NULL | 모멘텀: 최대 시가대비 % (MOMENTUM_MAX_FROM_OPEN_PCT) |
| `MOMENTUM_MIN_FROM_OPEN_PCT` | `text` | NULL | NULL | 모멘텀: 최소 시가대비 % (MOMENTUM_MIN_FROM_OPEN_PCT) |
| `MOMENTUM_SKIP_HTS_SCAN_DUPES` | `text` | NULL | NULL | 모멘텀: HTS스캔중복스킵 (MOMENTUM_SKIP_HTS_SCAN_DUPES) |
| `MOMENTUM_STOP_LOSS_PCT` | `text` | NULL | NULL | 모멘텀: 손절 % (MOMENTUM_STOP_LOSS_PCT) |
| `MOMENTUM_TAKE_PROFIT_PCT` | `text` | NULL | NULL | 모멘텀: 익절 % (MOMENTUM_TAKE_PROFIT_PCT) |
| `MOMENTUM_MIN_DROP_RATE` | `text` | NULL | NULL | 모멘텀: 최소 되돌림/하락 RATE (MOMENTUM_MIN_DROP_RATE) |
| `MOMENTUM_SLOT_MONEY` | `text` | NULL | NULL | 모멘텀 슬롯(원) |
| `MOMENTUM_MIN_PRICE` | `text` | NULL | NULL | 모멘텀: 최소가격 (MOMENTUM_MIN_PRICE) |
| `MOMENTUM_MAX_LOSS_PER_TRADE_KRW` | `text` | NULL | NULL | 모멘텀: 최대 LOSS PER TRADE 원 (MOMENTUM_MAX_LOSS_PER_TRADE_KRW) |
| `MOMENTUM_MIN_DROP_PCT_FOR_LOSS_CUT` | `text` | NULL | NULL | 모멘텀: 최소 되돌림/하락 % FOR LOSS CUT (MOMENTUM_MIN_DROP_PCT_FOR_LOSS_CUT) |
| `MOMENTUM_MIN_PROFIT_PCT` | `text` | NULL | NULL | 모멘텀: 최소 PROFIT % (MOMENTUM_MIN_PROFIT_PCT) |
| `MOMENTUM_TP_MAX_PCT` | `text` | NULL | NULL | 모멘텀: TP 최대 % (MOMENTUM_TP_MAX_PCT) |
| `MOMENTUM_SHOULDER_MIN_HIGH_PCT` | `text` | NULL | NULL | 모멘텀: 어깨무장고점 % (MOMENTUM_SHOULDER_MIN_HIGH_PCT) |
| `MOMENTUM_SHOULDER_CUT_PCT` | `text` | NULL | NULL | 모멘텀: 어깨컷 % (MOMENTUM_SHOULDER_CUT_PCT) |
| `MOMENTUM_TOTAL_BUDGET_KRW` | `text` | NULL | NULL | 모멘텀 총 한도(원) |
| `KIS_MOMENTUM_MM_CHANNEL` | `text` | NULL | NULL | 모멘텀: KIS MOMENTUM MM CHANNEL (KIS_MOMENTUM_MM_CHANNEL) |
| `MOMENTUM_RATCHET_TIERS` | `text` | NULL | NULL | 모멘텀: 다단래칫 (MOMENTUM_RATCHET_TIERS) |
| `MOMENTUM_TRAIL_PCT` | `text` | NULL | NULL | 모멘텀: 트레일 % (MOMENTUM_TRAIL_PCT) |
| `MOMENTUM_TRAIL_ARM_PCT` | `text` | NULL | NULL | 모멘텀: 트레일무장 % (MOMENTUM_TRAIL_ARM_PCT) |
| `MOMENTUM_MAX_HOLD_BARS` | `text` | NULL | NULL | 모멘텀: 최대보유봉 (MOMENTUM_MAX_HOLD_BARS) |
| `MOMENTUM_USE_DEFENSE_FILTERS` | `text` | NULL | NULL | 모멘텀: 사용_ 방어필터 필터 S (MOMENTUM_USE_DEFENSE_FILTERS) |
| `MOMENTUM_USE_HIGH_CHASE_FILTER` | `text` | NULL | NULL | 모멘텀: 사용_ 고점추격 필터 (MOMENTUM_USE_HIGH_CHASE_FILTER) |
| `MOMENTUM_USE_DAILY_RANGE_FILTER` | `text` | NULL | NULL | 모멘텀: 사용_ DAILY RANGE 필터 (MOMENTUM_USE_DAILY_RANGE_FILTER) |
| `MOMENTUM_HIGH_CHASE_THR` | `text` | NULL | NULL | 모멘텀: 고점추격 THR (MOMENTUM_HIGH_CHASE_THR) |
| `MOMENTUM_RSI_PERIOD` | `text` | NULL | NULL | 모멘텀: RSI 기간 (MOMENTUM_RSI_PERIOD) |
| `MOMENTUM_COOLDOWN_SEC` | `text` | NULL | NULL | 모멘텀: 쿨다운 초 (MOMENTUM_COOLDOWN_SEC) |
| `MOMENTUM_MIN_HOLD_SEC` | `text` | NULL | NULL | 모멘텀: 최소보유 초 (MOMENTUM_MIN_HOLD_SEC) |
| `MOMENTUM_FORCE_EOD_EXIT` | `text` | NULL | NULL | 모멘텀: FORCE 장마감 EXIT (MOMENTUM_FORCE_EOD_EXIT) |
| `MOMENTUM_USE_EMA_FILTER` | `text` | NULL | NULL | 모멘텀: 사용_ EMA 필터 (MOMENTUM_USE_EMA_FILTER) |
| `MOMENTUM_EMA_FAST_PERIOD` | `text` | NULL | NULL | 모멘텀: EMA단기 기간 (MOMENTUM_EMA_FAST_PERIOD) |
| `MOMENTUM_EMA_SLOW_PERIOD` | `text` | NULL | NULL | 모멘텀: EMA장기 기간 (MOMENTUM_EMA_SLOW_PERIOD) |
| `MOMENTUM_USE_RSI_MAX_FILTER` | `text` | NULL | NULL | 모멘텀: 사용_ RSI상한 필터 (MOMENTUM_USE_RSI_MAX_FILTER) |
| `MOMENTUM_PATTERN_BREAKOUT` | `text` | NULL | NULL | 모멘텀: 패턴 돌파 (MOMENTUM_PATTERN_BREAKOUT) |
| `MOMENTUM_PATTERN_PULLBACK` | `text` | NULL | NULL | 모멘텀: 패턴 되돌림 (MOMENTUM_PATTERN_PULLBACK) |
| `MOMENTUM_CHASE_LOOKBACK_MIN` | `text` | NULL | NULL | 모멘텀: CHASE LOOKBACK 최소 (MOMENTUM_CHASE_LOOKBACK_MIN) |
| `MOMENTUM_PULLBACK_LOOKBACK_MIN` | `text` | NULL | NULL | 모멘텀: 되돌림 LOOKBACK 최소 (MOMENTUM_PULLBACK_LOOKBACK_MIN) |
| `MOMENTUM_PULLBACK_MIN_PCT` | `text` | NULL | NULL | 모멘텀: 되돌림 최소 % (MOMENTUM_PULLBACK_MIN_PCT) |
| `MOMENTUM_PULLBACK_MAX_PCT` | `text` | NULL | NULL | 모멘텀: 되돌림 최대 % (MOMENTUM_PULLBACK_MAX_PCT) |
| `MOMENTUM_SETUP_VOL_MAX_MULT` | `text` | NULL | NULL | 모멘텀: SETUP 거래량 최대 배수 (MOMENTUM_SETUP_VOL_MAX_MULT) |
| `MOMENTUM_SETUP_BEAR_BARS_MIN` | `text` | NULL | NULL | 모멘텀: SETUP BEAR 봉수 최소 (MOMENTUM_SETUP_BEAR_BARS_MIN) |
| `MOMENTUM_ORDERBOOK_FILTER_ENABLED` | `text` | NULL | NULL | 모멘텀 호가필터 ON · ON=스프레드·잔량비·얇은호가·매도벽으로 매수 차단 · OFF=저장만 |
| `MOMENTUM_ORDERBOOK_MAX_SPREAD_PCT` | `text` | NULL | NULL | 모멘텀 스프레드상한(%) · 0.45=0.45% · 그리드 max_spread_pct 앵커 |
| `MOMENTUM_ORDERBOOK_ENTRY_BID_LEVELS` | `text` | NULL | NULL | 모멘텀 호가단계(N호가) |
| `MOMENTUM_ORDERBOOK_ENTRY_BID_DEPTH_MULT` | `text` | NULL | NULL | 모멘텀 매수호가깊이 배수 · 얇은호가 탈락 · 필요수량×N |
| `MOMENTUM_ORDERBOOK_ENTRY_ASK_MAX_MULT` | `text` | NULL | NULL | 모멘텀 매도벽 허용배수 · 필요수량×N · 그리드 ask_max_mult |
| `MOMENTUM_ORDERBOOK_MIN_BID_ASK_RATIO` | `text` | NULL | NULL | 모멘텀 매수/매도잔량비 하한 · 그리드 min_bid_ask_ratio |
| `MOMENTUM_PROGRAM_FILTER_ENABLED` | `text` | NULL | NULL | 모멘텀: 프로그램매매 필터 ON/OFF (MOMENTUM_PROGRAM_FILTER_ENABLED) |
| `MOMENTUM_PROGRAM_MIN_NET_BUY_QTY` | `text` | NULL | NULL | 모멘텀: 프로그램매매 최소 NET BUY QTY (MOMENTUM_PROGRAM_MIN_NET_BUY_QTY) |
| `MOMENTUM_PROGRAM_MIN_NET_BUY_AMT` | `text` | NULL | NULL | 모멘텀: 프로그램매매 최소 NET BUY AMT (MOMENTUM_PROGRAM_MIN_NET_BUY_AMT) |
| `MOMENTUM_PROGRAM_MAX_SELL_BUY_QTY_RATIO` | `text` | NULL | NULL | 모멘텀: 프로그램매매 최대 SELL BUY QTY RATIO (MOMENTUM_PROGRAM_MAX_SELL_BUY_QTY_RATIO) |
| `MOMENTUM_PROGRAM_MIN_NET_DELTA_QTY` | `text` | NULL | NULL | 모멘텀: 프로그램매매 최소 NET DELTA QTY (MOMENTUM_PROGRAM_MIN_NET_DELTA_QTY) |
| `MOMENTUM_PROGRAM_SNAPSHOT_MAX_AGE_SEC` | `text` | NULL | NULL | 모멘텀: 프로그램매매 SNAPSHOT 최대 AGE 초 (MOMENTUM_PROGRAM_SNAPSHOT_MAX_AGE_SEC) |
| `MOMENTUM_BACKTEST_USE_TRIGGER_SNAPSHOT_DB` | `text` | NULL | NULL | 모멘텀: BACKTEST 사용_ TRIGGER SNAPSHOT DB (MOMENTUM_BACKTEST_USE_TRIGGER_SNAPSHOT_DB) |
| `MOMENTUM_WHIPSAW_FILTER_ENABLED` | `text` | NULL | NULL | 모멘텀 휩쏘 필터 |
| `MOMENTUM_WHIPSAW_MODE` | `text` | NULL | NULL | 모멘텀: 휩쏘 모드 (MOMENTUM_WHIPSAW_MODE) |
| `MOMENTUM_WHIPSAW_SUBBAR_SEC` | `text` | NULL | NULL | 모멘텀: 휩쏘 SUBBAR 초 (MOMENTUM_WHIPSAW_SUBBAR_SEC) |
| `MOMENTUM_WHIPSAW_LOOKBACK_SEC` | `text` | NULL | NULL | 모멘텀: 휩쏘 LOOKBACK 초 (MOMENTUM_WHIPSAW_LOOKBACK_SEC) |
| `MOMENTUM_WHIPSAW_DIP_PCT` | `text` | NULL | NULL | 모멘텀: 휩쏘 DIP % (MOMENTUM_WHIPSAW_DIP_PCT) |
| `MOMENTUM_WHIPSAW_RECOVERY_TOL_PCT` | `text` | NULL | NULL | 모멘텀: 휩쏘 RECOVERY TOL % (MOMENTUM_WHIPSAW_RECOVERY_TOL_PCT) |
| `MOMENTUM_DAILY_PROFIT_TARGET_ENABLED` | `text` | NULL | NULL | 모멘텀 손익 감시 켜기 · OFF = 해당 전략 일일익절 비활성 (매수 차단 없음) |
| `MOMENTUM_DAILY_PROFIT_TARGET_KRW` | `text` | NULL | NULL | 모멘텀 목표(원) |
| `MOMENTUM_DAILY_PROFIT_TARGET_PCT` | `text` | NULL | NULL | 모멘텀 목표(%) · 퍼센트 그대로 (예: 2.5 = 2.5%) · 0=미사용 |
| `MOMENTUM_DAILY_PROFIT_HALT_NEW_BUYS` | `text` | NULL | NULL | 모멘텀 신규매수 수동 중단 · 목표 무관 수동 잠금 · 비우면 마스터 상속 · OFF=정상 |
| `MOMENTUM_BACKTEST_USE_TICK_EXIT` | `text` | NULL | NULL | 모멘텀: BACKTEST 사용_ TICK EXIT (MOMENTUM_BACKTEST_USE_TICK_EXIT) |
| `MOMENTUM_BACKTEST_TICK_FALLBACK_OHLC` | `text` | NULL | NULL | ⚠ 모멘텀 OHLC 폴백 (정합위험·금지) · 절대금지 — 틱 청산 ON 시 엔진 무시 · Optuna 강제 OFF |
| `MOMENTUM_BACKTEST_POLL_MS` | `text` | NULL | NULL | 모멘텀 틱청산 폴링(ms) · 실매 STRATEGY_LOOP_SLEEP≈0.1초 정합 · 틱 사이 청산 검사 간격 · 하한 50ms |
| `MOMENTUM_BACKTEST_SELL_SLIP_PCT` | `text` | NULL | NULL | 모멘텀: BACKTEST SELL SLIP % (MOMENTUM_BACKTEST_SELL_SLIP_PCT) |
| `MOMENTUM_BACKTEST_USE_TICK_ENTRY` | `text` | NULL | NULL | 모멘텀: BACKTEST 사용_ TICK ENTRY (MOMENTUM_BACKTEST_USE_TICK_ENTRY) |
| `MOMENTUM_BACKTEST_BUY_SLIP_PCT` | `text` | NULL | NULL | 모멘텀: BACKTEST BUY SLIP % (MOMENTUM_BACKTEST_BUY_SLIP_PCT) |
| `MOMENTUM_BACKTEST_UNIVERSE_STRICT` | `text` | NULL | NULL | 모멘텀: BACKTEST 유니버스 STRICT (MOMENTUM_BACKTEST_UNIVERSE_STRICT) |
| `MOMENTUM_BACKTEST_UNIVERSE_STRICT_LAG_MIN` | `text` | NULL | NULL | 모멘텀: BACKTEST 유니버스 STRICT LAG 최소 (MOMENTUM_BACKTEST_UNIVERSE_STRICT_LAG_MIN) |
| `MOMENTUM_BACKTEST_LIVE_SCAN_QUEUE` | `text` | NULL | NULL | 모멘텀: BACKTEST LIVE SCAN QUEUE (MOMENTUM_BACKTEST_LIVE_SCAN_QUEUE) |
| `MOMENTUM_BACKTEST_SCAN_SEC` | `text` | NULL | NULL | 모멘텀: BACKTEST SCAN 초 (MOMENTUM_BACKTEST_SCAN_SEC) |
| `MOMENTUM_BACKTEST_UNIVERSE_SCAN_AT` | `text` | NULL | NULL | 모멘텀: BACKTEST 유니버스 SCAN AT (MOMENTUM_BACKTEST_UNIVERSE_SCAN_AT) |
| `MOMENTUM_UNIVERSE_EXIT_DEBOUNCE_SEC` | `text` | NULL | NULL | 모멘텀: 유니버스 EXIT DEBOUNCE 초 (MOMENTUM_UNIVERSE_EXIT_DEBOUNCE_SEC) |
| `MOMENTUM_BACKTEST_CANDLE_WARMUP_BARS` | `text` | NULL | NULL | 모멘텀: BACKTEST CANDLE WARMUP 봉수 (MOMENTUM_BACKTEST_CANDLE_WARMUP_BARS) |
| `MOMENTUM_BACKTEST_USE_TRIGGER_EVAL_SNAPSHOT` | `text` | NULL | NULL | 모멘텀: BACKTEST 사용_ TRIGGER EVAL SNAPSHOT (MOMENTUM_BACKTEST_USE_TRIGGER_EVAL_SNAPSHOT) |
| `MOMENTUM_DAILY_PROFIT_MODE` | `text` | NULL | NULL | 모멘텀 익절방식 · 비우면 마스터 상속 · fixed/trailing/both |
| `MOMENTUM_DAILY_PROFIT_TRAIL_TIERS` | `text` | NULL | NULL | 모멘텀 다단 트레일 · 수익원:컷%,… · 비우면 마스터 상속 · 예: 30000:50,100000:35,300000:25 |
| `MOMENTUM_DAILY_PROFIT_TRAIL_DROP_PCT` | `text` | NULL | NULL | 모멘텀 단일 트레일 되돌림(%) · 다단 비었을 때만 · 고점 대비 % · 비우면 마스터 상속 · 0=미사용 |
| `MOMENTUM_DAILY_PROFIT_TRAIL_ARM_KRW` | `text` | NULL | NULL | 모멘텀 트레일 발동수익(원) · 이 이상 벌어야 트레일 감시 · 비우면 마스터 상속 |
| `MOMENTUM_DAILY_PROFIT_TRAIL_ARM_PCT` | `text` | NULL | NULL | 모멘텀: 일일익절 트레일무장 % (MOMENTUM_DAILY_PROFIT_TRAIL_ARM_PCT) |
| `CONDITION_MOMENTUM_KIWOOM_NAME` | `text` | NULL | NULL | 모멘텀: CONDITION MOMENTUM KIWOOM NAME (CONDITION_MOMENTUM_KIWOOM_NAME) |
| `CONDITION_MOMENTUM_KIWOOM_SEQ` | `text` | NULL | NULL | 모멘텀: CONDITION MOMENTUM KIWOOM SEQ (CONDITION_MOMENTUM_KIWOOM_SEQ) |
| `MOMENTUM_KIWOOM_UNIVERSE` | `text` | NULL | NULL | 모멘텀: KIWOOM 유니버스 (MOMENTUM_KIWOOM_UNIVERSE) |
| `MOMENTUM_EOD_ENABLED` | `text` | NULL | NULL | EOD 당일청산 사용 · ON=설정 시각 이후 보유 전량 장마감청산 · OFF=익절·손절·시간컷만 |
| `MOMENTUM_EOD_HM` | `text` | NULL | NULL | EOD 시각 (HH:MM) · 정규장 15:30 마감 기준 최소 10분 전 · 순차매도 여유 |
| `MOMENTUM_TRIGGER_E_CONFIRM` | `text` | NULL | NULL | 모멘텀: TRIGGER E CONFIRM (MOMENTUM_TRIGGER_E_CONFIRM) |
| `MOMENTUM_TRIGGER_REQUIRE_BULL_BAR` | `text` | NULL | NULL | 모멘텀: TRIGGER REQUIRE BULL BAR (MOMENTUM_TRIGGER_REQUIRE_BULL_BAR) |
| `MOMENTUM_USE_VOL_TRIGGER` | `text` | NULL | NULL | 모멘텀: 사용_ 거래량 TRIGGER (MOMENTUM_USE_VOL_TRIGGER) |
| `MOMENTUM_USE_RSI_FILTER` | `text` | NULL | NULL | 모멘텀: 사용_ RSI 필터 (MOMENTUM_USE_RSI_FILTER) |
| `MOMENTUM_LIVE_MIN_CANDLES` | `text` | NULL | NULL | 모멘텀: 실매최소봉수 (MOMENTUM_LIVE_MIN_CANDLES) |
| `MOMENTUM_GAP_FILL_LIMIT` | `text` | NULL | NULL | 모멘텀: GAP FILL LIMIT (MOMENTUM_GAP_FILL_LIMIT) |
| `MOMENTUM_GRID_FAST_SKIP_HTS_SCAN_DUPES` | `text` | NULL | NULL | 모멘텀: GRID FAST HTS스캔중복스킵 (MOMENTUM_GRID_FAST_SKIP_HTS_SCAN_DUPES) |
| `MOMENTUM_LIVE_ALIGN_USE_FORMING_BAR` | `text` | NULL | NULL | 모멘텀: LIVE ALIGN 사용_ FORMING BAR (MOMENTUM_LIVE_ALIGN_USE_FORMING_BAR) |
| `MOMENTUM_COOLDOWN_USE_CANDLE_FLOOR` | `text` | NULL | NULL | 모멘텀: 쿨다운 사용_ CANDLE FLOOR (MOMENTUM_COOLDOWN_USE_CANDLE_FLOOR) |
| `MOMENTUM_COOLDOWN_ENGINE_ONLY` | `text` | NULL | NULL | 모멘텀: 쿨다운 ENGINE ONLY (MOMENTUM_COOLDOWN_ENGINE_ONLY) |
| `MOMENTUM_BACKTEST_SKIP_PRE_SUBSCRIBE` | `text` | NULL | NULL | 모멘텀: BACKTEST SKIP PRE SUBSCRIBE (MOMENTUM_BACKTEST_SKIP_PRE_SUBSCRIBE) |
| `MOMENTUM_MAX_DAILY_CHG` | `text` | NULL | NULL | 모멘텀: 당일등락상한 (MOMENTUM_MAX_DAILY_CHG) |
| `MOMENTUM_BACKTEST_WALLCLOCK_LAST_PRICE` | `text` | NULL | NULL | 모멘텀: BACKTEST WALLCLOCK LAST PRICE (MOMENTUM_BACKTEST_WALLCLOCK_LAST_PRICE) |
| `MOMENTUM_PREV_DAY_OPEN_HM_MAX` | `text` | NULL | NULL | 모멘텀: PREV DAY OPEN HHMM 최대 (MOMENTUM_PREV_DAY_OPEN_HM_MAX) |
| `MOMENTUM_BACKTEST_REST_WARMUP` | `text` | NULL | NULL | 모멘텀: BACKTEST REST WARMUP (MOMENTUM_BACKTEST_REST_WARMUP) |
| `MOMENTUM_BACKTEST_REST_WARMUP_BARS` | `text` | NULL | NULL | 모멘텀: BACKTEST REST WARMUP 봉수 (MOMENTUM_BACKTEST_REST_WARMUP_BARS) |
| `MOMENTUM_BACKTEST_REST_WARMUP_BARS_RETRY` | `text` | NULL | NULL | 모멘텀: BACKTEST REST WARMUP 봉수 RETRY (MOMENTUM_BACKTEST_REST_WARMUP_BARS_RETRY) |
| `MOMENTUM_BACKTEST_REST_MAX_CODES` | `text` | NULL | NULL | 모멘텀: BACKTEST REST 최대 CODES (MOMENTUM_BACKTEST_REST_MAX_CODES) |
| `MOMENTUM_BACKTEST_REST_SLEEP_SEC` | `text` | NULL | NULL | 모멘텀: BACKTEST REST SLEEP 초 (MOMENTUM_BACKTEST_REST_SLEEP_SEC) |
| `MOMENTUM_BACKTEST_REST_KIWOOM_MOCK` | `text` | NULL | NULL | 모멘텀: BACKTEST REST KIWOOM MOCK (MOMENTUM_BACKTEST_REST_KIWOOM_MOCK) |
| `MOMENTUM_DAILY_PROFIT_RISK_BUDGET_ENABLED` | `text` | NULL | NULL | 모멘텀 리스크버짓(B) · ON=일일익절 hit 후 보유최악손절합>cushion 이면 전량정리 · 기본 OFF · 마스터 없음 |
| `MOMENTUM_DAILY_PROFIT_RISK_BUDGET_COOLDOWN_SEC` | `text` | NULL | NULL | 모멘텀 리스크버짓 쿨다운(초) · 같은 날 재평가 최소 간격 · 0=당일 1회만 |
| `MOMENTUM_TICK_SELL_ENABLED` | `text` | NULL | NULL | 모멘텀 틱매도 · 비우면 공통 TICK_SELL_ENABLED · true/false 명시 시 전략만 덮어씀 · 기본 false |
| `CONDITION_MOMENTUM_LS_NAME` | `text` | NULL | NULL | 모멘텀: CONDITION MOMENTUM LS NAME (CONDITION_MOMENTUM_LS_NAME) |
| `MOMENTUM_LIVE_UNIVERSE_HISTORY_SOURCE` | `text` | NULL | NULL | 모멘텀: LIVE 유니버스 HISTORY SOURCE (MOMENTUM_LIVE_UNIVERSE_HISTORY_SOURCE) |
| `MOMENTUM_E_MIN_CHG_PCT` | `text` | NULL | NULL | 모멘텀: E 최소 CHG % (MOMENTUM_E_MIN_CHG_PCT) |
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `config_momentum` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`created_at` varchar(30) NOT NULL,
`MOMENTUM_LIVE_BACKTEST_ALIGN` text DEFAULT NULL,
`MOMENTUM_LIVE_SIGNAL_LOOKBACK_BARS` text DEFAULT NULL,
`STRATEGY_MOMENTUM_ENABLED` text DEFAULT NULL,
`MOMENTUM_UNIVERSE_SOURCE` text DEFAULT NULL,
`RANK_MOMENTUM_SORT` text DEFAULT NULL,
`RANK_MOMENTUM_LIMIT` text DEFAULT NULL,
`CONDITION_MOMENTUM_NAME` text DEFAULT NULL,
`CONDITION_MOMENTUM_SEQ` text DEFAULT NULL,
`MOMENTUM_CAND_LIMIT` text DEFAULT NULL,
`MOMENTUM_TIME_START` text DEFAULT NULL,
`MOMENTUM_TIME_END` text DEFAULT NULL,
`MOMENTUM_MAX_STOCKS` text DEFAULT NULL,
`MOMENTUM_MAX_BUY_AMOUNT` text DEFAULT NULL,
`MOMENTUM_MAX_DAILY` text DEFAULT NULL,
`MOMENTUM_RSI_MIN` text DEFAULT NULL,
`MOMENTUM_RSI_MAX` text DEFAULT NULL,
`MOMENTUM_VOL_MULT` text DEFAULT NULL,
`MOMENTUM_VOL_WIN` text DEFAULT NULL,
`MOMENTUM_TIME_END_HM` text DEFAULT NULL,
`MOMENTUM_MAX_FROM_OPEN_PCT` text DEFAULT NULL,
`MOMENTUM_MIN_FROM_OPEN_PCT` text DEFAULT NULL,
`MOMENTUM_SKIP_HTS_SCAN_DUPES` text DEFAULT NULL,
`MOMENTUM_STOP_LOSS_PCT` text DEFAULT NULL,
`MOMENTUM_TAKE_PROFIT_PCT` text DEFAULT NULL,
`MOMENTUM_MIN_DROP_RATE` text DEFAULT NULL,
`MOMENTUM_SLOT_MONEY` text DEFAULT NULL,
`MOMENTUM_MIN_PRICE` text DEFAULT NULL,
`MOMENTUM_MAX_LOSS_PER_TRADE_KRW` text DEFAULT NULL,
`MOMENTUM_MIN_DROP_PCT_FOR_LOSS_CUT` text DEFAULT NULL,
`MOMENTUM_MIN_PROFIT_PCT` text DEFAULT NULL,
`MOMENTUM_TP_MAX_PCT` text DEFAULT NULL,
`MOMENTUM_SHOULDER_MIN_HIGH_PCT` text DEFAULT NULL,
`MOMENTUM_SHOULDER_CUT_PCT` text DEFAULT NULL,
`MOMENTUM_TOTAL_BUDGET_KRW` text DEFAULT NULL,
`KIS_MOMENTUM_MM_CHANNEL` text DEFAULT NULL,
`MOMENTUM_RATCHET_TIERS` text DEFAULT NULL,
`MOMENTUM_TRAIL_PCT` text DEFAULT NULL,
`MOMENTUM_TRAIL_ARM_PCT` text DEFAULT NULL,
`MOMENTUM_MAX_HOLD_BARS` text DEFAULT NULL,
`MOMENTUM_USE_DEFENSE_FILTERS` text DEFAULT NULL,
`MOMENTUM_USE_HIGH_CHASE_FILTER` text DEFAULT NULL,
`MOMENTUM_USE_DAILY_RANGE_FILTER` text DEFAULT NULL,
`MOMENTUM_HIGH_CHASE_THR` text DEFAULT NULL,
`MOMENTUM_RSI_PERIOD` text DEFAULT NULL,
`MOMENTUM_COOLDOWN_SEC` text DEFAULT NULL,
`MOMENTUM_MIN_HOLD_SEC` text DEFAULT NULL,
`MOMENTUM_FORCE_EOD_EXIT` text DEFAULT NULL,
`MOMENTUM_USE_EMA_FILTER` text DEFAULT NULL,
`MOMENTUM_EMA_FAST_PERIOD` text DEFAULT NULL,
`MOMENTUM_EMA_SLOW_PERIOD` text DEFAULT NULL,
`MOMENTUM_USE_RSI_MAX_FILTER` text DEFAULT NULL,
`MOMENTUM_PATTERN_BREAKOUT` text DEFAULT NULL,
`MOMENTUM_PATTERN_PULLBACK` text DEFAULT NULL,
`MOMENTUM_CHASE_LOOKBACK_MIN` text DEFAULT NULL,
`MOMENTUM_PULLBACK_LOOKBACK_MIN` text DEFAULT NULL,
`MOMENTUM_PULLBACK_MIN_PCT` text DEFAULT NULL,
`MOMENTUM_PULLBACK_MAX_PCT` text DEFAULT NULL,
`MOMENTUM_SETUP_VOL_MAX_MULT` text DEFAULT NULL,
`MOMENTUM_SETUP_BEAR_BARS_MIN` text DEFAULT NULL,
`MOMENTUM_ORDERBOOK_FILTER_ENABLED` text DEFAULT NULL,
`MOMENTUM_ORDERBOOK_MAX_SPREAD_PCT` text DEFAULT NULL,
`MOMENTUM_ORDERBOOK_ENTRY_BID_LEVELS` text DEFAULT NULL,
`MOMENTUM_ORDERBOOK_ENTRY_BID_DEPTH_MULT` text DEFAULT NULL,
`MOMENTUM_ORDERBOOK_ENTRY_ASK_MAX_MULT` text DEFAULT NULL,
`MOMENTUM_ORDERBOOK_MIN_BID_ASK_RATIO` text DEFAULT NULL,
`MOMENTUM_PROGRAM_FILTER_ENABLED` text DEFAULT NULL,
`MOMENTUM_PROGRAM_MIN_NET_BUY_QTY` text DEFAULT NULL,
`MOMENTUM_PROGRAM_MIN_NET_BUY_AMT` text DEFAULT NULL,
`MOMENTUM_PROGRAM_MAX_SELL_BUY_QTY_RATIO` text DEFAULT NULL,
`MOMENTUM_PROGRAM_MIN_NET_DELTA_QTY` text DEFAULT NULL,
`MOMENTUM_PROGRAM_SNAPSHOT_MAX_AGE_SEC` text DEFAULT NULL,
`MOMENTUM_BACKTEST_USE_TRIGGER_SNAPSHOT_DB` text DEFAULT NULL,
`MOMENTUM_WHIPSAW_FILTER_ENABLED` text DEFAULT NULL,
`MOMENTUM_WHIPSAW_MODE` text DEFAULT NULL,
`MOMENTUM_WHIPSAW_SUBBAR_SEC` text DEFAULT NULL,
`MOMENTUM_WHIPSAW_LOOKBACK_SEC` text DEFAULT NULL,
`MOMENTUM_WHIPSAW_DIP_PCT` text DEFAULT NULL,
`MOMENTUM_WHIPSAW_RECOVERY_TOL_PCT` text DEFAULT NULL,
`MOMENTUM_DAILY_PROFIT_TARGET_ENABLED` text DEFAULT NULL,
`MOMENTUM_DAILY_PROFIT_TARGET_KRW` text DEFAULT NULL,
`MOMENTUM_DAILY_PROFIT_TARGET_PCT` text DEFAULT NULL,
`MOMENTUM_DAILY_PROFIT_HALT_NEW_BUYS` text DEFAULT NULL,
`MOMENTUM_BACKTEST_USE_TICK_EXIT` text DEFAULT NULL,
`MOMENTUM_BACKTEST_TICK_FALLBACK_OHLC` text DEFAULT NULL,
`MOMENTUM_BACKTEST_POLL_MS` text DEFAULT NULL,
`MOMENTUM_BACKTEST_SELL_SLIP_PCT` text DEFAULT NULL,
`MOMENTUM_BACKTEST_USE_TICK_ENTRY` text DEFAULT NULL,
`MOMENTUM_BACKTEST_BUY_SLIP_PCT` text DEFAULT NULL,
`MOMENTUM_BACKTEST_UNIVERSE_STRICT` text DEFAULT NULL,
`MOMENTUM_BACKTEST_UNIVERSE_STRICT_LAG_MIN` text DEFAULT NULL,
`MOMENTUM_BACKTEST_LIVE_SCAN_QUEUE` text DEFAULT NULL,
`MOMENTUM_BACKTEST_SCAN_SEC` text DEFAULT NULL,
`MOMENTUM_BACKTEST_UNIVERSE_SCAN_AT` text DEFAULT NULL,
`MOMENTUM_UNIVERSE_EXIT_DEBOUNCE_SEC` text DEFAULT NULL,
`MOMENTUM_BACKTEST_CANDLE_WARMUP_BARS` text DEFAULT NULL,
`MOMENTUM_BACKTEST_USE_TRIGGER_EVAL_SNAPSHOT` text DEFAULT NULL,
`MOMENTUM_DAILY_PROFIT_MODE` text DEFAULT NULL,
`MOMENTUM_DAILY_PROFIT_TRAIL_TIERS` text DEFAULT NULL,
`MOMENTUM_DAILY_PROFIT_TRAIL_DROP_PCT` text DEFAULT NULL,
`MOMENTUM_DAILY_PROFIT_TRAIL_ARM_KRW` text DEFAULT NULL,
`MOMENTUM_DAILY_PROFIT_TRAIL_ARM_PCT` text DEFAULT NULL,
`CONDITION_MOMENTUM_KIWOOM_NAME` text DEFAULT NULL,
`CONDITION_MOMENTUM_KIWOOM_SEQ` text DEFAULT NULL,
`MOMENTUM_KIWOOM_UNIVERSE` text DEFAULT NULL,
`MOMENTUM_EOD_ENABLED` text DEFAULT NULL,
`MOMENTUM_EOD_HM` text DEFAULT NULL,
`MOMENTUM_TRIGGER_E_CONFIRM` text DEFAULT NULL,
`MOMENTUM_TRIGGER_REQUIRE_BULL_BAR` text DEFAULT NULL,
`MOMENTUM_USE_VOL_TRIGGER` text DEFAULT NULL,
`MOMENTUM_USE_RSI_FILTER` text DEFAULT NULL,
`MOMENTUM_LIVE_MIN_CANDLES` text DEFAULT NULL,
`MOMENTUM_GAP_FILL_LIMIT` text DEFAULT NULL,
`MOMENTUM_GRID_FAST_SKIP_HTS_SCAN_DUPES` text DEFAULT NULL,
`MOMENTUM_LIVE_ALIGN_USE_FORMING_BAR` text DEFAULT NULL,
`MOMENTUM_COOLDOWN_USE_CANDLE_FLOOR` text DEFAULT NULL,
`MOMENTUM_COOLDOWN_ENGINE_ONLY` text DEFAULT NULL,
`MOMENTUM_BACKTEST_SKIP_PRE_SUBSCRIBE` text DEFAULT NULL,
`MOMENTUM_MAX_DAILY_CHG` text DEFAULT NULL,
`MOMENTUM_BACKTEST_WALLCLOCK_LAST_PRICE` text DEFAULT NULL,
`MOMENTUM_PREV_DAY_OPEN_HM_MAX` text DEFAULT NULL,
`MOMENTUM_BACKTEST_REST_WARMUP` text DEFAULT NULL,
`MOMENTUM_BACKTEST_REST_WARMUP_BARS` text DEFAULT NULL,
`MOMENTUM_BACKTEST_REST_WARMUP_BARS_RETRY` text DEFAULT NULL,
`MOMENTUM_BACKTEST_REST_MAX_CODES` text DEFAULT NULL,
`MOMENTUM_BACKTEST_REST_SLEEP_SEC` text DEFAULT NULL,
`MOMENTUM_BACKTEST_REST_KIWOOM_MOCK` text DEFAULT NULL,
`MOMENTUM_DAILY_PROFIT_RISK_BUDGET_ENABLED` text DEFAULT NULL,
`MOMENTUM_DAILY_PROFIT_RISK_BUDGET_COOLDOWN_SEC` text DEFAULT NULL,
`MOMENTUM_TICK_SELL_ENABLED` text DEFAULT NULL,
`CONDITION_MOMENTUM_LS_NAME` text DEFAULT NULL,
`MOMENTUM_LIVE_UNIVERSE_HISTORY_SOURCE` text DEFAULT NULL,
`MOMENTUM_E_MIN_CHG_PCT` text DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=387 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
#### `config_scalp`
**PK**: `id` | AUTO_INCREMENT=391
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `int(11)` | NOT NULL | | PK · AUTO_INCREMENT |
| `created_at` | `varchar(30)` | NOT NULL | | 설정행 생성시각 |
| `SCALP_ATR_UP_MULT` | `text` | NULL | NULL | 스캘핑: ATR UP 배수 (SCALP_ATR_UP_MULT) |
| `SCALP_ATR_DOWN_MULT` | `text` | NULL | NULL | 스캘핑: ATR DOWN 배수 (SCALP_ATR_DOWN_MULT) |
| `SCALP_ATR_DROP_MULT` | `text` | NULL | NULL | 스캘핑: ATR 되돌림/하락 배수 (SCALP_ATR_DROP_MULT) |
| `SCALP_RSI_OVERSOLD` | `text` | NULL | NULL | 스캘핑: RSI과매도 (SCALP_RSI_OVERSOLD) |
| `SCALP_RSI_OVERBOUGHT` | `text` | NULL | NULL | 스캘핑: RSI과매수 (SCALP_RSI_OVERBOUGHT) |
| `SCALP_CANDLE_TIMEFRAME` | `text` | NULL | NULL | 스캘핑: CANDLE TIMEFRAME (SCALP_CANDLE_TIMEFRAME) |
| `SCALP_MARKET_OPEN_WAIT_MIN` | `text` | NULL | NULL | 스캘핑: MARKET OPEN WAIT 최소 (SCALP_MARKET_OPEN_WAIT_MIN) |
| `SCALP_GAP_FILL_LIMIT` | `text` | NULL | NULL | 스캘핑: GAP FILL LIMIT (SCALP_GAP_FILL_LIMIT) |
| `SCALP_MIN_VOLUME` | `text` | NULL | NULL | 스캘핑: 최소 거래량 UME (SCALP_MIN_VOLUME) |
| `KIS_SCALP_MM_CHANNEL` | `text` | NULL | NULL | 스캘핑: KIS SCALP MM CHANNEL (KIS_SCALP_MM_CHANNEL) |
| `SCALP_CANDLE_KEEP_DAYS` | `text` | NULL | NULL | 스캘핑: CANDLE KEEP DAYS (SCALP_CANDLE_KEEP_DAYS) |
| `SCALP_STOP_LOSS_PCT` | `text` | NULL | NULL | 스캘핑: 손절 % (SCALP_STOP_LOSS_PCT) |
| `SCALP_TAKE_PROFIT_PCT` | `text` | NULL | NULL | 스캘핑: 익절 % (SCALP_TAKE_PROFIT_PCT) |
| `SCALP_MIN_DROP_RATE` | `text` | NULL | NULL | 스캘핑: 최소 되돌림/하락 RATE (SCALP_MIN_DROP_RATE) |
| `SCALP_GAP_RETRY_SEC` | `text` | NULL | NULL | 스캘핑: GAP RETRY 초 (SCALP_GAP_RETRY_SEC) |
| `SCALP_REQUIRE_REVERSAL_CANDLE` | `text` | NULL | NULL | 스캘핑: REQUIRE REVERSAL CANDLE (SCALP_REQUIRE_REVERSAL_CANDLE) |
| `SCALP_COOLDOWN_SEC` | `text` | NULL | NULL | 스캘핑: 쿨다운 초 (SCALP_COOLDOWN_SEC) |
| `SCALP_TRAIL_TRIGGER_PCT` | `text` | NULL | NULL | 스캘핑: 트레일 TRIGGER % (SCALP_TRAIL_TRIGGER_PCT) |
| `SCALP_MIN_PROFIT_PCT` | `text` | NULL | NULL | 스캘핑: 최소 PROFIT % (SCALP_MIN_PROFIT_PCT) |
| `SCALP_HIGH_PRICE_CHASE_THRESHOLD` | `text` | NULL | NULL | 스캘핑: HIGH PRICE CHASE THRESHOLD (SCALP_HIGH_PRICE_CHASE_THRESHOLD) |
| `SCALP_MAX_DAILY_CHANGE_PCT` | `text` | NULL | NULL | 스캘핑: 일일매수횟수상한 CHANGE % (SCALP_MAX_DAILY_CHANGE_PCT) |
| `SCALP_MIN_PRICE` | `text` | NULL | NULL | 스캘핑: 최소가격 (SCALP_MIN_PRICE) |
| `SCALP_MAX_LOSS_PER_TRADE_KRW` | `text` | NULL | NULL | 스캘핑: 최대 LOSS PER TRADE 원 (SCALP_MAX_LOSS_PER_TRADE_KRW) |
| `SCALP_MIN_DROP_PCT_FOR_LOSS_CUT` | `text` | NULL | NULL | 스캘핑: 최소 되돌림/하락 % FOR LOSS CUT (SCALP_MIN_DROP_PCT_FOR_LOSS_CUT) |
| `SCALP_USE_DEFENSE_FILTERS` | `text` | NULL | NULL | 스캘핑: 사용_ 방어필터 필터 S (SCALP_USE_DEFENSE_FILTERS) |
| `SCALP_USE_MACD_CROSS` | `text` | NULL | NULL | 스캘핑: 사용_ MACD CROSS (SCALP_USE_MACD_CROSS) |
| `SCALP_MACD_FAST` | `text` | NULL | NULL | 스캘핑: MACD FAST (SCALP_MACD_FAST) |
| `SCALP_MACD_SLOW` | `text` | NULL | NULL | 스캘핑: MACD SLOW (SCALP_MACD_SLOW) |
| `SCALP_MACD_SIGNAL` | `text` | NULL | NULL | 스캘핑: MACD SIGNAL (SCALP_MACD_SIGNAL) |
| `SCALP_STOCH_K_PERIOD` | `text` | NULL | NULL | 스캘핑: STOCH K 기간 (SCALP_STOCH_K_PERIOD) |
| `SCALP_STOCH_D_PERIOD` | `text` | NULL | NULL | 스캘핑: STOCH D 기간 (SCALP_STOCH_D_PERIOD) |
| `SCALP_STOCH_SLOW` | `text` | NULL | NULL | 스캘핑: STOCH SLOW (SCALP_STOCH_SLOW) |
| `SCALP_LIVE_BACKTEST_ALIGN` | `text` | NULL | NULL | 스캘핑: LIVE BACKTEST ALIGN (SCALP_LIVE_BACKTEST_ALIGN) |
| `SCALP_LIVE_SIGNAL_LOOKBACK_BARS` | `text` | NULL | NULL | 스캘핑: LIVE SIGNAL LOOKBACK 봉수 (SCALP_LIVE_SIGNAL_LOOKBACK_BARS) |
| `SCALP_UNIVERSE_SOURCE` | `text` | NULL | NULL | 스캘핑: 유니버스소스 (SCALP_UNIVERSE_SOURCE) |
| `RANK_SCALP_SORT` | `text` | NULL | NULL | 스캘핑: RANK SCALP SORT (RANK_SCALP_SORT) |
| `RANK_SCALP_LIMIT` | `text` | NULL | NULL | 스캘핑: RANK SCALP LIMIT (RANK_SCALP_LIMIT) |
| `CONDITION_SCALP_NAME` | `text` | NULL | NULL | 스캘핑: CONDITION SCALP NAME (CONDITION_SCALP_NAME) |
| `CONDITION_SCALP_SEQ` | `text` | NULL | NULL | 스캘핑: CONDITION SCALP SEQ (CONDITION_SCALP_SEQ) |
| `SCALP_MAX_BUY_AMOUNT` | `text` | NULL | NULL | 스캘핑: 1회최대매수금액 (SCALP_MAX_BUY_AMOUNT) |
| `SCALP_CAND_LIMIT` | `text` | NULL | NULL | 스캘핑: 후보상한 (SCALP_CAND_LIMIT) |
| `SCALP_TIME_START` | `text` | NULL | NULL | 스캘핑: 매수시작 (SCALP_TIME_START) |
| `SCALP_TIME_END` | `text` | NULL | NULL | 스캘핑: 매수종료 (SCALP_TIME_END) |
| `SCALP_MODE` | `text` | NULL | NULL | 스캘핑: 모드 (SCALP_MODE) |
| `SCALP_MOM_RSI_MIN` | `text` | NULL | NULL | 스캘핑: MOM RSI하한 (SCALP_MOM_RSI_MIN) |
| `SCALP_MOM_RSI_MAX` | `text` | NULL | NULL | 스캘핑: MOM RSI상한 (SCALP_MOM_RSI_MAX) |
| `SCALP_MOM_VOL_MULT` | `text` | NULL | NULL | 스캘핑: MOM 거래량배수 (SCALP_MOM_VOL_MULT) |
| `SCALP_MOM_VOL_WIN` | `text` | NULL | NULL | 스캘핑: MOM 거래량윈도우 (SCALP_MOM_VOL_WIN) |
| `SCALP_MOM_TIME_END_HM` | `text` | NULL | NULL | 스캘핑: MOM 매수종료 HHMM (SCALP_MOM_TIME_END_HM) |
| `SCALP_MAX_DAILY` | `text` | NULL | NULL | 스캘핑: 일일매수횟수상한 (SCALP_MAX_DAILY) |
| `SCALP_MAX_STOCKS` | `text` | NULL | NULL | 스캘핑: 동시보유상한 (SCALP_MAX_STOCKS) |
| `SCALP_TP_MAX_PCT` | `text` | NULL | NULL | 스캘핑: TP 최대 % (SCALP_TP_MAX_PCT) |
| `SCALP_SHOULDER_MIN_HIGH_PCT` | `text` | NULL | NULL | 스캘핑: 어깨무장고점 % (SCALP_SHOULDER_MIN_HIGH_PCT) |
| `SCALP_SHOULDER_CUT_PCT` | `text` | NULL | NULL | 스캘핑: 어깨컷 % (SCALP_SHOULDER_CUT_PCT) |
| `SCALP_TOTAL_BUDGET_KRW` | `text` | NULL | NULL | 스캘핑: 총운용한도 원 (SCALP_TOTAL_BUDGET_KRW) |
| `STRATEGY_SCALP_ENABLED` | `text` | NULL | NULL | 스캘핑 ON/OFF. 다음루프 신규매수중단(보유청산유지). WS구독해제 안함. 기동시OFF→켜려면재시작 |
| `SCALP_DAILY_PROFIT_TARGET_ENABLED` | `text` | NULL | NULL | 스캘핑: 일일익절 목표 ON/OFF (SCALP_DAILY_PROFIT_TARGET_ENABLED) |
| `SCALP_DAILY_PROFIT_TARGET_KRW` | `text` | NULL | NULL | 스캘핑: 일일익절 목표 원 (SCALP_DAILY_PROFIT_TARGET_KRW) |
| `SCALP_DAILY_PROFIT_TARGET_PCT` | `text` | NULL | NULL | 스캘핑: 일일익절 목표 % (SCALP_DAILY_PROFIT_TARGET_PCT) |
| `SCALP_DAILY_PROFIT_HALT_NEW_BUYS` | `text` | NULL | NULL | 스캘핑: 일일익절 중단 NEW BUYS (SCALP_DAILY_PROFIT_HALT_NEW_BUYS) |
| `SCALP_DAILY_PROFIT_MODE` | `text` | NULL | NULL | 스캘핑: 일일익절 모드 (SCALP_DAILY_PROFIT_MODE) |
| `SCALP_DAILY_PROFIT_TRAIL_TIERS` | `text` | NULL | NULL | 스캘핑: 일일익절 트레일 다단 (SCALP_DAILY_PROFIT_TRAIL_TIERS) |
| `SCALP_DAILY_PROFIT_TRAIL_DROP_PCT` | `text` | NULL | NULL | 스캘핑: 일일익절 트레일 되돌림/하락 % (SCALP_DAILY_PROFIT_TRAIL_DROP_PCT) |
| `SCALP_DAILY_PROFIT_TRAIL_ARM_KRW` | `text` | NULL | NULL | 스캘핑: 일일익절 트레일무장 원 (SCALP_DAILY_PROFIT_TRAIL_ARM_KRW) |
| `SCALP_DAILY_PROFIT_TRAIL_ARM_PCT` | `text` | NULL | NULL | 스캘핑: 일일익절 트레일무장 % (SCALP_DAILY_PROFIT_TRAIL_ARM_PCT) |
| `SCALP_RSI_PERIOD` | `text` | NULL | NULL | 스캘핑: RSI 기간 (SCALP_RSI_PERIOD) |
| `SCALP_GRID_TRIGGER_RSI_OVERSOLD` | `text` | NULL | NULL | 스캘핑: GRID TRIGGER RSI과매도 (SCALP_GRID_TRIGGER_RSI_OVERSOLD) |
| `SCALP_GRID_TRIGGER_DROP_RATE` | `text` | NULL | NULL | 스캘핑: GRID TRIGGER 되돌림/하락 RATE (SCALP_GRID_TRIGGER_DROP_RATE) |
| `SCALP_GRID_TRIGGER_HIGH_CHASE_THR` | `text` | NULL | NULL | 스캘핑: GRID TRIGGER 고점추격 THR (SCALP_GRID_TRIGGER_HIGH_CHASE_THR) |
| `SCALP_GRID_TRIGGER_VOL_MULT` | `text` | NULL | NULL | 스캘핑: GRID TRIGGER 거래량배수 (SCALP_GRID_TRIGGER_VOL_MULT) |
| `SCALP_GRID_TRIGGER_REQUIRE_REVERSAL` | `text` | NULL | NULL | 스캘핑: GRID TRIGGER REQUIRE REVERSAL (SCALP_GRID_TRIGGER_REQUIRE_REVERSAL) |
| `SCALP_GRID_EXIT_SL_PCT` | `text` | NULL | NULL | 스캘핑: GRID EXIT SL % (SCALP_GRID_EXIT_SL_PCT) |
| `SCALP_GRID_EXIT_TP_PCT` | `text` | NULL | NULL | 스캘핑: GRID EXIT TP % (SCALP_GRID_EXIT_TP_PCT) |
| `SCALP_GRID_EXIT_TP_MAX_PCT` | `text` | NULL | NULL | 스캘핑: GRID EXIT TP 최대 % (SCALP_GRID_EXIT_TP_MAX_PCT) |
| `SCALP_GRID_EXIT_SHOULDER_MIN_HIGH_PCT` | `text` | NULL | NULL | 스캘핑: GRID EXIT 어깨무장고점 % (SCALP_GRID_EXIT_SHOULDER_MIN_HIGH_PCT) |
| `SCALP_GRID_EXIT_SHOULDER_CUT_PCT` | `text` | NULL | NULL | 스캘핑: GRID EXIT 어깨컷 % (SCALP_GRID_EXIT_SHOULDER_CUT_PCT) |
| `SCALP_GRID_EXIT_MIN_HOLD_SEC` | `text` | NULL | NULL | 스캘핑: GRID EXIT 최소보유 초 (SCALP_GRID_EXIT_MIN_HOLD_SEC) |
| `SCALP_SCORE_MDD_FLOOR` | `text` | NULL | NULL | 스캘핑: SCORE MDD FLOOR (SCALP_SCORE_MDD_FLOOR) |
| `CONDITION_SCALP_KIWOOM_SEQ` | `text` | NULL | NULL | 스캘핑: CONDITION SCALP KIWOOM SEQ (CONDITION_SCALP_KIWOOM_SEQ) |
| `CONDITION_SCALP_KIWOOM_NAME` | `text` | NULL | NULL | 스캘핑: CONDITION SCALP KIWOOM NAME (CONDITION_SCALP_KIWOOM_NAME) |
| `SCALP_SKIP_HTS_SCAN_DUPES` | `text` | NULL | NULL | 스캘핑: HTS스캔중복스킵 (SCALP_SKIP_HTS_SCAN_DUPES) |
| `SCALP_GRID_SKIP_HTS_SCAN_DUPES` | `text` | NULL | NULL | 스캘핑: GRID HTS스캔중복스킵 (SCALP_GRID_SKIP_HTS_SCAN_DUPES) |
| `SCALP_BACKTEST_USE_TICK_EXIT` | `text` | NULL | NULL | 스캘핑 틱 청산 · ON=ws_ticks 시간순 청산(실매 폴링 정합) · OFF=OHLC intrabar |
| `SCALP_BACKTEST_USE_TICK_ENTRY` | `text` | NULL | NULL | 스캘핑 틱 진입 · ON=예약 체결 시 해당 분 첫 틱가 · OFF=분봉 시가 |
| `SCALP_BACKTEST_TICK_FALLBACK_OHLC` | `text` | NULL | NULL | ⚠ 스캘핑 OHLC 폴백 (정합위험·금지) · 절대금지 — 틱 청산 ON 시 엔진 무시 |
| `SCALP_BACKTEST_POLL_MS` | `text` | NULL | NULL | 스캘핑 틱청산 폴링(ms) · 실매 STRATEGY_LOOP_SLEEP≈0.1초 정합 · 하한 50ms |
| `SCALP_BACKTEST_SELL_SLIP_PCT` | `text` | NULL | NULL | 스캘핑: BACKTEST SELL SLIP % (SCALP_BACKTEST_SELL_SLIP_PCT) |
| `SCALP_MIN_HOLD_SEC` | `text` | NULL | NULL | 스캘핑: 최소보유 초 (SCALP_MIN_HOLD_SEC) |
| `SCALP_ORDERBOOK_FILTER_ENABLED` | `text` | NULL | NULL | 스캘핑 호가필터 ON · ON=스프레드·잔량비·얇은호가·매도벽으로 매수 차단 · OFF=저장만 |
| `SCALP_ORDERBOOK_MAX_SPREAD_PCT` | `text` | NULL | NULL | 스캘핑 스프레드상한(%) · 0.45=0.45% · 그리드 max_spread_pct 앵커 |
| `SCALP_ORDERBOOK_ENTRY_BID_LEVELS` | `text` | NULL | NULL | 스캘핑 호가단계(N호가) |
| `SCALP_ORDERBOOK_ENTRY_BID_DEPTH_MULT` | `text` | NULL | NULL | 스캘핑 매수호가깊이 배수 · 얇은호가 탈락 · 필요수량×N |
| `SCALP_ORDERBOOK_ENTRY_ASK_MAX_MULT` | `text` | NULL | NULL | 스캘핑 매도벽 허용배수 · 필요수량×N · 그리드 ask_max_mult |
| `SCALP_ORDERBOOK_MIN_BID_ASK_RATIO` | `text` | NULL | NULL | 스캘핑 매수/매도잔량비 하한 · 그리드 min_bid_ask_ratio |
| `SCALP_BACKTEST_CANDLE_WARMUP_BARS` | `text` | NULL | NULL | 스캘핑: BACKTEST CANDLE WARMUP 봉수 (SCALP_BACKTEST_CANDLE_WARMUP_BARS) |
| `SCALP_UNIVERSE_EXIT_DEBOUNCE_SEC` | `text` | NULL | NULL | 스캘핑: 유니버스 EXIT DEBOUNCE 초 (SCALP_UNIVERSE_EXIT_DEBOUNCE_SEC) |
| `SCALP_EOD_ENABLED` | `text` | NULL | NULL | EOD 당일청산 사용 · ON=설정 시각 이후 보유 전량 장마감청산 · OFF=익절·손절·어깨만 |
| `SCALP_EOD_HM` | `text` | NULL | NULL | EOD 시각 (HH:MM) · 실매 기존 15:25 · 정규장 15:30 마감 직전 순차매도 |
| `SCALP_DAILY_PROFIT_RISK_BUDGET_ENABLED` | `text` | NULL | NULL | 스캘핑: 일일익절 RISK 한도 ON/OFF (SCALP_DAILY_PROFIT_RISK_BUDGET_ENABLED) |
| `SCALP_DAILY_PROFIT_RISK_BUDGET_COOLDOWN_SEC` | `text` | NULL | NULL | 스캘핑: 일일익절 RISK 한도 쿨다운 초 (SCALP_DAILY_PROFIT_RISK_BUDGET_COOLDOWN_SEC) |
| `SCALP_TICK_SELL_ENABLED` | `text` | NULL | NULL | 스캘핑: 틱매도 ON/OFF (SCALP_TICK_SELL_ENABLED) |
| `SCALP_LIVE_ALIGN_USE_FORMING_BAR` | `text` | NULL | NULL | 스캘핑: LIVE ALIGN 사용_ FORMING BAR (SCALP_LIVE_ALIGN_USE_FORMING_BAR) |
| `CONDITION_SCALP_LS_NAME` | `text` | NULL | NULL | 스캘핑: CONDITION SCALP LS NAME (CONDITION_SCALP_LS_NAME) |
| `SCALP_LIVE_UNIVERSE_HISTORY_SOURCE` | `text` | NULL | NULL | 스캘핑: LIVE 유니버스 HISTORY SOURCE (SCALP_LIVE_UNIVERSE_HISTORY_SOURCE) |
| `SCALP_CANDLE_GAP_FORCE_SEC` | `text` | NULL | NULL | 스캘핑: CANDLE GAP FORCE 초 (SCALP_CANDLE_GAP_FORCE_SEC) |
| `SCALP_CANDLE_SHORT_LOG_SEC` | `text` | NULL | NULL | 스캘핑: CANDLE SHORT LOG 초 (SCALP_CANDLE_SHORT_LOG_SEC) |
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `config_scalp` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`created_at` varchar(30) NOT NULL,
`SCALP_ATR_UP_MULT` text DEFAULT NULL,
`SCALP_ATR_DOWN_MULT` text DEFAULT NULL,
`SCALP_ATR_DROP_MULT` text DEFAULT NULL,
`SCALP_RSI_OVERSOLD` text DEFAULT NULL,
`SCALP_RSI_OVERBOUGHT` text DEFAULT NULL,
`SCALP_CANDLE_TIMEFRAME` text DEFAULT NULL,
`SCALP_MARKET_OPEN_WAIT_MIN` text DEFAULT NULL,
`SCALP_GAP_FILL_LIMIT` text DEFAULT NULL,
`SCALP_MIN_VOLUME` text DEFAULT NULL,
`KIS_SCALP_MM_CHANNEL` text DEFAULT NULL,
`SCALP_CANDLE_KEEP_DAYS` text DEFAULT NULL,
`SCALP_STOP_LOSS_PCT` text DEFAULT NULL,
`SCALP_TAKE_PROFIT_PCT` text DEFAULT NULL,
`SCALP_MIN_DROP_RATE` text DEFAULT NULL,
`SCALP_GAP_RETRY_SEC` text DEFAULT NULL,
`SCALP_REQUIRE_REVERSAL_CANDLE` text DEFAULT NULL,
`SCALP_COOLDOWN_SEC` text DEFAULT NULL,
`SCALP_TRAIL_TRIGGER_PCT` text DEFAULT NULL,
`SCALP_MIN_PROFIT_PCT` text DEFAULT NULL,
`SCALP_HIGH_PRICE_CHASE_THRESHOLD` text DEFAULT NULL,
`SCALP_MAX_DAILY_CHANGE_PCT` text DEFAULT NULL,
`SCALP_MIN_PRICE` text DEFAULT NULL,
`SCALP_MAX_LOSS_PER_TRADE_KRW` text DEFAULT NULL,
`SCALP_MIN_DROP_PCT_FOR_LOSS_CUT` text DEFAULT NULL,
`SCALP_USE_DEFENSE_FILTERS` text DEFAULT NULL,
`SCALP_USE_MACD_CROSS` text DEFAULT NULL,
`SCALP_MACD_FAST` text DEFAULT NULL,
`SCALP_MACD_SLOW` text DEFAULT NULL,
`SCALP_MACD_SIGNAL` text DEFAULT NULL,
`SCALP_STOCH_K_PERIOD` text DEFAULT NULL,
`SCALP_STOCH_D_PERIOD` text DEFAULT NULL,
`SCALP_STOCH_SLOW` text DEFAULT NULL,
`SCALP_LIVE_BACKTEST_ALIGN` text DEFAULT NULL,
`SCALP_LIVE_SIGNAL_LOOKBACK_BARS` text DEFAULT NULL,
`SCALP_UNIVERSE_SOURCE` text DEFAULT NULL,
`RANK_SCALP_SORT` text DEFAULT NULL,
`RANK_SCALP_LIMIT` text DEFAULT NULL,
`CONDITION_SCALP_NAME` text DEFAULT NULL,
`CONDITION_SCALP_SEQ` text DEFAULT NULL,
`SCALP_MAX_BUY_AMOUNT` text DEFAULT NULL,
`SCALP_CAND_LIMIT` text DEFAULT NULL,
`SCALP_TIME_START` text DEFAULT NULL,
`SCALP_TIME_END` text DEFAULT NULL,
`SCALP_MODE` text DEFAULT NULL,
`SCALP_MOM_RSI_MIN` text DEFAULT NULL,
`SCALP_MOM_RSI_MAX` text DEFAULT NULL,
`SCALP_MOM_VOL_MULT` text DEFAULT NULL,
`SCALP_MOM_VOL_WIN` text DEFAULT NULL,
`SCALP_MOM_TIME_END_HM` text DEFAULT NULL,
`SCALP_MAX_DAILY` text DEFAULT NULL,
`SCALP_MAX_STOCKS` text DEFAULT NULL,
`SCALP_TP_MAX_PCT` text DEFAULT NULL,
`SCALP_SHOULDER_MIN_HIGH_PCT` text DEFAULT NULL,
`SCALP_SHOULDER_CUT_PCT` text DEFAULT NULL,
`SCALP_TOTAL_BUDGET_KRW` text DEFAULT NULL,
`STRATEGY_SCALP_ENABLED` text DEFAULT NULL,
`SCALP_DAILY_PROFIT_TARGET_ENABLED` text DEFAULT NULL,
`SCALP_DAILY_PROFIT_TARGET_KRW` text DEFAULT NULL,
`SCALP_DAILY_PROFIT_TARGET_PCT` text DEFAULT NULL,
`SCALP_DAILY_PROFIT_HALT_NEW_BUYS` text DEFAULT NULL,
`SCALP_DAILY_PROFIT_MODE` text DEFAULT NULL,
`SCALP_DAILY_PROFIT_TRAIL_TIERS` text DEFAULT NULL,
`SCALP_DAILY_PROFIT_TRAIL_DROP_PCT` text DEFAULT NULL,
`SCALP_DAILY_PROFIT_TRAIL_ARM_KRW` text DEFAULT NULL,
`SCALP_DAILY_PROFIT_TRAIL_ARM_PCT` text DEFAULT NULL,
`SCALP_RSI_PERIOD` text DEFAULT NULL,
`SCALP_GRID_TRIGGER_RSI_OVERSOLD` text DEFAULT NULL,
`SCALP_GRID_TRIGGER_DROP_RATE` text DEFAULT NULL,
`SCALP_GRID_TRIGGER_HIGH_CHASE_THR` text DEFAULT NULL,
`SCALP_GRID_TRIGGER_VOL_MULT` text DEFAULT NULL,
`SCALP_GRID_TRIGGER_REQUIRE_REVERSAL` text DEFAULT NULL,
`SCALP_GRID_EXIT_SL_PCT` text DEFAULT NULL,
`SCALP_GRID_EXIT_TP_PCT` text DEFAULT NULL,
`SCALP_GRID_EXIT_TP_MAX_PCT` text DEFAULT NULL,
`SCALP_GRID_EXIT_SHOULDER_MIN_HIGH_PCT` text DEFAULT NULL,
`SCALP_GRID_EXIT_SHOULDER_CUT_PCT` text DEFAULT NULL,
`SCALP_GRID_EXIT_MIN_HOLD_SEC` text DEFAULT NULL,
`SCALP_SCORE_MDD_FLOOR` text DEFAULT NULL,
`CONDITION_SCALP_KIWOOM_SEQ` text DEFAULT NULL,
`CONDITION_SCALP_KIWOOM_NAME` text DEFAULT NULL,
`SCALP_SKIP_HTS_SCAN_DUPES` text DEFAULT NULL,
`SCALP_GRID_SKIP_HTS_SCAN_DUPES` text DEFAULT NULL,
`SCALP_BACKTEST_USE_TICK_EXIT` text DEFAULT NULL,
`SCALP_BACKTEST_USE_TICK_ENTRY` text DEFAULT NULL,
`SCALP_BACKTEST_TICK_FALLBACK_OHLC` text DEFAULT NULL,
`SCALP_BACKTEST_POLL_MS` text DEFAULT NULL,
`SCALP_BACKTEST_SELL_SLIP_PCT` text DEFAULT NULL,
`SCALP_MIN_HOLD_SEC` text DEFAULT NULL,
`SCALP_ORDERBOOK_FILTER_ENABLED` text DEFAULT NULL,
`SCALP_ORDERBOOK_MAX_SPREAD_PCT` text DEFAULT NULL,
`SCALP_ORDERBOOK_ENTRY_BID_LEVELS` text DEFAULT NULL,
`SCALP_ORDERBOOK_ENTRY_BID_DEPTH_MULT` text DEFAULT NULL,
`SCALP_ORDERBOOK_ENTRY_ASK_MAX_MULT` text DEFAULT NULL,
`SCALP_ORDERBOOK_MIN_BID_ASK_RATIO` text DEFAULT NULL,
`SCALP_BACKTEST_CANDLE_WARMUP_BARS` text DEFAULT NULL,
`SCALP_UNIVERSE_EXIT_DEBOUNCE_SEC` text DEFAULT NULL,
`SCALP_EOD_ENABLED` text DEFAULT NULL,
`SCALP_EOD_HM` text DEFAULT NULL,
`SCALP_DAILY_PROFIT_RISK_BUDGET_ENABLED` text DEFAULT NULL,
`SCALP_DAILY_PROFIT_RISK_BUDGET_COOLDOWN_SEC` text DEFAULT NULL,
`SCALP_TICK_SELL_ENABLED` text DEFAULT NULL,
`SCALP_LIVE_ALIGN_USE_FORMING_BAR` text DEFAULT NULL,
`CONDITION_SCALP_LS_NAME` text DEFAULT NULL,
`SCALP_LIVE_UNIVERSE_HISTORY_SOURCE` text DEFAULT NULL,
`SCALP_CANDLE_GAP_FORCE_SEC` text DEFAULT NULL,
`SCALP_CANDLE_SHORT_LOG_SEC` text DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=391 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
#### `config_short`
**PK**: `id` | AUTO_INCREMENT=388
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `int(11)` | NOT NULL | | PK · AUTO_INCREMENT |
| `created_at` | `varchar(30)` | NOT NULL | | 설정행 생성시각 |
| `STOP_LOSS_PCT` | `text` | NULL | NULL | 꼬리잡기: 손절 % (STOP_LOSS_PCT) |
| `SHOULDER_CUT_PCT` | `text` | NULL | NULL | 꼬리잡기: 어깨컷 % (SHOULDER_CUT_PCT) |
| `SHOULDER_MIN_HIGH_PCT` | `text` | NULL | NULL | 꼬리잡기: 어깨무장고점 % (SHOULDER_MIN_HIGH_PCT) |
| `SHOULDER_MIN_NET_PCT` | `text` | NULL | NULL | 꼬리잡기: 어깨 최소 NET % (SHOULDER_MIN_NET_PCT) |
| `STOP_ATR_MULTIPLIER_TAIL` | `text` | NULL | NULL | 꼬리잡기: STOP ATR 배수 IPLIER TAIL (STOP_ATR_MULTIPLIER_TAIL) |
| `TARGET_ATR_MULTIPLIER_TAIL` | `text` | NULL | NULL | 꼬리잡기: 목표 ATR 배수 IPLIER TAIL (TARGET_ATR_MULTIPLIER_TAIL) |
| `TAIL_ATR_SL_MIN_PCT` | `text` | NULL | NULL | 꼬리잡기: ATR손절 최소 % (TAIL_ATR_SL_MIN_PCT) |
| `TAIL_ATR_SL_MAX_PCT` | `text` | NULL | NULL | 꼬리잡기: ATR손절 최대 % (TAIL_ATR_SL_MAX_PCT) |
| `TAIL_ATR_TP_MIN_PCT` | `text` | NULL | NULL | 꼬리잡기: ATR익절 최소 % (TAIL_ATR_TP_MIN_PCT) |
| `TAIL_ATR_TP_MAX_PCT` | `text` | NULL | NULL | 꼬리잡기: ATR익절 최대 % (TAIL_ATR_TP_MAX_PCT) |
| `MIN_CANDLE_LEN_TAIL` | `text` | NULL | NULL | 꼬리잡기: 최소 CANDLE LEN TAIL (MIN_CANDLE_LEN_TAIL) |
| `MIN_PRICE_TAIL` | `text` | NULL | NULL | 꼬리잡기: 최소가격 TAIL (MIN_PRICE_TAIL) |
| `TAIL_SCORE_BASE` | `text` | NULL | NULL | 꼬리잡기: SCORE BASE (TAIL_SCORE_BASE) |
| `TAIL_SCORE_RATIO_MULT` | `text` | NULL | NULL | 꼬리잡기: SCORE RATIO 배수 (TAIL_SCORE_RATIO_MULT) |
| `TAIL_RATIO_MIN` | `text` | NULL | NULL | 꼬리잡기: RATIO 최소 (TAIL_RATIO_MIN) |
| `TAIL_PCT_MIN` | `text` | NULL | NULL | 꼬리잡기: % 최소 (TAIL_PCT_MIN) |
| `TAIL_SKIP_HTS_SCAN_DUPES` | `text` | NULL | NULL | 꼬리잡기: HTS스캔중복스킵 (TAIL_SKIP_HTS_SCAN_DUPES) |
| `TAIL_USE_INTRADAY_DROP` | `text` | NULL | NULL | 꼬리잡기: 사용_ INTRADAY 되돌림/하락 (TAIL_USE_INTRADAY_DROP) |
| `TAIL_USE_MA20_FILTER` | `text` | NULL | NULL | 꼬리잡기: 사용_ MA20 필터 (TAIL_USE_MA20_FILTER) |
| `TAIL_USE_RSI_FILTER` | `text` | NULL | NULL | 꼬리잡기: 사용_ RSI 필터 (TAIL_USE_RSI_FILTER) |
| `TAIL_USE_DAILY_RANGE_FILTER` | `text` | NULL | NULL | 꼬리잡기: 사용_ DAILY RANGE 필터 (TAIL_USE_DAILY_RANGE_FILTER) |
| `TAIL_USE_HIGH_CHASE_FILTER` | `text` | NULL | NULL | 꼬리잡기: 사용_ 고점추격 필터 (TAIL_USE_HIGH_CHASE_FILTER) |
| `TAIL_BAR_CHG_MIN_PCT` | `text` | NULL | NULL | 꼬리잡기: BAR CHG 최소 % (TAIL_BAR_CHG_MIN_PCT) |
| `TAIL_BAR_CHG_MAX_PCT` | `text` | NULL | NULL | 꼬리잡기: BAR CHG 최대 % (TAIL_BAR_CHG_MAX_PCT) |
| `TAIL_RSI_THRESHOLD` | `text` | NULL | NULL | 꼬리잡기: RSI THRESHOLD (TAIL_RSI_THRESHOLD) |
| `MIN_DROP_PCT_FOR_LOSS_CUT` | `text` | NULL | NULL | 꼬리잡기: 최소 되돌림/하락 % FOR LOSS CUT (MIN_DROP_PCT_FOR_LOSS_CUT) |
| `TAKE_PROFIT_PCT` | `text` | NULL | NULL | 꼬리잡기: 익절 % (TAKE_PROFIT_PCT) |
| `MIN_DROP_RATE` | `text` | NULL | NULL | 꼬리잡기: 최소 되돌림/하락 RATE (MIN_DROP_RATE) |
| `MIN_RECOVERY_RATIO_SHORT` | `text` | NULL | NULL | 꼬리잡기: 최소 RECOVERY RATIO SHORT (MIN_RECOVERY_RATIO_SHORT) |
| `KIS_SHORT_MM_CHANNEL` | `text` | NULL | NULL | 꼬리잡기: KIS SHORT MM CHANNEL (KIS_SHORT_MM_CHANNEL) |
| `SHORT_GAP_FILL_LIMIT` | `text` | NULL | NULL | 꼬리잡기: GAP FILL LIMIT (SHORT_GAP_FILL_LIMIT) |
| `MAX_RECOVERY_RATIO_3M` | `text` | NULL | NULL | 꼬리잡기: 최대 RECOVERY RATIO 3M (MAX_RECOVERY_RATIO_3M) |
| `TAIL_CANDLE_LOOKBACK` | `text` | NULL | NULL | 꼬리잡기: CANDLE LOOKBACK (TAIL_CANDLE_LOOKBACK) |
| `SHORT_LIVE_BACKTEST_ALIGN` | `text` | NULL | NULL | 꼬리잡기: LIVE BACKTEST ALIGN (SHORT_LIVE_BACKTEST_ALIGN) |
| `SHORT_LIVE_SIGNAL_LOOKBACK_BARS` | `text` | NULL | NULL | 꼬리잡기: LIVE SIGNAL LOOKBACK 봉수 (SHORT_LIVE_SIGNAL_LOOKBACK_BARS) |
| `SHORT_UNIVERSE_SOURCE` | `text` | NULL | NULL | 꼬리잡기 유니버스 · ls_condition=LS 동명 AFR · 시세는 키움/한투 유지 · 매니저 최초 기동은 봇 재시작 필요할 수 있음 · 키움으로 자동 폴백 안 함 |
| `RANK_SHORT_SORT` | `text` | NULL | NULL | 꼬리잡기: RANK SHORT SORT (RANK_SHORT_SORT) |
| `RANK_SHORT_LIMIT` | `text` | NULL | NULL | 꼬리잡기: RANK SHORT LIMIT (RANK_SHORT_LIMIT) |
| `CONDITION_SHORT_NAME` | `text` | NULL | NULL | 꼬리잡기: CONDITION SHORT NAME (CONDITION_SHORT_NAME) |
| `CONDITION_SHORT_SEQ` | `text` | NULL | NULL | 꼬리잡기: CONDITION SHORT SEQ (CONDITION_SHORT_SEQ) |
| `SHORT_MAX_BUY_AMOUNT` | `text` | NULL | NULL | 꼬리잡기: 1회최대매수금액 (SHORT_MAX_BUY_AMOUNT) |
| `TAIL_MAX_BUY_AMOUNT` | `text` | NULL | NULL | 꼬리잡기: 1회최대매수금액 (TAIL_MAX_BUY_AMOUNT) |
| `SHORT_CAND_LIMIT` | `text` | NULL | NULL | 꼬리잡기 후보 상한 · 0=무제한 · 조건검색/랭킹이 N개 줘도 상위 N개만 매수체크·WS구독 · 전 전략 합산이 키움 WS 100종 한도를 넘지 않게 조절 |
| `SHORT_TIME_START` | `text` | NULL | NULL | 꼬리잡기: 매수시작 (SHORT_TIME_START) |
| `SHORT_TIME_END` | `text` | NULL | NULL | 꼬리잡기: 매수종료 (SHORT_TIME_END) |
| `SHORT_MAX_STOCKS` | `text` | NULL | NULL | 꼬리잡기: 동시보유상한 (SHORT_MAX_STOCKS) |
| `SELL_USE_ORDERBOOK_ON_PROFIT` | `text` | NULL | NULL | 꼬리잡기: SELL 사용_ 호가 ON PROFIT (SELL_USE_ORDERBOOK_ON_PROFIT) |
| `SELL_ORDERBOOK_BID_LEVELS` | `text` | NULL | NULL | 꼬리잡기: SELL 호가 BID LEVELS (SELL_ORDERBOOK_BID_LEVELS) |
| `SELL_ORDERBOOK_DEPTH_MULT` | `text` | NULL | NULL | 꼬리잡기: SELL 호가 DEPTH 배수 (SELL_ORDERBOOK_DEPTH_MULT) |
| `SHORT_TOTAL_BUDGET_KRW` | `text` | NULL | NULL | 꼬리잡기: 총운용한도 원 (SHORT_TOTAL_BUDGET_KRW) |
| `STRATEGY_SHORT_ENABLED` | `text` | NULL | NULL | 꼬리잡기 ON/OFF. 다음루프 신규매수중단(보유청산유지). WS구독해제 안함. 기동시OFF→켜려면재시작 |
| `TAIL_MIN_DROP_RATE` | `text` | NULL | NULL | 꼬리잡기: 최소 되돌림/하락 RATE (TAIL_MIN_DROP_RATE) |
| `TAIL_MIN_RECOVERY_RATIO` | `text` | NULL | NULL | 꼬리잡기: 최소 RECOVERY RATIO (TAIL_MIN_RECOVERY_RATIO) |
| `TAIL_MAX_RECOVERY_3M` | `text` | NULL | NULL | 꼬리잡기: 최대 RECOVERY 3M (TAIL_MAX_RECOVERY_3M) |
| `TAIL_STOP_LOSS_PCT` | `text` | NULL | NULL | 꼬리잡기: 손절 % (TAIL_STOP_LOSS_PCT) |
| `TAIL_TAKE_PROFIT_PCT` | `text` | NULL | NULL | 꼬리잡기: 익절 % (TAIL_TAKE_PROFIT_PCT) |
| `TAIL_SHOULDER_MIN_HIGH_PCT` | `text` | NULL | NULL | 꼬리잡기: 어깨무장고점 % (TAIL_SHOULDER_MIN_HIGH_PCT) |
| `TAIL_SHOULDER_CUT_PCT` | `text` | NULL | NULL | 꼬리잡기: 어깨컷 % (TAIL_SHOULDER_CUT_PCT) |
| `TAIL_STOP_ATR_MULT` | `text` | NULL | NULL | 꼬리잡기: STOP ATR 배수 (TAIL_STOP_ATR_MULT) |
| `TAIL_TARGET_ATR_MULT` | `text` | NULL | NULL | 꼬리잡기: 목표 ATR 배수 (TAIL_TARGET_ATR_MULT) |
| `TAIL_MIN_PRICE` | `text` | NULL | NULL | 꼬리잡기: 최소가격 (TAIL_MIN_PRICE) |
| `TAIL_MAX_DAILY_CHG` | `text` | NULL | NULL | 꼬리잡기: 당일등락상한 (TAIL_MAX_DAILY_CHG) |
| `TAIL_MA20_MAX_ABOVE_PCT` | `text` | NULL | NULL | 꼬리잡기: MA20 최대 ABOVE % (TAIL_MA20_MAX_ABOVE_PCT) |
| `TAIL_MAX_LOSS_KRW` | `text` | NULL | NULL | 꼬리잡기: 최대 LOSS 원 (TAIL_MAX_LOSS_KRW) |
| `TAIL_MIN_DROP_FOR_LOSS_CUT` | `text` | NULL | NULL | 꼬리잡기: 최소 되돌림/하락 FOR LOSS CUT (TAIL_MIN_DROP_FOR_LOSS_CUT) |
| `TAIL_RSI_PERIOD` | `text` | NULL | NULL | 꼬리잡기: RSI 기간 (TAIL_RSI_PERIOD) |
| `TAIL_COOLDOWN_SEC` | `text` | NULL | NULL | 꼬리잡기: 쿨다운 초 (TAIL_COOLDOWN_SEC) |
| `TAIL_MAX_DAILY` | `text` | NULL | NULL | 꼬리잡기: 일일매수횟수상한 (TAIL_MAX_DAILY) |
| `TAIL_HIGH_CHASE_THR` | `text` | NULL | NULL | 꼬리잡기: 고점추격 THR (TAIL_HIGH_CHASE_THR) |
| `TAIL_TIME_START` | `text` | NULL | NULL | 꼬리잡기: 매수시작 (TAIL_TIME_START) |
| `TAIL_TIME_END` | `text` | NULL | NULL | 꼬리잡기: 매수종료 (TAIL_TIME_END) |
| `TAIL_MAX_STOCKS` | `text` | NULL | NULL | 꼬리잡기 동시 종목 |
| `TAIL_TOTAL_BUDGET_KRW` | `text` | NULL | NULL | 꼬리잡기 총 한도(원) |
| `TAIL_SLOT_MONEY` | `text` | NULL | NULL | 꼬리잡기 슬롯(원) |
| `TAIL_ENTRY_MODE` | `text` | NULL | NULL | 꼬리잡기: ENTRY 모드 (TAIL_ENTRY_MODE) |
| `TAIL_LIMIT_ATR_MULT` | `text` | NULL | NULL | 꼬리잡기: LIMIT ATR 배수 (TAIL_LIMIT_ATR_MULT) |
| `TAIL_LIMIT_ANCHOR` | `text` | NULL | NULL | 꼬리잡기: LIMIT ANCHOR (TAIL_LIMIT_ANCHOR) |
| `TAIL_LIMIT_VALID_BARS` | `text` | NULL | NULL | 꼬리잡기: LIMIT VALID 봉수 (TAIL_LIMIT_VALID_BARS) |
| `TAIL_LIMIT_FILL_SLIP_PCT` | `text` | NULL | NULL | 꼬리잡기: LIMIT FILL SLIP % (TAIL_LIMIT_FILL_SLIP_PCT) |
| `TAIL_MIN_INVEST_RATIO_OF_SLOT` | `text` | NULL | NULL | 꼬리잡기: 최소 INVEST RATIO OF SLOT (TAIL_MIN_INVEST_RATIO_OF_SLOT) |
| `TAIL_PARAM_SEARCH_ENTRY_MODE` | `text` | NULL | NULL | 꼬리잡기: PARAM SEARCH ENTRY 모드 (TAIL_PARAM_SEARCH_ENTRY_MODE) |
| `TAIL_GRID_FAST_MAX_DAILY_CHG` | `text` | NULL | NULL | 꼬리잡기: GRID FAST 당일등락상한 (TAIL_GRID_FAST_MAX_DAILY_CHG) |
| `TAIL_GRID_COARSE_MAX_DAILY_CHG` | `text` | NULL | NULL | 꼬리잡기: GRID COARSE 당일등락상한 (TAIL_GRID_COARSE_MAX_DAILY_CHG) |
| `TAIL_GRID_FAST_LIMIT_ATR_MULT` | `text` | NULL | NULL | 꼬리잡기: GRID FAST LIMIT ATR 배수 (TAIL_GRID_FAST_LIMIT_ATR_MULT) |
| `TAIL_GRID_COARSE_LIMIT_ATR_MULT` | `text` | NULL | NULL | 꼬리잡기: GRID COARSE LIMIT ATR 배수 (TAIL_GRID_COARSE_LIMIT_ATR_MULT) |
| `TAIL_RATCHET_TIERS` | `text` | NULL | NULL | 꼬리잡기: 다단래칫 (TAIL_RATCHET_TIERS) |
| `TAIL_MAX_HOLD_BARS` | `text` | NULL | NULL | 꼬리잡기: 최대보유봉 (TAIL_MAX_HOLD_BARS) |
| `TAIL_BACKTEST_USE_TICK_DB` | `text` | NULL | NULL | 꼬리잡기: BACKTEST 사용_ TICK DB (TAIL_BACKTEST_USE_TICK_DB) |
| `TAIL_BACKTEST_TICK_FALLBACK_OHLC` | `text` | NULL | NULL | ⚠ 꼬리 OHLC 폴백 (정합위험·금지) · 절대금지: 틱 모드에서 OHLC로 체결·고점 변조. 엔진은 틱 청산 ON 시 무시. Optuna/파람 강제 OFF |
| `TAIL_TRAIL_PCT` | `text` | NULL | NULL | 꼬리잡기: 트레일 % (TAIL_TRAIL_PCT) |
| `TAIL_TRAIL_ARM_PCT` | `text` | NULL | NULL | 꼬리잡기: 트레일무장 % (TAIL_TRAIL_ARM_PCT) |
| `TAIL_PATTERN_HAMMER` | `text` | NULL | NULL | 꼬리잡기: 패턴 HAMMER (TAIL_PATTERN_HAMMER) |
| `TAIL_PATTERN_PIN` | `text` | NULL | NULL | 꼬리잡기: 패턴 PIN (TAIL_PATTERN_PIN) |
| `TAIL_PATTERN_ENGULFING` | `text` | NULL | NULL | 꼬리잡기: 패턴 ENGULFING (TAIL_PATTERN_ENGULFING) |
| `TAIL_PATTERN_PIERCING` | `text` | NULL | NULL | 꼬리잡기: 패턴 PIERCING (TAIL_PATTERN_PIERCING) |
| `TAIL_PATTERN_HARAMI` | `text` | NULL | NULL | 꼬리잡기: 패턴 HARAMI (TAIL_PATTERN_HARAMI) |
| `TAIL_PATTERN_DOJI` | `text` | NULL | NULL | 꼬리잡기: 패턴 DOJI (TAIL_PATTERN_DOJI) |
| `TAIL_PATTERN_MORNING_STAR` | `text` | NULL | NULL | 꼬리잡기: 패턴 MORNING STAR (TAIL_PATTERN_MORNING_STAR) |
| `TAIL_PIN_CLOSE_UPPER_RATIO` | `text` | NULL | NULL | 꼬리잡기: PIN CLOSE UPPER RATIO (TAIL_PIN_CLOSE_UPPER_RATIO) |
| `TAIL_PIN_MAX_UPPER_TAIL_RATIO` | `text` | NULL | NULL | 꼬리잡기: PIN 최대 UPPER TAIL RATIO (TAIL_PIN_MAX_UPPER_TAIL_RATIO) |
| `TAIL_ENGULF_MIN_BODY_RATIO` | `text` | NULL | NULL | 꼬리잡기: ENGULF 최소 BODY RATIO (TAIL_ENGULF_MIN_BODY_RATIO) |
| `TAIL_PIERCING_PENETRATE_RATIO` | `text` | NULL | NULL | 꼬리잡기: PIERCING PENETRATE RATIO (TAIL_PIERCING_PENETRATE_RATIO) |
| `TAIL_HARAMI_MAX_BODY_RATIO` | `text` | NULL | NULL | 꼬리잡기: HARAMI 최대 BODY RATIO (TAIL_HARAMI_MAX_BODY_RATIO) |
| `TAIL_DOJI_BODY_MAX_RATIO` | `text` | NULL | NULL | 꼬리잡기: DOJI BODY 최대 RATIO (TAIL_DOJI_BODY_MAX_RATIO) |
| `TAIL_MORNING_STAR_BODY_MAX_RATIO` | `text` | NULL | NULL | 꼬리잡기: MORNING STAR BODY 최대 RATIO (TAIL_MORNING_STAR_BODY_MAX_RATIO) |
| `TAIL_ORDERBOOK_FILTER_ENABLED` | `text` | NULL | NULL | 꼬리잡기 호가필터 ON · ON=스프레드·잔량비·얇은호가·매도벽으로 매수 차단 · OFF=저장만 |
| `TAIL_ORDERBOOK_MAX_SPREAD_PCT` | `text` | NULL | NULL | 꼬리잡기 스프레드상한(%) · 0.45=0.45% · 그리드 max_spread_pct 앵커 |
| `TAIL_ORDERBOOK_ENTRY_BID_LEVELS` | `text` | NULL | NULL | 꼬리잡기 호가단계(N호가) |
| `TAIL_ORDERBOOK_ENTRY_BID_DEPTH_MULT` | `text` | NULL | NULL | 꼬리잡기 매수호가깊이 배수 · 얇은호가 탈락 · 필요수량×N |
| `TAIL_ORDERBOOK_ENTRY_ASK_MAX_MULT` | `text` | NULL | NULL | 꼬리잡기 매도벽 허용배수 · 필요수량×N · 그리드 ask_max_mult |
| `TAIL_ORDERBOOK_MIN_BID_ASK_RATIO` | `text` | NULL | NULL | 꼬리잡기 매수/매도잔량비 하한 · 그리드 min_bid_ask_ratio |
| `TAIL_PROGRAM_FILTER_ENABLED` | `text` | NULL | NULL | 꼬리잡기: 프로그램매매 필터 ON/OFF (TAIL_PROGRAM_FILTER_ENABLED) |
| `TAIL_PROGRAM_MIN_NET_BUY_QTY` | `text` | NULL | NULL | 꼬리잡기: 프로그램매매 최소 NET BUY QTY (TAIL_PROGRAM_MIN_NET_BUY_QTY) |
| `TAIL_PROGRAM_MIN_NET_BUY_AMT` | `text` | NULL | NULL | 꼬리잡기: 프로그램매매 최소 NET BUY AMT (TAIL_PROGRAM_MIN_NET_BUY_AMT) |
| `TAIL_PROGRAM_MAX_SELL_BUY_QTY_RATIO` | `text` | NULL | NULL | 꼬리잡기: 프로그램매매 최대 SELL BUY QTY RATIO (TAIL_PROGRAM_MAX_SELL_BUY_QTY_RATIO) |
| `TAIL_PROGRAM_MIN_NET_DELTA_QTY` | `text` | NULL | NULL | 꼬리잡기: 프로그램매매 최소 NET DELTA QTY (TAIL_PROGRAM_MIN_NET_DELTA_QTY) |
| `TAIL_PROGRAM_SNAPSHOT_MAX_AGE_SEC` | `text` | NULL | NULL | 꼬리잡기: 프로그램매매 SNAPSHOT 최대 AGE 초 (TAIL_PROGRAM_SNAPSHOT_MAX_AGE_SEC) |
| `TAIL_BACKTEST_USE_TRIGGER_SNAPSHOT_DB` | `text` | NULL | NULL | 꼬리잡기: BACKTEST 사용_ TRIGGER SNAPSHOT DB (TAIL_BACKTEST_USE_TRIGGER_SNAPSHOT_DB) |
| `TAIL_WHIPSAW_FILTER_ENABLED` | `text` | NULL | NULL | 꼬리잡기 휩쏘 필터 |
| `TAIL_WHIPSAW_MODE` | `text` | NULL | NULL | 꼬리잡기: 휩쏘 모드 (TAIL_WHIPSAW_MODE) |
| `TAIL_WHIPSAW_SUBBAR_SEC` | `text` | NULL | NULL | 꼬리 휩쏘 미니봉(초) · 비우면 글로벌 WHIPSAW_SUBBAR_SEC · Optuna 꼬리 TPE 축 |
| `TAIL_WHIPSAW_LOOKBACK_SEC` | `text` | NULL | NULL | 꼬리 휩쏘 룩백(초) · 비우면 글로벌 WHIPSAW_LOOKBACK_SEC |
| `TAIL_WHIPSAW_DIP_PCT` | `text` | NULL | NULL | 꼬리 휩쏘 하락폭(분율) · 0.003=0.3% · 비우면 글로벌 |
| `TAIL_WHIPSAW_RECOVERY_TOL_PCT` | `text` | NULL | NULL | 꼬리 휩쏘 회복허용(분율) · 0.001=0.1% · 비우면 글로벌 |
| `SHORT_DAILY_PROFIT_TARGET_ENABLED` | `text` | NULL | NULL | 꼬리잡기 손익 감시 켜기 · OFF = 해당 전략 일일익절 비활성 (매수 차단 없음) |
| `SHORT_DAILY_PROFIT_TARGET_KRW` | `text` | NULL | NULL | 꼬리잡기 목표(원) |
| `SHORT_DAILY_PROFIT_TARGET_PCT` | `text` | NULL | NULL | 꼬리잡기 목표(%) · 퍼센트 그대로 (예: 2.5 = 2.5%) · 0=미사용 |
| `SHORT_DAILY_PROFIT_HALT_NEW_BUYS` | `text` | NULL | NULL | 꼬리잡기 신규매수 수동 중단 · 목표 무관 수동 잠금 · 비우면 마스터 상속 · OFF=정상 |
| `TAIL_BACKTEST_USE_TRIGGER_EVAL_SNAPSHOT` | `text` | NULL | NULL | 꼬리잡기: BACKTEST 사용_ TRIGGER EVAL SNAPSHOT (TAIL_BACKTEST_USE_TRIGGER_EVAL_SNAPSHOT) |
| `SHORT_DAILY_PROFIT_MODE` | `text` | NULL | NULL | 꼬리잡기 익절방식 · 비우면 마스터 상속 · fixed/trailing/both |
| `SHORT_DAILY_PROFIT_TRAIL_TIERS` | `text` | NULL | NULL | 꼬리잡기 다단 트레일 · 수익원:컷%,… · 비우면 마스터 상속 · 예: 30000:50,100000:35,300000:25 |
| `SHORT_DAILY_PROFIT_TRAIL_DROP_PCT` | `text` | NULL | NULL | 꼬리잡기 단일 트레일 되돌림(%) · 다단 비었을 때만 · 고점 대비 % · 비우면 마스터 상속 · 0=미사용 |
| `SHORT_DAILY_PROFIT_TRAIL_ARM_KRW` | `text` | NULL | NULL | 꼬리잡기 트레일 발동수익(원) · 이 이상 벌어야 트레일 감시 · 비우면 마스터 상속 |
| `SHORT_DAILY_PROFIT_TRAIL_ARM_PCT` | `text` | NULL | NULL | 꼬리잡기: 일일익절 트레일무장 % (SHORT_DAILY_PROFIT_TRAIL_ARM_PCT) |
| `CONDITION_SHORT_KIWOOM_NAME` | `text` | NULL | NULL | 꼬리잡기: CONDITION SHORT KIWOOM NAME (CONDITION_SHORT_KIWOOM_NAME) |
| `CONDITION_SHORT_KIWOOM_SEQ` | `text` | NULL | NULL | 꼬리잡기: CONDITION SHORT KIWOOM SEQ (CONDITION_SHORT_KIWOOM_SEQ) |
| `TAIL_EOD_ENABLED` | `text` | NULL | NULL | EOD 당일청산 사용 · ON=설정 시각 이후 보유 전량 장마감 청산 · OFF=익절·손절·시간컷만 |
| `TAIL_EOD_HM` | `text` | NULL | NULL | EOD 시각 (HH:MM) · 정규장 15:30 마감 기준 최소 10분 전 · 순차매도 여유 |
| `TAIL_PARAM_SEARCH_MIN_START` | `text` | NULL | NULL | 꼬리 파라서치 최소 시작일 · 조건식 변경일 이후만 탐색 (YYYY-MM-DD) · CLI --start 와 max 적용 |
| `TAIL_SYMBOL_DAILY_LOSS_LIMIT_KRW` | `text` | NULL | NULL | 꼬리잡기: SYMBOL DAILY LOSS LIMIT 원 (TAIL_SYMBOL_DAILY_LOSS_LIMIT_KRW) |
| `TAIL_SYMBOL_DAILY_LOSS_LIMIT_PCT` | `text` | NULL | NULL | 꼬리잡기: SYMBOL DAILY LOSS LIMIT % (TAIL_SYMBOL_DAILY_LOSS_LIMIT_PCT) |
| `TAIL_REENTRY_MIN_EDGE_KRW` | `text` | NULL | NULL | 꼬리잡기: REENTRY 최소 EDGE 원 (TAIL_REENTRY_MIN_EDGE_KRW) |
| `TAIL_REENTRY_REQUIRE_NONNEG` | `text` | NULL | NULL | 꼬리잡기: REENTRY REQUIRE NONNEG (TAIL_REENTRY_REQUIRE_NONNEG) |
| `TAIL_GRID_FAST_SYMBOL_LOSS_PCT` | `text` | NULL | NULL | 꼬리잡기: GRID FAST SYMBOL LOSS % (TAIL_GRID_FAST_SYMBOL_LOSS_PCT) |
| `TAIL_GRID_FAST_SYMBOL_LOSS_KRW` | `text` | NULL | NULL | 꼬리잡기: GRID FAST SYMBOL LOSS 원 (TAIL_GRID_FAST_SYMBOL_LOSS_KRW) |
| `TAIL_GRID_FAST_REENTRY_MIN_EDGE` | `text` | NULL | NULL | 꼬리잡기: GRID FAST REENTRY 최소 EDGE (TAIL_GRID_FAST_REENTRY_MIN_EDGE) |
| `TAIL_BACKTEST_USE_TICK_EXIT` | `text` | NULL | NULL | 꼬리 틱 청산 · ON=ws_ticks 시간순 청산(실매 폴링 정합) · OFF=OHLC intrabar |
| `TAIL_BACKTEST_POLL_MS` | `text` | NULL | NULL | 꼬리 틱청산 폴링(ms) · 실매 STRATEGY_LOOP_SLEEP≈0.1초 정합 · 하한 50ms |
| `TAIL_BACKTEST_SELL_SLIP_PCT` | `text` | NULL | NULL | 꼬리잡기: BACKTEST SELL SLIP % (TAIL_BACKTEST_SELL_SLIP_PCT) |
| `TAIL_BT_SYNTH_3M_FROM_1M` | `text` | NULL | NULL | 꼬리잡기: BT SYNTH 3M FROM 1M (TAIL_BT_SYNTH_3M_FROM_1M) |
| `TAIL_BACKTEST_UNIVERSE_SCAN_AT` | `text` | NULL | NULL | 꼬리잡기: BACKTEST 유니버스 SCAN AT (TAIL_BACKTEST_UNIVERSE_SCAN_AT) |
| `TAIL_BT_INCLUSION_LOOKBACK` | `text` | NULL | NULL | 꼬리잡기: BT INCLUSION LOOKBACK (TAIL_BT_INCLUSION_LOOKBACK) |
| `TAIL_VOL_MULT` | `text` | NULL | NULL | 꼬리잡기: 거래량배수 (TAIL_VOL_MULT) |
| `TAIL_VOL_WIN` | `text` | NULL | NULL | 꼬리잡기: 거래량윈도우 (TAIL_VOL_WIN) |
| `TAIL_BACKTEST_CANDLE_WARMUP_BARS` | `text` | NULL | NULL | 꼬리잡기: BACKTEST CANDLE WARMUP 봉수 (TAIL_BACKTEST_CANDLE_WARMUP_BARS) |
| `TAIL_BACKTEST_REST_WARMUP` | `text` | NULL | NULL | 꼬리잡기: BACKTEST REST WARMUP (TAIL_BACKTEST_REST_WARMUP) |
| `TAIL_BACKTEST_REST_WARMUP_BARS` | `text` | NULL | NULL | 꼬리잡기: BACKTEST REST WARMUP 봉수 (TAIL_BACKTEST_REST_WARMUP_BARS) |
| `TAIL_BACKTEST_REST_SLEEP_SEC` | `text` | NULL | NULL | 꼬리잡기: BACKTEST REST SLEEP 초 (TAIL_BACKTEST_REST_SLEEP_SEC) |
| `TAIL_BACKTEST_REST_MAX_CODES` | `text` | NULL | NULL | 꼬리잡기: BACKTEST REST 최대 CODES (TAIL_BACKTEST_REST_MAX_CODES) |
| `TAIL_VOL_SPIKE_LOOKBACK` | `text` | NULL | NULL | 꼬리잡기: 거래량 SPIKE LOOKBACK (TAIL_VOL_SPIKE_LOOKBACK) |
| `TAIL_UNIVERSE_EXIT_DEBOUNCE_SEC` | `text` | NULL | NULL | 꼬리잡기: 유니버스 EXIT DEBOUNCE 초 (TAIL_UNIVERSE_EXIT_DEBOUNCE_SEC) |
| `SHORT_DAILY_PROFIT_RISK_BUDGET_ENABLED` | `text` | NULL | NULL | 꼬리잡기 리스크버짓(B) · ON=일일익절 hit 후 보유최악손절합>cushion 이면 전량정리 · 기본 OFF · 마스터 없음 |
| `SHORT_DAILY_PROFIT_RISK_BUDGET_COOLDOWN_SEC` | `text` | NULL | NULL | 꼬리잡기 리스크버짓 쿨다운(초) · 같은 날 재평가 최소 간격 · 0=당일 1회만 |
| `SHORT_TICK_SELL_ENABLED` | `text` | NULL | NULL | 꼬리잡기 틱매도 · 비우면 공통 TICK_SELL_ENABLED · true/false 명시 시 전략만 덮어씀 · 기본 false |
| `TAIL_WHIPSAW_MIN_SUBBARS` | `text` | NULL | NULL | 꼬리잡기: 휩쏘 최소 SUBBARS (TAIL_WHIPSAW_MIN_SUBBARS) |
| `TAIL_WHIPSAW_TICK_BUFFER_LIMIT` | `text` | NULL | NULL | 꼬리잡기: 휩쏘 TICK BUFFER LIMIT (TAIL_WHIPSAW_TICK_BUFFER_LIMIT) |
| `CONDITION_SHORT_LS_NAME` | `text` | NULL | NULL | 꼬리잡기: CONDITION SHORT LS NAME (CONDITION_SHORT_LS_NAME) |
| `SHORT_LIVE_UNIVERSE_HISTORY_SOURCE` | `text` | NULL | NULL | 꼬리잡기: LIVE 유니버스 HISTORY SOURCE (SHORT_LIVE_UNIVERSE_HISTORY_SOURCE) |
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `config_short` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`created_at` varchar(30) NOT NULL,
`STOP_LOSS_PCT` text DEFAULT NULL,
`SHOULDER_CUT_PCT` text DEFAULT NULL,
`SHOULDER_MIN_HIGH_PCT` text DEFAULT NULL,
`SHOULDER_MIN_NET_PCT` text DEFAULT NULL,
`STOP_ATR_MULTIPLIER_TAIL` text DEFAULT NULL,
`TARGET_ATR_MULTIPLIER_TAIL` text DEFAULT NULL,
`TAIL_ATR_SL_MIN_PCT` text DEFAULT NULL,
`TAIL_ATR_SL_MAX_PCT` text DEFAULT NULL,
`TAIL_ATR_TP_MIN_PCT` text DEFAULT NULL,
`TAIL_ATR_TP_MAX_PCT` text DEFAULT NULL,
`MIN_CANDLE_LEN_TAIL` text DEFAULT NULL,
`MIN_PRICE_TAIL` text DEFAULT NULL,
`TAIL_SCORE_BASE` text DEFAULT NULL,
`TAIL_SCORE_RATIO_MULT` text DEFAULT NULL,
`TAIL_RATIO_MIN` text DEFAULT NULL,
`TAIL_PCT_MIN` text DEFAULT NULL,
`TAIL_SKIP_HTS_SCAN_DUPES` text DEFAULT NULL,
`TAIL_USE_INTRADAY_DROP` text DEFAULT NULL,
`TAIL_USE_MA20_FILTER` text DEFAULT NULL,
`TAIL_USE_RSI_FILTER` text DEFAULT NULL,
`TAIL_USE_DAILY_RANGE_FILTER` text DEFAULT NULL,
`TAIL_USE_HIGH_CHASE_FILTER` text DEFAULT NULL,
`TAIL_BAR_CHG_MIN_PCT` text DEFAULT NULL,
`TAIL_BAR_CHG_MAX_PCT` text DEFAULT NULL,
`TAIL_RSI_THRESHOLD` text DEFAULT NULL,
`MIN_DROP_PCT_FOR_LOSS_CUT` text DEFAULT NULL,
`TAKE_PROFIT_PCT` text DEFAULT NULL,
`MIN_DROP_RATE` text DEFAULT NULL,
`MIN_RECOVERY_RATIO_SHORT` text DEFAULT NULL,
`KIS_SHORT_MM_CHANNEL` text DEFAULT NULL,
`SHORT_GAP_FILL_LIMIT` text DEFAULT NULL,
`MAX_RECOVERY_RATIO_3M` text DEFAULT NULL,
`TAIL_CANDLE_LOOKBACK` text DEFAULT NULL,
`SHORT_LIVE_BACKTEST_ALIGN` text DEFAULT NULL,
`SHORT_LIVE_SIGNAL_LOOKBACK_BARS` text DEFAULT NULL,
`SHORT_UNIVERSE_SOURCE` text DEFAULT NULL,
`RANK_SHORT_SORT` text DEFAULT NULL,
`RANK_SHORT_LIMIT` text DEFAULT NULL,
`CONDITION_SHORT_NAME` text DEFAULT NULL,
`CONDITION_SHORT_SEQ` text DEFAULT NULL,
`SHORT_MAX_BUY_AMOUNT` text DEFAULT NULL,
`TAIL_MAX_BUY_AMOUNT` text DEFAULT NULL,
`SHORT_CAND_LIMIT` text DEFAULT NULL,
`SHORT_TIME_START` text DEFAULT NULL,
`SHORT_TIME_END` text DEFAULT NULL,
`SHORT_MAX_STOCKS` text DEFAULT NULL,
`SELL_USE_ORDERBOOK_ON_PROFIT` text DEFAULT NULL,
`SELL_ORDERBOOK_BID_LEVELS` text DEFAULT NULL,
`SELL_ORDERBOOK_DEPTH_MULT` text DEFAULT NULL,
`SHORT_TOTAL_BUDGET_KRW` text DEFAULT NULL,
`STRATEGY_SHORT_ENABLED` text DEFAULT NULL,
`TAIL_MIN_DROP_RATE` text DEFAULT NULL,
`TAIL_MIN_RECOVERY_RATIO` text DEFAULT NULL,
`TAIL_MAX_RECOVERY_3M` text DEFAULT NULL,
`TAIL_STOP_LOSS_PCT` text DEFAULT NULL,
`TAIL_TAKE_PROFIT_PCT` text DEFAULT NULL,
`TAIL_SHOULDER_MIN_HIGH_PCT` text DEFAULT NULL,
`TAIL_SHOULDER_CUT_PCT` text DEFAULT NULL,
`TAIL_STOP_ATR_MULT` text DEFAULT NULL,
`TAIL_TARGET_ATR_MULT` text DEFAULT NULL,
`TAIL_MIN_PRICE` text DEFAULT NULL,
`TAIL_MAX_DAILY_CHG` text DEFAULT NULL,
`TAIL_MA20_MAX_ABOVE_PCT` text DEFAULT NULL,
`TAIL_MAX_LOSS_KRW` text DEFAULT NULL,
`TAIL_MIN_DROP_FOR_LOSS_CUT` text DEFAULT NULL,
`TAIL_RSI_PERIOD` text DEFAULT NULL,
`TAIL_COOLDOWN_SEC` text DEFAULT NULL,
`TAIL_MAX_DAILY` text DEFAULT NULL,
`TAIL_HIGH_CHASE_THR` text DEFAULT NULL,
`TAIL_TIME_START` text DEFAULT NULL,
`TAIL_TIME_END` text DEFAULT NULL,
`TAIL_MAX_STOCKS` text DEFAULT NULL,
`TAIL_TOTAL_BUDGET_KRW` text DEFAULT NULL,
`TAIL_SLOT_MONEY` text DEFAULT NULL,
`TAIL_ENTRY_MODE` text DEFAULT NULL,
`TAIL_LIMIT_ATR_MULT` text DEFAULT NULL,
`TAIL_LIMIT_ANCHOR` text DEFAULT NULL,
`TAIL_LIMIT_VALID_BARS` text DEFAULT NULL,
`TAIL_LIMIT_FILL_SLIP_PCT` text DEFAULT NULL,
`TAIL_MIN_INVEST_RATIO_OF_SLOT` text DEFAULT NULL,
`TAIL_PARAM_SEARCH_ENTRY_MODE` text DEFAULT NULL,
`TAIL_GRID_FAST_MAX_DAILY_CHG` text DEFAULT NULL,
`TAIL_GRID_COARSE_MAX_DAILY_CHG` text DEFAULT NULL,
`TAIL_GRID_FAST_LIMIT_ATR_MULT` text DEFAULT NULL,
`TAIL_GRID_COARSE_LIMIT_ATR_MULT` text DEFAULT NULL,
`TAIL_RATCHET_TIERS` text DEFAULT NULL,
`TAIL_MAX_HOLD_BARS` text DEFAULT NULL,
`TAIL_BACKTEST_USE_TICK_DB` text DEFAULT NULL,
`TAIL_BACKTEST_TICK_FALLBACK_OHLC` text DEFAULT NULL,
`TAIL_TRAIL_PCT` text DEFAULT NULL,
`TAIL_TRAIL_ARM_PCT` text DEFAULT NULL,
`TAIL_PATTERN_HAMMER` text DEFAULT NULL,
`TAIL_PATTERN_PIN` text DEFAULT NULL,
`TAIL_PATTERN_ENGULFING` text DEFAULT NULL,
`TAIL_PATTERN_PIERCING` text DEFAULT NULL,
`TAIL_PATTERN_HARAMI` text DEFAULT NULL,
`TAIL_PATTERN_DOJI` text DEFAULT NULL,
`TAIL_PATTERN_MORNING_STAR` text DEFAULT NULL,
`TAIL_PIN_CLOSE_UPPER_RATIO` text DEFAULT NULL,
`TAIL_PIN_MAX_UPPER_TAIL_RATIO` text DEFAULT NULL,
`TAIL_ENGULF_MIN_BODY_RATIO` text DEFAULT NULL,
`TAIL_PIERCING_PENETRATE_RATIO` text DEFAULT NULL,
`TAIL_HARAMI_MAX_BODY_RATIO` text DEFAULT NULL,
`TAIL_DOJI_BODY_MAX_RATIO` text DEFAULT NULL,
`TAIL_MORNING_STAR_BODY_MAX_RATIO` text DEFAULT NULL,
`TAIL_ORDERBOOK_FILTER_ENABLED` text DEFAULT NULL,
`TAIL_ORDERBOOK_MAX_SPREAD_PCT` text DEFAULT NULL,
`TAIL_ORDERBOOK_ENTRY_BID_LEVELS` text DEFAULT NULL,
`TAIL_ORDERBOOK_ENTRY_BID_DEPTH_MULT` text DEFAULT NULL,
`TAIL_ORDERBOOK_ENTRY_ASK_MAX_MULT` text DEFAULT NULL,
`TAIL_ORDERBOOK_MIN_BID_ASK_RATIO` text DEFAULT NULL,
`TAIL_PROGRAM_FILTER_ENABLED` text DEFAULT NULL,
`TAIL_PROGRAM_MIN_NET_BUY_QTY` text DEFAULT NULL,
`TAIL_PROGRAM_MIN_NET_BUY_AMT` text DEFAULT NULL,
`TAIL_PROGRAM_MAX_SELL_BUY_QTY_RATIO` text DEFAULT NULL,
`TAIL_PROGRAM_MIN_NET_DELTA_QTY` text DEFAULT NULL,
`TAIL_PROGRAM_SNAPSHOT_MAX_AGE_SEC` text DEFAULT NULL,
`TAIL_BACKTEST_USE_TRIGGER_SNAPSHOT_DB` text DEFAULT NULL,
`TAIL_WHIPSAW_FILTER_ENABLED` text DEFAULT NULL,
`TAIL_WHIPSAW_MODE` text DEFAULT NULL,
`TAIL_WHIPSAW_SUBBAR_SEC` text DEFAULT NULL,
`TAIL_WHIPSAW_LOOKBACK_SEC` text DEFAULT NULL,
`TAIL_WHIPSAW_DIP_PCT` text DEFAULT NULL,
`TAIL_WHIPSAW_RECOVERY_TOL_PCT` text DEFAULT NULL,
`SHORT_DAILY_PROFIT_TARGET_ENABLED` text DEFAULT NULL,
`SHORT_DAILY_PROFIT_TARGET_KRW` text DEFAULT NULL,
`SHORT_DAILY_PROFIT_TARGET_PCT` text DEFAULT NULL,
`SHORT_DAILY_PROFIT_HALT_NEW_BUYS` text DEFAULT NULL,
`TAIL_BACKTEST_USE_TRIGGER_EVAL_SNAPSHOT` text DEFAULT NULL,
`SHORT_DAILY_PROFIT_MODE` text DEFAULT NULL,
`SHORT_DAILY_PROFIT_TRAIL_TIERS` text DEFAULT NULL,
`SHORT_DAILY_PROFIT_TRAIL_DROP_PCT` text DEFAULT NULL,
`SHORT_DAILY_PROFIT_TRAIL_ARM_KRW` text DEFAULT NULL,
`SHORT_DAILY_PROFIT_TRAIL_ARM_PCT` text DEFAULT NULL,
`CONDITION_SHORT_KIWOOM_NAME` text DEFAULT NULL,
`CONDITION_SHORT_KIWOOM_SEQ` text DEFAULT NULL,
`TAIL_EOD_ENABLED` text DEFAULT NULL,
`TAIL_EOD_HM` text DEFAULT NULL,
`TAIL_PARAM_SEARCH_MIN_START` text DEFAULT NULL,
`TAIL_SYMBOL_DAILY_LOSS_LIMIT_KRW` text DEFAULT NULL,
`TAIL_SYMBOL_DAILY_LOSS_LIMIT_PCT` text DEFAULT NULL,
`TAIL_REENTRY_MIN_EDGE_KRW` text DEFAULT NULL,
`TAIL_REENTRY_REQUIRE_NONNEG` text DEFAULT NULL,
`TAIL_GRID_FAST_SYMBOL_LOSS_PCT` text DEFAULT NULL,
`TAIL_GRID_FAST_SYMBOL_LOSS_KRW` text DEFAULT NULL,
`TAIL_GRID_FAST_REENTRY_MIN_EDGE` text DEFAULT NULL,
`TAIL_BACKTEST_USE_TICK_EXIT` text DEFAULT NULL,
`TAIL_BACKTEST_POLL_MS` text DEFAULT NULL,
`TAIL_BACKTEST_SELL_SLIP_PCT` text DEFAULT NULL,
`TAIL_BT_SYNTH_3M_FROM_1M` text DEFAULT NULL,
`TAIL_BACKTEST_UNIVERSE_SCAN_AT` text DEFAULT NULL,
`TAIL_BT_INCLUSION_LOOKBACK` text DEFAULT NULL,
`TAIL_VOL_MULT` text DEFAULT NULL,
`TAIL_VOL_WIN` text DEFAULT NULL,
`TAIL_BACKTEST_CANDLE_WARMUP_BARS` text DEFAULT NULL,
`TAIL_BACKTEST_REST_WARMUP` text DEFAULT NULL,
`TAIL_BACKTEST_REST_WARMUP_BARS` text DEFAULT NULL,
`TAIL_BACKTEST_REST_SLEEP_SEC` text DEFAULT NULL,
`TAIL_BACKTEST_REST_MAX_CODES` text DEFAULT NULL,
`TAIL_VOL_SPIKE_LOOKBACK` text DEFAULT NULL,
`TAIL_UNIVERSE_EXIT_DEBOUNCE_SEC` text DEFAULT NULL,
`SHORT_DAILY_PROFIT_RISK_BUDGET_ENABLED` text DEFAULT NULL,
`SHORT_DAILY_PROFIT_RISK_BUDGET_COOLDOWN_SEC` text DEFAULT NULL,
`SHORT_TICK_SELL_ENABLED` text DEFAULT NULL,
`TAIL_WHIPSAW_MIN_SUBBARS` text DEFAULT NULL,
`TAIL_WHIPSAW_TICK_BUFFER_LIMIT` text DEFAULT NULL,
`CONDITION_SHORT_LS_NAME` text DEFAULT NULL,
`SHORT_LIVE_UNIVERSE_HISTORY_SOURCE` text DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=388 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
#### `config_breakout`
**PK**: `id` | AUTO_INCREMENT=388
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `int(11)` | NOT NULL | | PK · AUTO_INCREMENT |
| `created_at` | `varchar(30)` | NOT NULL | | 설정행 생성시각 |
| `BREAKOUT_LIVE_BACKTEST_ALIGN` | `text` | NULL | NULL | 돌파: LIVE BACKTEST ALIGN (BREAKOUT_LIVE_BACKTEST_ALIGN) |
| `BREAKOUT_LIVE_SIGNAL_LOOKBACK_BARS` | `text` | NULL | NULL | 돌파: LIVE SIGNAL LOOKBACK 봉수 (BREAKOUT_LIVE_SIGNAL_LOOKBACK_BARS) |
| `BREAKOUT_UNIVERSE_SOURCE` | `text` | NULL | NULL | 돌파 유니버스 · ls_condition=LS 동명 AFR · 시세는 키움/한투 유지 · 매니저 최초 기동은 봇 재시작 필요할 수 있음 · 키움으로 자동 폴백 안 함 |
| `RANK_BREAKOUT_SORT` | `text` | NULL | NULL | RANK 돌파 SORT (RANK_BREAKOUT_SORT) |
| `RANK_BREAKOUT_LIMIT` | `text` | NULL | NULL | RANK 돌파 LIMIT (RANK_BREAKOUT_LIMIT) |
| `CONDITION_BREAKOUT_NAME` | `text` | NULL | NULL | CONDITION 돌파 NAME (CONDITION_BREAKOUT_NAME) |
| `CONDITION_BREAKOUT_SEQ` | `text` | NULL | NULL | CONDITION 돌파 SEQ (CONDITION_BREAKOUT_SEQ) |
| `BREAKOUT_CAND_LIMIT` | `text` | NULL | NULL | 돌파 후보 상한 · 0=무제한 · 조건검색/랭킹이 N개 줘도 상위 N개만 매수체크·WS구독 · 전 전략 합산이 키움 WS 100종 한도를 넘지 않게 조절 |
| `BREAKOUT_TIME_START` | `text` | NULL | NULL | 돌파: 매수시작 (BREAKOUT_TIME_START) |
| `BREAKOUT_TIME_END` | `text` | NULL | NULL | 돌파: 매수종료 (BREAKOUT_TIME_END) |
| `BREAKOUT_LOOKBACK_MIN` | `text` | NULL | NULL | 돌파: LOOKBACK 최소 (BREAKOUT_LOOKBACK_MIN) |
| `BREAKOUT_VOL_WIN` | `text` | NULL | NULL | 돌파: 거래량윈도우 (BREAKOUT_VOL_WIN) |
| `BREAKOUT_VOL_MULT` | `text` | NULL | NULL | 돌파: 거래량배수 (BREAKOUT_VOL_MULT) |
| `BREAKOUT_PREV_CHG_MIN` | `text` | NULL | NULL | 돌파: PREV CHG 최소 (BREAKOUT_PREV_CHG_MIN) |
| `BREAKOUT_PREV_CHG_MAX` | `text` | NULL | NULL | 돌파: PREV CHG 최대 (BREAKOUT_PREV_CHG_MAX) |
| `BREAKOUT_STOP_LOSS_PCT` | `text` | NULL | NULL | 돌파: 손절 % (BREAKOUT_STOP_LOSS_PCT) |
| `BREAKOUT_TAKE_PROFIT_PCT` | `text` | NULL | NULL | 돌파: 익절 % (BREAKOUT_TAKE_PROFIT_PCT) |
| `BREAKOUT_TRAIL_PCT` | `text` | NULL | NULL | 돌파: 트레일 % (BREAKOUT_TRAIL_PCT) |
| `BREAKOUT_GOLDEN_END_HM` | `text` | NULL | NULL | 돌파: GOLDEN END HHMM (BREAKOUT_GOLDEN_END_HM) |
| `BREAKOUT_MAX_DAILY_CHG` | `text` | NULL | NULL | 돌파: 당일등락상한 (BREAKOUT_MAX_DAILY_CHG) |
| `BREAKOUT_MIN_PRICE` | `text` | NULL | NULL | 돌파: 최소가격 (BREAKOUT_MIN_PRICE) |
| `BREAKOUT_MAX_LOSS_PER_TRADE_KRW` | `text` | NULL | NULL | 돌파: 최대 LOSS PER TRADE 원 (BREAKOUT_MAX_LOSS_PER_TRADE_KRW) |
| `BREAKOUT_SLOT_MONEY` | `text` | NULL | NULL | 돌파 슬롯(원) |
| `BREAKOUT_MAX_DAILY` | `text` | NULL | NULL | 돌파: 일일매수횟수상한 (BREAKOUT_MAX_DAILY) |
| `BREAKOUT_COOLDOWN_SEC` | `text` | NULL | NULL | 돌파: 쿨다운 초 (BREAKOUT_COOLDOWN_SEC) |
| `BREAKOUT_MAX_STOCKS` | `text` | NULL | NULL | 돌파 동시 종목 |
| `BREAKOUT_SHOULDER_MIN_HIGH_PCT` | `text` | NULL | NULL | 돌파: 어깨무장고점 % (BREAKOUT_SHOULDER_MIN_HIGH_PCT) |
| `BREAKOUT_SHOULDER_CUT_PCT` | `text` | NULL | NULL | 돌파: 어깨컷 % (BREAKOUT_SHOULDER_CUT_PCT) |
| `BREAKOUT_GRID_COARSE_SHOULDER_SMIN` | `text` | NULL | NULL | 돌파: GRID COARSE 어깨 SMIN (BREAKOUT_GRID_COARSE_SHOULDER_SMIN) |
| `BREAKOUT_GRID_COARSE_SHOULDER_CUT` | `text` | NULL | NULL | 돌파: GRID COARSE 어깨컷 (BREAKOUT_GRID_COARSE_SHOULDER_CUT) |
| `BREAKOUT_GRID_FINE_SHOULDER_SMIN` | `text` | NULL | NULL | 돌파: GRID FINE 어깨 SMIN (BREAKOUT_GRID_FINE_SHOULDER_SMIN) |
| `BREAKOUT_GRID_FINE_SHOULDER_CUT` | `text` | NULL | NULL | 돌파: GRID FINE 어깨컷 (BREAKOUT_GRID_FINE_SHOULDER_CUT) |
| `BREAKOUT_GRID_FULL_SHOULDER_SMIN` | `text` | NULL | NULL | 돌파: GRID FULL 어깨 SMIN (BREAKOUT_GRID_FULL_SHOULDER_SMIN) |
| `BREAKOUT_GRID_FULL_SHOULDER_CUT` | `text` | NULL | NULL | 돌파: GRID FULL 어깨컷 (BREAKOUT_GRID_FULL_SHOULDER_CUT) |
| `BREAKOUT_TOTAL_BUDGET_KRW` | `text` | NULL | NULL | 돌파 총 한도(원) |
| `STRATEGY_BREAKOUT_ENABLED` | `text` | NULL | NULL | 돌파 ON/OFF. 다음루프 신규매수중단(보유청산유지). WS구독해제 안함. 기동시OFF→켜려면재시작 |
| `KIS_BREAKOUT_MM_CHANNEL` | `text` | NULL | NULL | KIS 돌파 MM CHANNEL (KIS_BREAKOUT_MM_CHANNEL) |
| `BREAKOUT_ENTRY_MODE` | `text` | NULL | NULL | 돌파: ENTRY 모드 (BREAKOUT_ENTRY_MODE) |
| `BREAKOUT_INTRABAR_SLIPPAGE_PCT` | `text` | NULL | NULL | 돌파: INTRABAR SLIPPAGE % (BREAKOUT_INTRABAR_SLIPPAGE_PCT) |
| `BREAKOUT_RATCHET_TIERS` | `text` | NULL | NULL | 돌파: 다단래칫 (BREAKOUT_RATCHET_TIERS) |
| `BREAKOUT_MAX_HOLD_BARS` | `text` | NULL | NULL | 최대보유(분) · 0=OFF · 진입 후 N분 경과 시 max_hold 청산 |
| `BREAKOUT_TRAIL_ARM_PCT` | `text` | NULL | NULL | 돌파: 트레일무장 % (BREAKOUT_TRAIL_ARM_PCT) |
| `BREAKOUT_USE_EMA_FILTER` | `text` | NULL | NULL | 돌파: 사용_ EMA 필터 (BREAKOUT_USE_EMA_FILTER) |
| `BREAKOUT_EMA_FAST_PERIOD` | `text` | NULL | NULL | 돌파: EMA단기 기간 (BREAKOUT_EMA_FAST_PERIOD) |
| `BREAKOUT_EMA_SLOW_PERIOD` | `text` | NULL | NULL | 돌파: EMA장기 기간 (BREAKOUT_EMA_SLOW_PERIOD) |
| `BREAKOUT_MIN_BAR_TRADE_VALUE_KRW` | `text` | NULL | NULL | 돌파: 최소 BAR TRADE VALUE 원 (BREAKOUT_MIN_BAR_TRADE_VALUE_KRW) |
| `BREAKOUT_MIN_TURNOVER_1M_PCT` | `text` | NULL | NULL | 돌파: 최소 TURNOVER 1M % (BREAKOUT_MIN_TURNOVER_1M_PCT) |
| `BREAKOUT_SHARE_DENOM` | `text` | NULL | NULL | 돌파: SHARE DENOM (BREAKOUT_SHARE_DENOM) |
| `BREAKOUT_ORDERBOOK_FILTER_ENABLED` | `text` | NULL | NULL | 돌파 호가필터 ON · ON=스프레드·잔량비·얇은호가·매도벽으로 매수 차단 · OFF=저장만 |
| `BREAKOUT_ORDERBOOK_MAX_SPREAD_PCT` | `text` | NULL | NULL | 돌파 스프레드상한(%) · 0.45=0.45% · 그리드 max_spread_pct 앵커 |
| `BREAKOUT_ORDERBOOK_ENTRY_BID_LEVELS` | `text` | NULL | NULL | 돌파 호가단계(N호가) |
| `BREAKOUT_ORDERBOOK_ENTRY_BID_DEPTH_MULT` | `text` | NULL | NULL | 돌파 매수호가깊이 배수 · 얇은호가 탈락 · 필요수량×N |
| `BREAKOUT_ORDERBOOK_ENTRY_ASK_MAX_MULT` | `text` | NULL | NULL | 돌파 매도벽 허용배수 · 필요수량×N · 그리드 ask_max_mult |
| `BREAKOUT_ORDERBOOK_MIN_BID_ASK_RATIO` | `text` | NULL | NULL | 돌파 매수/매도잔량비 하한 · 그리드 min_bid_ask_ratio |
| `BREAKOUT_ORDERBOOK_ASK_WALL_MAX_QTY` | `text` | NULL | NULL | 돌파 매도벽 상한(주) · 그리드 ask_wall_max_qty |
| `BREAKOUT_PROGRAM_FILTER_ENABLED` | `text` | NULL | NULL | 돌파: 프로그램매매 필터 ON/OFF (BREAKOUT_PROGRAM_FILTER_ENABLED) |
| `BREAKOUT_PROGRAM_MIN_NET_BUY_QTY` | `text` | NULL | NULL | 돌파: 프로그램매매 최소 NET BUY QTY (BREAKOUT_PROGRAM_MIN_NET_BUY_QTY) |
| `BREAKOUT_PROGRAM_MIN_NET_BUY_AMT` | `text` | NULL | NULL | 돌파: 프로그램매매 최소 NET BUY AMT (BREAKOUT_PROGRAM_MIN_NET_BUY_AMT) |
| `BREAKOUT_PROGRAM_MAX_SELL_BUY_QTY_RATIO` | `text` | NULL | NULL | 돌파: 프로그램매매 최대 SELL BUY QTY RATIO (BREAKOUT_PROGRAM_MAX_SELL_BUY_QTY_RATIO) |
| `BREAKOUT_PROGRAM_MIN_NET_DELTA_QTY` | `text` | NULL | NULL | 돌파: 프로그램매매 최소 NET DELTA QTY (BREAKOUT_PROGRAM_MIN_NET_DELTA_QTY) |
| `BREAKOUT_PROGRAM_SNAPSHOT_MAX_AGE_SEC` | `text` | NULL | NULL | 돌파: 프로그램매매 SNAPSHOT 최대 AGE 초 (BREAKOUT_PROGRAM_SNAPSHOT_MAX_AGE_SEC) |
| `BREAKOUT_BACKTEST_USE_TRIGGER_SNAPSHOT_DB` | `text` | NULL | NULL | 돌파: BACKTEST 사용_ TRIGGER SNAPSHOT DB (BREAKOUT_BACKTEST_USE_TRIGGER_SNAPSHOT_DB) |
| `BREAKOUT_WHIPSAW_FILTER_ENABLED` | `text` | NULL | NULL | 돌파 휩쏘 필터 |
| `BREAKOUT_WHIPSAW_MODE` | `text` | NULL | NULL | 돌파: 휩쏘 모드 (BREAKOUT_WHIPSAW_MODE) |
| `BREAKOUT_WHIPSAW_SUBBAR_SEC` | `text` | NULL | NULL | 돌파: 휩쏘 SUBBAR 초 (BREAKOUT_WHIPSAW_SUBBAR_SEC) |
| `BREAKOUT_WHIPSAW_LOOKBACK_SEC` | `text` | NULL | NULL | 돌파: 휩쏘 LOOKBACK 초 (BREAKOUT_WHIPSAW_LOOKBACK_SEC) |
| `BREAKOUT_WHIPSAW_DIP_PCT` | `text` | NULL | NULL | 돌파: 휩쏘 DIP % (BREAKOUT_WHIPSAW_DIP_PCT) |
| `BREAKOUT_WHIPSAW_RECOVERY_TOL_PCT` | `text` | NULL | NULL | 돌파: 휩쏘 RECOVERY TOL % (BREAKOUT_WHIPSAW_RECOVERY_TOL_PCT) |
| `BREAKOUT_DAILY_PROFIT_TARGET_ENABLED` | `text` | NULL | NULL | 돌파 손익 감시 켜기 · OFF = 해당 전략 일일익절 비활성 (매수 차단 없음) |
| `BREAKOUT_DAILY_PROFIT_TARGET_KRW` | `text` | NULL | NULL | 돌파 목표(원) |
| `BREAKOUT_DAILY_PROFIT_TARGET_PCT` | `text` | NULL | NULL | 돌파 목표(%) · 퍼센트 그대로 (예: 2.5 = 2.5%) · 0=미사용 |
| `BREAKOUT_DAILY_PROFIT_HALT_NEW_BUYS` | `text` | NULL | NULL | 돌파 신규매수 수동 중단 · 목표 무관 수동 잠금 · 비우면 마스터 상속 · OFF=정상 |
| `BREAKOUT_BACKTEST_USE_TRIGGER_EVAL_SNAPSHOT` | `text` | NULL | NULL | 돌파: BACKTEST 사용_ TRIGGER EVAL SNAPSHOT (BREAKOUT_BACKTEST_USE_TRIGGER_EVAL_SNAPSHOT) |
| `BREAKOUT_DAILY_PROFIT_MODE` | `text` | NULL | NULL | 돌파 익절방식 · 비우면 마스터 상속 · fixed/trailing/both |
| `BREAKOUT_DAILY_PROFIT_TRAIL_TIERS` | `text` | NULL | NULL | 돌파 다단 트레일 · 수익원:컷%,… · 비우면 마스터 상속 · 예: 30000:50,100000:35,300000:25 |
| `BREAKOUT_DAILY_PROFIT_TRAIL_DROP_PCT` | `text` | NULL | NULL | 돌파 단일 트레일 되돌림(%) · 다단 비었을 때만 · 고점 대비 % · 비우면 마스터 상속 · 0=미사용 |
| `BREAKOUT_DAILY_PROFIT_TRAIL_ARM_KRW` | `text` | NULL | NULL | 돌파 트레일 발동수익(원) · 이 이상 벌어야 트레일 감시 · 비우면 마스터 상속 |
| `BREAKOUT_DAILY_PROFIT_TRAIL_ARM_PCT` | `text` | NULL | NULL | 돌파: 일일익절 트레일무장 % (BREAKOUT_DAILY_PROFIT_TRAIL_ARM_PCT) |
| `BREAKOUT_SL_MODE` | `text` | NULL | NULL | 돌파: SL 모드 (BREAKOUT_SL_MODE) |
| `BREAKOUT_ATR_PERIOD` | `text` | NULL | NULL | 돌파: ATR 기간 (BREAKOUT_ATR_PERIOD) |
| `BREAKOUT_ATR_SL_MULT` | `text` | NULL | NULL | 돌파: ATR손절 배수 (BREAKOUT_ATR_SL_MULT) |
| `BREAKOUT_ATR_SL_MIN_PCT` | `text` | NULL | NULL | 돌파: ATR손절 최소 % (BREAKOUT_ATR_SL_MIN_PCT) |
| `BREAKOUT_ATR_SL_MAX_PCT` | `text` | NULL | NULL | 돌파: ATR손절 최대 % (BREAKOUT_ATR_SL_MAX_PCT) |
| `CONDITION_BREAKOUT_KIWOOM_NAME` | `text` | NULL | NULL | CONDITION 돌파 KIWOOM NAME (CONDITION_BREAKOUT_KIWOOM_NAME) |
| `CONDITION_BREAKOUT_KIWOOM_SEQ` | `text` | NULL | NULL | CONDITION 돌파 KIWOOM SEQ (CONDITION_BREAKOUT_KIWOOM_SEQ) |
| `BREAKOUT_EOD_ENABLED` | `text` | NULL | NULL | EOD 당일청산 사용 · ON=설정 시각 이후 보유 전량 eod 청산 · OFF=익절·손절·시간컷만 |
| `BREAKOUT_EOD_HM` | `text` | NULL | NULL | EOD 시각 (HH:MM) · 이 시각 이후 보유 전량 청산 · 예: 15:15 |
| `BREAKOUT_SKIP_HTS_SCAN_DUPES` | `text` | NULL | NULL | 돌파: HTS스캔중복스킵 (BREAKOUT_SKIP_HTS_SCAN_DUPES) |
| `BREAKOUT_GRID_FAST_SKIP_HTS_SCAN_DUPES` | `text` | NULL | NULL | 돌파: GRID FAST HTS스캔중복스킵 (BREAKOUT_GRID_FAST_SKIP_HTS_SCAN_DUPES) |
| `BREAKOUT_BACKTEST_TICK_FALLBACK_OHLC` | `text` | NULL | NULL | ⚠ 돌파 OHLC 폴백 (정합위험·금지) · 절대금지 — 틱 진입 ON 시 봉 high 폴백 안 함 |
| `BREAKOUT_BACKTEST_USE_TICK_DB` | `text` | NULL | NULL | 돌파: BACKTEST 사용_ TICK DB (BREAKOUT_BACKTEST_USE_TICK_DB) |
| `BREAKOUT_BACKTEST_USE_TICK_EXIT` | `text` | NULL | NULL | 돌파 틱 청산 · ON=ws_ticks 시간순 청산 · OFF=OHLC intrabar |
| `BREAKOUT_BACKTEST_POLL_MS` | `text` | NULL | NULL | 돌파 틱청산 폴링(ms) · 실매 폴링 정합 · 하한 50ms |
| `BREAKOUT_BACKTEST_SELL_SLIP_PCT` | `text` | NULL | NULL | 돌파: BACKTEST SELL SLIP % (BREAKOUT_BACKTEST_SELL_SLIP_PCT) |
| `BREAKOUT_CONFIRM_MARGIN_PCT` | `text` | NULL | NULL | 돌파: CONFIRM MARGIN % (BREAKOUT_CONFIRM_MARGIN_PCT) |
| `BREAKOUT_BODY_MIN_PCT` | `text` | NULL | NULL | 돌파: BODY 최소 % (BREAKOUT_BODY_MIN_PCT) |
| `BREAKOUT_MAX_BUY_AMOUNT` | `text` | NULL | NULL | 돌파: 1회최대매수금액 (BREAKOUT_MAX_BUY_AMOUNT) |
| `BREAKOUT_MIN_INVEST_RATIO_OF_SLOT` | `text` | NULL | NULL | 돌파: 최소 INVEST RATIO OF SLOT (BREAKOUT_MIN_INVEST_RATIO_OF_SLOT) |
| `BREAKOUT_BACKTEST_CANDLE_WARMUP_BARS` | `text` | NULL | NULL | 돌파: BACKTEST CANDLE WARMUP 봉수 (BREAKOUT_BACKTEST_CANDLE_WARMUP_BARS) |
| `BREAKOUT_BACKTEST_UNIVERSE_SCAN_AT` | `text` | NULL | NULL | 돌파: BACKTEST 유니버스 SCAN AT (BREAKOUT_BACKTEST_UNIVERSE_SCAN_AT) |
| `BREAKOUT_UNIVERSE_EXIT_DEBOUNCE_SEC` | `text` | NULL | NULL | 돌파: 유니버스 EXIT DEBOUNCE 초 (BREAKOUT_UNIVERSE_EXIT_DEBOUNCE_SEC) |
| `BREAKOUT_DAILY_PROFIT_RISK_BUDGET_ENABLED` | `text` | NULL | NULL | 돌파 리스크버짓(B) · ON=일일익절 hit 후 보유최악손절합>cushion 이면 전량정리 · 기본 OFF · 마스터 없음 |
| `BREAKOUT_DAILY_PROFIT_RISK_BUDGET_COOLDOWN_SEC` | `text` | NULL | NULL | 돌파 리스크버짓 쿨다운(초) · 같은 날 재평가 최소 간격 · 0=당일 1회만 |
| `BREAKOUT_TICK_SELL_ENABLED` | `text` | NULL | NULL | 돌파 틱매도 · 비우면 공통 TICK_SELL_ENABLED · true/false 명시 시 전략만 덮어씀 · 기본 false |
| `CONDITION_BREAKOUT_LS_NAME` | `text` | NULL | NULL | CONDITION 돌파 LS NAME (CONDITION_BREAKOUT_LS_NAME) |
| `BREAKOUT_LIVE_UNIVERSE_HISTORY_SOURCE` | `text` | NULL | NULL | 돌파: LIVE 유니버스 HISTORY SOURCE (BREAKOUT_LIVE_UNIVERSE_HISTORY_SOURCE) |
| `BREAKOUT_CANDLE_GAP_FORCE_SEC` | `text` | NULL | NULL | 돌파: CANDLE GAP FORCE 초 (BREAKOUT_CANDLE_GAP_FORCE_SEC) |
| `BREAKOUT_CANDLE_SHORT_LOG_SEC` | `text` | NULL | NULL | 돌파: CANDLE SHORT LOG 초 (BREAKOUT_CANDLE_SHORT_LOG_SEC) |
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `config_breakout` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`created_at` varchar(30) NOT NULL,
`BREAKOUT_LIVE_BACKTEST_ALIGN` text DEFAULT NULL,
`BREAKOUT_LIVE_SIGNAL_LOOKBACK_BARS` text DEFAULT NULL,
`BREAKOUT_UNIVERSE_SOURCE` text DEFAULT NULL,
`RANK_BREAKOUT_SORT` text DEFAULT NULL,
`RANK_BREAKOUT_LIMIT` text DEFAULT NULL,
`CONDITION_BREAKOUT_NAME` text DEFAULT NULL,
`CONDITION_BREAKOUT_SEQ` text DEFAULT NULL,
`BREAKOUT_CAND_LIMIT` text DEFAULT NULL,
`BREAKOUT_TIME_START` text DEFAULT NULL,
`BREAKOUT_TIME_END` text DEFAULT NULL,
`BREAKOUT_LOOKBACK_MIN` text DEFAULT NULL,
`BREAKOUT_VOL_WIN` text DEFAULT NULL,
`BREAKOUT_VOL_MULT` text DEFAULT NULL,
`BREAKOUT_PREV_CHG_MIN` text DEFAULT NULL,
`BREAKOUT_PREV_CHG_MAX` text DEFAULT NULL,
`BREAKOUT_STOP_LOSS_PCT` text DEFAULT NULL,
`BREAKOUT_TAKE_PROFIT_PCT` text DEFAULT NULL,
`BREAKOUT_TRAIL_PCT` text DEFAULT NULL,
`BREAKOUT_GOLDEN_END_HM` text DEFAULT NULL,
`BREAKOUT_MAX_DAILY_CHG` text DEFAULT NULL,
`BREAKOUT_MIN_PRICE` text DEFAULT NULL,
`BREAKOUT_MAX_LOSS_PER_TRADE_KRW` text DEFAULT NULL,
`BREAKOUT_SLOT_MONEY` text DEFAULT NULL,
`BREAKOUT_MAX_DAILY` text DEFAULT NULL,
`BREAKOUT_COOLDOWN_SEC` text DEFAULT NULL,
`BREAKOUT_MAX_STOCKS` text DEFAULT NULL,
`BREAKOUT_SHOULDER_MIN_HIGH_PCT` text DEFAULT NULL,
`BREAKOUT_SHOULDER_CUT_PCT` text DEFAULT NULL,
`BREAKOUT_GRID_COARSE_SHOULDER_SMIN` text DEFAULT NULL,
`BREAKOUT_GRID_COARSE_SHOULDER_CUT` text DEFAULT NULL,
`BREAKOUT_GRID_FINE_SHOULDER_SMIN` text DEFAULT NULL,
`BREAKOUT_GRID_FINE_SHOULDER_CUT` text DEFAULT NULL,
`BREAKOUT_GRID_FULL_SHOULDER_SMIN` text DEFAULT NULL,
`BREAKOUT_GRID_FULL_SHOULDER_CUT` text DEFAULT NULL,
`BREAKOUT_TOTAL_BUDGET_KRW` text DEFAULT NULL,
`STRATEGY_BREAKOUT_ENABLED` text DEFAULT NULL,
`KIS_BREAKOUT_MM_CHANNEL` text DEFAULT NULL,
`BREAKOUT_ENTRY_MODE` text DEFAULT NULL,
`BREAKOUT_INTRABAR_SLIPPAGE_PCT` text DEFAULT NULL,
`BREAKOUT_RATCHET_TIERS` text DEFAULT NULL,
`BREAKOUT_MAX_HOLD_BARS` text DEFAULT NULL,
`BREAKOUT_TRAIL_ARM_PCT` text DEFAULT NULL,
`BREAKOUT_USE_EMA_FILTER` text DEFAULT NULL,
`BREAKOUT_EMA_FAST_PERIOD` text DEFAULT NULL,
`BREAKOUT_EMA_SLOW_PERIOD` text DEFAULT NULL,
`BREAKOUT_MIN_BAR_TRADE_VALUE_KRW` text DEFAULT NULL,
`BREAKOUT_MIN_TURNOVER_1M_PCT` text DEFAULT NULL,
`BREAKOUT_SHARE_DENOM` text DEFAULT NULL,
`BREAKOUT_ORDERBOOK_FILTER_ENABLED` text DEFAULT NULL,
`BREAKOUT_ORDERBOOK_MAX_SPREAD_PCT` text DEFAULT NULL,
`BREAKOUT_ORDERBOOK_ENTRY_BID_LEVELS` text DEFAULT NULL,
`BREAKOUT_ORDERBOOK_ENTRY_BID_DEPTH_MULT` text DEFAULT NULL,
`BREAKOUT_ORDERBOOK_ENTRY_ASK_MAX_MULT` text DEFAULT NULL,
`BREAKOUT_ORDERBOOK_MIN_BID_ASK_RATIO` text DEFAULT NULL,
`BREAKOUT_ORDERBOOK_ASK_WALL_MAX_QTY` text DEFAULT NULL,
`BREAKOUT_PROGRAM_FILTER_ENABLED` text DEFAULT NULL,
`BREAKOUT_PROGRAM_MIN_NET_BUY_QTY` text DEFAULT NULL,
`BREAKOUT_PROGRAM_MIN_NET_BUY_AMT` text DEFAULT NULL,
`BREAKOUT_PROGRAM_MAX_SELL_BUY_QTY_RATIO` text DEFAULT NULL,
`BREAKOUT_PROGRAM_MIN_NET_DELTA_QTY` text DEFAULT NULL,
`BREAKOUT_PROGRAM_SNAPSHOT_MAX_AGE_SEC` text DEFAULT NULL,
`BREAKOUT_BACKTEST_USE_TRIGGER_SNAPSHOT_DB` text DEFAULT NULL,
`BREAKOUT_WHIPSAW_FILTER_ENABLED` text DEFAULT NULL,
`BREAKOUT_WHIPSAW_MODE` text DEFAULT NULL,
`BREAKOUT_WHIPSAW_SUBBAR_SEC` text DEFAULT NULL,
`BREAKOUT_WHIPSAW_LOOKBACK_SEC` text DEFAULT NULL,
`BREAKOUT_WHIPSAW_DIP_PCT` text DEFAULT NULL,
`BREAKOUT_WHIPSAW_RECOVERY_TOL_PCT` text DEFAULT NULL,
`BREAKOUT_DAILY_PROFIT_TARGET_ENABLED` text DEFAULT NULL,
`BREAKOUT_DAILY_PROFIT_TARGET_KRW` text DEFAULT NULL,
`BREAKOUT_DAILY_PROFIT_TARGET_PCT` text DEFAULT NULL,
`BREAKOUT_DAILY_PROFIT_HALT_NEW_BUYS` text DEFAULT NULL,
`BREAKOUT_BACKTEST_USE_TRIGGER_EVAL_SNAPSHOT` text DEFAULT NULL,
`BREAKOUT_DAILY_PROFIT_MODE` text DEFAULT NULL,
`BREAKOUT_DAILY_PROFIT_TRAIL_TIERS` text DEFAULT NULL,
`BREAKOUT_DAILY_PROFIT_TRAIL_DROP_PCT` text DEFAULT NULL,
`BREAKOUT_DAILY_PROFIT_TRAIL_ARM_KRW` text DEFAULT NULL,
`BREAKOUT_DAILY_PROFIT_TRAIL_ARM_PCT` text DEFAULT NULL,
`BREAKOUT_SL_MODE` text DEFAULT NULL,
`BREAKOUT_ATR_PERIOD` text DEFAULT NULL,
`BREAKOUT_ATR_SL_MULT` text DEFAULT NULL,
`BREAKOUT_ATR_SL_MIN_PCT` text DEFAULT NULL,
`BREAKOUT_ATR_SL_MAX_PCT` text DEFAULT NULL,
`CONDITION_BREAKOUT_KIWOOM_NAME` text DEFAULT NULL,
`CONDITION_BREAKOUT_KIWOOM_SEQ` text DEFAULT NULL,
`BREAKOUT_EOD_ENABLED` text DEFAULT NULL,
`BREAKOUT_EOD_HM` text DEFAULT NULL,
`BREAKOUT_SKIP_HTS_SCAN_DUPES` text DEFAULT NULL,
`BREAKOUT_GRID_FAST_SKIP_HTS_SCAN_DUPES` text DEFAULT NULL,
`BREAKOUT_BACKTEST_TICK_FALLBACK_OHLC` text DEFAULT NULL,
`BREAKOUT_BACKTEST_USE_TICK_DB` text DEFAULT NULL,
`BREAKOUT_BACKTEST_USE_TICK_EXIT` text DEFAULT NULL,
`BREAKOUT_BACKTEST_POLL_MS` text DEFAULT NULL,
`BREAKOUT_BACKTEST_SELL_SLIP_PCT` text DEFAULT NULL,
`BREAKOUT_CONFIRM_MARGIN_PCT` text DEFAULT NULL,
`BREAKOUT_BODY_MIN_PCT` text DEFAULT NULL,
`BREAKOUT_MAX_BUY_AMOUNT` text DEFAULT NULL,
`BREAKOUT_MIN_INVEST_RATIO_OF_SLOT` text DEFAULT NULL,
`BREAKOUT_BACKTEST_CANDLE_WARMUP_BARS` text DEFAULT NULL,
`BREAKOUT_BACKTEST_UNIVERSE_SCAN_AT` text DEFAULT NULL,
`BREAKOUT_UNIVERSE_EXIT_DEBOUNCE_SEC` text DEFAULT NULL,
`BREAKOUT_DAILY_PROFIT_RISK_BUDGET_ENABLED` text DEFAULT NULL,
`BREAKOUT_DAILY_PROFIT_RISK_BUDGET_COOLDOWN_SEC` text DEFAULT NULL,
`BREAKOUT_TICK_SELL_ENABLED` text DEFAULT NULL,
`CONDITION_BREAKOUT_LS_NAME` text DEFAULT NULL,
`BREAKOUT_LIVE_UNIVERSE_HISTORY_SOURCE` text DEFAULT NULL,
`BREAKOUT_CANDLE_GAP_FORCE_SEC` text DEFAULT NULL,
`BREAKOUT_CANDLE_SHORT_LOG_SEC` text DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=388 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
#### `config_range_break`
**PK**: `id` | AUTO_INCREMENT=307
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `int(11)` | NOT NULL | | PK · AUTO_INCREMENT |
| `created_at` | `varchar(30)` | NOT NULL | | 설정행 생성시각 |
| `STRATEGY_RANGE_BREAK_ENABLED` | `text` | NULL | NULL | 박스권돌파 ON/OFF. 다음루프 신규매수중단(보유청산유지). WS구독해제 안함 |
| `RANGE_BREAK_LIVE_BACKTEST_ALIGN` | `text` | NULL | NULL | 박스권돌파: LIVE BACKTEST ALIGN (RANGE_BREAK_LIVE_BACKTEST_ALIGN) |
| `RANGE_BREAK_LIVE_SIGNAL_LOOKBACK_BARS` | `text` | NULL | NULL | 박스권돌파: LIVE SIGNAL LOOKBACK 봉수 (RANGE_BREAK_LIVE_SIGNAL_LOOKBACK_BARS) |
| `RANGE_BREAK_UNIVERSE_SOURCE` | `text` | NULL | NULL | 박스권돌파: 유니버스소스 (RANGE_BREAK_UNIVERSE_SOURCE) |
| `RANK_RANGE_BREAK_SORT` | `text` | NULL | NULL | 박스권돌파: RANK RANGE BREAK SORT (RANK_RANGE_BREAK_SORT) |
| `RANK_RANGE_BREAK_LIMIT` | `text` | NULL | NULL | 박스권돌파: RANK RANGE BREAK LIMIT (RANK_RANGE_BREAK_LIMIT) |
| `CONDITION_RANGE_BREAK_NAME` | `text` | NULL | NULL | 박스권돌파: CONDITION RANGE BREAK NAME (CONDITION_RANGE_BREAK_NAME) |
| `CONDITION_RANGE_BREAK_SEQ` | `text` | NULL | NULL | 박스권돌파: CONDITION RANGE BREAK SEQ (CONDITION_RANGE_BREAK_SEQ) |
| `RANGE_BREAK_CAND_LIMIT` | `text` | NULL | NULL | 박스권돌파: 후보상한 (RANGE_BREAK_CAND_LIMIT) |
| `RANGE_BREAK_BOX_LOOKBACK_MIN` | `text` | NULL | NULL | 박스권돌파: BOX LOOKBACK 최소 (RANGE_BREAK_BOX_LOOKBACK_MIN) |
| `RANGE_BREAK_BOX_MAX_WIDTH_PCT` | `text` | NULL | NULL | 박스권돌파: BOX 최대 WIDTH % (RANGE_BREAK_BOX_MAX_WIDTH_PCT) |
| `RANGE_BREAK_BOX_MIN_WIDTH_PCT` | `text` | NULL | NULL | 박스권돌파: BOX 최소 WIDTH % (RANGE_BREAK_BOX_MIN_WIDTH_PCT) |
| `RANGE_BREAK_SETUP_VOL_MAX_MULT` | `text` | NULL | NULL | 박스권돌파: SETUP 거래량 최대 배수 (RANGE_BREAK_SETUP_VOL_MAX_MULT) |
| `RANGE_BREAK_SETUP_BEAR_BARS_MIN` | `text` | NULL | NULL | 박스권돌파: SETUP BEAR 봉수 최소 (RANGE_BREAK_SETUP_BEAR_BARS_MIN) |
| `RANGE_BREAK_VOL_MULT` | `text` | NULL | NULL | 박스권돌파: 거래량배수 (RANGE_BREAK_VOL_MULT) |
| `RANGE_BREAK_VOL_WIN` | `text` | NULL | NULL | 박스권돌파: 거래량윈도우 (RANGE_BREAK_VOL_WIN) |
| `RANGE_BREAK_VOL_BASELINE_WIN` | `text` | NULL | NULL | 박스권돌파: 거래량 BASELINE WIN (RANGE_BREAK_VOL_BASELINE_WIN) |
| `RANGE_BREAK_BREAK_MARGIN_PCT` | `text` | NULL | NULL | 박스권돌파: BREAK MARGIN % (RANGE_BREAK_BREAK_MARGIN_PCT) |
| `RANGE_BREAK_BODY_MIN_PCT` | `text` | NULL | NULL | 박스권돌파: BODY 최소 % (RANGE_BREAK_BODY_MIN_PCT) |
| `RANGE_BREAK_TIME_START` | `text` | NULL | NULL | 박스권돌파: 매수시작 (RANGE_BREAK_TIME_START) |
| `RANGE_BREAK_TIME_END_HM` | `text` | NULL | NULL | 박스권돌파: 매수종료 HHMM (RANGE_BREAK_TIME_END_HM) |
| `RANGE_BREAK_STOP_LOSS_PCT` | `text` | NULL | NULL | 박스권돌파: 손절 % (RANGE_BREAK_STOP_LOSS_PCT) |
| `RANGE_BREAK_TAKE_PROFIT_PCT` | `text` | NULL | NULL | 박스권돌파: 익절 % (RANGE_BREAK_TAKE_PROFIT_PCT) |
| `RANGE_BREAK_TRAIL_PCT` | `text` | NULL | NULL | 박스권돌파: 트레일 % (RANGE_BREAK_TRAIL_PCT) |
| `RANGE_BREAK_TRAIL_ARM_PCT` | `text` | NULL | NULL | 박스권돌파: 트레일무장 % (RANGE_BREAK_TRAIL_ARM_PCT) |
| `RANGE_BREAK_SHOULDER_MIN_HIGH_PCT` | `text` | NULL | NULL | 박스권돌파: 어깨무장고점 % (RANGE_BREAK_SHOULDER_MIN_HIGH_PCT) |
| `RANGE_BREAK_SHOULDER_CUT_PCT` | `text` | NULL | NULL | 박스권돌파: 어깨컷 % (RANGE_BREAK_SHOULDER_CUT_PCT) |
| `RANGE_BREAK_MAX_HOLD_BARS` | `text` | NULL | NULL | 박스권돌파: 최대보유봉 (RANGE_BREAK_MAX_HOLD_BARS) |
| `RANGE_BREAK_MAX_DAILY` | `text` | NULL | NULL | 박스권돌파: 일일매수횟수상한 (RANGE_BREAK_MAX_DAILY) |
| `RANGE_BREAK_COOLDOWN_SEC` | `text` | NULL | NULL | 박스권돌파: 쿨다운 초 (RANGE_BREAK_COOLDOWN_SEC) |
| `RANGE_BREAK_MAX_DAILY_CHG` | `text` | NULL | NULL | 박스권돌파: 당일등락상한 (RANGE_BREAK_MAX_DAILY_CHG) |
| `RANGE_BREAK_MIN_PRICE` | `text` | NULL | NULL | 박스권돌파: 최소가격 (RANGE_BREAK_MIN_PRICE) |
| `RANGE_BREAK_HIGH_CHASE_THR` | `text` | NULL | NULL | 박스권돌파: 고점추격 THR (RANGE_BREAK_HIGH_CHASE_THR) |
| `RANGE_BREAK_USE_HIGH_CHASE_FILTER` | `text` | NULL | NULL | 박스권돌파: 사용_ 고점추격 필터 (RANGE_BREAK_USE_HIGH_CHASE_FILTER) |
| `RANGE_BREAK_MAX_LOSS_PER_TRADE_KRW` | `text` | NULL | NULL | 박스권돌파: 최대 LOSS PER TRADE 원 (RANGE_BREAK_MAX_LOSS_PER_TRADE_KRW) |
| `RANGE_BREAK_SLOT_MONEY` | `text` | NULL | NULL | 박스권돌파: 슬롯금액 (RANGE_BREAK_SLOT_MONEY) |
| `RANGE_BREAK_MAX_BUY_AMOUNT` | `text` | NULL | NULL | 박스권돌파: 1회최대매수금액 (RANGE_BREAK_MAX_BUY_AMOUNT) |
| `RANGE_BREAK_MIN_INVEST_RATIO_OF_SLOT` | `text` | NULL | NULL | 박스권돌파: 최소 INVEST RATIO OF SLOT (RANGE_BREAK_MIN_INVEST_RATIO_OF_SLOT) |
| `RANGE_BREAK_FORCE_EOD_EXIT` | `text` | NULL | NULL | 박스권돌파: FORCE 장마감 EXIT (RANGE_BREAK_FORCE_EOD_EXIT) |
| `KIS_RANGE_BREAK_MM_CHANNEL` | `text` | NULL | NULL | 박스권돌파: KIS RANGE BREAK MM CHANNEL (KIS_RANGE_BREAK_MM_CHANNEL) |
| `RANGE_BREAK_MAX_STOCKS` | `text` | NULL | NULL | 박스권돌파: 동시보유상한 (RANGE_BREAK_MAX_STOCKS) |
| `RANGE_BREAK_TOTAL_BUDGET_KRW` | `text` | NULL | NULL | 박스권돌파: 총운용한도 원 (RANGE_BREAK_TOTAL_BUDGET_KRW) |
| `RANGE_BREAK_DAILY_PROFIT_TARGET_ENABLED` | `text` | NULL | NULL | 박스권돌파: 일일익절 목표 ON/OFF (RANGE_BREAK_DAILY_PROFIT_TARGET_ENABLED) |
| `RANGE_BREAK_DAILY_PROFIT_TARGET_KRW` | `text` | NULL | NULL | 박스권돌파: 일일익절 목표 원 (RANGE_BREAK_DAILY_PROFIT_TARGET_KRW) |
| `RANGE_BREAK_DAILY_PROFIT_TARGET_PCT` | `text` | NULL | NULL | 박스권돌파: 일일익절 목표 % (RANGE_BREAK_DAILY_PROFIT_TARGET_PCT) |
| `RANGE_BREAK_DAILY_PROFIT_HALT_NEW_BUYS` | `text` | NULL | NULL | 박스권돌파: 일일익절 중단 NEW BUYS (RANGE_BREAK_DAILY_PROFIT_HALT_NEW_BUYS) |
| `RANGE_BREAK_DAILY_PROFIT_MODE` | `text` | NULL | NULL | 박스권돌파: 일일익절 모드 (RANGE_BREAK_DAILY_PROFIT_MODE) |
| `RANGE_BREAK_DAILY_PROFIT_TRAIL_TIERS` | `text` | NULL | NULL | 박스권돌파: 일일익절 트레일 다단 (RANGE_BREAK_DAILY_PROFIT_TRAIL_TIERS) |
| `RANGE_BREAK_DAILY_PROFIT_TRAIL_DROP_PCT` | `text` | NULL | NULL | 박스권돌파: 일일익절 트레일 되돌림/하락 % (RANGE_BREAK_DAILY_PROFIT_TRAIL_DROP_PCT) |
| `RANGE_BREAK_DAILY_PROFIT_TRAIL_ARM_KRW` | `text` | NULL | NULL | 박스권돌파: 일일익절 트레일무장 원 (RANGE_BREAK_DAILY_PROFIT_TRAIL_ARM_KRW) |
| `RANGE_BREAK_DAILY_PROFIT_TRAIL_ARM_PCT` | `text` | NULL | NULL | 박스권돌파: 일일익절 트레일무장 % (RANGE_BREAK_DAILY_PROFIT_TRAIL_ARM_PCT) |
| `RANGE_BREAK_BACKTEST_USE_TICK_EXIT` | `text` | NULL | NULL | 박스돌파 틱 청산 · ON=ws_ticks 시간순 청산 · OFF=OHLC intrabar |
| `RANGE_BREAK_BACKTEST_TICK_FALLBACK_OHLC` | `text` | NULL | NULL | ⚠ 박스돌파 OHLC 폴백 (정합위험·금지) · 절대금지 — 틱 청산 ON 시 엔진 무시 |
| `RANGE_BREAK_BACKTEST_POLL_MS` | `text` | NULL | NULL | 박스돌파 틱청산 폴링(ms) · 실매 폴링 정합 · 하한 50ms |
| `RANGE_BREAK_BACKTEST_SELL_SLIP_PCT` | `text` | NULL | NULL | 박스권돌파: BACKTEST SELL SLIP % (RANGE_BREAK_BACKTEST_SELL_SLIP_PCT) |
| `RANGE_BREAK_DAILY_PROFIT_RISK_BUDGET_ENABLED` | `text` | NULL | NULL | 박스권돌파: 일일익절 RISK 한도 ON/OFF (RANGE_BREAK_DAILY_PROFIT_RISK_BUDGET_ENABLED) |
| `RANGE_BREAK_DAILY_PROFIT_RISK_BUDGET_COOLDOWN_SEC` | `text` | NULL | NULL | 박스권돌파: 일일익절 RISK 한도 쿨다운 초 (RANGE_BREAK_DAILY_PROFIT_RISK_BUDGET_COOLDOWN_SEC) |
| `RANGE_BREAK_TICK_SELL_ENABLED` | `text` | NULL | NULL | 박스권돌파: 틱매도 ON/OFF (RANGE_BREAK_TICK_SELL_ENABLED) |
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `config_range_break` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`created_at` varchar(30) NOT NULL,
`STRATEGY_RANGE_BREAK_ENABLED` text DEFAULT NULL,
`RANGE_BREAK_LIVE_BACKTEST_ALIGN` text DEFAULT NULL,
`RANGE_BREAK_LIVE_SIGNAL_LOOKBACK_BARS` text DEFAULT NULL,
`RANGE_BREAK_UNIVERSE_SOURCE` text DEFAULT NULL,
`RANK_RANGE_BREAK_SORT` text DEFAULT NULL,
`RANK_RANGE_BREAK_LIMIT` text DEFAULT NULL,
`CONDITION_RANGE_BREAK_NAME` text DEFAULT NULL,
`CONDITION_RANGE_BREAK_SEQ` text DEFAULT NULL,
`RANGE_BREAK_CAND_LIMIT` text DEFAULT NULL,
`RANGE_BREAK_BOX_LOOKBACK_MIN` text DEFAULT NULL,
`RANGE_BREAK_BOX_MAX_WIDTH_PCT` text DEFAULT NULL,
`RANGE_BREAK_BOX_MIN_WIDTH_PCT` text DEFAULT NULL,
`RANGE_BREAK_SETUP_VOL_MAX_MULT` text DEFAULT NULL,
`RANGE_BREAK_SETUP_BEAR_BARS_MIN` text DEFAULT NULL,
`RANGE_BREAK_VOL_MULT` text DEFAULT NULL,
`RANGE_BREAK_VOL_WIN` text DEFAULT NULL,
`RANGE_BREAK_VOL_BASELINE_WIN` text DEFAULT NULL,
`RANGE_BREAK_BREAK_MARGIN_PCT` text DEFAULT NULL,
`RANGE_BREAK_BODY_MIN_PCT` text DEFAULT NULL,
`RANGE_BREAK_TIME_START` text DEFAULT NULL,
`RANGE_BREAK_TIME_END_HM` text DEFAULT NULL,
`RANGE_BREAK_STOP_LOSS_PCT` text DEFAULT NULL,
`RANGE_BREAK_TAKE_PROFIT_PCT` text DEFAULT NULL,
`RANGE_BREAK_TRAIL_PCT` text DEFAULT NULL,
`RANGE_BREAK_TRAIL_ARM_PCT` text DEFAULT NULL,
`RANGE_BREAK_SHOULDER_MIN_HIGH_PCT` text DEFAULT NULL,
`RANGE_BREAK_SHOULDER_CUT_PCT` text DEFAULT NULL,
`RANGE_BREAK_MAX_HOLD_BARS` text DEFAULT NULL,
`RANGE_BREAK_MAX_DAILY` text DEFAULT NULL,
`RANGE_BREAK_COOLDOWN_SEC` text DEFAULT NULL,
`RANGE_BREAK_MAX_DAILY_CHG` text DEFAULT NULL,
`RANGE_BREAK_MIN_PRICE` text DEFAULT NULL,
`RANGE_BREAK_HIGH_CHASE_THR` text DEFAULT NULL,
`RANGE_BREAK_USE_HIGH_CHASE_FILTER` text DEFAULT NULL,
`RANGE_BREAK_MAX_LOSS_PER_TRADE_KRW` text DEFAULT NULL,
`RANGE_BREAK_SLOT_MONEY` text DEFAULT NULL,
`RANGE_BREAK_MAX_BUY_AMOUNT` text DEFAULT NULL,
`RANGE_BREAK_MIN_INVEST_RATIO_OF_SLOT` text DEFAULT NULL,
`RANGE_BREAK_FORCE_EOD_EXIT` text DEFAULT NULL,
`KIS_RANGE_BREAK_MM_CHANNEL` text DEFAULT NULL,
`RANGE_BREAK_MAX_STOCKS` text DEFAULT NULL,
`RANGE_BREAK_TOTAL_BUDGET_KRW` text DEFAULT NULL,
`RANGE_BREAK_DAILY_PROFIT_TARGET_ENABLED` text DEFAULT NULL,
`RANGE_BREAK_DAILY_PROFIT_TARGET_KRW` text DEFAULT NULL,
`RANGE_BREAK_DAILY_PROFIT_TARGET_PCT` text DEFAULT NULL,
`RANGE_BREAK_DAILY_PROFIT_HALT_NEW_BUYS` text DEFAULT NULL,
`RANGE_BREAK_DAILY_PROFIT_MODE` text DEFAULT NULL,
`RANGE_BREAK_DAILY_PROFIT_TRAIL_TIERS` text DEFAULT NULL,
`RANGE_BREAK_DAILY_PROFIT_TRAIL_DROP_PCT` text DEFAULT NULL,
`RANGE_BREAK_DAILY_PROFIT_TRAIL_ARM_KRW` text DEFAULT NULL,
`RANGE_BREAK_DAILY_PROFIT_TRAIL_ARM_PCT` text DEFAULT NULL,
`RANGE_BREAK_BACKTEST_USE_TICK_EXIT` text DEFAULT NULL,
`RANGE_BREAK_BACKTEST_TICK_FALLBACK_OHLC` text DEFAULT NULL,
`RANGE_BREAK_BACKTEST_POLL_MS` text DEFAULT NULL,
`RANGE_BREAK_BACKTEST_SELL_SLIP_PCT` text DEFAULT NULL,
`RANGE_BREAK_DAILY_PROFIT_RISK_BUDGET_ENABLED` text DEFAULT NULL,
`RANGE_BREAK_DAILY_PROFIT_RISK_BUDGET_COOLDOWN_SEC` text DEFAULT NULL,
`RANGE_BREAK_TICK_SELL_ENABLED` text DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=307 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
#### `config_dbband`
**PK**: `id` | AUTO_INCREMENT=319
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `int(11)` | NOT NULL | | PK · AUTO_INCREMENT |
| `created_at` | `varchar(30)` | NOT NULL | | 설정행 생성시각 |
| `DBBAND_BB_PERIOD` | `text` | NULL | NULL | 더블BB: BB 기간 (DBBAND_BB_PERIOD) |
| `DBBAND_BB_INNER_STD` | `text` | NULL | NULL | 더블BB: BB INNER STD (DBBAND_BB_INNER_STD) |
| `DBBAND_BB_OUTER_STD` | `text` | NULL | NULL | 더블BB: BB OUTER STD (DBBAND_BB_OUTER_STD) |
| `DBBAND_TREND_MA_PERIOD` | `text` | NULL | NULL | 더블BB: TREND MA 기간 (DBBAND_TREND_MA_PERIOD) |
| `DBBAND_USE_TREND_FILTER` | `text` | NULL | NULL | 더블BB: 사용_ TREND 필터 (DBBAND_USE_TREND_FILTER) |
| `DBBAND_SIDE_MODE` | `text` | NULL | NULL | 더블BB: SIDE 모드 (DBBAND_SIDE_MODE) |
| `DBBAND_ENTRY_VALID_BARS` | `text` | NULL | NULL | 더블BB: ENTRY VALID 봉수 (DBBAND_ENTRY_VALID_BARS) |
| `DBBAND_ENTRY_MODE` | `text` | NULL | NULL | 더블BB: ENTRY 모드 (DBBAND_ENTRY_MODE) |
| `DBBAND_STOP_MODE` | `text` | NULL | NULL | 더블BB: STOP 모드 (DBBAND_STOP_MODE) |
| `DBBAND_STOP_BUFFER_PCT` | `text` | NULL | NULL | 더블BB: STOP BUFFER % (DBBAND_STOP_BUFFER_PCT) |
| `DBBAND_STOP_LOSS_PCT` | `text` | NULL | NULL | 더블BB: 손절 % (DBBAND_STOP_LOSS_PCT) |
| `DBBAND_TP_MODE` | `text` | NULL | NULL | 더블BB: TP 모드 (DBBAND_TP_MODE) |
| `DBBAND_TAKE_PROFIT_PCT` | `text` | NULL | NULL | 더블BB: 익절 % (DBBAND_TAKE_PROFIT_PCT) |
| `DBBAND_RR_RATIO` | `text` | NULL | NULL | 더블BB: RR RATIO (DBBAND_RR_RATIO) |
| `DBBAND_SHOULDER_MIN_HIGH_PCT` | `text` | NULL | NULL | 더블BB: 어깨무장고점 % (DBBAND_SHOULDER_MIN_HIGH_PCT) |
| `DBBAND_SHOULDER_CUT_PCT` | `text` | NULL | NULL | 더블BB: 어깨컷 % (DBBAND_SHOULDER_CUT_PCT) |
| `DBBAND_TRAIL_PCT` | `text` | NULL | NULL | 더블BB: 트레일 % (DBBAND_TRAIL_PCT) |
| `DBBAND_TRAIL_ARM_PCT` | `text` | NULL | NULL | 더블BB: 트레일무장 % (DBBAND_TRAIL_ARM_PCT) |
| `DBBAND_TIME_START` | `text` | NULL | NULL | 더블BB: 매수시작 (DBBAND_TIME_START) |
| `DBBAND_TIME_END` | `text` | NULL | NULL | 더블BB: 매수종료 (DBBAND_TIME_END) |
| `DBBAND_COOLDOWN_SEC` | `text` | NULL | NULL | 더블BB: 쿨다운 초 (DBBAND_COOLDOWN_SEC) |
| `DBBAND_MAX_DAILY` | `text` | NULL | NULL | 더블BB: 일일매수횟수상한 (DBBAND_MAX_DAILY) |
| `DBBAND_MIN_PRICE` | `text` | NULL | NULL | 더블BB: 최소가격 (DBBAND_MIN_PRICE) |
| `DBBAND_SLOT_MONEY` | `text` | NULL | NULL | 더블BB: 슬롯금액 (DBBAND_SLOT_MONEY) |
| `DBBAND_MAX_STOCKS` | `text` | NULL | NULL | 더블BB: 동시보유상한 (DBBAND_MAX_STOCKS) |
| `DBBAND_TOTAL_BUDGET_KRW` | `text` | NULL | NULL | 더블BB: 총운용한도 원 (DBBAND_TOTAL_BUDGET_KRW) |
| `DBBAND_MAX_BUY_AMOUNT` | `text` | NULL | NULL | 더블BB: 1회최대매수금액 (DBBAND_MAX_BUY_AMOUNT) |
| `DBBAND_MAX_HOLD_BARS` | `text` | NULL | NULL | 더블BB: 최대보유봉 (DBBAND_MAX_HOLD_BARS) |
| `DBBAND_TIMEFRAME` | `text` | NULL | NULL | 더블BB: TIMEFRAME (DBBAND_TIMEFRAME) |
| `DBBAND_MIN_INVEST_RATIO_OF_SLOT` | `text` | NULL | NULL | 더블BB: 최소 INVEST RATIO OF SLOT (DBBAND_MIN_INVEST_RATIO_OF_SLOT) |
| `DBBAND_FORCE_EOD_EXIT` | `text` | NULL | NULL | 더블BB: FORCE 장마감 EXIT (DBBAND_FORCE_EOD_EXIT) |
| `DBBAND_LIVE_MIN_CANDLES` | `text` | NULL | NULL | 더블BB: 실매최소봉수 (DBBAND_LIVE_MIN_CANDLES) |
| `DBBAND_LIVE_SIGNAL_LOOKBACK_BARS` | `text` | NULL | NULL | 더블BB: LIVE SIGNAL LOOKBACK 봉수 (DBBAND_LIVE_SIGNAL_LOOKBACK_BARS) |
| `DBBAND_UNIVERSE_SOURCE` | `text` | NULL | NULL | 더블BB: 유니버스소스 (DBBAND_UNIVERSE_SOURCE) |
| `DBBAND_CANDLE_FETCH_N` | `text` | NULL | NULL | 더블BB: CANDLE FETCH N (DBBAND_CANDLE_FETCH_N) |
| `STRATEGY_DBBAND_ENABLED` | `text` | NULL | NULL | 더블BB ON/OFF. 다음루프 신규매수중단(보유청산유지). WS구독해제 안함 |
| `KIS_DBBAND_MM_CHANNEL` | `text` | NULL | NULL | 더블BB: KIS DBBAND MM CHANNEL (KIS_DBBAND_MM_CHANNEL) |
| `RANK_DBBAND_SORT` | `text` | NULL | NULL | 더블BB: RANK DBBAND SORT (RANK_DBBAND_SORT) |
| `RANK_DBBAND_LIMIT` | `text` | NULL | NULL | 더블BB: RANK DBBAND LIMIT (RANK_DBBAND_LIMIT) |
| `CONDITION_DBBAND_NAME` | `text` | NULL | NULL | 더블BB: CONDITION DBBAND NAME (CONDITION_DBBAND_NAME) |
| `CONDITION_DBBAND_SEQ` | `text` | NULL | NULL | 더블BB: CONDITION DBBAND SEQ (CONDITION_DBBAND_SEQ) |
| `DBBAND_GRID_BB_PERIOD0` | `text` | NULL | NULL | 더블BB: GRID BB 기간 0 (DBBAND_GRID_BB_PERIOD0) |
| `DBBAND_GRID_BB_PERIOD1` | `text` | NULL | NULL | 더블BB: GRID BB 기간 1 (DBBAND_GRID_BB_PERIOD1) |
| `DBBAND_GRID_INNER_STD0` | `text` | NULL | NULL | 더블BB: GRID INNER STD0 (DBBAND_GRID_INNER_STD0) |
| `DBBAND_GRID_INNER_STD1` | `text` | NULL | NULL | 더블BB: GRID INNER STD1 (DBBAND_GRID_INNER_STD1) |
| `DBBAND_GRID_OUTER_STD0` | `text` | NULL | NULL | 더블BB: GRID OUTER STD0 (DBBAND_GRID_OUTER_STD0) |
| `DBBAND_GRID_OUTER_STD1` | `text` | NULL | NULL | 더블BB: GRID OUTER STD1 (DBBAND_GRID_OUTER_STD1) |
| `DBBAND_GRID_TREND_MA0` | `text` | NULL | NULL | 더블BB: GRID TREND MA0 (DBBAND_GRID_TREND_MA0) |
| `DBBAND_GRID_TREND_MA1` | `text` | NULL | NULL | 더블BB: GRID TREND MA1 (DBBAND_GRID_TREND_MA1) |
| `DBBAND_GRID_SL0` | `text` | NULL | NULL | 더블BB: GRID SL0 (DBBAND_GRID_SL0) |
| `DBBAND_GRID_SL1` | `text` | NULL | NULL | 더블BB: GRID SL1 (DBBAND_GRID_SL1) |
| `DBBAND_GRID_TP0` | `text` | NULL | NULL | 더블BB: GRID TP0 (DBBAND_GRID_TP0) |
| `DBBAND_GRID_TP1` | `text` | NULL | NULL | 더블BB: GRID TP1 (DBBAND_GRID_TP1) |
| `DBBAND_GRID_RR0` | `text` | NULL | NULL | 더블BB: GRID RR0 (DBBAND_GRID_RR0) |
| `DBBAND_GRID_RR1` | `text` | NULL | NULL | 더블BB: GRID RR1 (DBBAND_GRID_RR1) |
| `DBBAND_EXIT_MODE` | `text` | NULL | NULL | 더블BB: EXIT 모드 (DBBAND_EXIT_MODE) |
| `DBBAND_DAILY_PROFIT_TARGET_ENABLED` | `text` | NULL | NULL | 더블BB: 일일익절 목표 ON/OFF (DBBAND_DAILY_PROFIT_TARGET_ENABLED) |
| `DBBAND_DAILY_PROFIT_TARGET_KRW` | `text` | NULL | NULL | 더블BB: 일일익절 목표 원 (DBBAND_DAILY_PROFIT_TARGET_KRW) |
| `DBBAND_DAILY_PROFIT_TARGET_PCT` | `text` | NULL | NULL | 더블BB: 일일익절 목표 % (DBBAND_DAILY_PROFIT_TARGET_PCT) |
| `DBBAND_DAILY_PROFIT_HALT_NEW_BUYS` | `text` | NULL | NULL | 더블BB: 일일익절 중단 NEW BUYS (DBBAND_DAILY_PROFIT_HALT_NEW_BUYS) |
| `DBBAND_DAILY_PROFIT_MODE` | `text` | NULL | NULL | 더블BB: 일일익절 모드 (DBBAND_DAILY_PROFIT_MODE) |
| `DBBAND_DAILY_PROFIT_TRAIL_TIERS` | `text` | NULL | NULL | 더블BB: 일일익절 트레일 다단 (DBBAND_DAILY_PROFIT_TRAIL_TIERS) |
| `DBBAND_DAILY_PROFIT_TRAIL_DROP_PCT` | `text` | NULL | NULL | 더블BB: 일일익절 트레일 되돌림/하락 % (DBBAND_DAILY_PROFIT_TRAIL_DROP_PCT) |
| `DBBAND_DAILY_PROFIT_TRAIL_ARM_KRW` | `text` | NULL | NULL | 더블BB: 일일익절 트레일무장 원 (DBBAND_DAILY_PROFIT_TRAIL_ARM_KRW) |
| `DBBAND_DAILY_PROFIT_TRAIL_ARM_PCT` | `text` | NULL | NULL | 더블BB: 일일익절 트레일무장 % (DBBAND_DAILY_PROFIT_TRAIL_ARM_PCT) |
| `DBBAND_BACKTEST_USE_TICK_EXIT` | `text` | NULL | NULL | 더블BB 틱 청산 · ON=ws_ticks 시간순 청산 · OFF=봉 OHLC 1회 |
| `DBBAND_BACKTEST_TICK_FALLBACK_OHLC` | `text` | NULL | NULL | ⚠ 더블BB OHLC 폴백 (정합위험·금지) · 절대금지 — 틱 청산 ON 시 엔진 무시 |
| `DBBAND_BACKTEST_POLL_MS` | `text` | NULL | NULL | 더블BB 틱청산 폴링(ms) · 실매 폴링 정합 · 하한 50ms |
| `DBBAND_BACKTEST_SELL_SLIP_PCT` | `text` | NULL | NULL | 더블BB: BACKTEST SELL SLIP % (DBBAND_BACKTEST_SELL_SLIP_PCT) |
| `DBBAND_DAILY_PROFIT_RISK_BUDGET_ENABLED` | `text` | NULL | NULL | 더블BB: 일일익절 RISK 한도 ON/OFF (DBBAND_DAILY_PROFIT_RISK_BUDGET_ENABLED) |
| `DBBAND_DAILY_PROFIT_RISK_BUDGET_COOLDOWN_SEC` | `text` | NULL | NULL | 더블BB: 일일익절 RISK 한도 쿨다운 초 (DBBAND_DAILY_PROFIT_RISK_BUDGET_COOLDOWN_SEC) |
| `DBBAND_TICK_SELL_ENABLED` | `text` | NULL | NULL | 더블BB: 틱매도 ON/OFF (DBBAND_TICK_SELL_ENABLED) |
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `config_dbband` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`created_at` varchar(30) NOT NULL,
`DBBAND_BB_PERIOD` text DEFAULT NULL,
`DBBAND_BB_INNER_STD` text DEFAULT NULL,
`DBBAND_BB_OUTER_STD` text DEFAULT NULL,
`DBBAND_TREND_MA_PERIOD` text DEFAULT NULL,
`DBBAND_USE_TREND_FILTER` text DEFAULT NULL,
`DBBAND_SIDE_MODE` text DEFAULT NULL,
`DBBAND_ENTRY_VALID_BARS` text DEFAULT NULL,
`DBBAND_ENTRY_MODE` text DEFAULT NULL,
`DBBAND_STOP_MODE` text DEFAULT NULL,
`DBBAND_STOP_BUFFER_PCT` text DEFAULT NULL,
`DBBAND_STOP_LOSS_PCT` text DEFAULT NULL,
`DBBAND_TP_MODE` text DEFAULT NULL,
`DBBAND_TAKE_PROFIT_PCT` text DEFAULT NULL,
`DBBAND_RR_RATIO` text DEFAULT NULL,
`DBBAND_SHOULDER_MIN_HIGH_PCT` text DEFAULT NULL,
`DBBAND_SHOULDER_CUT_PCT` text DEFAULT NULL,
`DBBAND_TRAIL_PCT` text DEFAULT NULL,
`DBBAND_TRAIL_ARM_PCT` text DEFAULT NULL,
`DBBAND_TIME_START` text DEFAULT NULL,
`DBBAND_TIME_END` text DEFAULT NULL,
`DBBAND_COOLDOWN_SEC` text DEFAULT NULL,
`DBBAND_MAX_DAILY` text DEFAULT NULL,
`DBBAND_MIN_PRICE` text DEFAULT NULL,
`DBBAND_SLOT_MONEY` text DEFAULT NULL,
`DBBAND_MAX_STOCKS` text DEFAULT NULL,
`DBBAND_TOTAL_BUDGET_KRW` text DEFAULT NULL,
`DBBAND_MAX_BUY_AMOUNT` text DEFAULT NULL,
`DBBAND_MAX_HOLD_BARS` text DEFAULT NULL,
`DBBAND_TIMEFRAME` text DEFAULT NULL,
`DBBAND_MIN_INVEST_RATIO_OF_SLOT` text DEFAULT NULL,
`DBBAND_FORCE_EOD_EXIT` text DEFAULT NULL,
`DBBAND_LIVE_MIN_CANDLES` text DEFAULT NULL,
`DBBAND_LIVE_SIGNAL_LOOKBACK_BARS` text DEFAULT NULL,
`DBBAND_UNIVERSE_SOURCE` text DEFAULT NULL,
`DBBAND_CANDLE_FETCH_N` text DEFAULT NULL,
`STRATEGY_DBBAND_ENABLED` text DEFAULT NULL,
`KIS_DBBAND_MM_CHANNEL` text DEFAULT NULL,
`RANK_DBBAND_SORT` text DEFAULT NULL,
`RANK_DBBAND_LIMIT` text DEFAULT NULL,
`CONDITION_DBBAND_NAME` text DEFAULT NULL,
`CONDITION_DBBAND_SEQ` text DEFAULT NULL,
`DBBAND_GRID_BB_PERIOD0` text DEFAULT NULL,
`DBBAND_GRID_BB_PERIOD1` text DEFAULT NULL,
`DBBAND_GRID_INNER_STD0` text DEFAULT NULL,
`DBBAND_GRID_INNER_STD1` text DEFAULT NULL,
`DBBAND_GRID_OUTER_STD0` text DEFAULT NULL,
`DBBAND_GRID_OUTER_STD1` text DEFAULT NULL,
`DBBAND_GRID_TREND_MA0` text DEFAULT NULL,
`DBBAND_GRID_TREND_MA1` text DEFAULT NULL,
`DBBAND_GRID_SL0` text DEFAULT NULL,
`DBBAND_GRID_SL1` text DEFAULT NULL,
`DBBAND_GRID_TP0` text DEFAULT NULL,
`DBBAND_GRID_TP1` text DEFAULT NULL,
`DBBAND_GRID_RR0` text DEFAULT NULL,
`DBBAND_GRID_RR1` text DEFAULT NULL,
`DBBAND_EXIT_MODE` text DEFAULT NULL,
`DBBAND_DAILY_PROFIT_TARGET_ENABLED` text DEFAULT NULL,
`DBBAND_DAILY_PROFIT_TARGET_KRW` text DEFAULT NULL,
`DBBAND_DAILY_PROFIT_TARGET_PCT` text DEFAULT NULL,
`DBBAND_DAILY_PROFIT_HALT_NEW_BUYS` text DEFAULT NULL,
`DBBAND_DAILY_PROFIT_MODE` text DEFAULT NULL,
`DBBAND_DAILY_PROFIT_TRAIL_TIERS` text DEFAULT NULL,
`DBBAND_DAILY_PROFIT_TRAIL_DROP_PCT` text DEFAULT NULL,
`DBBAND_DAILY_PROFIT_TRAIL_ARM_KRW` text DEFAULT NULL,
`DBBAND_DAILY_PROFIT_TRAIL_ARM_PCT` text DEFAULT NULL,
`DBBAND_BACKTEST_USE_TICK_EXIT` text DEFAULT NULL,
`DBBAND_BACKTEST_TICK_FALLBACK_OHLC` text DEFAULT NULL,
`DBBAND_BACKTEST_POLL_MS` text DEFAULT NULL,
`DBBAND_BACKTEST_SELL_SLIP_PCT` text DEFAULT NULL,
`DBBAND_DAILY_PROFIT_RISK_BUDGET_ENABLED` text DEFAULT NULL,
`DBBAND_DAILY_PROFIT_RISK_BUDGET_COOLDOWN_SEC` text DEFAULT NULL,
`DBBAND_TICK_SELL_ENABLED` text DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=319 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
#### `config_dart`
**PK**: `id` | AUTO_INCREMENT=114
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `int(11)` | NOT NULL | | PK · AUTO_INCREMENT |
| `created_at` | `varchar(30)` | NOT NULL | | 설정행 생성시각 |
| `STRATEGY_DART_ENABLED` | `text` | NULL | NULL | DART수주 ON/OFF. 다음루프 신규매수중단(보유청산유지). WS구독해제 안함 |
| `KIS_DART_MM_CHANNEL` | `text` | NULL | NULL | KIS DART MM CHANNEL (KIS_DART_MM_CHANNEL) |
| `DART_SCAN_ENABLED` | `text` | NULL | NULL | DART: SCAN ON/OFF (DART_SCAN_ENABLED) |
| `DART_ENABLED` | `text` | NULL | NULL | DART: ON/OFF (DART_ENABLED) |
| `DART_POLL_SEC` | `text` | NULL | NULL | DART: POLL 초 (DART_POLL_SEC) |
| `DART_LOOKBACK_DAYS` | `text` | NULL | NULL | DART: LOOKBACK DAYS (DART_LOOKBACK_DAYS) |
| `DART_MM_CHANNEL` | `text` | NULL | NULL | DART: MM CHANNEL (DART_MM_CHANNEL) |
| `DART_SAVE_CANDIDATES` | `text` | NULL | NULL | DART: SAVE CANDIDATES (DART_SAVE_CANDIDATES) |
| `DART_REPORT_NAME_KEYWORDS` | `text` | NULL | NULL | DART: REPORT NAME KEYWORDS (DART_REPORT_NAME_KEYWORDS) |
| `DART_SKIP_CORRECTION` | `text` | NULL | NULL | DART: SKIP CORRECTION (DART_SKIP_CORRECTION) |
| `DART_LISTED_ONLY` | `text` | NULL | NULL | DART: LISTED ONLY (DART_LISTED_ONLY) |
| `DART_LIST_MAX_PAGES` | `text` | NULL | NULL | DART: LIST 최대 PAGES (DART_LIST_MAX_PAGES) |
| `DART_SUBSCRIBE_ENABLED` | `text` | NULL | NULL | DART: SUBSCRIBE ON/OFF (DART_SUBSCRIBE_ENABLED) |
| `DART_WATCH_TTL_HOURS` | `text` | NULL | NULL | DART: WATCH TTL HOURS (DART_WATCH_TTL_HOURS) |
| `DART_WATCH_MAX` | `text` | NULL | NULL | DART: WATCH 최대 (DART_WATCH_MAX) |
| `DART_TRADE_ENABLED` | `text` | NULL | NULL | DART: TRADE ON/OFF (DART_TRADE_ENABLED) |
| `DART_SLOT_MONEY` | `text` | NULL | NULL | DART: 슬롯금액 (DART_SLOT_MONEY) |
| `DART_MAX_STOCKS` | `text` | NULL | NULL | DART: 동시보유상한 (DART_MAX_STOCKS) |
| `DART_TOTAL_BUDGET_KRW` | `text` | NULL | NULL | DART: 총운용한도 원 (DART_TOTAL_BUDGET_KRW) |
| `DART_MAX_BUY_AMOUNT` | `text` | NULL | NULL | DART: 1회최대매수금액 (DART_MAX_BUY_AMOUNT) |
| `DART_MIN_INVEST_RATIO_OF_SLOT` | `text` | NULL | NULL | DART: 최소 INVEST RATIO OF SLOT (DART_MIN_INVEST_RATIO_OF_SLOT) |
| `DART_CAND_LIMIT` | `text` | NULL | NULL | DART: 후보상한 (DART_CAND_LIMIT) |
| `DART_TIME_START` | `text` | NULL | NULL | DART: 매수시작 (DART_TIME_START) |
| `DART_TIME_END` | `text` | NULL | NULL | DART: 매수종료 (DART_TIME_END) |
| `DART_RSI_PERIOD` | `text` | NULL | NULL | DART: RSI 기간 (DART_RSI_PERIOD) |
| `DART_RSI_OVERSOLD` | `text` | NULL | NULL | DART: RSI과매도 (DART_RSI_OVERSOLD) |
| `DART_RSI_RECLAIM` | `text` | NULL | NULL | DART: RSI RECLAIM (DART_RSI_RECLAIM) |
| `DART_STOP_LOSS_PCT` | `text` | NULL | NULL | DART: 손절 % (DART_STOP_LOSS_PCT) |
| `DART_TAKE_PROFIT_PCT` | `text` | NULL | NULL | DART: 익절 % (DART_TAKE_PROFIT_PCT) |
| `DART_TRAIL_PCT` | `text` | NULL | NULL | DART: 트레일 % (DART_TRAIL_PCT) |
| `DART_TRAIL_ARM_PCT` | `text` | NULL | NULL | DART: 트레일무장 % (DART_TRAIL_ARM_PCT) |
| `DART_MAX_HOLD_BARS` | `text` | NULL | NULL | DART: 최대보유봉 (DART_MAX_HOLD_BARS) |
| `DART_EVENT_WINDOW_BARS` | `text` | NULL | NULL | DART: EVENT 윈도우 봉수 (DART_EVENT_WINDOW_BARS) |
| `DART_MIN_PRICE` | `text` | NULL | NULL | DART: 최소가격 (DART_MIN_PRICE) |
| `DART_VOL_MULT` | `text` | NULL | NULL | DART: 거래량배수 (DART_VOL_MULT) |
| `DART_VOL_WINDOW` | `text` | NULL | NULL | DART: 거래량윈도우 DOW (DART_VOL_WINDOW) |
| `DART_MAX_LOSS_PER_TRADE_KRW` | `text` | NULL | NULL | DART: 최대 LOSS PER TRADE 원 (DART_MAX_LOSS_PER_TRADE_KRW) |
| `DART_FORCE_EOD_EXIT` | `text` | NULL | NULL | DART: FORCE 장마감 EXIT (DART_FORCE_EOD_EXIT) |
| `DART_BACKTEST_USE_TICK_EXIT` | `text` | NULL | NULL | DART: BACKTEST 사용_ TICK EXIT (DART_BACKTEST_USE_TICK_EXIT) |
| `DART_BACKTEST_TICK_FALLBACK_OHLC` | `text` | NULL | NULL | DART: BACKTEST 틱없을때OHLC폴백(위험) (DART_BACKTEST_TICK_FALLBACK_OHLC) |
| `DART_QUALITY_FILTER_ENABLED` | `text` | NULL | NULL | DART: QUALITY 필터 ON/OFF (DART_QUALITY_FILTER_ENABLED) |
| `DART_EXCLUDE_CORP_KEYWORDS` | `text` | NULL | NULL | DART: EXCLUDE CORP KEYWORDS (DART_EXCLUDE_CORP_KEYWORDS) |
| `DART_EXCLUDE_CONTENT_KEYWORDS` | `text` | NULL | NULL | DART: EXCLUDE CONTENT KEYWORDS (DART_EXCLUDE_CONTENT_KEYWORDS) |
| `DART_MIN_SALES_PCT` | `text` | NULL | NULL | DART: 최소 SALES % (DART_MIN_SALES_PCT) |
| `DART_SKIP_IF_SALES_PCT_UNKNOWN` | `text` | NULL | NULL | DART: SKIP IF SALES % UNKNOWN (DART_SKIP_IF_SALES_PCT_UNKNOWN) |
| `DART_THEME_KEYWORDS` | `text` | NULL | NULL | DART: THEME KEYWORDS (DART_THEME_KEYWORDS) |
| `DART_REQUIRE_THEME` | `text` | NULL | NULL | DART: REQUIRE THEME (DART_REQUIRE_THEME) |
| `DART_FETCH_DOCUMENT` | `text` | NULL | NULL | DART: FETCH DOCUMENT (DART_FETCH_DOCUMENT) |
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `config_dart` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`created_at` varchar(30) NOT NULL,
`STRATEGY_DART_ENABLED` text DEFAULT NULL,
`KIS_DART_MM_CHANNEL` text DEFAULT NULL,
`DART_SCAN_ENABLED` text DEFAULT NULL,
`DART_ENABLED` text DEFAULT NULL,
`DART_POLL_SEC` text DEFAULT NULL,
`DART_LOOKBACK_DAYS` text DEFAULT NULL,
`DART_MM_CHANNEL` text DEFAULT NULL,
`DART_SAVE_CANDIDATES` text DEFAULT NULL,
`DART_REPORT_NAME_KEYWORDS` text DEFAULT NULL,
`DART_SKIP_CORRECTION` text DEFAULT NULL,
`DART_LISTED_ONLY` text DEFAULT NULL,
`DART_LIST_MAX_PAGES` text DEFAULT NULL,
`DART_SUBSCRIBE_ENABLED` text DEFAULT NULL,
`DART_WATCH_TTL_HOURS` text DEFAULT NULL,
`DART_WATCH_MAX` text DEFAULT NULL,
`DART_TRADE_ENABLED` text DEFAULT NULL,
`DART_SLOT_MONEY` text DEFAULT NULL,
`DART_MAX_STOCKS` text DEFAULT NULL,
`DART_TOTAL_BUDGET_KRW` text DEFAULT NULL,
`DART_MAX_BUY_AMOUNT` text DEFAULT NULL,
`DART_MIN_INVEST_RATIO_OF_SLOT` text DEFAULT NULL,
`DART_CAND_LIMIT` text DEFAULT NULL,
`DART_TIME_START` text DEFAULT NULL,
`DART_TIME_END` text DEFAULT NULL,
`DART_RSI_PERIOD` text DEFAULT NULL,
`DART_RSI_OVERSOLD` text DEFAULT NULL,
`DART_RSI_RECLAIM` text DEFAULT NULL,
`DART_STOP_LOSS_PCT` text DEFAULT NULL,
`DART_TAKE_PROFIT_PCT` text DEFAULT NULL,
`DART_TRAIL_PCT` text DEFAULT NULL,
`DART_TRAIL_ARM_PCT` text DEFAULT NULL,
`DART_MAX_HOLD_BARS` text DEFAULT NULL,
`DART_EVENT_WINDOW_BARS` text DEFAULT NULL,
`DART_MIN_PRICE` text DEFAULT NULL,
`DART_VOL_MULT` text DEFAULT NULL,
`DART_VOL_WINDOW` text DEFAULT NULL,
`DART_MAX_LOSS_PER_TRADE_KRW` text DEFAULT NULL,
`DART_FORCE_EOD_EXIT` text DEFAULT NULL,
`DART_BACKTEST_USE_TICK_EXIT` text DEFAULT NULL,
`DART_BACKTEST_TICK_FALLBACK_OHLC` text DEFAULT NULL,
`DART_QUALITY_FILTER_ENABLED` text DEFAULT NULL,
`DART_EXCLUDE_CORP_KEYWORDS` text DEFAULT NULL,
`DART_EXCLUDE_CONTENT_KEYWORDS` text DEFAULT NULL,
`DART_MIN_SALES_PCT` text DEFAULT NULL,
`DART_SKIP_IF_SALES_PCT_UNKNOWN` text DEFAULT NULL,
`DART_THEME_KEYWORDS` text DEFAULT NULL,
`DART_REQUIRE_THEME` text DEFAULT NULL,
`DART_FETCH_DOCUMENT` text DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=114 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
#### `config_updow`
**PK**: `id` | AUTO_INCREMENT=388
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `int(11)` | NOT NULL | | PK · AUTO_INCREMENT |
| `created_at` | `varchar(30)` | NOT NULL | | 설정행 생성시각 |
| `UPDOW_UNIVERSE_SOURCE` | `text` | NULL | NULL | UPDOWN 박스 유니버스 · ls_condition=LS 동명 AFR · 시세는 키움/한투 유지 · 매니저 최초 기동은 봇 재시작 필요할 수 있음 · 키움으로 자동 폴백 안 함 |
| `RANK_UPDOW_SORT` | `text` | NULL | NULL | UPDOWN: RANK UPDOW SORT (RANK_UPDOW_SORT) |
| `RANK_UPDOW_LIMIT` | `text` | NULL | NULL | UPDOWN: RANK UPDOW LIMIT (RANK_UPDOW_LIMIT) |
| `CONDITION_UPDOW_NAME` | `text` | NULL | NULL | UPDOWN: CONDITION UPDOW NAME (CONDITION_UPDOW_NAME) |
| `CONDITION_UPDOW_SEQ` | `text` | NULL | NULL | UPDOWN: CONDITION UPDOW SEQ (CONDITION_UPDOW_SEQ) |
| `UPDOW_CAND_LIMIT` | `text` | NULL | NULL | UPDOWN 박스 후보 상한 · 0=무제한 · 조건검색/랭킹이 N개 줘도 상위 N개만 매수체크·WS구독 · 전 전략 합산이 키움 WS 100종 한도를 넘지 않게 조절 |
| `UPDOW_TIME_START` | `text` | NULL | NULL | UPDOWN: 매수시작 (UPDOW_TIME_START) |
| `UPDOW_TIME_END` | `text` | NULL | NULL | UPDOWN: 매수종료 (UPDOW_TIME_END) |
| `UPDOW_REENTRY_COOLDOWN_SEC` | `text` | NULL | NULL | UPDOWN: REENTRY 쿨다운 초 (UPDOW_REENTRY_COOLDOWN_SEC) |
| `UPDOW_MIN_CANDLE_LEN` | `text` | NULL | NULL | UPDOWN: 최소 CANDLE LEN (UPDOW_MIN_CANDLE_LEN) |
| `MIN_CANDLE_LEN_UPDOW` | `text` | NULL | NULL | UPDOWN: 최소 CANDLE LEN UPDOW (MIN_CANDLE_LEN_UPDOW) |
| `UPDOW_CANDLE_FETCH_N` | `text` | NULL | NULL | UPDOWN: CANDLE FETCH N (UPDOW_CANDLE_FETCH_N) |
| `UPDOW_LIVE_MIN_CANDLES` | `text` | NULL | NULL | UPDOWN: 실매최소봉수 (UPDOW_LIVE_MIN_CANDLES) |
| `UPDOW_MAX_LOSS_PER_TRADE_KRW` | `text` | NULL | NULL | UPDOWN: 최대 LOSS PER TRADE 원 (UPDOW_MAX_LOSS_PER_TRADE_KRW) |
| `UPDOW_MAX_BUY_AMOUNT` | `text` | NULL | NULL | UPDOWN: 1회최대매수금액 (UPDOW_MAX_BUY_AMOUNT) |
| `UPDOW_MAX_STOCKS` | `text` | NULL | NULL | UPDOWN 박스 동시 종목 |
| `UPDOW_BODY_DROP_MIN_PCT` | `text` | NULL | NULL | UPDOWN: BODY 되돌림/하락 최소 % (UPDOW_BODY_DROP_MIN_PCT) |
| `UPDOW_TP_PCT` | `text` | NULL | NULL | UPDOWN: TP % (UPDOW_TP_PCT) |
| `UPDOW_STOP_LOSS_PCT` | `text` | NULL | NULL | UPDOWN: 손절 % (UPDOW_STOP_LOSS_PCT) |
| `UPDOW_ATR_USE_DYNAMIC` | `text` | NULL | NULL | UPDOWN: ATR 사용_ DYNAMIC (UPDOW_ATR_USE_DYNAMIC) |
| `UPDOW_ATR_PERIOD` | `text` | NULL | NULL | UPDOWN: ATR 기간 (UPDOW_ATR_PERIOD) |
| `UPDOW_ATR_SL_MULT` | `text` | NULL | NULL | UPDOWN: ATR손절 배수 (UPDOW_ATR_SL_MULT) |
| `UPDOW_ATR_TP_MULT` | `text` | NULL | NULL | UPDOWN: ATR익절 배수 (UPDOW_ATR_TP_MULT) |
| `UPDOW_ATR_SL_MIN_PCT` | `text` | NULL | NULL | UPDOWN: ATR손절 최소 % (UPDOW_ATR_SL_MIN_PCT) |
| `UPDOW_ATR_SL_MAX_PCT` | `text` | NULL | NULL | UPDOWN: ATR손절 최대 % (UPDOW_ATR_SL_MAX_PCT) |
| `UPDOW_ATR_TP_MIN_PCT` | `text` | NULL | NULL | UPDOWN: ATR익절 최소 % (UPDOW_ATR_TP_MIN_PCT) |
| `UPDOW_ATR_TP_MAX_PCT` | `text` | NULL | NULL | UPDOWN: ATR익절 최대 % (UPDOW_ATR_TP_MAX_PCT) |
| `UPDOW_ATR_MULT_FLOOR` | `text` | NULL | NULL | UPDOWN: ATR 배수 FLOOR (UPDOW_ATR_MULT_FLOOR) |
| `UPDOW_ATR_PCT_FLOOR` | `text` | NULL | NULL | UPDOWN: ATR % FLOOR (UPDOW_ATR_PCT_FLOOR) |
| `UPDOW_EXIT_PCT_FLOOR` | `text` | NULL | NULL | UPDOWN: EXIT % FLOOR (UPDOW_EXIT_PCT_FLOOR) |
| `UPDOW_MAX_HOLD_BARS` | `text` | NULL | NULL | UPDOWN: 최대보유봉 (UPDOW_MAX_HOLD_BARS) |
| `UPDOW_EXIT_ON_GREEN` | `text` | NULL | NULL | UPDOWN: EXIT ON GREEN (UPDOW_EXIT_ON_GREEN) |
| `UPDOW_SLOT_MONEY` | `text` | NULL | NULL | UPDOWN 박스 슬롯(원) |
| `UPDOW_TF_MIN` | `text` | NULL | NULL | UPDOWN: TF 최소 (UPDOW_TF_MIN) |
| `UPDOW_GRID_BODY0` | `text` | NULL | NULL | UPDOWN: GRID BODY0 (UPDOW_GRID_BODY0) |
| `UPDOW_GRID_BODY1` | `text` | NULL | NULL | UPDOWN: GRID BODY1 (UPDOW_GRID_BODY1) |
| `UPDOW_GRID_BODY2` | `text` | NULL | NULL | UPDOWN: GRID BODY2 (UPDOW_GRID_BODY2) |
| `UPDOW_GRID_BODY3` | `text` | NULL | NULL | UPDOWN: GRID BODY3 (UPDOW_GRID_BODY3) |
| `UPDOW_GRID_TP0` | `text` | NULL | NULL | UPDOWN: GRID TP0 (UPDOW_GRID_TP0) |
| `UPDOW_GRID_TP1` | `text` | NULL | NULL | UPDOWN: GRID TP1 (UPDOW_GRID_TP1) |
| `UPDOW_GRID_TP2` | `text` | NULL | NULL | UPDOWN: GRID TP2 (UPDOW_GRID_TP2) |
| `UPDOW_GRID_TP3` | `text` | NULL | NULL | UPDOWN: GRID TP3 (UPDOW_GRID_TP3) |
| `UPDOW_GRID_TP4` | `text` | NULL | NULL | UPDOWN: GRID TP4 (UPDOW_GRID_TP4) |
| `UPDOW_GRID_SL0` | `text` | NULL | NULL | UPDOWN: GRID SL0 (UPDOW_GRID_SL0) |
| `UPDOW_GRID_SL1` | `text` | NULL | NULL | UPDOWN: GRID SL1 (UPDOW_GRID_SL1) |
| `UPDOW_GRID_SL2` | `text` | NULL | NULL | UPDOWN: GRID SL2 (UPDOW_GRID_SL2) |
| `UPDOW_GRID_SL3` | `text` | NULL | NULL | UPDOWN: GRID SL3 (UPDOW_GRID_SL3) |
| `UPDOW_GRID_HOLD0` | `text` | NULL | NULL | UPDOWN: GRID HOLD0 (UPDOW_GRID_HOLD0) |
| `UPDOW_GRID_HOLD1` | `text` | NULL | NULL | UPDOWN: GRID HOLD1 (UPDOW_GRID_HOLD1) |
| `UPDOW_GRID_HOLD2` | `text` | NULL | NULL | UPDOWN: GRID HOLD2 (UPDOW_GRID_HOLD2) |
| `UPDOW_GRID_HOLD3` | `text` | NULL | NULL | UPDOWN: GRID HOLD3 (UPDOW_GRID_HOLD3) |
| `UPDOW_GRID_HOLD4` | `text` | NULL | NULL | UPDOWN: GRID HOLD4 (UPDOW_GRID_HOLD4) |
| `UPDOW_GRID_REGIME0` | `text` | NULL | NULL | UPDOWN: GRID REGIME0 (UPDOW_GRID_REGIME0) |
| `UPDOW_GRID_REGIME1` | `text` | NULL | NULL | UPDOWN: GRID REGIME1 (UPDOW_GRID_REGIME1) |
| `UPDOW_REGIME_MA_BARS` | `text` | NULL | NULL | UPDOWN: REGIME MA 봉수 (UPDOW_REGIME_MA_BARS) |
| `UPDOW_REGIME_MA_EASE_PCT` | `text` | NULL | NULL | UPDOWN: REGIME MA EASE % (UPDOW_REGIME_MA_EASE_PCT) |
| `UPDOW_REGIME_MA_EASE_CAP` | `text` | NULL | NULL | UPDOWN: REGIME MA EASE CAP (UPDOW_REGIME_MA_EASE_CAP) |
| `UPDOW_GRID_REGIME_EASE0` | `text` | NULL | NULL | UPDOWN: GRID REGIME EASE0 (UPDOW_GRID_REGIME_EASE0) |
| `UPDOW_GRID_REGIME_EASE1` | `text` | NULL | NULL | UPDOWN: GRID REGIME EASE1 (UPDOW_GRID_REGIME_EASE1) |
| `UPDOW_KOSPI_1MIN_PROXY_CODE` | `text` | NULL | NULL | UPDOWN: KOSPI 1MIN PROXY CODE (UPDOW_KOSPI_1MIN_PROXY_CODE) |
| `UPDOW_REGIME_PREFER_WS_CANDLES` | `text` | NULL | NULL | UPDOWN: REGIME PREFER WS CANDLES (UPDOW_REGIME_PREFER_WS_CANDLES) |
| `UPDOW_REGIME_WS_CANDLE_MIN` | `text` | NULL | NULL | UPDOWN: REGIME WS CANDLE 최소 (UPDOW_REGIME_WS_CANDLE_MIN) |
| `UPDOW_SHOULDER_MIN_HIGH_PCT` | `text` | NULL | NULL | UPDOWN: 어깨무장고점 % (UPDOW_SHOULDER_MIN_HIGH_PCT) |
| `UPDOW_SHOULDER_CUT_PCT` | `text` | NULL | NULL | UPDOWN: 어깨컷 % (UPDOW_SHOULDER_CUT_PCT) |
| `UPDOW_GRID_SHOULDER_SMIN0` | `text` | NULL | NULL | UPDOWN: GRID 어깨 SMIN0 (UPDOW_GRID_SHOULDER_SMIN0) |
| `UPDOW_GRID_SHOULDER_SMIN1` | `text` | NULL | NULL | UPDOWN: GRID 어깨 SMIN1 (UPDOW_GRID_SHOULDER_SMIN1) |
| `UPDOW_GRID_SHOULDER_SMIN2` | `text` | NULL | NULL | UPDOWN: GRID 어깨 SMIN2 (UPDOW_GRID_SHOULDER_SMIN2) |
| `UPDOW_GRID_SHOULDER_CUT0` | `text` | NULL | NULL | UPDOWN: GRID 어깨컷 0 (UPDOW_GRID_SHOULDER_CUT0) |
| `UPDOW_GRID_SHOULDER_CUT1` | `text` | NULL | NULL | UPDOWN: GRID 어깨컷 1 (UPDOW_GRID_SHOULDER_CUT1) |
| `UPDOW_GRID_SHOULDER_CUT2` | `text` | NULL | NULL | UPDOWN: GRID 어깨컷 2 (UPDOW_GRID_SHOULDER_CUT2) |
| `UPDOW_TOTAL_BUDGET_KRW` | `text` | NULL | NULL | UPDOWN 박스 총 한도(원) |
| `STRATEGY_UPDOW_ENABLED` | `text` | NULL | NULL | UPDOWN박스 ON/OFF. 다음루프 신규매수중단(보유청산유지). WS구독해제 안함. 기동시OFF→켜려면재시작 |
| `KIS_UPDOW_MM_CHANNEL` | `text` | NULL | NULL | UPDOWN: KIS UPDOW MM CHANNEL (KIS_UPDOW_MM_CHANNEL) |
| `UPDOW_DAILY_PROFIT_TARGET_ENABLED` | `text` | NULL | NULL | UPDOWN 박스 손익 감시 켜기 · OFF = 해당 전략 일일익절 비활성 (매수 차단 없음) |
| `UPDOW_DAILY_PROFIT_TARGET_KRW` | `text` | NULL | NULL | UPDOWN 박스 목표(원) |
| `UPDOW_DAILY_PROFIT_TARGET_PCT` | `text` | NULL | NULL | UPDOWN 박스 목표(%) · 퍼센트 그대로 (예: 2.5 = 2.5%) · 0=미사용 |
| `UPDOW_DAILY_PROFIT_HALT_NEW_BUYS` | `text` | NULL | NULL | UPDOWN 박스 신규매수 수동 중단 · 목표 무관 수동 잠금 · 비우면 마스터 상속 · OFF=정상 |
| `UPDOW_DAILY_PROFIT_MODE` | `text` | NULL | NULL | UPDOWN 박스 익절방식 · 비우면 마스터 상속 · fixed/trailing/both |
| `UPDOW_DAILY_PROFIT_TRAIL_TIERS` | `text` | NULL | NULL | UPDOWN 박스 다단 트레일 · 수익원:컷%,… · 비우면 마스터 상속 · 예: 30000:50,100000:35,300000:25 |
| `UPDOW_DAILY_PROFIT_TRAIL_DROP_PCT` | `text` | NULL | NULL | UPDOWN 박스 단일 트레일 되돌림(%) · 다단 비었을 때만 · 고점 대비 % · 비우면 마스터 상속 · 0=미사용 |
| `UPDOW_DAILY_PROFIT_TRAIL_ARM_KRW` | `text` | NULL | NULL | UPDOWN 박스 트레일 발동수익(원) · 이 이상 벌어야 트레일 감시 · 비우면 마스터 상속 |
| `UPDOW_DAILY_PROFIT_TRAIL_ARM_PCT` | `text` | NULL | NULL | UPDOWN: 일일익절 트레일무장 % (UPDOW_DAILY_PROFIT_TRAIL_ARM_PCT) |
| `UPDOW_DAILY_PROFIT_RISK_BUDGET_ENABLED` | `text` | NULL | NULL | UPDOWN 박스 리스크버짓(B) · ON=일일익절 hit 후 보유최악손절합>cushion 이면 전량정리 · 기본 OFF · 마스터 없음 |
| `UPDOW_DAILY_PROFIT_RISK_BUDGET_COOLDOWN_SEC` | `text` | NULL | NULL | UPDOWN 박스 리스크버짓 쿨다운(초) · 같은 날 재평가 최소 간격 · 0=당일 1회만 |
| `UPDOW_TICK_SELL_ENABLED` | `text` | NULL | NULL | UPDOWN 박스 틱매도 · 비우면 공통 TICK_SELL_ENABLED · true/false 명시 시 전략만 덮어씀 · 기본 false |
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `config_updow` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`created_at` varchar(30) NOT NULL,
`UPDOW_UNIVERSE_SOURCE` text DEFAULT NULL,
`RANK_UPDOW_SORT` text DEFAULT NULL,
`RANK_UPDOW_LIMIT` text DEFAULT NULL,
`CONDITION_UPDOW_NAME` text DEFAULT NULL,
`CONDITION_UPDOW_SEQ` text DEFAULT NULL,
`UPDOW_CAND_LIMIT` text DEFAULT NULL,
`UPDOW_TIME_START` text DEFAULT NULL,
`UPDOW_TIME_END` text DEFAULT NULL,
`UPDOW_REENTRY_COOLDOWN_SEC` text DEFAULT NULL,
`UPDOW_MIN_CANDLE_LEN` text DEFAULT NULL,
`MIN_CANDLE_LEN_UPDOW` text DEFAULT NULL,
`UPDOW_CANDLE_FETCH_N` text DEFAULT NULL,
`UPDOW_LIVE_MIN_CANDLES` text DEFAULT NULL,
`UPDOW_MAX_LOSS_PER_TRADE_KRW` text DEFAULT NULL,
`UPDOW_MAX_BUY_AMOUNT` text DEFAULT NULL,
`UPDOW_MAX_STOCKS` text DEFAULT NULL,
`UPDOW_BODY_DROP_MIN_PCT` text DEFAULT NULL,
`UPDOW_TP_PCT` text DEFAULT NULL,
`UPDOW_STOP_LOSS_PCT` text DEFAULT NULL,
`UPDOW_ATR_USE_DYNAMIC` text DEFAULT NULL,
`UPDOW_ATR_PERIOD` text DEFAULT NULL,
`UPDOW_ATR_SL_MULT` text DEFAULT NULL,
`UPDOW_ATR_TP_MULT` text DEFAULT NULL,
`UPDOW_ATR_SL_MIN_PCT` text DEFAULT NULL,
`UPDOW_ATR_SL_MAX_PCT` text DEFAULT NULL,
`UPDOW_ATR_TP_MIN_PCT` text DEFAULT NULL,
`UPDOW_ATR_TP_MAX_PCT` text DEFAULT NULL,
`UPDOW_ATR_MULT_FLOOR` text DEFAULT NULL,
`UPDOW_ATR_PCT_FLOOR` text DEFAULT NULL,
`UPDOW_EXIT_PCT_FLOOR` text DEFAULT NULL,
`UPDOW_MAX_HOLD_BARS` text DEFAULT NULL,
`UPDOW_EXIT_ON_GREEN` text DEFAULT NULL,
`UPDOW_SLOT_MONEY` text DEFAULT NULL,
`UPDOW_TF_MIN` text DEFAULT NULL,
`UPDOW_GRID_BODY0` text DEFAULT NULL,
`UPDOW_GRID_BODY1` text DEFAULT NULL,
`UPDOW_GRID_BODY2` text DEFAULT NULL,
`UPDOW_GRID_BODY3` text DEFAULT NULL,
`UPDOW_GRID_TP0` text DEFAULT NULL,
`UPDOW_GRID_TP1` text DEFAULT NULL,
`UPDOW_GRID_TP2` text DEFAULT NULL,
`UPDOW_GRID_TP3` text DEFAULT NULL,
`UPDOW_GRID_TP4` text DEFAULT NULL,
`UPDOW_GRID_SL0` text DEFAULT NULL,
`UPDOW_GRID_SL1` text DEFAULT NULL,
`UPDOW_GRID_SL2` text DEFAULT NULL,
`UPDOW_GRID_SL3` text DEFAULT NULL,
`UPDOW_GRID_HOLD0` text DEFAULT NULL,
`UPDOW_GRID_HOLD1` text DEFAULT NULL,
`UPDOW_GRID_HOLD2` text DEFAULT NULL,
`UPDOW_GRID_HOLD3` text DEFAULT NULL,
`UPDOW_GRID_HOLD4` text DEFAULT NULL,
`UPDOW_GRID_REGIME0` text DEFAULT NULL,
`UPDOW_GRID_REGIME1` text DEFAULT NULL,
`UPDOW_REGIME_MA_BARS` text DEFAULT NULL,
`UPDOW_REGIME_MA_EASE_PCT` text DEFAULT NULL,
`UPDOW_REGIME_MA_EASE_CAP` text DEFAULT NULL,
`UPDOW_GRID_REGIME_EASE0` text DEFAULT NULL,
`UPDOW_GRID_REGIME_EASE1` text DEFAULT NULL,
`UPDOW_KOSPI_1MIN_PROXY_CODE` text DEFAULT NULL,
`UPDOW_REGIME_PREFER_WS_CANDLES` text DEFAULT NULL,
`UPDOW_REGIME_WS_CANDLE_MIN` text DEFAULT NULL,
`UPDOW_SHOULDER_MIN_HIGH_PCT` text DEFAULT NULL,
`UPDOW_SHOULDER_CUT_PCT` text DEFAULT NULL,
`UPDOW_GRID_SHOULDER_SMIN0` text DEFAULT NULL,
`UPDOW_GRID_SHOULDER_SMIN1` text DEFAULT NULL,
`UPDOW_GRID_SHOULDER_SMIN2` text DEFAULT NULL,
`UPDOW_GRID_SHOULDER_CUT0` text DEFAULT NULL,
`UPDOW_GRID_SHOULDER_CUT1` text DEFAULT NULL,
`UPDOW_GRID_SHOULDER_CUT2` text DEFAULT NULL,
`UPDOW_TOTAL_BUDGET_KRW` text DEFAULT NULL,
`STRATEGY_UPDOW_ENABLED` text DEFAULT NULL,
`KIS_UPDOW_MM_CHANNEL` text DEFAULT NULL,
`UPDOW_DAILY_PROFIT_TARGET_ENABLED` text DEFAULT NULL,
`UPDOW_DAILY_PROFIT_TARGET_KRW` text DEFAULT NULL,
`UPDOW_DAILY_PROFIT_TARGET_PCT` text DEFAULT NULL,
`UPDOW_DAILY_PROFIT_HALT_NEW_BUYS` text DEFAULT NULL,
`UPDOW_DAILY_PROFIT_MODE` text DEFAULT NULL,
`UPDOW_DAILY_PROFIT_TRAIL_TIERS` text DEFAULT NULL,
`UPDOW_DAILY_PROFIT_TRAIL_DROP_PCT` text DEFAULT NULL,
`UPDOW_DAILY_PROFIT_TRAIL_ARM_KRW` text DEFAULT NULL,
`UPDOW_DAILY_PROFIT_TRAIL_ARM_PCT` text DEFAULT NULL,
`UPDOW_DAILY_PROFIT_RISK_BUDGET_ENABLED` text DEFAULT NULL,
`UPDOW_DAILY_PROFIT_RISK_BUDGET_COOLDOWN_SEC` text DEFAULT NULL,
`UPDOW_TICK_SELL_ENABLED` text DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=388 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
#### `config_us_momentum`
**PK**: `id` | AUTO_INCREMENT=96
> **테이블 COMMENT**: 해외모멘텀 `US_MOMENTUM_*` · `STRATEGY_US_MOMENTUM_ENABLED`. 시세=한투 HDFSCNT0 · 유니버스=permanent US
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `int(11)` | NOT NULL | | PK · AUTO_INCREMENT |
| `created_at` | `varchar(30)` | NOT NULL | | 설정행 생성시각 |
| `STRATEGY_US_MOMENTUM_ENABLED` | `text` | NULL | NULL | 해외모멘텀 ON/OFF. 다음루프 신규매수중단(보유청산유지). WS구독해제 안함. 기동시OFF→켜려면재시작 |
| `US_MOMENTUM_TIME_START` | `text` | NULL | NULL | 해외모멘텀: 매수시작 (US_MOMENTUM_TIME_START) |
| `US_MOMENTUM_TIME_END` | `text` | NULL | NULL | 해외모멘텀: 매수종료 (US_MOMENTUM_TIME_END) |
| `US_MOMENTUM_SELL_TIME_END` | `text` | NULL | NULL | 해외모멘텀: 매도세션종료 (US_MOMENTUM_SELL_TIME_END) |
| `US_MOMENTUM_DRY_RUN` | `text` | NULL | NULL | 해외모멘텀: 모의/페이퍼전용 (US_MOMENTUM_DRY_RUN) |
| `US_MOMENTUM_MAX_STOCKS` | `text` | NULL | NULL | 해외모멘텀: 동시보유상한 (US_MOMENTUM_MAX_STOCKS) |
| `US_MOMENTUM_SLOT_MONEY` | `text` | NULL | NULL | 해외모멘텀: 슬롯금액 (US_MOMENTUM_SLOT_MONEY) |
| `US_MOMENTUM_FEE_RATE` | `text` | NULL | NULL | 해외모멘텀: 수수료율 (US_MOMENTUM_FEE_RATE) |
| `US_MOMENTUM_SELL_TAX` | `text` | NULL | NULL | 해외모멘텀: 매도세금 (US_MOMENTUM_SELL_TAX) |
| `US_MOMENTUM_MIN_PRICE` | `text` | NULL | NULL | 해외모멘텀: 최소가격 (US_MOMENTUM_MIN_PRICE) |
| `US_MOMENTUM_LIVE_MIN_CANDLES` | `text` | NULL | NULL | 해외모멘텀: 실매최소봉수 (US_MOMENTUM_LIVE_MIN_CANDLES) |
| `US_MOMENTUM_EOD_ENABLED` | `text` | NULL | NULL | 해외모멘텀: 장마감청산ON (US_MOMENTUM_EOD_ENABLED) |
| `US_MOMENTUM_EOD_HM` | `text` | NULL | NULL | 해외모멘텀: 장마감시각HHMM (US_MOMENTUM_EOD_HM) |
| `US_MOMENTUM_MAX_BUY_AMOUNT` | `text` | NULL | NULL | 해외모멘텀: 1회최대매수금액 (US_MOMENTUM_MAX_BUY_AMOUNT) |
| `US_MOMENTUM_TOTAL_BUDGET` | `text` | NULL | NULL | 해외모멘텀: 총운용한도 (US_MOMENTUM_TOTAL_BUDGET) |
| `US_MOMENTUM_RSI_MIN` | `text` | NULL | NULL | 해외모멘텀: RSI하한 (US_MOMENTUM_RSI_MIN) |
| `US_MOMENTUM_RSI_MAX` | `text` | NULL | NULL | 해외모멘텀: RSI상한 (US_MOMENTUM_RSI_MAX) |
| `US_MOMENTUM_VOL_MULT` | `text` | NULL | NULL | 해외모멘텀: 거래량배수 (US_MOMENTUM_VOL_MULT) |
| `US_MOMENTUM_VOL_WIN` | `text` | NULL | NULL | 해외모멘텀: 거래량윈도우 (US_MOMENTUM_VOL_WIN) |
| `US_MOMENTUM_MAX_FROM_OPEN_PCT` | `text` | NULL | NULL | 해외모멘텀: 최대 시가대비 % (US_MOMENTUM_MAX_FROM_OPEN_PCT) |
| `US_MOMENTUM_MIN_FROM_OPEN_PCT` | `text` | NULL | NULL | 해외모멘텀: 최소 시가대비 % (US_MOMENTUM_MIN_FROM_OPEN_PCT) |
| `US_MOMENTUM_STOP_LOSS_PCT` | `text` | NULL | NULL | 해외모멘텀: 손절 % (US_MOMENTUM_STOP_LOSS_PCT) |
| `US_MOMENTUM_TAKE_PROFIT_PCT` | `text` | NULL | NULL | 해외모멘텀: 익절 % (US_MOMENTUM_TAKE_PROFIT_PCT) |
| `US_MOMENTUM_TP_MAX_PCT` | `text` | NULL | NULL | 해외모멘텀: TP 최대 % (US_MOMENTUM_TP_MAX_PCT) |
| `US_MOMENTUM_SHOULDER_MIN_HIGH_PCT` | `text` | NULL | NULL | 해외모멘텀: 어깨무장고점 % (US_MOMENTUM_SHOULDER_MIN_HIGH_PCT) |
| `US_MOMENTUM_SHOULDER_CUT_PCT` | `text` | NULL | NULL | 해외모멘텀: 어깨컷 % (US_MOMENTUM_SHOULDER_CUT_PCT) |
| `US_MOMENTUM_RATCHET_TIERS` | `text` | NULL | NULL | 해외모멘텀: 다단래칫 (US_MOMENTUM_RATCHET_TIERS) |
| `US_MOMENTUM_TRAIL_PCT` | `text` | NULL | NULL | 해외모멘텀: 트레일 % (US_MOMENTUM_TRAIL_PCT) |
| `US_MOMENTUM_TRAIL_ARM_PCT` | `text` | NULL | NULL | 해외모멘텀: 트레일무장 % (US_MOMENTUM_TRAIL_ARM_PCT) |
| `US_MOMENTUM_MAX_HOLD_BARS` | `text` | NULL | NULL | 해외모멘텀: 최대보유봉 (US_MOMENTUM_MAX_HOLD_BARS) |
| `US_MOMENTUM_MAX_DAILY` | `text` | NULL | NULL | 해외모멘텀: 일일매수횟수상한 (US_MOMENTUM_MAX_DAILY) |
| `US_MOMENTUM_MAX_DAILY_CHG` | `text` | NULL | NULL | 해외모멘텀: 당일등락상한 (US_MOMENTUM_MAX_DAILY_CHG) |
| `US_MOMENTUM_HIGH_CHASE_THR` | `text` | NULL | NULL | 해외모멘텀: 고점추격 THR (US_MOMENTUM_HIGH_CHASE_THR) |
| `US_MOMENTUM_USE_DEFENSE_FILTERS` | `text` | NULL | NULL | 해외모멘텀: 사용_ 방어필터 필터 S (US_MOMENTUM_USE_DEFENSE_FILTERS) |
| `US_MOMENTUM_USE_HIGH_CHASE_FILTER` | `text` | NULL | NULL | 해외모멘텀: 사용_ 고점추격 필터 (US_MOMENTUM_USE_HIGH_CHASE_FILTER) |
| `US_MOMENTUM_USE_DAILY_RANGE_FILTER` | `text` | NULL | NULL | 해외모멘텀: 사용_ DAILY RANGE 필터 (US_MOMENTUM_USE_DAILY_RANGE_FILTER) |
| `US_MOMENTUM_USE_EMA_FILTER` | `text` | NULL | NULL | 해외모멘텀: 사용_ EMA 필터 (US_MOMENTUM_USE_EMA_FILTER) |
| `US_MOMENTUM_EMA_FAST_PERIOD` | `text` | NULL | NULL | 해외모멘텀: EMA단기 기간 (US_MOMENTUM_EMA_FAST_PERIOD) |
| `US_MOMENTUM_EMA_SLOW_PERIOD` | `text` | NULL | NULL | 해외모멘텀: EMA장기 기간 (US_MOMENTUM_EMA_SLOW_PERIOD) |
| `US_MOMENTUM_USE_RSI_MAX_FILTER` | `text` | NULL | NULL | 해외모멘텀: 사용_ RSI상한 필터 (US_MOMENTUM_USE_RSI_MAX_FILTER) |
| `US_MOMENTUM_PATTERN_BREAKOUT` | `text` | NULL | NULL | 해외모멘텀: 패턴 돌파 (US_MOMENTUM_PATTERN_BREAKOUT) |
| `US_MOMENTUM_PATTERN_PULLBACK` | `text` | NULL | NULL | 해외모멘텀: 패턴 되돌림 (US_MOMENTUM_PATTERN_PULLBACK) |
| `US_MOMENTUM_CHASE_LOOKBACK_MIN` | `text` | NULL | NULL | 해외모멘텀: CHASE LOOKBACK 최소 (US_MOMENTUM_CHASE_LOOKBACK_MIN) |
| `US_MOMENTUM_PULLBACK_LOOKBACK_MIN` | `text` | NULL | NULL | 해외모멘텀: 되돌림 LOOKBACK 최소 (US_MOMENTUM_PULLBACK_LOOKBACK_MIN) |
| `US_MOMENTUM_PULLBACK_MIN_PCT` | `text` | NULL | NULL | 해외모멘텀: 되돌림 최소 % (US_MOMENTUM_PULLBACK_MIN_PCT) |
| `US_MOMENTUM_PULLBACK_MAX_PCT` | `text` | NULL | NULL | 해외모멘텀: 되돌림 최대 % (US_MOMENTUM_PULLBACK_MAX_PCT) |
| `US_MOMENTUM_SETUP_VOL_MAX_MULT` | `text` | NULL | NULL | 해외모멘텀: SETUP 거래량 최대 배수 (US_MOMENTUM_SETUP_VOL_MAX_MULT) |
| `US_MOMENTUM_SETUP_BEAR_BARS_MIN` | `text` | NULL | NULL | 해외모멘텀: SETUP BEAR 봉수 최소 (US_MOMENTUM_SETUP_BEAR_BARS_MIN) |
| `US_MOMENTUM_MAX_LOSS_PER_TRADE` | `text` | NULL | NULL | 해외모멘텀: 최대 LOSS PER TRADE (US_MOMENTUM_MAX_LOSS_PER_TRADE) |
| `US_MOMENTUM_MIN_PROFIT_PCT` | `text` | NULL | NULL | 해외모멘텀: 최소 PROFIT % (US_MOMENTUM_MIN_PROFIT_PCT) |
| `US_MOMENTUM_COOLDOWN_SEC` | `text` | NULL | NULL | 해외모멘텀: 쿨다운 초 (US_MOMENTUM_COOLDOWN_SEC) |
| `US_MOMENTUM_DAILY_PROFIT_TARGET_ENABLED` | `text` | NULL | NULL | 해외모멘텀: 일일익절 목표 ON/OFF (US_MOMENTUM_DAILY_PROFIT_TARGET_ENABLED) |
| `US_MOMENTUM_DAILY_PROFIT_TRAIL_TIERS` | `text` | NULL | NULL | 해외모멘텀: 일일익절 트레일 다단 (US_MOMENTUM_DAILY_PROFIT_TRAIL_TIERS) |
| `US_MOMENTUM_DAILY_PROFIT_MODE` | `text` | NULL | NULL | 해외모멘텀: 일일익절 모드 (US_MOMENTUM_DAILY_PROFIT_MODE) |
| `US_MOMENTUM_MAX_ORDER_QTY` | `text` | NULL | NULL | 해외모멘텀: 주문수량상한 (US_MOMENTUM_MAX_ORDER_QTY) |
| `US_MOMENTUM_ORDER_FAIL_COOLDOWN_SEC` | `text` | NULL | NULL | 해외모멘텀: ORDER FAIL 쿨다운 초 (US_MOMENTUM_ORDER_FAIL_COOLDOWN_SEC) |
| `US_MOMENTUM_RELOAD_INTERVAL_SEC` | `text` | NULL | NULL | 해외모멘텀: 설정리로드주기 초 (US_MOMENTUM_RELOAD_INTERVAL_SEC) |
| `US_MOMENTUM_PSAMOUNT_CACHE_SEC` | `text` | NULL | NULL | 해외모멘텀: 매수가능수량 CACHE 초 (US_MOMENTUM_PSAMOUNT_CACHE_SEC) |
| `US_MOMENTUM_LOOP_SLEEP_MIN` | `text` | NULL | NULL | 해외모멘텀: 루프대기 최소 (US_MOMENTUM_LOOP_SLEEP_MIN) |
| `US_MOMENTUM_LOOP_SLEEP_MAX` | `text` | NULL | NULL | 해외모멘텀: 루프대기 최대 (US_MOMENTUM_LOOP_SLEEP_MAX) |
| `US_MOMENTUM_SCAN_REJECT_SLEEP_MIN` | `text` | NULL | NULL | 해외모멘텀: 스캔탈락대기 SLEEP 최소 (US_MOMENTUM_SCAN_REJECT_SLEEP_MIN) |
| `US_MOMENTUM_SCAN_REJECT_SLEEP_MAX` | `text` | NULL | NULL | 해외모멘텀: 스캔탈락대기 SLEEP 최대 (US_MOMENTUM_SCAN_REJECT_SLEEP_MAX) |
| `US_MOMENTUM_PROFILE_BUY_SEC` | `text` | NULL | NULL | 해외모멘텀: PROFILE BUY 초 (US_MOMENTUM_PROFILE_BUY_SEC) |
| `US_MOMENTUM_TRADES_CACHE_SEC` | `text` | NULL | NULL | 해외모멘텀: TRADES CACHE 초 (US_MOMENTUM_TRADES_CACHE_SEC) |
| `US_MOMENTUM_CANDLE_LOCK_WAIT_SEC` | `text` | NULL | NULL | 해외모멘텀: CANDLE LOCK WAIT 초 (US_MOMENTUM_CANDLE_LOCK_WAIT_SEC) |
| `US_MOMENTUM_DAILY_PROFIT_RISK_BUDGET_ENABLED` | `text` | NULL | NULL | 해외모멘텀: 일일익절 RISK 한도 ON/OFF (US_MOMENTUM_DAILY_PROFIT_RISK_BUDGET_ENABLED) |
| `US_MOMENTUM_DAILY_PROFIT_RISK_BUDGET_COOLDOWN_SEC` | `text` | NULL | NULL | 해외모멘텀: 일일익절 RISK 한도 쿨다운 초 (US_MOMENTUM_DAILY_PROFIT_RISK_BUDGET_COOLDOWN_SEC) |
| `US_MOMENTUM_FORCE_BUY_QTY` | `text` | NULL | NULL | 해외모멘텀: 강제매수테스트 QTY (US_MOMENTUM_FORCE_BUY_QTY) |
| `US_MOMENTUM_SESSION_START` | `text` | NULL | NULL | 해외모멘텀: 세션시작 (US_MOMENTUM_SESSION_START) |
| `US_MOMENTUM_BUY_WAIT_LOG_SEC` | `text` | NULL | NULL | 해외모멘텀: 매수대기로그 초 (US_MOMENTUM_BUY_WAIT_LOG_SEC) |
| `US_MOMENTUM_FX_FEE_RATE` | `text` | NULL | NULL | 해외모멘텀: 환전수수료 RATE (US_MOMENTUM_FX_FEE_RATE) |
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `config_us_momentum` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`created_at` varchar(30) NOT NULL,
`STRATEGY_US_MOMENTUM_ENABLED` text DEFAULT NULL COMMENT '해외모멘텀 ON/OFF. 다음루프 신규매수중단(보유청산유지). WS구독해제 안함. 기동시OFF→켜려면재시작',
`US_MOMENTUM_TIME_START` text DEFAULT NULL,
`US_MOMENTUM_TIME_END` text DEFAULT NULL,
`US_MOMENTUM_SELL_TIME_END` text DEFAULT NULL,
`US_MOMENTUM_DRY_RUN` text DEFAULT NULL,
`US_MOMENTUM_MAX_STOCKS` text DEFAULT NULL,
`US_MOMENTUM_SLOT_MONEY` text DEFAULT NULL,
`US_MOMENTUM_FEE_RATE` text DEFAULT NULL,
`US_MOMENTUM_SELL_TAX` text DEFAULT NULL,
`US_MOMENTUM_MIN_PRICE` text DEFAULT NULL,
`US_MOMENTUM_LIVE_MIN_CANDLES` text DEFAULT NULL,
`US_MOMENTUM_EOD_ENABLED` text DEFAULT NULL,
`US_MOMENTUM_EOD_HM` text DEFAULT NULL,
`US_MOMENTUM_MAX_BUY_AMOUNT` text DEFAULT NULL,
`US_MOMENTUM_TOTAL_BUDGET` text DEFAULT NULL,
`US_MOMENTUM_RSI_MIN` text DEFAULT NULL,
`US_MOMENTUM_RSI_MAX` text DEFAULT NULL,
`US_MOMENTUM_VOL_MULT` text DEFAULT NULL,
`US_MOMENTUM_VOL_WIN` text DEFAULT NULL,
`US_MOMENTUM_MAX_FROM_OPEN_PCT` text DEFAULT NULL,
`US_MOMENTUM_MIN_FROM_OPEN_PCT` text DEFAULT NULL,
`US_MOMENTUM_STOP_LOSS_PCT` text DEFAULT NULL,
`US_MOMENTUM_TAKE_PROFIT_PCT` text DEFAULT NULL,
`US_MOMENTUM_TP_MAX_PCT` text DEFAULT NULL,
`US_MOMENTUM_SHOULDER_MIN_HIGH_PCT` text DEFAULT NULL,
`US_MOMENTUM_SHOULDER_CUT_PCT` text DEFAULT NULL,
`US_MOMENTUM_RATCHET_TIERS` text DEFAULT NULL,
`US_MOMENTUM_TRAIL_PCT` text DEFAULT NULL,
`US_MOMENTUM_TRAIL_ARM_PCT` text DEFAULT NULL,
`US_MOMENTUM_MAX_HOLD_BARS` text DEFAULT NULL,
`US_MOMENTUM_MAX_DAILY` text DEFAULT NULL,
`US_MOMENTUM_MAX_DAILY_CHG` text DEFAULT NULL,
`US_MOMENTUM_HIGH_CHASE_THR` text DEFAULT NULL,
`US_MOMENTUM_USE_DEFENSE_FILTERS` text DEFAULT NULL,
`US_MOMENTUM_USE_HIGH_CHASE_FILTER` text DEFAULT NULL,
`US_MOMENTUM_USE_DAILY_RANGE_FILTER` text DEFAULT NULL,
`US_MOMENTUM_USE_EMA_FILTER` text DEFAULT NULL,
`US_MOMENTUM_EMA_FAST_PERIOD` text DEFAULT NULL,
`US_MOMENTUM_EMA_SLOW_PERIOD` text DEFAULT NULL,
`US_MOMENTUM_USE_RSI_MAX_FILTER` text DEFAULT NULL,
`US_MOMENTUM_PATTERN_BREAKOUT` text DEFAULT NULL,
`US_MOMENTUM_PATTERN_PULLBACK` text DEFAULT NULL,
`US_MOMENTUM_CHASE_LOOKBACK_MIN` text DEFAULT NULL,
`US_MOMENTUM_PULLBACK_LOOKBACK_MIN` text DEFAULT NULL,
`US_MOMENTUM_PULLBACK_MIN_PCT` text DEFAULT NULL,
`US_MOMENTUM_PULLBACK_MAX_PCT` text DEFAULT NULL,
`US_MOMENTUM_SETUP_VOL_MAX_MULT` text DEFAULT NULL,
`US_MOMENTUM_SETUP_BEAR_BARS_MIN` text DEFAULT NULL,
`US_MOMENTUM_MAX_LOSS_PER_TRADE` text DEFAULT NULL,
`US_MOMENTUM_MIN_PROFIT_PCT` text DEFAULT NULL,
`US_MOMENTUM_COOLDOWN_SEC` text DEFAULT NULL,
`US_MOMENTUM_DAILY_PROFIT_TARGET_ENABLED` text DEFAULT NULL,
`US_MOMENTUM_DAILY_PROFIT_TRAIL_TIERS` text DEFAULT NULL,
`US_MOMENTUM_DAILY_PROFIT_MODE` text DEFAULT NULL,
`US_MOMENTUM_MAX_ORDER_QTY` text DEFAULT NULL,
`US_MOMENTUM_ORDER_FAIL_COOLDOWN_SEC` text DEFAULT NULL,
`US_MOMENTUM_RELOAD_INTERVAL_SEC` text DEFAULT NULL,
`US_MOMENTUM_PSAMOUNT_CACHE_SEC` text DEFAULT NULL,
`US_MOMENTUM_LOOP_SLEEP_MIN` text DEFAULT NULL,
`US_MOMENTUM_LOOP_SLEEP_MAX` text DEFAULT NULL,
`US_MOMENTUM_SCAN_REJECT_SLEEP_MIN` text DEFAULT NULL,
`US_MOMENTUM_SCAN_REJECT_SLEEP_MAX` text DEFAULT NULL,
`US_MOMENTUM_PROFILE_BUY_SEC` text DEFAULT NULL,
`US_MOMENTUM_TRADES_CACHE_SEC` text DEFAULT NULL,
`US_MOMENTUM_CANDLE_LOCK_WAIT_SEC` text DEFAULT NULL,
`US_MOMENTUM_DAILY_PROFIT_RISK_BUDGET_ENABLED` text DEFAULT NULL,
`US_MOMENTUM_DAILY_PROFIT_RISK_BUDGET_COOLDOWN_SEC` text DEFAULT NULL,
`US_MOMENTUM_FORCE_BUY_QTY` text DEFAULT NULL,
`US_MOMENTUM_SESSION_START` text DEFAULT NULL,
`US_MOMENTUM_BUY_WAIT_LOG_SEC` text DEFAULT NULL,
`US_MOMENTUM_FX_FEE_RATE` text DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=96 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
### 🌍 환경 설정 (Env Config)
#### `env_config`
**PK**: `id` | AUTO_INCREMENT=1060
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `int(11)` | NOT NULL | | PK · AUTO_INCREMENT |
| `created_at` | `varchar(30)` | NOT NULL | | 설정행 생성시각 |
| `STOP_LOSS_PCT` | `text` | NULL | NULL | 공통env: 손절 % (STOP_LOSS_PCT) |
| `MAX_POSITION_PCT` | `text` | NULL | NULL | 공통env: 최대 POSITION % (MAX_POSITION_PCT) |
| `USE_SLOT_CAP` | `text` | NULL | NULL | 공통env: 사용_ SLOT CAP (USE_SLOT_CAP) |
| `SLOT_CAP_PCT` | `text` | NULL | NULL | 공통env: SLOT CAP % (SLOT_CAP_PCT) |
| `MAX_STOCKS` | `text` | NULL | NULL | 공통env: 동시보유상한 (MAX_STOCKS) |
| `USE_KELLY` | `text` | NULL | NULL | 공통env: 사용_ KELLY (USE_KELLY) |
| `RISK_PCT_PER_TRADE` | `text` | NULL | NULL | 공통env: RISK % PER TRADE (RISK_PCT_PER_TRADE) |
| `MIN_POSITION_AMOUNT` | `text` | NULL | NULL | 공통env: 최소 POSITION AMOUNT (MIN_POSITION_AMOUNT) |
| `USE_RISK_CHECK` | `text` | NULL | NULL | 리스크 체크 사용 |
| `DAILY_STOP_LOSS_PCT` | `text` | NULL | NULL | 일일 손실 한도(분율, -0.05=-5%) |
| `CONSECUTIVE_LOSS_LIMIT` | `text` | NULL | NULL | 연속 손실 제한(회) |
| `DAILY_PROFIT_TARGET_KRW` | `text` | NULL | NULL | 목표 금액(원) |
| `DAILY_PROFIT_TARGET_PCT` | `text` | NULL | NULL | 목표 수익률(%) · 퍼센트 그대로 (예: 2.5 = 2.5%) · 0=미사용 |
| `DAILY_PROFIT_TARGET_BUDGET_KRW` | `text` | NULL | NULL | 분모 운용한도(원) · 0 = ON 전략 TOTAL_BUDGET 합 자동 |
| `DAILY_PROFIT_HALT_NEW_BUYS` | `text` | NULL | NULL | 신규매수 수동 중단 · 목표·손익과 무관한 수동 매수 잠금. ON=즉시 신규매수 전면 차단 / OFF=정상 (기본) |
| `DAILY_PROFIT_NOTIFY_MM` | `text` | NULL | NULL | 달성 시 MM 알림 |
| `USE_BAN_SYSTEM` | `text` | NULL | NULL | 공통env: 사용_ BAN SYSTEM (USE_BAN_SYSTEM) |
| `BAN_HOURS` | `text` | NULL | NULL | 공통env: BAN HOURS (BAN_HOURS) |
| `USE_STOCK_FILTER` | `text` | NULL | NULL | 공통env: 사용_ STOCK 필터 (USE_STOCK_FILTER) |
| `RSI_OVERHEAT_THRESHOLD` | `text` | NULL | NULL | 공통env: RSI OVERHEAT THRESHOLD (RSI_OVERHEAT_THRESHOLD) |
| `MIN_RECOVERY_RATIO` | `text` | NULL | NULL | 공통env: 최소 RECOVERY RATIO (MIN_RECOVERY_RATIO) |
| `MAX_RECOVERY_RATIO` | `text` | NULL | NULL | 공통env: 최대 RECOVERY RATIO (MAX_RECOVERY_RATIO) |
| `USE_TWAP` | `text` | NULL | NULL | 공통env: 사용_ TWAP (USE_TWAP) |
| `TWAP_MIN_SPLIT` | `text` | NULL | NULL | 공통env: TWAP 최소 SPLIT (TWAP_MIN_SPLIT) |
| `TWAP_MAX_SPLIT` | `text` | NULL | NULL | 공통env: TWAP 최대 SPLIT (TWAP_MAX_SPLIT) |
| `TWAP_MIN_DELAY` | `text` | NULL | NULL | 공통env: TWAP 최소 DELAY (TWAP_MIN_DELAY) |
| `TWAP_MAX_DELAY` | `text` | NULL | NULL | 공통env: TWAP 최대 DELAY (TWAP_MAX_DELAY) |
| `USE_ML_SIGNAL` | `text` | NULL | NULL | 공통env: 사용_ ML SIGNAL (USE_ML_SIGNAL) |
| `ML_MIN_PROBABILITY` | `text` | NULL | NULL | 공통env: ML 최소 PROBABILITY (ML_MIN_PROBABILITY) |
| `USE_NEWS_ANALYSIS` | `text` | NULL | NULL | 공통env: 사용_ NEWS ANALYSIS (USE_NEWS_ANALYSIS) |
| `NEWS_ANALYSIS_HOUR` | `text` | NULL | NULL | 공통env: NEWS ANALYSIS HOUR (NEWS_ANALYSIS_HOUR) |
| `NEWS_MAX_COUNT` | `text` | NULL | NULL | 공통env: NEWS 최대 COUNT (NEWS_MAX_COUNT) |
| `USE_QUICK_PROFIT_PROTECTION` | `text` | NULL | NULL | 공통env: 사용_ QUICK PROFIT PROTECTION (USE_QUICK_PROFIT_PROTECTION) |
| `HIGH_PRICE_CHASE_THRESHOLD` | `text` | NULL | NULL | 공통env: HIGH PRICE CHASE THRESHOLD (HIGH_PRICE_CHASE_THRESHOLD) |
| `MAX_DAILY_CHANGE_PCT` | `text` | NULL | NULL | 공통env: 일일매수횟수상한 CHANGE % (MAX_DAILY_CHANGE_PCT) |
| `MA20_MAX_ABOVE_PCT` | `text` | NULL | NULL | 공통env: MA20 최대 ABOVE % (MA20_MAX_ABOVE_PCT) |
| `VOLUME_AVG_MULTIPLIER` | `text` | NULL | NULL | 공통env: 거래량 UME 평균 배수 IPLIER (VOLUME_AVG_MULTIPLIER) |
| `CANDLE_OPEN_PRICE_BUFFER` | `text` | NULL | NULL | 공통env: CANDLE OPEN PRICE BUFFER (CANDLE_OPEN_PRICE_BUFFER) |
| `MIN_CANDLE_LEN_TAIL` | `text` | NULL | NULL | 공통env: 최소 CANDLE LEN TAIL (MIN_CANDLE_LEN_TAIL) |
| `MIN_PRICE_TAIL` | `text` | NULL | NULL | 공통env: 최소가격 TAIL (MIN_PRICE_TAIL) |
| `INTRADAY_INVESTOR_NET_BUY_THRESHOLD` | `text` | NULL | NULL | 공통env: INTRADAY INVESTOR NET BUY THRESHOLD (INTRADAY_INVESTOR_NET_BUY_THRESHOLD) |
| `SIZE_CLASS_LARGE_MIN` | `text` | NULL | NULL | 공통env: SIZE CLASS LARGE 최소 (SIZE_CLASS_LARGE_MIN) |
| `SIZE_CLASS_MID_MIN` | `text` | NULL | NULL | 공통env: SIZE CLASS MID 최소 (SIZE_CLASS_MID_MIN) |
| `SCAN_INVESTOR_NET_STRONG` | `text` | NULL | NULL | 공통env: SCAN INVESTOR NET STRONG (SCAN_INVESTOR_NET_STRONG) |
| `SCAN_INVESTOR_SCORE_STRONG` | `text` | NULL | NULL | 공통env: SCAN INVESTOR SCORE STRONG (SCAN_INVESTOR_SCORE_STRONG) |
| `SCAN_INVESTOR_SCORE_WEAK` | `text` | NULL | NULL | 공통env: SCAN INVESTOR SCORE WEAK (SCAN_INVESTOR_SCORE_WEAK) |
| `SCAN_INVESTOR_BONUS_STRONG` | `text` | NULL | NULL | 공통env: SCAN INVESTOR BONUS STRONG (SCAN_INVESTOR_BONUS_STRONG) |
| `SCAN_INVESTOR_BONUS_WEAK` | `text` | NULL | NULL | 공통env: SCAN INVESTOR BONUS WEAK (SCAN_INVESTOR_BONUS_WEAK) |
| `SCAN_VOLUME_BONUS_MIN` | `text` | NULL | NULL | 공통env: SCAN 거래량 UME BONUS 최소 (SCAN_VOLUME_BONUS_MIN) |
| `SCAN_VOLUME_BONUS_POINT` | `text` | NULL | NULL | 공통env: SCAN 거래량 UME BONUS POINT (SCAN_VOLUME_BONUS_POINT) |
| `SCAN_EXEC_STRENGTH_HIGH` | `text` | NULL | NULL | 공통env: SCAN EXEC STRENGTH HIGH (SCAN_EXEC_STRENGTH_HIGH) |
| `SCAN_EXEC_STRENGTH_MID` | `text` | NULL | NULL | 공통env: SCAN EXEC STRENGTH MID (SCAN_EXEC_STRENGTH_MID) |
| `SCAN_EXEC_BONUS_HIGH` | `text` | NULL | NULL | 공통env: SCAN EXEC BONUS HIGH (SCAN_EXEC_BONUS_HIGH) |
| `SCAN_EXEC_BONUS_MID` | `text` | NULL | NULL | 공통env: SCAN EXEC BONUS MID (SCAN_EXEC_BONUS_MID) |
| `SCAN_SCORE_DROP_WEIGHT` | `text` | NULL | NULL | 공통env: SCAN SCORE 되돌림/하락 WEIGHT (SCAN_SCORE_DROP_WEIGHT) |
| `SCAN_SCORE_RECOVERY_WEIGHT` | `text` | NULL | NULL | 공통env: SCAN SCORE RECOVERY WEIGHT (SCAN_SCORE_RECOVERY_WEIGHT) |
| `MIN_SCORE_DISPLAY` | `text` | NULL | NULL | 공통env: 최소 SCORE DISPLAY (MIN_SCORE_DISPLAY) |
| `MM_TOP_N` | `text` | NULL | NULL | 공통env: MM TOP N (MM_TOP_N) |
| `SLOT_MONEY_DEFAULT` | `text` | NULL | NULL | 공통env: 슬롯금액 DEFAULT (SLOT_MONEY_DEFAULT) |
| `SLOT_BASE_AMOUNT_CAP` | `text` | NULL | NULL | 공통env: SLOT BASE AMOUNT CAP (SLOT_BASE_AMOUNT_CAP) |
| `SIZE_CLASS_SMALL_RATIO` | `text` | NULL | NULL | 공통env: SIZE CLASS SMALL RATIO (SIZE_CLASS_SMALL_RATIO) |
| `SIZE_CLASS_MID_RATIO` | `text` | NULL | NULL | 공통env: SIZE CLASS MID RATIO (SIZE_CLASS_MID_RATIO) |
| `SCAN_MIN_PREV_DAY_PCT` | `text` | NULL | NULL | 공통env: SCAN 최소 PREV DAY % (SCAN_MIN_PREV_DAY_PCT) |
| `UPDATE_UNIVERSE_MIN_CANDIDATES` | `text` | NULL | NULL | 공통env: UPDATE 유니버스 최소 CANDIDATES (UPDATE_UNIVERSE_MIN_CANDIDATES) |
| `UPDATE_UNIVERSE_MIN_SCORE` | `text` | NULL | NULL | 공통env: UPDATE 유니버스 최소 SCORE (UPDATE_UNIVERSE_MIN_SCORE) |
| `UPDATE_UNIVERSE_FALLBACK_TOP_N` | `text` | NULL | NULL | 공통env: UPDATE 유니버스 FALLBACK TOP N (UPDATE_UNIVERSE_FALLBACK_TOP_N) |
| `UPDATE_UNIVERSE_TOP_LOG` | `text` | NULL | NULL | 공통env: UPDATE 유니버스 TOP LOG (UPDATE_UNIVERSE_TOP_LOG) |
| `UPDATE_UNIVERSE_TOP_N` | `text` | NULL | NULL | 공통env: UPDATE 유니버스 TOP N (UPDATE_UNIVERSE_TOP_N) |
| `SCAN_INTERVAL_SEC` | `text` | NULL | NULL | 공통env: SCAN INTERVAL 초 (SCAN_INTERVAL_SEC) |
| `USE_RANDOM_SPLIT` | `text` | NULL | NULL | 공통env: 사용_ RANDOM SPLIT (USE_RANDOM_SPLIT) |
| `FORCE_MARKET_OPEN` | `text` | NULL | NULL | 공통env: FORCE MARKET OPEN (FORCE_MARKET_OPEN) |
| `FORCE_BUY_TEST` | `text` | NULL | NULL | 공통env: 강제매수테스트 TEST (FORCE_BUY_TEST) |
| `TOTAL_DEPOSIT` | `text` | NULL | NULL | 공통env: TOTAL DEPOSIT (TOTAL_DEPOSIT) |
| `ROUND_TRIP_COST_PCT` | `text` | NULL | NULL | 공통env: ROUND TRIP COST % (ROUND_TRIP_COST_PCT) |
| `POP_NET_PCT` | `text` | NULL | NULL | 공통env: POP NET % (POP_NET_PCT) |
| `LOCK_NET_PCT` | `text` | NULL | NULL | 공통env: LOCK NET % (LOCK_NET_PCT) |
| `MAX_LOSS_PER_TRADE_KRW` | `text` | NULL | NULL | 공통env: 최대 LOSS PER TRADE 원 (MAX_LOSS_PER_TRADE_KRW) |
| `MIN_DROP_PCT_FOR_LOSS_CUT` | `text` | NULL | NULL | 공통env: 최소 되돌림/하락 % FOR LOSS CUT (MIN_DROP_PCT_FOR_LOSS_CUT) |
| `KIS_APP_KEY_REAL` | `text` | NULL | NULL | 공통env: KIS APP KEY REAL (KIS_APP_KEY_REAL) |
| `KIS_APP_SECRET_REAL` | `text` | NULL | NULL | 공통env: KIS APP 초 RET REAL (KIS_APP_SECRET_REAL) |
| `KIS_APP_KEY_MOCK` | `text` | NULL | NULL | 공통env: KIS APP KEY MOCK (KIS_APP_KEY_MOCK) |
| `KIS_APP_SECRET_MOCK` | `text` | NULL | NULL | 공통env: KIS APP 초 RET MOCK (KIS_APP_SECRET_MOCK) |
| `KIS_ACCOUNT_NO_REAL` | `text` | NULL | NULL | 공통env: KIS ACCOUNT NO REAL (KIS_ACCOUNT_NO_REAL) |
| `KIS_ACCOUNT_CODE_REAL` | `text` | NULL | NULL | 공통env: KIS ACCOUNT CODE REAL (KIS_ACCOUNT_CODE_REAL) |
| `KIS_ACCOUNT_NO_MOCK` | `text` | NULL | NULL | 공통env: KIS ACCOUNT NO MOCK (KIS_ACCOUNT_NO_MOCK) |
| `KIS_ACCOUNT_CODE_MOCK` | `text` | NULL | NULL | 공통env: KIS ACCOUNT CODE MOCK (KIS_ACCOUNT_CODE_MOCK) |
| `KIS_MOCK` | `text` | NULL | NULL | 공통env: KIS MOCK (KIS_MOCK) |
| `TAKE_PROFIT_PCT` | `text` | NULL | NULL | 공통env: 익절 % (TAKE_PROFIT_PCT) |
| `MIN_DROP_RATE` | `text` | NULL | NULL | 공통env: 최소 되돌림/하락 RATE (MIN_DROP_RATE) |
| `MIN_RECOVERY_RATIO_SHORT` | `text` | NULL | NULL | 공통env: 최소 RECOVERY RATIO SHORT (MIN_RECOVERY_RATIO_SHORT) |
| `QUICK_PROFIT_PROTECT_HOURS` | `text` | NULL | NULL | 공통env: QUICK PROFIT PROTECT HOURS (QUICK_PROFIT_PROTECT_HOURS) |
| `QUICK_PROFIT_MAX_RATIO` | `text` | NULL | NULL | 공통env: QUICK PROFIT 최대 RATIO (QUICK_PROFIT_MAX_RATIO) |
| `QUICK_PROFIT_CURRENT_MIN` | `text` | NULL | NULL | 공통env: QUICK PROFIT CURRENT 최소 (QUICK_PROFIT_CURRENT_MIN) |
| `MIN_HOLD_EARLY_TAKE_PCT` | `text` | NULL | NULL | 공통env: 최소보유 EARLY TAKE % (MIN_HOLD_EARLY_TAKE_PCT) |
| `MIN_HOLD_HIGH_PCT` | `text` | NULL | NULL | 공통env: 최소보유 HIGH % (MIN_HOLD_HIGH_PCT) |
| `MIN_HOLD_DROP_FROM_HIGH` | `text` | NULL | NULL | 공통env: 최소보유 되돌림/하락 FROM HIGH (MIN_HOLD_DROP_FROM_HIGH) |
| `POST_HOLD_TAKE_PCT` | `text` | NULL | NULL | 공통env: POST HOLD TAKE % (POST_HOLD_TAKE_PCT) |
| `POST_HOLD_DROP_FROM_HIGH` | `text` | NULL | NULL | 공통env: POST HOLD 되돌림/하락 FROM HIGH (POST_HOLD_DROP_FROM_HIGH) |
| `MAX_PER` | `text` | NULL | NULL | 공통env: 최대 PER (MAX_PER) |
| `MAX_PEG` | `text` | NULL | NULL | 공통env: 최대 PEG (MAX_PEG) |
| `MIN_GROWTH_PCT` | `text` | NULL | NULL | 공통env: 최소 GROWTH % (MIN_GROWTH_PCT) |
| `DCA_INTERVALS` | `text` | NULL | NULL | 공통env: DCA INTERVALS (DCA_INTERVALS) |
| `DCA_AMOUNTS` | `text` | NULL | NULL | 공통env: DCA AMOUNTS (DCA_AMOUNTS) |
| `MM_SERVER_URL` | `text` | NULL | NULL | 공통env: MM SERVER URL (MM_SERVER_URL) |
| `MM_BOT_TOKEN_` | `text` | NULL | NULL | 공통env: MM BOT TOKEN (MM_BOT_TOKEN_) |
| `MATTERMOST_CHANNEL` | `text` | NULL | NULL | 공통env: MATTERMOST CHANNEL (MATTERMOST_CHANNEL) |
| `GEMINI_API_KEY` | `text` | NULL | NULL | 공통env: GEMINI API KEY (GEMINI_API_KEY) |
| `AI_JOURNAL_LINES` | `text` | NULL | NULL | 공통env: AI JOURNAL LINES (AI_JOURNAL_LINES) |
| `ANTHROPIC_API_KEY` | `text` | NULL | NULL | 공통env: ANTHROPIC API KEY (ANTHROPIC_API_KEY) |
| `CLAUDE_MODEL_ID` | `text` | NULL | NULL | 공통env: CLAUDE 모드 L ID (CLAUDE_MODEL_ID) |
| `CLAUDE_MAX_TOKENS` | `text` | NULL | NULL | 공통env: CLAUDE 최대 TOKENS (CLAUDE_MAX_TOKENS) |
| `MM_BUTLER_CHANNEL` | `text` | NULL | NULL | 공통env: MM BUTLER CHANNEL (MM_BUTLER_CHANNEL) |
| `MM_DUAL_CHANNEL_ENABLED` | `text` | NULL | NULL | 공통env: MM DUAL CHANNEL ON/OFF (MM_DUAL_CHANNEL_ENABLED) |
| `OPENROUTER_API_KEY` | `text` | NULL | NULL | 공통env: OPENROUTER API KEY (OPENROUTER_API_KEY) |
| `OPENROUTER_MODEL_ID` | `text` | NULL | NULL | 공통env: OPENROUTER 모드 L ID (OPENROUTER_MODEL_ID) |
| `KIS_LONG_MM_CHANNEL` | `text` | NULL | NULL | 공통env: KIS LONG MM CHANNEL (KIS_LONG_MM_CHANNEL) |
| `LONG_DAILY_LOOKBACK_DAYS` | `text` | NULL | NULL | 공통env: LONG DAILY LOOKBACK DAYS (LONG_DAILY_LOOKBACK_DAYS) |
| `LONG_MA_SHORT_DAYS` | `text` | NULL | NULL | 공통env: LONG MA SHORT DAYS (LONG_MA_SHORT_DAYS) |
| `LONG_MA_LONG_DAYS` | `text` | NULL | NULL | 공통env: LONG MA LONG DAYS (LONG_MA_LONG_DAYS) |
| `LONG_REPORT_AM_HOUR` | `text` | NULL | NULL | 공통env: LONG REPORT AM HOUR (LONG_REPORT_AM_HOUR) |
| `LONG_REPORT_AM_MIN` | `text` | NULL | NULL | 공통env: LONG REPORT AM 최소 (LONG_REPORT_AM_MIN) |
| `LONG_REPORT_PM_HOUR` | `text` | NULL | NULL | 공통env: LONG REPORT PM HOUR (LONG_REPORT_PM_HOUR) |
| `LONG_REPORT_PM_MIN` | `text` | NULL | NULL | 공통env: LONG REPORT PM 최소 (LONG_REPORT_PM_MIN) |
| `LONG_NEWS_ENABLED` | `text` | NULL | NULL | 공통env: LONG NEWS ON/OFF (LONG_NEWS_ENABLED) |
| `LONG_NEWS_INTERVAL_MIN` | `text` | NULL | NULL | 공통env: LONG NEWS INTERVAL 최소 (LONG_NEWS_INTERVAL_MIN) |
| `LONG_NEWS_ACTIVE_START_HOUR` | `text` | NULL | NULL | 공통env: LONG NEWS ACTIVE START HOUR (LONG_NEWS_ACTIVE_START_HOUR) |
| `LONG_NEWS_ACTIVE_END_HOUR` | `text` | NULL | NULL | 공통env: LONG NEWS ACTIVE END HOUR (LONG_NEWS_ACTIVE_END_HOUR) |
| `LONG_ANALYSIS_DELAY_MIN_SEC` | `text` | NULL | NULL | 공통env: LONG ANALYSIS DELAY 최소 초 (LONG_ANALYSIS_DELAY_MIN_SEC) |
| `LONG_ANALYSIS_DELAY_MAX_SEC` | `text` | NULL | NULL | 공통env: LONG ANALYSIS DELAY 최대 초 (LONG_ANALYSIS_DELAY_MAX_SEC) |
| `RSI_PERIOD` | `text` | NULL | NULL | 공통env: RSI 기간 (RSI_PERIOD) |
| `KIS_WS_URL_REAL` | `text` | NULL | NULL | 공통env: URL REAL (KIS_WS_URL_REAL) |
| `KIS_WS_URL_MOCK` | `text` | NULL | NULL | 공통env: URL MOCK (KIS_WS_URL_MOCK) |
| `KIS_WS_MOCK_ENABLED` | `text` | NULL | NULL | 공통env: MOCK ON/OFF (KIS_WS_MOCK_ENABLED) |
| `REENTRY_COOLDOWN_SEC` | `text` | NULL | NULL | 공통env: REENTRY 쿨다운 초 (REENTRY_COOLDOWN_SEC) |
| `TIME_START` | `text` | NULL | NULL | 공통env: 매수시작 (TIME_START) |
| `TIME_END` | `text` | NULL | NULL | 공통env: 매수종료 (TIME_END) |
| `SELL_FAILURE_BACKOFF_SEC` | `text` | NULL | NULL | 공통env: SELL FAILURE BACKOFF 초 (SELL_FAILURE_BACKOFF_SEC) |
| `BROKER_HOLDINGS_CACHE_TTL_SEC` | `text` | NULL | NULL | 공통env: BROKER HOLDINGS CACHE TTL 초 (BROKER_HOLDINGS_CACHE_TTL_SEC) |
| `GHOST_POSITION_COOLDOWN_SEC` | `text` | NULL | NULL | 공통env: GHOST POSITION 쿨다운 초 (GHOST_POSITION_COOLDOWN_SEC) |
| `WS_TICK_SAVE_ENABLED` | `text` | NULL | NULL | 공통env: WS TICK SAVE ON/OFF (WS_TICK_SAVE_ENABLED) |
| `WS_TICK_BUFFER_MAX_PER_CODE` | `text` | NULL | NULL | 공통env: WS TICK BUFFER 최대 PER CODE (WS_TICK_BUFFER_MAX_PER_CODE) |
| `WS_TICK_DB_BATCH_SIZE` | `text` | NULL | NULL | 공통env: WS TICK DB BATCH SIZE (WS_TICK_DB_BATCH_SIZE) |
| `WS_TICK_DB_FLUSH_SEC` | `text` | NULL | NULL | 공통env: WS TICK DB FLUSH 초 (WS_TICK_DB_FLUSH_SEC) |
| `WS_TICK_WRITE_QUEUE_MAX` | `text` | NULL | NULL | 공통env: WS TICK WRITE QUEUE 최대 (WS_TICK_WRITE_QUEUE_MAX) |
| `WS_TICK_KEEP_DAYS` | `text` | NULL | NULL | 공통env: WS TICK KEEP DAYS (WS_TICK_KEEP_DAYS) |
| `WS_TICK_RECORD_SCOPE` | `text` | NULL | NULL | 공통env: WS TICK RECORD SCOPE (WS_TICK_RECORD_SCOPE) |
| `WS_TICK_DEFAULT_MARKET` | `text` | NULL | NULL | 공통env: WS TICK DEFAULT MARKET (WS_TICK_DEFAULT_MARKET) |
| `WS_TICK_DEFAULT_EXCHANGE` | `text` | NULL | NULL | 공통env: WS TICK DEFAULT EXCHANGE (WS_TICK_DEFAULT_EXCHANGE) |
| `WS_TICK_DEFAULT_CURRENCY` | `text` | NULL | NULL | 공통env: WS TICK DEFAULT CURRENCY (WS_TICK_DEFAULT_CURRENCY) |
| `WS_ORDERBOOK_SAVE_ENABLED` | `text` | NULL | NULL | 호가 시계열(KIWOOM_0D) — 구독후보 ~3초 덤프 · 틱처럼 후보·보유만 연속 저장(source=kiwoom_0d) · 파람서치 호가축용 · 봇 재시작 필요 · 필터와 무관 |
| `WS_PROGRAM_SAVE_ENABLED` | `text` | NULL | NULL | 프로그램 시계열 — 구독후보 ~3초 덤프 · SAVE와 동일 Recorder · 봇 재시작 필요 · 필터와 무관 |
| `WS_TRIGGER_SNAPSHOT_DB_INTERVAL_SEC` | `text` | NULL | NULL | 호가/프로그램 시계열 간격(초) · SAVE ON일 때만 · 종목당 최소 저장 간격 · 봇 재시작 필요 |
| `WS_TRIGGER_SNAPSHOT_DB_BATCH_SIZE` | `text` | NULL | NULL | 공통env: WS TRIGGER SNAPSHOT DB BATCH SIZE (WS_TRIGGER_SNAPSHOT_DB_BATCH_SIZE) |
| `WS_TRIGGER_SNAPSHOT_DB_FLUSH_SEC` | `text` | NULL | NULL | 공통env: WS TRIGGER SNAPSHOT DB FLUSH 초 (WS_TRIGGER_SNAPSHOT_DB_FLUSH_SEC) |
| `WS_TRIGGER_SNAPSHOT_WRITE_QUEUE_MAX` | `text` | NULL | NULL | 공통env: WS TRIGGER SNAPSHOT WRITE QUEUE 최대 (WS_TRIGGER_SNAPSHOT_WRITE_QUEUE_MAX) |
| `WS_ORDERBOOK_KEEP_DAYS` | `text` | NULL | NULL | 공통env: WS 호가 KEEP DAYS (WS_ORDERBOOK_KEEP_DAYS) |
| `WS_PROGRAM_KEEP_DAYS` | `text` | NULL | NULL | 공통env: WS 프로그램매매 KEEP DAYS (WS_PROGRAM_KEEP_DAYS) |
| `BACKTEST_USE_TRIGGER_SNAPSHOT_DB` | `text` | NULL | NULL | 공통env: BACKTEST 사용_ TRIGGER SNAPSHOT DB (BACKTEST_USE_TRIGGER_SNAPSHOT_DB) |
| `WHIPSAW_FILTER_ENABLED` | `text` | NULL | NULL | 휩쏘 필터(글로벌) |
| `WHIPSAW_BACKTEST_OHLC_FALLBACK` | `text` | NULL | NULL | 공통env: 휩쏘 BACKTEST OHLC FALLBACK (WHIPSAW_BACKTEST_OHLC_FALLBACK) |
| `WHIPSAW_MODE` | `text` | NULL | NULL | 공통env: 휩쏘 모드 (WHIPSAW_MODE) |
| `WHIPSAW_SUBBAR_SEC` | `text` | NULL | NULL | 휩쏘 미니봉(초) · 틱을 N초 봉으로 묶음 · 실매 기본 30 · Optuna 꼬리 TPE 탐색 |
| `WHIPSAW_LOOKBACK_SEC` | `text` | NULL | NULL | 휩쏘 룩백(초) · 신호 직전 몇 초를 볼지 · 실매 기본 90 |
| `WHIPSAW_DIP_PCT` | `text` | NULL | NULL | 휩쏘 하락폭(분율, 0.003=0.3%) |
| `WHIPSAW_RECOVERY_TOL_PCT` | `text` | NULL | NULL | 휩쏘 회복 허용(분율, 0.001=0.1%) |
| `WHIPSAW_MIN_SUBBARS` | `text` | NULL | NULL | 공통env: 휩쏘 최소 SUBBARS (WHIPSAW_MIN_SUBBARS) |
| `WHIPSAW_TICK_BUFFER_LIMIT` | `text` | NULL | NULL | 공통env: 휩쏘 TICK BUFFER LIMIT (WHIPSAW_TICK_BUFFER_LIMIT) |
| `USE_KELLY_FORMULA` | `text` | NULL | NULL | 공통env: 사용_ KELLY FORMULA (USE_KELLY_FORMULA) |
| `KELLY_MULTIPLIER` | `text` | NULL | NULL | 공통env: KELLY 배수 IPLIER (KELLY_MULTIPLIER) |
| `USE_MARKET_IOC` | `text` | NULL | NULL | 매수 시장가 IOC · 실전 매수 ORD_DVSN=13(IOC) · OFF=01 · 모의는 01 고정 |
| `KIS_PRICE_CACHE_TTL_SEC` | `text` | NULL | NULL | 공통env: KIS PRICE CACHE TTL 초 (KIS_PRICE_CACHE_TTL_SEC) |
| `MIN_HOLD_AFTER_BUY_SEC` | `text` | NULL | NULL | 공통env: 최소보유 AFTER BUY 초 (MIN_HOLD_AFTER_BUY_SEC) |
| `MIN_HOLD_HOURS` | `text` | NULL | NULL | 공통env: 최소보유 HOURS (MIN_HOLD_HOURS) |
| `MAX_RECOVERY_RATIO_3M` | `text` | NULL | NULL | 공통env: 최대 RECOVERY RATIO 3M (MAX_RECOVERY_RATIO_3M) |
| `CANDIDATE_LIST_TOP_N_LIGHT` | `text` | NULL | NULL | 공통env: CANDIDATE LIST TOP N LIGHT (CANDIDATE_LIST_TOP_N_LIGHT) |
| `SCAN_UNIVERSE_MAX_CODES` | `text` | NULL | NULL | 공통env: SCAN 유니버스 최대 CODES (SCAN_UNIVERSE_MAX_CODES) |
| `KIS_APP_KEY` | `text` | NULL | NULL | 공통env: KIS APP KEY (KIS_APP_KEY) |
| `KIS_APP_SECRET` | `text` | NULL | NULL | 공통env: KIS APP 초 RET (KIS_APP_SECRET) |
| `KIS_ACCOUNT_NO` | `text` | NULL | NULL | 공통env: KIS ACCOUNT NO (KIS_ACCOUNT_NO) |
| `KIS_ACCOUNT_CODE` | `text` | NULL | NULL | 공통env: KIS ACCOUNT CODE (KIS_ACCOUNT_CODE) |
| `GEMINI_MODEL_ID` | `text` | NULL | NULL | 공통env: GEMINI 모드 L ID (GEMINI_MODEL_ID) |
| `MM_BUTLER_POLL_SEC` | `text` | NULL | NULL | 공통env: MM BUTLER POLL 초 (MM_BUTLER_POLL_SEC) |
| `AI_SOURCE_MAX_CHARS` | `text` | NULL | NULL | 공통env: AI SOURCE 최대 CHARS (AI_SOURCE_MAX_CHARS) |
| `FEE_RATE_PCT` | `text` | NULL | NULL | 공통env: 수수료율 % (FEE_RATE_PCT) |
| `SELL_TAX_RATE_PCT` | `text` | NULL | NULL | 공통env: 매도세금 RATE % (SELL_TAX_RATE_PCT) |
| `KIWOOM_APP_KEY_REAL` | `text` | NULL | NULL | 공통env: KIWOOM APP KEY REAL (KIWOOM_APP_KEY_REAL) |
| `KIWOOM_APP_SECRET_REAL` | `text` | NULL | NULL | 공통env: KIWOOM APP 초 RET REAL (KIWOOM_APP_SECRET_REAL) |
| `KIWOOM_APP_KEY_MOCK` | `text` | NULL | NULL | 공통env: KIWOOM APP KEY MOCK (KIWOOM_APP_KEY_MOCK) |
| `KIWOOM_APP_SECRET_MOCK` | `text` | NULL | NULL | 공통env: KIWOOM APP 초 RET MOCK (KIWOOM_APP_SECRET_MOCK) |
| `KIWOOM_APP_KEY` | `text` | NULL | NULL | 공통env: KIWOOM APP KEY (KIWOOM_APP_KEY) |
| `KIWOOM_APP_SECRET` | `text` | NULL | NULL | 공통env: KIWOOM APP 초 RET (KIWOOM_APP_SECRET) |
| `PERMANENT_WS_CODES` | `text` | NULL | NULL | 공통env: PERMANENT WS CODES (PERMANENT_WS_CODES) |
| `USE_MARKET_REGIME_FILTER` | `text` | NULL | NULL | 공통env: 사용_ MARKET REGIME 필터 (USE_MARKET_REGIME_FILTER) |
| `MARKET_REGIME_MIN_RSI` | `text` | NULL | NULL | 공통env: MARKET REGIME 최소 RSI (MARKET_REGIME_MIN_RSI) |
| `USE_THEME_HEAT_FILTER` | `text` | NULL | NULL | 공통env: 사용_ THEME HEAT 필터 (USE_THEME_HEAT_FILTER) |
| `THEME_HEAT_RSI_MAX` | `text` | NULL | NULL | 공통env: THEME HEAT RSI상한 (THEME_HEAT_RSI_MAX) |
| `STRATEGY_SAME_CODE_POLICY` | `text` | NULL | NULL | 공통env: 전략 SAME CODE POLICY (STRATEGY_SAME_CODE_POLICY) |
| `ORDER_CASH_PCT` | `text` | NULL | NULL | 공통env: ORDER CASH % (ORDER_CASH_PCT) |
| `ORDER_CASH_FEE_BUFFER` | `text` | NULL | NULL | 공통env: ORDER CASH FEE BUFFER (ORDER_CASH_FEE_BUFFER) |
| `ORDER_CASH_DIVIDE_BY_MAX_STOCKS` | `text` | NULL | NULL | 공통env: ORDER CASH DIVIDE BY 동시보유상한 (ORDER_CASH_DIVIDE_BY_MAX_STOCKS) |
| `ACCOUNT_CASH_PERSIST_SEC` | `text` | NULL | NULL | 공통env: ACCOUNT CASH PERSIST 초 (ACCOUNT_CASH_PERSIST_SEC) |
| `BACKTEST_EXIT_CHECKS_PER_BAR` | `text` | NULL | NULL | 공통env: BACKTEST EXIT CHECKS PER BAR (BACKTEST_EXIT_CHECKS_PER_BAR) |
| `RANKING_POLL_INTERVAL_SEC` | `text` | NULL | NULL | 공통env: RANKING POLL INTERVAL 초 (RANKING_POLL_INTERVAL_SEC) |
| `KIS_HTS_ID` | `text` | NULL | NULL | 공통env: KIS HTS ID (KIS_HTS_ID) |
| `CONDITION_POLL_INTERVAL_SEC` | `text` | NULL | NULL | 공통env: CONDITION POLL INTERVAL 초 (CONDITION_POLL_INTERVAL_SEC) |
| `CONDITION_EXIT_GRACE_SEC` | `text` | NULL | NULL | 공통env: CONDITION EXIT GRACE 초 (CONDITION_EXIT_GRACE_SEC) |
| `UNIVERSE_HISTORY_SAVE` | `text` | NULL | NULL | 공통env: 유니버스 HISTORY SAVE (UNIVERSE_HISTORY_SAVE) |
| `WS_GAP_FILL_OFF_HOURS` | `text` | NULL | NULL | 공통env: WS GAP FILL OFF HOURS (WS_GAP_FILL_OFF_HOURS) |
| `WS_GAP_FILL_LIMIT` | `text` | NULL | NULL | 공통env: WS GAP FILL LIMIT (WS_GAP_FILL_LIMIT) |
| `WS_TIMEFRAMES` | `text` | NULL | NULL | 공통env: WS TIMEFRAMES (WS_TIMEFRAMES) |
| `WS_GAP_FILL_KIS_FALLBACK` | `text` | NULL | NULL | 공통env: WS GAP FILL KIS FALLBACK (WS_GAP_FILL_KIS_FALLBACK) |
| `MAX_BUY_AMOUNT_PER_STOCK` | `text` | NULL | NULL | 공통env: 1회최대매수금액 PER STOCK (MAX_BUY_AMOUNT_PER_STOCK) |
| `KIS_MIN_INTERVAL_SEC` | `text` | NULL | NULL | 공통 폴백 최소간격(초) · 위 도메인별 키 미설정 시 폴백 |
| `KIS_REST_MAX_RETRIES` | `text` | NULL | NULL | 공통env: KIS REST 최대 RETRIES (KIS_REST_MAX_RETRIES) |
| `KIS_REST_BACKOFF_CAP_SEC` | `text` | NULL | NULL | 공통env: KIS REST BACKOFF CAP 초 (KIS_REST_BACKOFF_CAP_SEC) |
| `KIS_REST_TIMEOUT_SEC` | `text` | NULL | NULL | 공통env: KIS REST TIMEOUT 초 (KIS_REST_TIMEOUT_SEC) |
| `MARKET_GUARD_ENABLED` | `text` | NULL | NULL | 공통env: MARKET GUARD ON/OFF (MARKET_GUARD_ENABLED) |
| `MARKET_GUARD_5MIN_DROP_PCT` | `text` | NULL | NULL | 공통env: MARKET GUARD 5MIN 되돌림/하락 % (MARKET_GUARD_5MIN_DROP_PCT) |
| `MARKET_GUARD_DAILY_DROP_PCT` | `text` | NULL | NULL | 공통env: MARKET GUARD DAILY 되돌림/하락 % (MARKET_GUARD_DAILY_DROP_PCT) |
| `MARKET_GUARD_RECOVERY_PCT` | `text` | NULL | NULL | 공통env: MARKET GUARD RECOVERY % (MARKET_GUARD_RECOVERY_PCT) |
| `MARKET_GUARD_INDEX_CODE` | `text` | NULL | NULL | 공통env: MARKET GUARD INDEX CODE (MARKET_GUARD_INDEX_CODE) |
| `MARKET_GUARD_POLL_SEC` | `text` | NULL | NULL | 공통env: MARKET GUARD POLL 초 (MARKET_GUARD_POLL_SEC) |
| `MARKET_GUARD_INDEX_CANDLE_KEEP_MIN` | `text` | NULL | NULL | 공통env: MARKET GUARD INDEX CANDLE KEEP 최소 (MARKET_GUARD_INDEX_CANDLE_KEEP_MIN) |
| `MARKET_GUARD_PERSIST_STATE` | `text` | NULL | NULL | 공통env: MARKET GUARD PERSIST STATE (MARKET_GUARD_PERSIST_STATE) |
| `STOCK_SHARE_DENOM` | `text` | NULL | NULL | 공통env: STOCK SHARE DENOM (STOCK_SHARE_DENOM) |
| `EXCLUDE_NON_STOCK` | `text` | NULL | NULL | 비본주(우선주·ETF·ETN) 매수 제외 · 후보 name==code 여도 코드 끝 5/7/9·K/L… 로 우선주 차단 |
| `WS_PROVIDER` | `text` | NULL | NULL | 공통env: WS PROVIDER (WS_PROVIDER) |
| `WS_SUBSCRIBE_KIS_MINIMAL` | `text` | NULL | NULL | 공통env: WS SUBSCRIBE KIS 최소 IMAL (WS_SUBSCRIBE_KIS_MINIMAL) |
| `WS_VALIDATION_INTERVAL_SEC` | `text` | NULL | NULL | 공통env: WS VALIDATION INTERVAL 초 (WS_VALIDATION_INTERVAL_SEC) |
| `WS_VALIDATION_DIFF_WARN_PCT` | `text` | NULL | NULL | 공통env: WS VALIDATION DIFF WARN % (WS_VALIDATION_DIFF_WARN_PCT) |
| `KIWOOM_WS_FORCE_REAL` | `text` | NULL | NULL | 공통env: FORCE REAL (KIWOOM_WS_FORCE_REAL) |
| `KIWOOM_WS_MAX_SUBSCRIPTIONS` | `text` | NULL | NULL | 키움WS 그룹당최대구독. 기본100. 0B체결·0D호가·0w프로그램. 한투41과별개 |
| `KIWOOM_WS_REG_CHUNK_SIZE` | `text` | NULL | NULL | 공통env: REG CHUNK SIZE (KIWOOM_WS_REG_CHUNK_SIZE) |
| `KIWOOM_WS_REG_GAP_SEC` | `text` | NULL | NULL | 공통env: REG GAP 초 (KIWOOM_WS_REG_GAP_SEC) |
| `KIWOOM_WS_REG_DEBOUNCE_SEC` | `text` | NULL | NULL | 공통env: REG DEBOUNCE 초 (KIWOOM_WS_REG_DEBOUNCE_SEC) |
| `KIWOOM_WS_ORDERBOOK_ENABLED` | `text` | NULL | NULL | 호가 WS(0D) 구독 · 키움 실시간 호가 수신(RAM) · 꺼면 필터·수집·시계열 모두 불가 |
| `KIWOOM_WS_PROGRAM_ENABLED` | `text` | NULL | NULL | 프로그램 WS(0w) 구독 · 키움 프로그램매매 수신(RAM) |
| `ORDERBOOK_FILTER_ENABLED` | `text` | NULL | NULL | 공통env: 호가 필터 ON/OFF (ORDERBOOK_FILTER_ENABLED) |
| `ORDERBOOK_MAX_SPREAD_PCT` | `text` | NULL | NULL | 공통env: 호가 최대 SPREAD % (ORDERBOOK_MAX_SPREAD_PCT) |
| `ORDERBOOK_ENTRY_BID_LEVELS` | `text` | NULL | NULL | 공통env: 호가 ENTRY BID LEVELS (ORDERBOOK_ENTRY_BID_LEVELS) |
| `ORDERBOOK_ENTRY_BID_DEPTH_MULT` | `text` | NULL | NULL | 공통env: 호가 ENTRY BID DEPTH 배수 (ORDERBOOK_ENTRY_BID_DEPTH_MULT) |
| `ORDERBOOK_ENTRY_ASK_MAX_MULT` | `text` | NULL | NULL | 공통env: 호가 ENTRY ASK 최대 배수 (ORDERBOOK_ENTRY_ASK_MAX_MULT) |
| `ORDERBOOK_MIN_BID_ASK_RATIO` | `text` | NULL | NULL | 공통env: 호가 최소 BID ASK RATIO (ORDERBOOK_MIN_BID_ASK_RATIO) |
| `ORDERBOOK_BREAKOUT_ASK_WALL_MAX_QTY` | `text` | NULL | NULL | 공통env: 호가 돌파 ASK WALL 최대 QTY (ORDERBOOK_BREAKOUT_ASK_WALL_MAX_QTY) |
| `PROGRAM_FILTER_ENABLED` | `text` | NULL | NULL | 프로그램 필터(TRIGGER) — 실매 탈락 |
| `PROGRAM_MIN_NET_BUY_QTY` | `text` | NULL | NULL | 공통env: 프로그램매매 최소 NET BUY QTY (PROGRAM_MIN_NET_BUY_QTY) |
| `PROGRAM_MIN_NET_BUY_AMT` | `text` | NULL | NULL | 공통env: 프로그램매매 최소 NET BUY AMT (PROGRAM_MIN_NET_BUY_AMT) |
| `PROGRAM_MAX_SELL_BUY_QTY_RATIO` | `text` | NULL | NULL | 공통env: 프로그램매매 최대 SELL BUY QTY RATIO (PROGRAM_MAX_SELL_BUY_QTY_RATIO) |
| `PROGRAM_MIN_NET_DELTA_QTY` | `text` | NULL | NULL | 공통env: 프로그램매매 최소 NET DELTA QTY (PROGRAM_MIN_NET_DELTA_QTY) |
| `PROGRAM_SNAPSHOT_MAX_AGE_SEC` | `text` | NULL | NULL | 공통env: 프로그램매매 SNAPSHOT 최대 AGE 초 (PROGRAM_SNAPSHOT_MAX_AGE_SEC) |
| `STRICT_FILL_VERIFY` | `text` | NULL | NULL | 모의 엄격 체결 검증 · 모의 실매매만 영향 · ON=체결 API 필수(모의 API 한계로 매수 0건 가능) · 실전은 항상 엄격 |
| `ORDER_FILL_WAIT_SEC` | `text` | NULL | NULL | 시장가 체결 대기(초) |
| `LIMIT_ORDER_FILL_WAIT_SEC` | `text` | NULL | NULL | 지정가 체결 대기(초) |
| `PENDING_FILL_POLL_INTERVAL_SEC` | `text` | NULL | NULL | 미체결 재조회 주기(초) |
| `PENDING_FILL_POLL_SEC` | `text` | NULL | NULL | 재조회 1회 대기(초) |
| `PENDING_FILL_MAX_AGE_SEC` | `text` | NULL | NULL | 공통env: PENDING FILL 최대 AGE 초 (PENDING_FILL_MAX_AGE_SEC) |
| `PENDING_BUY_MAX_AGE_SEC` | `text` | NULL | NULL | 매수 미체결 만료(초) |
| `PENDING_SELL_MAX_AGE_SEC` | `text` | NULL | NULL | 익절 매도 미체결 만료(초) |
| `PENDING_SELL_STOP_MAX_AGE_SEC` | `text` | NULL | NULL | 손절 매도 미체결 만료(초) |
| `SELL_PENDING_REORDER_ON_EXPIRE` | `text` | NULL | NULL | 손절 만료 후 즉시 재매도 |
| `AUTO_CANCEL_PARTIAL_BUY_REMAINDER` | `text` | NULL | NULL | 부분체결 잔량 자동취소 |
| `WS_TRIGGER_EVAL_SAVE_ENABLED` | `text` | NULL | NULL | TRIGGER 판정 DB 저장(마스터) · OFF면 아래 COLLECT(판정 스냅) 전부 안 씀 · SAVE(시계열)와 무관 |
| `WS_TRIGGER_EVAL_DB_BATCH_SIZE` | `text` | NULL | NULL | 공통env: WS TRIGGER EVAL DB BATCH SIZE (WS_TRIGGER_EVAL_DB_BATCH_SIZE) |
| `WS_TRIGGER_EVAL_DB_FLUSH_SEC` | `text` | NULL | NULL | 공통env: WS TRIGGER EVAL DB FLUSH 초 (WS_TRIGGER_EVAL_DB_FLUSH_SEC) |
| `WS_TRIGGER_EVAL_WRITE_QUEUE_MAX` | `text` | NULL | NULL | 공통env: WS TRIGGER EVAL WRITE QUEUE 최대 (WS_TRIGGER_EVAL_WRITE_QUEUE_MAX) |
| `BACKTEST_USE_TRIGGER_EVAL_SNAPSHOT` | `text` | NULL | NULL | 공통env: BACKTEST 사용_ TRIGGER EVAL SNAPSHOT (BACKTEST_USE_TRIGGER_EVAL_SNAPSHOT) |
| `DAILY_PROFIT_MODE` | `text` | NULL | NULL | 익절 방식 · fixed=고정목표 / trailing=고점대비 되돌림 / both=둘 중 먼저 |
| `DAILY_PROFIT_TRAIL_TIERS` | `text` | NULL | NULL | 다단 트레일(수익원:컷%,…) · 벌수록 타이트하게 사수 · 예: 30000:50,100000:35,300000:25 · 비우면 단일 되돌림 사용 |
| `DAILY_PROFIT_TRAIL_DROP_PCT` | `text` | NULL | NULL | 단일 트레일 되돌림(%, 고점대비) · 다단 비었을 때만 · 예: 35 = 고점 대비 -35% 꺾이면 중단 · 0=미사용 |
| `DAILY_PROFIT_TRAIL_ARM_KRW` | `text` | NULL | NULL | 트레일 발동 최소수익(원) · 이 이상 벌어야 트레일 감시 시작 · 0=트레일 비활성(과민발동 방지) |
| `DAILY_PROFIT_TRAIL_ARM_PCT` | `text` | NULL | NULL | 트레일 발동 최소수익(%) · 운용한도 대비 % · KRW와 둘 중 큰 값 |
| `BUY_DEDUP_PENDING` | `text` | NULL | NULL | 매수 미체결 중복주문 방지 · 동일 전략·종목 PENDING_FILL 있으면 재주문 스킵 |
| `KIS_MIN_INTERVAL_SEC_MOCK` | `text` | NULL | NULL | 모의 REST 최소간격(초) · 모의 도메인(거래: 주문·체결·잔고) · 조회·랭킹·조건은 실키라 무관 · 429 로그 없으면 0.22 유지 · 한투 공지 1건/초 엄수 필요 시 1.0 · 재시작 없이 반영(1초 TTL) |
| `KIS_MIN_INTERVAL_SEC_REAL` | `text` | NULL | NULL | 실전 REST 최소간격(초) · 실전 도메인(시세 · 운영 시 거래+조회+취소+재주문 통합 한 앱키) · 18건/초 한도 → 0.12=약8건/초 · 신규앱키 첫 3일은 0.34(3건/초) · 재시작 없이 반영 |
| `PENDING_POLL_BATCH_FETCH` | `text` | NULL | NULL | 미체결 체결 일괄조회 · 실매 heartbeat 전용 · ON=poll 1회당 inquire-daily-ccld 1건(미체결 N건) · OFF=건별 조회 · 백테 무관 |
| `SCAN_REJECT_SLEEP_MIN` | `text` | NULL | NULL | 탈락 후 sleep 최소(초) · check_buy 탈락 종목마다 · REST 0건 · 0.05~0.1 로 낮추면 한 바퀴 대폭 단축 |
| `SCAN_REJECT_SLEEP_MAX` | `text` | NULL | NULL | 탈락 후 sleep 최대(초) |
| `SCAN_BUY_OK_SLEEP_MIN` | `text` | NULL | NULL | 매수성공 후 sleep 최소(초) · 1루프 1매수 후 대기 · 포지션 과집중 방지 |
| `SCAN_BUY_OK_SLEEP_MAX` | `text` | NULL | NULL | 매수성공 후 sleep 최대(초) |
| `SCAN_BUY_FAIL_SLEEP_MIN` | `text` | NULL | NULL | 주문실패 후 sleep 최소(초) |
| `SCAN_BUY_FAIL_SLEEP_MAX` | `text` | NULL | NULL | 주문실패 후 sleep 최대(초) |
| `STRATEGY_LOOP_SLEEP_MIN` | `text` | NULL | NULL | 루프 끝 sleep 최소(초) · 한 바퀴 끝 대기 · WS 구독 캐시 폴링 · 0.1=실매 반응 빠르게 |
| `STRATEGY_LOOP_SLEEP_MAX` | `text` | NULL | NULL | 루프 끝 sleep 최대(초) |
| `BALANCE_MAX_PAGES` | `text` | NULL | NULL | 잔고 연속조회 최대 페이지 · 잔고조회는 1페이지에 실전 50종목/모의 20종목만 내려옴. 보유가 많으면 다음 페이지를 이어 조회(누적 병합). 20p=최대 약 1000종목. 보유 종목이 50개를 넘으면 필수 — 부족하면 51번째부터 매도 검증에서 누락됨 |
| `KIS_SYSTEM_MM_CHANNEL` | `text` | NULL | NULL | 공통env: KIS SYSTEM MM CHANNEL (KIS_SYSTEM_MM_CHANNEL) |
| `KIS_LIFECYCLE_MM_CHANNEL` | `text` | NULL | NULL | 공통env: KIS LIFECYCLE MM CHANNEL (KIS_LIFECYCLE_MM_CHANNEL) |
| `BULK_SELL_INTERVAL_SEC` | `text` | NULL | NULL | 일괄매도 종목 간격(초) · 미등록 봇고아 일괄 시장가매도 시 REST 429 방지 · 종목마다 sleep |
| `MANUAL_HOLD_CODES` | `text` | NULL | NULL | 수동 보유 보호 종목 · 쉼표(,) 구분 종목코드 예: 005930,000660 · HTS 직접 매수·장기 보유분 보호 · 일괄매도·고아복구 제외 |
| `ORPHAN_RECONCILE_ENABLED` | `text` | NULL | NULL | 장마감 고아복구 · 매일 15:36~16:00 1회 · 실계좌 잔고↔active_trades 대조 · orders BUY 있는 미기록분만 복구 · 수동·MANUAL_HOLD 제외 |
| `ORPHAN_RECONCILE_ON_STARTUP` | `text` | NULL | NULL | 봇 기동 직후 1회 · 매도 없음 · 고아복구+유령삭제+수량/평단 sync · 전략 쓰레드보다 먼저 |
| `WS_GAP_FILL_MAX_RETRIES` | `text` | NULL | NULL | 공통env: WS GAP FILL 최대 RETRIES (WS_GAP_FILL_MAX_RETRIES) |
| `WS_GAP_FILL_RETRY_DELAY_SEC` | `text` | NULL | NULL | 공통env: WS GAP FILL RETRY DELAY 초 (WS_GAP_FILL_RETRY_DELAY_SEC) |
| `WS_GAP_BULK_REFILL_DEBOUNCE_SEC` | `text` | NULL | NULL | 공통env: WS GAP BULK REFILL DEBOUNCE 초 (WS_GAP_BULK_REFILL_DEBOUNCE_SEC) |
| `WS_GAP_FILL_PRIORITY_TFS` | `text` | NULL | NULL | 공통env: WS GAP FILL PRIORITY TFS (WS_GAP_FILL_PRIORITY_TFS) |
| `WS_GAP_FILL_TF_SLEEP_MIN_SEC` | `text` | NULL | NULL | 공통env: WS GAP FILL TF SLEEP 최소 초 (WS_GAP_FILL_TF_SLEEP_MIN_SEC) |
| `WS_GAP_FILL_TF_SLEEP_MAX_SEC` | `text` | NULL | NULL | 공통env: WS GAP FILL TF SLEEP 최대 초 (WS_GAP_FILL_TF_SLEEP_MAX_SEC) |
| `WS_GAP_FILL_CODE_SLEEP_MIN_SEC` | `text` | NULL | NULL | 공통env: WS GAP FILL CODE SLEEP 최소 초 (WS_GAP_FILL_CODE_SLEEP_MIN_SEC) |
| `WS_GAP_FILL_CODE_SLEEP_MAX_SEC` | `text` | NULL | NULL | 공통env: WS GAP FILL CODE SLEEP 최대 초 (WS_GAP_FILL_CODE_SLEEP_MAX_SEC) |
| `WS_GAP_FILL_PHASE_PAUSE_SEC` | `text` | NULL | NULL | 공통env: WS GAP FILL PHASE PAUSE 초 (WS_GAP_FILL_PHASE_PAUSE_SEC) |
| `KIWOOM_CNSRREQ_GAP_MIN_SEC` | `text` | NULL | NULL | 공통env: KIWOOM CNSRREQ GAP 최소 초 (KIWOOM_CNSRREQ_GAP_MIN_SEC) |
| `KIWOOM_CNSRREQ_GAP_MAX_SEC` | `text` | NULL | NULL | 공통env: KIWOOM CNSRREQ GAP 최대 초 (KIWOOM_CNSRREQ_GAP_MAX_SEC) |
| `KIWOOM_CNSRREQ_MAX_RETRIES` | `text` | NULL | NULL | 공통env: KIWOOM CNSRREQ 최대 RETRIES (KIWOOM_CNSRREQ_MAX_RETRIES) |
| `KIWOOM_CNSRREQ_RETRY_SEC` | `text` | NULL | NULL | 공통env: KIWOOM CNSRREQ RETRY 초 (KIWOOM_CNSRREQ_RETRY_SEC) |
| `WS_GAP_FILL_WORKERS` | `text` | NULL | NULL | 공통env: WS GAP FILL WORKERS (WS_GAP_FILL_WORKERS) |
| `KIS_WS_SUBSCRIBE_GAP_MIN_SEC` | `text` | NULL | NULL | 공통env: SUBSCRIBE GAP 최소 초 (KIS_WS_SUBSCRIBE_GAP_MIN_SEC) |
| `KIS_WS_SUBSCRIBE_GAP_MAX_SEC` | `text` | NULL | NULL | 공통env: SUBSCRIBE GAP 최대 초 (KIS_WS_SUBSCRIBE_GAP_MAX_SEC) |
| `KIS_WS_RECONNECT_SESSION_WAIT_SEC` | `text` | NULL | NULL | 공통env: RECONNECT SESSION WAIT 초 (KIS_WS_RECONNECT_SESSION_WAIT_SEC) |
| `KIS_WS_RECONNECT_REFRESH_KEY` | `text` | NULL | NULL | 공통env: RECONNECT REFRESH KEY (KIS_WS_RECONNECT_REFRESH_KEY) |
| `KIS_WS_APPROVAL_MIN_REISSUE_SEC` | `text` | NULL | NULL | approval_key 최소재발급간격(초). 기본21600=6h. REST재발급은기존키무효화 |
| `KIS_WS_INSTANT_DROP_SEC` | `text` | NULL | NULL | 공통env: INSTANT 되돌림/하락 초 (KIS_WS_INSTANT_DROP_SEC) |
| `KIS_WS_INSTANT_DROP_MAX` | `text` | NULL | NULL | 공통env: INSTANT 되돌림/하락 최대 (KIS_WS_INSTANT_DROP_MAX) |
| `KIS_WS_INSTANT_DROP_COOLDOWN_SEC` | `text` | NULL | NULL | 공통env: INSTANT 되돌림/하락 쿨다운 초 (KIS_WS_INSTANT_DROP_COOLDOWN_SEC) |
| `WS_CANDLE_RAM_BUFFER` | `text` | NULL | NULL | 공통env: WS CANDLE RAM BUFFER (WS_CANDLE_RAM_BUFFER) |
| `KIS_WS_APPROVAL_MAX_VALID_SEC` | `text` | NULL | NULL | approval_key 최대유효(초). 기본82800≈23h. 파일캐시 kis_approval_manager |
| `ENV_MERGED_CACHE_TTL_SEC` | `text` | NULL | NULL | 공통env: ENV MERGED CACHE TTL 초 (ENV_MERGED_CACHE_TTL_SEC) |
| `WS_ORDERBOOK_COLLECT_ENABLED` | `text` | NULL | NULL | 호가 판정스냅(FILTER_EVAL) — 매수체크 순간 1장 · ≠ 연속시계열. TRIGGER 판정 때만 ws_orderbook source=filter_eval · 필터 OFF여도 저장 가능 |
| `WS_ORDERBOOK_FILTER_MAX_AGE_SEC` | `text` | NULL | NULL | 진입 호가필터 RAM 나이(초). **0=마지막 RAM으로 검사**(B안). 양수=그보다 오래면 스냅없음. REST 없음. 저장 TTL과 분리. `ENV_CONFIG_KEYS` · ALTER 실패 시 `env_config_ext` |
| `WS_PRICE_MAX_AGE_SEC` | `text` | NULL | NULL | 매수/조회 ``get_price()`` 기본 나이(초). 기본 **0=마지막 RAM**. 양수=그 초 넘으면 None. 매도 판정은 None(나이 무시). 체결 공백 ≠ 가격 삭제. `ENV_CONFIG_KEYS` |
| `SELL_WS_STALE_REST_SEC` | `text` | NULL | NULL | 실매 매도 죽은선 감지(초). 기본 1. 손절·익절은 마지막 WS를 안 버림. 이보다 오래면 REST 1회(실패해도 WS 유지). EOD는 미적용. `ENV_CONFIG_KEYS` |
| `SELL_WS_STALE_REST_COOLDOWN_SEC` | `text` | NULL | NULL | 매도 REST 확인 종목당 최소 간격(초). 기본 30. 유량 보호. `ENV_CONFIG_KEYS` |
| `WS_ORDERBOOK_FILTER_REJECT_IF_EMPTY` | `text` | NULL | NULL | 필터 ON + 호가 사진 한 장도 없으면 안 삼. 기본 true. 만료 Fail-Open과 별개. `ENV_CONFIG_KEYS` · 주로 `env_config_ext` |
| `WS_ORDERBOOK_TICK_MAX_AGE_SEC` | `text` | NULL | NULL | 호가 **저장** 유효(초). 0D 덤프·가짜 채움 방지. 코드 기본 30. **필터 판정에 쓰지 말 것**. 주로 `env_config_ext` |
| `WS_PROGRAM_COLLECT_ENABLED` | `text` | NULL | NULL | 프로그램 판정스냅 — 매수체크 순간 1장 · ≠ 연속시계열. 판정 때만 ws_program · 필터 OFF여도 가능 |
| `WS_CANDLE_FORCE_CONFIRM_ENABLED` | `text` | NULL | NULL | 공통env: WS CANDLE FORCE CONFIRM ON/OFF (WS_CANDLE_FORCE_CONFIRM_ENABLED) |
| `WS_CANDLE_FORCE_CONFIRM_GRACE_SEC` | `text` | NULL | NULL | 공통env: WS CANDLE FORCE CONFIRM GRACE 초 (WS_CANDLE_FORCE_CONFIRM_GRACE_SEC) |
| `WS_CANDLE_STALE_CHECK_INTERVAL_SEC` | `text` | NULL | NULL | 공통env: WS CANDLE STALE CHECK INTERVAL 초 (WS_CANDLE_STALE_CHECK_INTERVAL_SEC) |
| `ORPHAN_RECONCILE_PRE_EOD_ENABLED` | `text` | NULL | NULL | Pre-EOD 고아복구 · 활성 전략 중 가장 이른 EOD N분 1회 · EOD 청산 전 active_trades 반영 |
| `ORPHAN_RECONCILE_PRE_EOD_LEAD_MIN` | `text` | NULL | NULL | Pre-EOD 선행(분) · 예: BREAKOUT EOD 15:15 → 15:08 실행 · REST 잔고 1회/일 |
| `DUPLICATE_ORDER_FILL_RECOVERY_ENABLED` | `text` | NULL | NULL | 주문DB중복 체결복구 · insert 실패(주문DB중복) 시 inquire-daily-ccld 1회 → active_trades 복구 · 실패 시에만 REST |
| `DUPLICATE_ORDER_RECOVERY_WAIT_SEC` | `text` | NULL | NULL | 중복복구 체결대기(초) · 주문DB중복 복구 전용 · 미설정 시 ORDER_FILL_WAIT_SEC 사용 |
| `INTRADAY_HOLDINGS_DRIFT_ENABLED` | `text` | NULL | NULL | 장중 qty 드리프트 감시 · 기본 OFF · ON=N분마다 잔고 REST · 알림/자동복구는 별도 키 |
| `INTRADAY_HOLDINGS_DRIFT_INTERVAL_SEC` | `text` | NULL | NULL | 드리프트 조회주기(초) · INTRADAY_HOLDINGS_DRIFT_ENABLED=ON 일 때만 |
| `INTRADAY_HOLDINGS_DRIFT_AUTO_RECOVER` | `text` | NULL | NULL | 드리프트 자동복구 · OFF=알림만 · ON=active_trades qty 보정(기본 OFF) |
| `GHOST_PURGE_ON_RECONCILE` | `text` | NULL | NULL | 고아복구 시 유령잔고 삭제 · ON=브로커 0주인데 active_trades 남은 종목 삭제(수동보호 제외) · Pre/Post EOD 동일 잔고조회에서 처리 |
| `INQUIRE_PSBL_RVSECNCL_BEFORE_GHOST` | `text` | NULL | NULL | 유령정리 전 정정취소가능주문조회. 매도가능 0 ≠ 보유 0 |
| `PSBL_RVSECNCL_CACHE_TTL_SEC` | `text` | NULL | NULL | 정정취소가능 조회 캐시(초). 기본 5 |
| `PSBL_RVSECNCL_MAX_PAGES` | `text` | NULL | NULL | 정정취소가능 연속조회 최대 페이지. 기본 5 |
| `WS_GAP_ROLLUP_3M_FROM_1M` | `text` | NULL | NULL | 공통env: WS GAP ROLLUP 3M FROM 1M (WS_GAP_ROLLUP_3M_FROM_1M) |
| `WS_GAP_FILL_CANDIDATE_MODE` | `text` | NULL | NULL | 공통env: WS GAP FILL CANDIDATE 모드 (WS_GAP_FILL_CANDIDATE_MODE) |
| `WS_TICK_GRACE_SEC` | `text` | NULL | NULL | 공통env: WS TICK GRACE 초 (WS_TICK_GRACE_SEC) |
| `WS_TICK_GRACE_HEADROOM` | `text` | NULL | NULL | 공통env: WS TICK GRACE HEADROOM (WS_TICK_GRACE_HEADROOM) |
| `WS_TICK_PREFER_KIWOOM` | `text` | NULL | NULL | 공통env: WS TICK PREFER KIWOOM (WS_TICK_PREFER_KIWOOM) |
| `VOL_MULTIPLIER` | `text` | NULL | NULL | 공통env: 거래량배수 IPLIER (VOL_MULTIPLIER) |
| `KIWOOM_CNSRCLR_BEFORE_REQ` | `text` | NULL | NULL | 공통env: KIWOOM CNSRCLR BEFORE REQ (KIWOOM_CNSRCLR_BEFORE_REQ) |
| `KIWOOM_CNSRCLR_GAP_MIN_SEC` | `text` | NULL | NULL | 공통env: KIWOOM CNSRCLR GAP 최소 초 (KIWOOM_CNSRCLR_GAP_MIN_SEC) |
| `KIWOOM_CNSRCLR_GAP_MAX_SEC` | `text` | NULL | NULL | 공통env: KIWOOM CNSRCLR GAP 최대 초 (KIWOOM_CNSRCLR_GAP_MAX_SEC) |
| `KIWOOM_CNSRCLR_SETTLE_SEC` | `text` | NULL | NULL | 공통env: KIWOOM CNSRCLR SETTLE 초 (KIWOOM_CNSRCLR_SETTLE_SEC) |
| `NON_STOCK_PREF_CODE_SUFFIXES` | `text` | NULL | NULL | 우선주 코드 끝자리(숫자) · KRX 구형 우선주. 콤마 구분 |
| `NON_STOCK_EXCLUDE_ALPHA_SUFFIX` | `text` | NULL | NULL | 코드 끝 알파벳=우선주 제외 · 00088K·00781K 등 |
| `NON_STOCK_NAME_KEYWORDS` | `text` | NULL | NULL | 공통env: NON STOCK NAME KEYWORDS (NON_STOCK_NAME_KEYWORDS) |
| `ERROR_WATCH_ENABLED` | `text` | NULL | NULL | 오류감시 ON · 감시 프로세스 시작 시 읽음 · OFF면 감시자 즉시 종료 |
| `ERROR_WATCH_UNIT` | `text` | NULL | NULL | 감시 systemd 유닛 · journalctl -u 대상 |
| `ERROR_WATCH_MM_CHANNEL` | `text` | NULL | NULL | 알림 MM alias · 비우면 KIS_SYSTEM_MM_CHANNEL(default=키스명령봇) |
| `ERROR_WATCH_COOLDOWN_SEC` | `text` | NULL | NULL | 동일오류 쿨다운(초) · 같은 Traceback 지문 재알림 간격 |
| `ERROR_WATCH_CONTEXT_LINES` | `text` | NULL | NULL | 공통env: ERROR WATCH CONTEXT LINES (ERROR_WATCH_CONTEXT_LINES) |
| `ERROR_WATCH_TRACEBACK_EXTRA_LINES` | `text` | NULL | NULL | Traceback 추가줄 · Traceback 이후 스택 수집 줄 수 |
| `ERROR_WATCH_HEALTH_CHECK_SEC` | `text` | NULL | NULL | 유닛생존 점검(초) · systemctl is-active 주기 |
| `ERROR_WATCH_GLOBAL_MIN_GAP_SEC` | `text` | NULL | NULL | 공통env: ERROR WATCH GLOBAL 최소 GAP 초 (ERROR_WATCH_GLOBAL_MIN_GAP_SEC) |
| `ERROR_WATCH_MATCH_REGEX` | `text` | NULL | NULL | 공통env: ERROR WATCH MATCH REGEX (ERROR_WATCH_MATCH_REGEX) |
| `ERROR_WATCH_IGNORE_REGEX` | `text` | NULL | NULL | 공통env: ERROR WATCH IGNORE REGEX (ERROR_WATCH_IGNORE_REGEX) |
| `ERROR_WATCH_MM_JITTER` | `text` | NULL | NULL | MM jitter · 오류 알림은 즉시 권장(OFF) |
| `ERROR_WATCH_STARTUP_NOTIFY` | `text` | NULL | NULL | 감시자 기동 MM · 감시 프로세스 시작 시 1회 알림 |
| `POST_SELL_CANDLE_BACKFILL` | `text` | NULL | NULL | 공통env: POST SELL CANDLE BACKFILL (POST_SELL_CANDLE_BACKFILL) |
| `POST_SELL_CANDLE_ROLLUP_3M` | `text` | NULL | NULL | 공통env: POST SELL CANDLE ROLLUP 3M (POST_SELL_CANDLE_ROLLUP_3M) |
| `POST_SELL_CANDLE_MAX_BARS` | `text` | NULL | NULL | 공통env: POST SELL CANDLE 최대 봉수 (POST_SELL_CANDLE_MAX_BARS) |
| `POST_SELL_CANDLE_SLEEP_MIN_SEC` | `text` | NULL | NULL | 공통env: POST SELL CANDLE SLEEP 최소 초 (POST_SELL_CANDLE_SLEEP_MIN_SEC) |
| `POST_SELL_CANDLE_SLEEP_MAX_SEC` | `text` | NULL | NULL | 공통env: POST SELL CANDLE SLEEP 최대 초 (POST_SELL_CANDLE_SLEEP_MAX_SEC) |
| `POST_SELL_CANDLE_FORCE_MOCK` | `text` | NULL | NULL | 공통env: POST SELL CANDLE FORCE MOCK (POST_SELL_CANDLE_FORCE_MOCK) |
| `WS_GAP_FILL_SKIP_INCOMPLETE_BUCKET` | `text` | NULL | NULL | 공통env: WS GAP FILL SKIP INCOMPLETE BUCKET (WS_GAP_FILL_SKIP_INCOMPLETE_BUCKET) |
| `WS_CANDLE_FREEZE_ON_CONFIRM` | `text` | NULL | NULL | 공통env: WS CANDLE FREEZE ON CONFIRM (WS_CANDLE_FREEZE_ON_CONFIRM) |
| `WS_CANDLE_FREEZE_DB_LOOKUP_CHUNK` | `text` | NULL | NULL | 공통env: WS CANDLE FREEZE DB LOOKUP CHUNK (WS_CANDLE_FREEZE_DB_LOOKUP_CHUNK) |
| `WS_GAP_FILL_GIVE_UP_SEC` | `text` | NULL | NULL | 공통env: WS GAP FILL GIVE UP 초 (WS_GAP_FILL_GIVE_UP_SEC) |
| `WS_GAP_FILL_EMPTY_CIRCUIT_WINDOW_SEC` | `text` | NULL | NULL | 공통env: WS GAP FILL EMPTY CIRCUIT 윈도우 초 (WS_GAP_FILL_EMPTY_CIRCUIT_WINDOW_SEC) |
| `WS_GAP_FILL_EMPTY_CIRCUIT_MAX` | `text` | NULL | NULL | 공통env: WS GAP FILL EMPTY CIRCUIT 최대 (WS_GAP_FILL_EMPTY_CIRCUIT_MAX) |
| `WS_GAP_FILL_EMPTY_CIRCUIT_PAUSE_SEC` | `text` | NULL | NULL | 공통env: WS GAP FILL EMPTY CIRCUIT PAUSE 초 (WS_GAP_FILL_EMPTY_CIRCUIT_PAUSE_SEC) |
| `WS_GAP_FILL_EMPTY_LOG_SEC` | `text` | NULL | NULL | 공통env: WS GAP FILL EMPTY LOG 초 (WS_GAP_FILL_EMPTY_LOG_SEC) |
| `LS_APP_KEY_REAL` | `text` | NULL | NULL | 공통env: LS APP KEY REAL (LS_APP_KEY_REAL) |
| `LS_APP_SECRET_REAL` | `text` | NULL | NULL | 공통env: LS APP 초 RET REAL (LS_APP_SECRET_REAL) |
| `LS_APP_KEY_MOCK` | `text` | NULL | NULL | 공통env: LS APP KEY MOCK (LS_APP_KEY_MOCK) |
| `LS_APP_SECRET_MOCK` | `text` | NULL | NULL | 공통env: LS APP 초 RET MOCK (LS_APP_SECRET_MOCK) |
| `FORCE_BUY_TEST_CODE` | `text` | NULL | NULL | 공통env: 강제매수테스트 TEST CODE (FORCE_BUY_TEST_CODE) |
| `KIS_WS_INVALID_APPROVAL_REISSUE_AFTER` | `text` | NULL | NULL | invalid approval 연속N회 후 응급재발급 허용. 6h가드우회조건 |
| `KIS_WS_INVALID_APPROVAL_BYPASS_6H` | `text` | NULL | NULL | true면 invalid루프시 6h가드우회응급재발급. 남용금지 |
| `KIS_WS_EMERGENCY_REISSUE_MIN_SEC` | `text` | NULL | NULL | 응급approval재발급 최소간격(초). 기본=정상6h와동일. 하드캡 |
| `KIS_WS_KR_HOLD_START_HM` | `text` | NULL | NULL | 국내WS approval점유 시작 HHMM. 기본700. 갭·해외창에선 소켓양보(재발급없음) |
| `KIS_WS_KR_HOLD_END_HM` | `text` | NULL | NULL | 국내WS approval점유 종료 HHMM. 기본2000. kis_ws_session_windows |
| `KIS_WS_US_HOLD_START_HM` | `text` | NULL | NULL | 해외WS(HDFSCNT0) 점유 시작 HHMM. 기본2100. 국내와 동시점유금지(1키=1세션) |
| `KIS_WS_US_HOLD_END_HM` | `text` | NULL | NULL | 해외WS 점유 종료 HHMM. 기본600(자정넘김). 세션전환시 approval재발급금지 |
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `env_config` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`created_at` varchar(30) NOT NULL,
`STOP_LOSS_PCT` text DEFAULT NULL,
`MAX_POSITION_PCT` text DEFAULT NULL,
`USE_SLOT_CAP` text DEFAULT NULL,
`SLOT_CAP_PCT` text DEFAULT NULL,
`MAX_STOCKS` text DEFAULT NULL,
`USE_KELLY` text DEFAULT NULL,
`RISK_PCT_PER_TRADE` text DEFAULT NULL,
`MIN_POSITION_AMOUNT` text DEFAULT NULL,
`USE_RISK_CHECK` text DEFAULT NULL,
`DAILY_STOP_LOSS_PCT` text DEFAULT NULL,
`CONSECUTIVE_LOSS_LIMIT` text DEFAULT NULL,
`DAILY_PROFIT_TARGET_KRW` text DEFAULT NULL,
`DAILY_PROFIT_TARGET_PCT` text DEFAULT NULL,
`DAILY_PROFIT_TARGET_BUDGET_KRW` text DEFAULT NULL,
`DAILY_PROFIT_HALT_NEW_BUYS` text DEFAULT NULL,
`DAILY_PROFIT_NOTIFY_MM` text DEFAULT NULL,
`USE_BAN_SYSTEM` text DEFAULT NULL,
`BAN_HOURS` text DEFAULT NULL,
`USE_STOCK_FILTER` text DEFAULT NULL,
`RSI_OVERHEAT_THRESHOLD` text DEFAULT NULL,
`MIN_RECOVERY_RATIO` text DEFAULT NULL,
`MAX_RECOVERY_RATIO` text DEFAULT NULL,
`USE_TWAP` text DEFAULT NULL,
`TWAP_MIN_SPLIT` text DEFAULT NULL,
`TWAP_MAX_SPLIT` text DEFAULT NULL,
`TWAP_MIN_DELAY` text DEFAULT NULL,
`TWAP_MAX_DELAY` text DEFAULT NULL,
`USE_ML_SIGNAL` text DEFAULT NULL,
`ML_MIN_PROBABILITY` text DEFAULT NULL,
`USE_NEWS_ANALYSIS` text DEFAULT NULL,
`NEWS_ANALYSIS_HOUR` text DEFAULT NULL,
`NEWS_MAX_COUNT` text DEFAULT NULL,
`USE_QUICK_PROFIT_PROTECTION` text DEFAULT NULL,
`HIGH_PRICE_CHASE_THRESHOLD` text DEFAULT NULL,
`MAX_DAILY_CHANGE_PCT` text DEFAULT NULL,
`MA20_MAX_ABOVE_PCT` text DEFAULT NULL,
`VOLUME_AVG_MULTIPLIER` text DEFAULT NULL,
`CANDLE_OPEN_PRICE_BUFFER` text DEFAULT NULL,
`MIN_CANDLE_LEN_TAIL` text DEFAULT NULL,
`MIN_PRICE_TAIL` text DEFAULT NULL,
`INTRADAY_INVESTOR_NET_BUY_THRESHOLD` text DEFAULT NULL,
`SIZE_CLASS_LARGE_MIN` text DEFAULT NULL,
`SIZE_CLASS_MID_MIN` text DEFAULT NULL,
`SCAN_INVESTOR_NET_STRONG` text DEFAULT NULL,
`SCAN_INVESTOR_SCORE_STRONG` text DEFAULT NULL,
`SCAN_INVESTOR_SCORE_WEAK` text DEFAULT NULL,
`SCAN_INVESTOR_BONUS_STRONG` text DEFAULT NULL,
`SCAN_INVESTOR_BONUS_WEAK` text DEFAULT NULL,
`SCAN_VOLUME_BONUS_MIN` text DEFAULT NULL,
`SCAN_VOLUME_BONUS_POINT` text DEFAULT NULL,
`SCAN_EXEC_STRENGTH_HIGH` text DEFAULT NULL,
`SCAN_EXEC_STRENGTH_MID` text DEFAULT NULL,
`SCAN_EXEC_BONUS_HIGH` text DEFAULT NULL,
`SCAN_EXEC_BONUS_MID` text DEFAULT NULL,
`SCAN_SCORE_DROP_WEIGHT` text DEFAULT NULL,
`SCAN_SCORE_RECOVERY_WEIGHT` text DEFAULT NULL,
`MIN_SCORE_DISPLAY` text DEFAULT NULL,
`MM_TOP_N` text DEFAULT NULL,
`SLOT_MONEY_DEFAULT` text DEFAULT NULL,
`SLOT_BASE_AMOUNT_CAP` text DEFAULT NULL,
`SIZE_CLASS_SMALL_RATIO` text DEFAULT NULL,
`SIZE_CLASS_MID_RATIO` text DEFAULT NULL,
`SCAN_MIN_PREV_DAY_PCT` text DEFAULT NULL,
`UPDATE_UNIVERSE_MIN_CANDIDATES` text DEFAULT NULL,
`UPDATE_UNIVERSE_MIN_SCORE` text DEFAULT NULL,
`UPDATE_UNIVERSE_FALLBACK_TOP_N` text DEFAULT NULL,
`UPDATE_UNIVERSE_TOP_LOG` text DEFAULT NULL,
`UPDATE_UNIVERSE_TOP_N` text DEFAULT NULL,
`SCAN_INTERVAL_SEC` text DEFAULT NULL,
`USE_RANDOM_SPLIT` text DEFAULT NULL,
`FORCE_MARKET_OPEN` text DEFAULT NULL,
`FORCE_BUY_TEST` text DEFAULT NULL,
`TOTAL_DEPOSIT` text DEFAULT NULL,
`ROUND_TRIP_COST_PCT` text DEFAULT NULL,
`POP_NET_PCT` text DEFAULT NULL,
`LOCK_NET_PCT` text DEFAULT NULL,
`MAX_LOSS_PER_TRADE_KRW` text DEFAULT NULL,
`MIN_DROP_PCT_FOR_LOSS_CUT` text DEFAULT NULL,
`KIS_APP_KEY_REAL` text DEFAULT NULL,
`KIS_APP_SECRET_REAL` text DEFAULT NULL,
`KIS_APP_KEY_MOCK` text DEFAULT NULL,
`KIS_APP_SECRET_MOCK` text DEFAULT NULL,
`KIS_ACCOUNT_NO_REAL` text DEFAULT NULL,
`KIS_ACCOUNT_CODE_REAL` text DEFAULT NULL,
`KIS_ACCOUNT_NO_MOCK` text DEFAULT NULL,
`KIS_ACCOUNT_CODE_MOCK` text DEFAULT NULL,
`KIS_MOCK` text DEFAULT NULL,
`TAKE_PROFIT_PCT` text DEFAULT NULL,
`MIN_DROP_RATE` text DEFAULT NULL,
`MIN_RECOVERY_RATIO_SHORT` text DEFAULT NULL,
`QUICK_PROFIT_PROTECT_HOURS` text DEFAULT NULL,
`QUICK_PROFIT_MAX_RATIO` text DEFAULT NULL,
`QUICK_PROFIT_CURRENT_MIN` text DEFAULT NULL,
`MIN_HOLD_EARLY_TAKE_PCT` text DEFAULT NULL,
`MIN_HOLD_HIGH_PCT` text DEFAULT NULL,
`MIN_HOLD_DROP_FROM_HIGH` text DEFAULT NULL,
`POST_HOLD_TAKE_PCT` text DEFAULT NULL,
`POST_HOLD_DROP_FROM_HIGH` text DEFAULT NULL,
`MAX_PER` text DEFAULT NULL,
`MAX_PEG` text DEFAULT NULL,
`MIN_GROWTH_PCT` text DEFAULT NULL,
`DCA_INTERVALS` text DEFAULT NULL,
`DCA_AMOUNTS` text DEFAULT NULL,
`MM_SERVER_URL` text DEFAULT NULL,
`MM_BOT_TOKEN_` text DEFAULT NULL,
`MATTERMOST_CHANNEL` text DEFAULT NULL,
`GEMINI_API_KEY` text DEFAULT NULL,
`AI_JOURNAL_LINES` text DEFAULT NULL,
`ANTHROPIC_API_KEY` text DEFAULT NULL,
`CLAUDE_MODEL_ID` text DEFAULT NULL,
`CLAUDE_MAX_TOKENS` text DEFAULT NULL,
`MM_BUTLER_CHANNEL` text DEFAULT NULL,
`MM_DUAL_CHANNEL_ENABLED` text DEFAULT NULL,
`OPENROUTER_API_KEY` text DEFAULT NULL,
`OPENROUTER_MODEL_ID` text DEFAULT NULL,
`KIS_LONG_MM_CHANNEL` text DEFAULT NULL,
`LONG_DAILY_LOOKBACK_DAYS` text DEFAULT NULL,
`LONG_MA_SHORT_DAYS` text DEFAULT NULL,
`LONG_MA_LONG_DAYS` text DEFAULT NULL,
`LONG_REPORT_AM_HOUR` text DEFAULT NULL,
`LONG_REPORT_AM_MIN` text DEFAULT NULL,
`LONG_REPORT_PM_HOUR` text DEFAULT NULL,
`LONG_REPORT_PM_MIN` text DEFAULT NULL,
`LONG_NEWS_ENABLED` text DEFAULT NULL,
`LONG_NEWS_INTERVAL_MIN` text DEFAULT NULL,
`LONG_NEWS_ACTIVE_START_HOUR` text DEFAULT NULL,
`LONG_NEWS_ACTIVE_END_HOUR` text DEFAULT NULL,
`LONG_ANALYSIS_DELAY_MIN_SEC` text DEFAULT NULL,
`LONG_ANALYSIS_DELAY_MAX_SEC` text DEFAULT NULL,
`RSI_PERIOD` text DEFAULT NULL,
`KIS_WS_URL_REAL` text DEFAULT NULL,
`KIS_WS_URL_MOCK` text DEFAULT NULL,
`KIS_WS_MOCK_ENABLED` text DEFAULT NULL,
`REENTRY_COOLDOWN_SEC` text DEFAULT NULL,
`TIME_START` text DEFAULT NULL,
`TIME_END` text DEFAULT NULL,
`SELL_FAILURE_BACKOFF_SEC` text DEFAULT NULL,
`BROKER_HOLDINGS_CACHE_TTL_SEC` text DEFAULT NULL,
`GHOST_POSITION_COOLDOWN_SEC` text DEFAULT NULL,
`WS_TICK_SAVE_ENABLED` text DEFAULT NULL,
`WS_TICK_BUFFER_MAX_PER_CODE` text DEFAULT NULL,
`WS_TICK_DB_BATCH_SIZE` text DEFAULT NULL,
`WS_TICK_DB_FLUSH_SEC` text DEFAULT NULL,
`WS_TICK_WRITE_QUEUE_MAX` text DEFAULT NULL,
`WS_TICK_KEEP_DAYS` text DEFAULT NULL,
`WS_TICK_RECORD_SCOPE` text DEFAULT NULL,
`WS_TICK_DEFAULT_MARKET` text DEFAULT NULL,
`WS_TICK_DEFAULT_EXCHANGE` text DEFAULT NULL,
`WS_TICK_DEFAULT_CURRENCY` text DEFAULT NULL,
`WS_ORDERBOOK_SAVE_ENABLED` text DEFAULT NULL,
`WS_PROGRAM_SAVE_ENABLED` text DEFAULT NULL,
`WS_TRIGGER_SNAPSHOT_DB_INTERVAL_SEC` text DEFAULT NULL,
`WS_TRIGGER_SNAPSHOT_DB_BATCH_SIZE` text DEFAULT NULL,
`WS_TRIGGER_SNAPSHOT_DB_FLUSH_SEC` text DEFAULT NULL,
`WS_TRIGGER_SNAPSHOT_WRITE_QUEUE_MAX` text DEFAULT NULL,
`WS_ORDERBOOK_KEEP_DAYS` text DEFAULT NULL,
`WS_PROGRAM_KEEP_DAYS` text DEFAULT NULL,
`BACKTEST_USE_TRIGGER_SNAPSHOT_DB` text DEFAULT NULL,
`WHIPSAW_FILTER_ENABLED` text DEFAULT NULL,
`WHIPSAW_BACKTEST_OHLC_FALLBACK` text DEFAULT NULL,
`WHIPSAW_MODE` text DEFAULT NULL,
`WHIPSAW_SUBBAR_SEC` text DEFAULT NULL,
`WHIPSAW_LOOKBACK_SEC` text DEFAULT NULL,
`WHIPSAW_DIP_PCT` text DEFAULT NULL,
`WHIPSAW_RECOVERY_TOL_PCT` text DEFAULT NULL,
`WHIPSAW_MIN_SUBBARS` text DEFAULT NULL,
`WHIPSAW_TICK_BUFFER_LIMIT` text DEFAULT NULL,
`USE_KELLY_FORMULA` text DEFAULT NULL,
`KELLY_MULTIPLIER` text DEFAULT NULL,
`USE_MARKET_IOC` text DEFAULT NULL,
`KIS_PRICE_CACHE_TTL_SEC` text DEFAULT NULL,
`MIN_HOLD_AFTER_BUY_SEC` text DEFAULT NULL,
`MIN_HOLD_HOURS` text DEFAULT NULL,
`MAX_RECOVERY_RATIO_3M` text DEFAULT NULL,
`CANDIDATE_LIST_TOP_N_LIGHT` text DEFAULT NULL,
`SCAN_UNIVERSE_MAX_CODES` text DEFAULT NULL,
`KIS_APP_KEY` text DEFAULT NULL,
`KIS_APP_SECRET` text DEFAULT NULL,
`KIS_ACCOUNT_NO` text DEFAULT NULL,
`KIS_ACCOUNT_CODE` text DEFAULT NULL,
`GEMINI_MODEL_ID` text DEFAULT NULL,
`MM_BUTLER_POLL_SEC` text DEFAULT NULL,
`AI_SOURCE_MAX_CHARS` text DEFAULT NULL,
`FEE_RATE_PCT` text DEFAULT NULL,
`SELL_TAX_RATE_PCT` text DEFAULT NULL,
`KIWOOM_APP_KEY_REAL` text DEFAULT NULL,
`KIWOOM_APP_SECRET_REAL` text DEFAULT NULL,
`KIWOOM_APP_KEY_MOCK` text DEFAULT NULL,
`KIWOOM_APP_SECRET_MOCK` text DEFAULT NULL,
`KIWOOM_APP_KEY` text DEFAULT NULL,
`KIWOOM_APP_SECRET` text DEFAULT NULL,
`PERMANENT_WS_CODES` text DEFAULT NULL,
`USE_MARKET_REGIME_FILTER` text DEFAULT NULL,
`MARKET_REGIME_MIN_RSI` text DEFAULT NULL,
`USE_THEME_HEAT_FILTER` text DEFAULT NULL,
`THEME_HEAT_RSI_MAX` text DEFAULT NULL,
`STRATEGY_SAME_CODE_POLICY` text DEFAULT NULL,
`ORDER_CASH_PCT` text DEFAULT NULL,
`ORDER_CASH_FEE_BUFFER` text DEFAULT NULL,
`ORDER_CASH_DIVIDE_BY_MAX_STOCKS` text DEFAULT NULL,
`ACCOUNT_CASH_PERSIST_SEC` text DEFAULT NULL,
`BACKTEST_EXIT_CHECKS_PER_BAR` text DEFAULT NULL,
`RANKING_POLL_INTERVAL_SEC` text DEFAULT NULL,
`KIS_HTS_ID` text DEFAULT NULL,
`CONDITION_POLL_INTERVAL_SEC` text DEFAULT NULL,
`CONDITION_EXIT_GRACE_SEC` text DEFAULT NULL,
`UNIVERSE_HISTORY_SAVE` text DEFAULT NULL,
`WS_GAP_FILL_OFF_HOURS` text DEFAULT NULL,
`WS_GAP_FILL_LIMIT` text DEFAULT NULL,
`WS_TIMEFRAMES` text DEFAULT NULL,
`WS_GAP_FILL_KIS_FALLBACK` text DEFAULT NULL,
`MAX_BUY_AMOUNT_PER_STOCK` text DEFAULT NULL,
`KIS_MIN_INTERVAL_SEC` text DEFAULT NULL,
`KIS_REST_MAX_RETRIES` text DEFAULT NULL,
`KIS_REST_BACKOFF_CAP_SEC` text DEFAULT NULL,
`KIS_REST_TIMEOUT_SEC` text DEFAULT NULL,
`MARKET_GUARD_ENABLED` text DEFAULT NULL,
`MARKET_GUARD_5MIN_DROP_PCT` text DEFAULT NULL,
`MARKET_GUARD_DAILY_DROP_PCT` text DEFAULT NULL,
`MARKET_GUARD_RECOVERY_PCT` text DEFAULT NULL,
`MARKET_GUARD_INDEX_CODE` text DEFAULT NULL,
`MARKET_GUARD_POLL_SEC` text DEFAULT NULL,
`MARKET_GUARD_INDEX_CANDLE_KEEP_MIN` text DEFAULT NULL,
`MARKET_GUARD_PERSIST_STATE` text DEFAULT NULL,
`STOCK_SHARE_DENOM` text DEFAULT NULL,
`EXCLUDE_NON_STOCK` text DEFAULT NULL,
`WS_PROVIDER` text DEFAULT NULL,
`WS_SUBSCRIBE_KIS_MINIMAL` text DEFAULT NULL,
`WS_VALIDATION_INTERVAL_SEC` text DEFAULT NULL,
`WS_VALIDATION_DIFF_WARN_PCT` text DEFAULT NULL,
`KIWOOM_WS_FORCE_REAL` text DEFAULT NULL,
`KIWOOM_WS_MAX_SUBSCRIPTIONS` text DEFAULT NULL,
`KIWOOM_WS_REG_CHUNK_SIZE` text DEFAULT NULL,
`KIWOOM_WS_REG_GAP_SEC` text DEFAULT NULL,
`KIWOOM_WS_REG_DEBOUNCE_SEC` text DEFAULT NULL,
`KIWOOM_WS_ORDERBOOK_ENABLED` text DEFAULT NULL,
`KIWOOM_WS_PROGRAM_ENABLED` text DEFAULT NULL,
`ORDERBOOK_FILTER_ENABLED` text DEFAULT NULL,
`ORDERBOOK_MAX_SPREAD_PCT` text DEFAULT NULL,
`ORDERBOOK_ENTRY_BID_LEVELS` text DEFAULT NULL,
`ORDERBOOK_ENTRY_BID_DEPTH_MULT` text DEFAULT NULL,
`ORDERBOOK_ENTRY_ASK_MAX_MULT` text DEFAULT NULL,
`ORDERBOOK_MIN_BID_ASK_RATIO` text DEFAULT NULL,
`ORDERBOOK_BREAKOUT_ASK_WALL_MAX_QTY` text DEFAULT NULL,
`PROGRAM_FILTER_ENABLED` text DEFAULT NULL,
`PROGRAM_MIN_NET_BUY_QTY` text DEFAULT NULL,
`PROGRAM_MIN_NET_BUY_AMT` text DEFAULT NULL,
`PROGRAM_MAX_SELL_BUY_QTY_RATIO` text DEFAULT NULL,
`PROGRAM_MIN_NET_DELTA_QTY` text DEFAULT NULL,
`PROGRAM_SNAPSHOT_MAX_AGE_SEC` text DEFAULT NULL,
`STRICT_FILL_VERIFY` text DEFAULT NULL,
`ORDER_FILL_WAIT_SEC` text DEFAULT NULL,
`LIMIT_ORDER_FILL_WAIT_SEC` text DEFAULT NULL,
`PENDING_FILL_POLL_INTERVAL_SEC` text DEFAULT NULL,
`PENDING_FILL_POLL_SEC` text DEFAULT NULL,
`PENDING_FILL_MAX_AGE_SEC` text DEFAULT NULL,
`PENDING_BUY_MAX_AGE_SEC` text DEFAULT NULL,
`PENDING_SELL_MAX_AGE_SEC` text DEFAULT NULL,
`PENDING_SELL_STOP_MAX_AGE_SEC` text DEFAULT NULL,
`SELL_PENDING_REORDER_ON_EXPIRE` text DEFAULT NULL,
`AUTO_CANCEL_PARTIAL_BUY_REMAINDER` text DEFAULT NULL,
`WS_TRIGGER_EVAL_SAVE_ENABLED` text DEFAULT NULL,
`WS_TRIGGER_EVAL_DB_BATCH_SIZE` text DEFAULT NULL,
`WS_TRIGGER_EVAL_DB_FLUSH_SEC` text DEFAULT NULL,
`WS_TRIGGER_EVAL_WRITE_QUEUE_MAX` text DEFAULT NULL,
`BACKTEST_USE_TRIGGER_EVAL_SNAPSHOT` text DEFAULT NULL,
`DAILY_PROFIT_MODE` text DEFAULT NULL,
`DAILY_PROFIT_TRAIL_TIERS` text DEFAULT NULL,
`DAILY_PROFIT_TRAIL_DROP_PCT` text DEFAULT NULL,
`DAILY_PROFIT_TRAIL_ARM_KRW` text DEFAULT NULL,
`DAILY_PROFIT_TRAIL_ARM_PCT` text DEFAULT NULL,
`BUY_DEDUP_PENDING` text DEFAULT NULL,
`KIS_MIN_INTERVAL_SEC_MOCK` text DEFAULT NULL,
`KIS_MIN_INTERVAL_SEC_REAL` text DEFAULT NULL,
`PENDING_POLL_BATCH_FETCH` text DEFAULT NULL,
`SCAN_REJECT_SLEEP_MIN` text DEFAULT NULL,
`SCAN_REJECT_SLEEP_MAX` text DEFAULT NULL,
`SCAN_BUY_OK_SLEEP_MIN` text DEFAULT NULL,
`SCAN_BUY_OK_SLEEP_MAX` text DEFAULT NULL,
`SCAN_BUY_FAIL_SLEEP_MIN` text DEFAULT NULL,
`SCAN_BUY_FAIL_SLEEP_MAX` text DEFAULT NULL,
`STRATEGY_LOOP_SLEEP_MIN` text DEFAULT NULL,
`STRATEGY_LOOP_SLEEP_MAX` text DEFAULT NULL,
`BALANCE_MAX_PAGES` text DEFAULT NULL,
`KIS_SYSTEM_MM_CHANNEL` text DEFAULT NULL,
`KIS_LIFECYCLE_MM_CHANNEL` text DEFAULT NULL,
`BULK_SELL_INTERVAL_SEC` text DEFAULT NULL,
`MANUAL_HOLD_CODES` text DEFAULT NULL,
`ORPHAN_RECONCILE_ENABLED` text DEFAULT NULL,
`ORPHAN_RECONCILE_ON_STARTUP` text DEFAULT NULL,
`WS_GAP_FILL_MAX_RETRIES` text DEFAULT NULL,
`WS_GAP_FILL_RETRY_DELAY_SEC` text DEFAULT NULL,
`WS_GAP_BULK_REFILL_DEBOUNCE_SEC` text DEFAULT NULL,
`WS_GAP_FILL_PRIORITY_TFS` text DEFAULT NULL,
`WS_GAP_FILL_TF_SLEEP_MIN_SEC` text DEFAULT NULL,
`WS_GAP_FILL_TF_SLEEP_MAX_SEC` text DEFAULT NULL,
`WS_GAP_FILL_CODE_SLEEP_MIN_SEC` text DEFAULT NULL,
`WS_GAP_FILL_CODE_SLEEP_MAX_SEC` text DEFAULT NULL,
`WS_GAP_FILL_PHASE_PAUSE_SEC` text DEFAULT NULL,
`KIWOOM_CNSRREQ_GAP_MIN_SEC` text DEFAULT NULL,
`KIWOOM_CNSRREQ_GAP_MAX_SEC` text DEFAULT NULL,
`KIWOOM_CNSRREQ_MAX_RETRIES` text DEFAULT NULL,
`KIWOOM_CNSRREQ_RETRY_SEC` text DEFAULT NULL,
`WS_GAP_FILL_WORKERS` text DEFAULT NULL,
`KIS_WS_SUBSCRIBE_GAP_MIN_SEC` text DEFAULT NULL,
`KIS_WS_SUBSCRIBE_GAP_MAX_SEC` text DEFAULT NULL,
`KIS_WS_RECONNECT_SESSION_WAIT_SEC` text DEFAULT NULL,
`KIS_WS_RECONNECT_REFRESH_KEY` text DEFAULT NULL,
`KIS_WS_APPROVAL_MIN_REISSUE_SEC` text DEFAULT NULL,
`KIS_WS_INSTANT_DROP_SEC` text DEFAULT NULL,
`KIS_WS_INSTANT_DROP_MAX` text DEFAULT NULL,
`KIS_WS_INSTANT_DROP_COOLDOWN_SEC` text DEFAULT NULL,
`WS_CANDLE_RAM_BUFFER` text DEFAULT NULL,
`KIS_WS_APPROVAL_MAX_VALID_SEC` text DEFAULT NULL,
`ENV_MERGED_CACHE_TTL_SEC` text DEFAULT NULL,
`WS_ORDERBOOK_COLLECT_ENABLED` text DEFAULT NULL,
`WS_PROGRAM_COLLECT_ENABLED` text DEFAULT NULL,
`WS_CANDLE_FORCE_CONFIRM_ENABLED` text DEFAULT NULL,
`WS_CANDLE_FORCE_CONFIRM_GRACE_SEC` text DEFAULT NULL,
`WS_CANDLE_STALE_CHECK_INTERVAL_SEC` text DEFAULT NULL,
`ORPHAN_RECONCILE_PRE_EOD_ENABLED` text DEFAULT NULL,
`ORPHAN_RECONCILE_PRE_EOD_LEAD_MIN` text DEFAULT NULL,
`DUPLICATE_ORDER_FILL_RECOVERY_ENABLED` text DEFAULT NULL,
`DUPLICATE_ORDER_RECOVERY_WAIT_SEC` text DEFAULT NULL,
`INTRADAY_HOLDINGS_DRIFT_ENABLED` text DEFAULT NULL,
`INTRADAY_HOLDINGS_DRIFT_INTERVAL_SEC` text DEFAULT NULL,
`INTRADAY_HOLDINGS_DRIFT_AUTO_RECOVER` text DEFAULT NULL,
`GHOST_PURGE_ON_RECONCILE` text DEFAULT NULL,
`WS_GAP_ROLLUP_3M_FROM_1M` text DEFAULT NULL,
`WS_GAP_FILL_CANDIDATE_MODE` text DEFAULT NULL,
`WS_TICK_GRACE_SEC` text DEFAULT NULL,
`WS_TICK_GRACE_HEADROOM` text DEFAULT NULL,
`WS_TICK_PREFER_KIWOOM` text DEFAULT NULL,
`VOL_MULTIPLIER` text DEFAULT NULL,
`KIWOOM_CNSRCLR_BEFORE_REQ` text DEFAULT NULL,
`KIWOOM_CNSRCLR_GAP_MIN_SEC` text DEFAULT NULL,
`KIWOOM_CNSRCLR_GAP_MAX_SEC` text DEFAULT NULL,
`KIWOOM_CNSRCLR_SETTLE_SEC` text DEFAULT NULL,
`NON_STOCK_PREF_CODE_SUFFIXES` text DEFAULT NULL,
`NON_STOCK_EXCLUDE_ALPHA_SUFFIX` text DEFAULT NULL,
`NON_STOCK_NAME_KEYWORDS` text DEFAULT NULL,
`ERROR_WATCH_ENABLED` text DEFAULT NULL,
`ERROR_WATCH_UNIT` text DEFAULT NULL,
`ERROR_WATCH_MM_CHANNEL` text DEFAULT NULL,
`ERROR_WATCH_COOLDOWN_SEC` text DEFAULT NULL,
`ERROR_WATCH_CONTEXT_LINES` text DEFAULT NULL,
`ERROR_WATCH_TRACEBACK_EXTRA_LINES` text DEFAULT NULL,
`ERROR_WATCH_HEALTH_CHECK_SEC` text DEFAULT NULL,
`ERROR_WATCH_GLOBAL_MIN_GAP_SEC` text DEFAULT NULL,
`ERROR_WATCH_MATCH_REGEX` text DEFAULT NULL,
`ERROR_WATCH_IGNORE_REGEX` text DEFAULT NULL,
`ERROR_WATCH_MM_JITTER` text DEFAULT NULL,
`ERROR_WATCH_STARTUP_NOTIFY` text DEFAULT NULL,
`POST_SELL_CANDLE_BACKFILL` text DEFAULT NULL,
`POST_SELL_CANDLE_ROLLUP_3M` text DEFAULT NULL,
`POST_SELL_CANDLE_MAX_BARS` text DEFAULT NULL,
`POST_SELL_CANDLE_SLEEP_MIN_SEC` text DEFAULT NULL,
`POST_SELL_CANDLE_SLEEP_MAX_SEC` text DEFAULT NULL,
`POST_SELL_CANDLE_FORCE_MOCK` text DEFAULT NULL,
`WS_GAP_FILL_SKIP_INCOMPLETE_BUCKET` text DEFAULT NULL,
`WS_CANDLE_FREEZE_ON_CONFIRM` text DEFAULT NULL,
`WS_CANDLE_FREEZE_DB_LOOKUP_CHUNK` text DEFAULT NULL,
`WS_GAP_FILL_GIVE_UP_SEC` text DEFAULT NULL,
`WS_GAP_FILL_EMPTY_CIRCUIT_WINDOW_SEC` text DEFAULT NULL,
`WS_GAP_FILL_EMPTY_CIRCUIT_MAX` text DEFAULT NULL,
`WS_GAP_FILL_EMPTY_CIRCUIT_PAUSE_SEC` text DEFAULT NULL,
`WS_GAP_FILL_EMPTY_LOG_SEC` text DEFAULT NULL,
`LS_APP_KEY_REAL` text DEFAULT NULL,
`LS_APP_SECRET_REAL` text DEFAULT NULL,
`LS_APP_KEY_MOCK` text DEFAULT NULL,
`LS_APP_SECRET_MOCK` text DEFAULT NULL,
`FORCE_BUY_TEST_CODE` text DEFAULT NULL,
`KIS_WS_INVALID_APPROVAL_REISSUE_AFTER` text DEFAULT NULL,
`KIS_WS_INVALID_APPROVAL_BYPASS_6H` text DEFAULT NULL,
`KIS_WS_EMERGENCY_REISSUE_MIN_SEC` text DEFAULT NULL,
`KIS_WS_KR_HOLD_START_HM` text DEFAULT NULL COMMENT '국내WS approval점유 시작 HHMM. 기본700. 갭·해외창에선 소켓양보(재발급없음)',
`KIS_WS_KR_HOLD_END_HM` text DEFAULT NULL COMMENT '국내WS approval점유 종료 HHMM. 기본2000. kis_ws_session_windows',
`KIS_WS_US_HOLD_START_HM` text DEFAULT NULL COMMENT '해외WS(HDFSCNT0) 점유 시작 HHMM. 기본2100. 국내와 동시점유금지(1키=1세션)',
`KIS_WS_US_HOLD_END_HM` text DEFAULT NULL COMMENT '해외WS 점유 종료 HHMM. 기본600(자정넘김). 세션전환시 approval재발급금지',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1060 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC;
```
</details>
#### `env_config_ext`
**PK**: `env_key`
> **테이블 COMMENT**: env_config 확장 KV. `LS_WS_*`·`LS_TOKEN_*`·`OVERSEAS_WS_ENABLED`·워치독/hold 등 다수 키를 **컬럼 추가 없이** `env_key` 행으로 보관.
> 참고: `docs/증권사_토큰_시세.md` · `scripts/sql/token_session_strategy_column_comments.sql`
> 대표 키(행): `LS_WS_WATCHDOG_SESSION_GATE` / `LS_WS_WATCHDOG_SESSION_*_HM` / `LS_WS_KR_HOLD_*` / `LS_WS_US_HOLD_*` / `LS_WS_SESSION_HOLD_ENABLED` / `OVERSEAS_WS_ENABLED` / `LS_TOKEN_*` / `WS_ORDERBOOK_FILTER_MAX_AGE_SEC` / `WS_ORDERBOOK_FILTER_REJECT_IF_EMPTY` / `WS_ORDERBOOK_TICK_MAX_AGE_SEC` / `OPTUNA_OB_ENTRY_*` / `OPTUNA_OB_LOOKBACK_MIN`
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `env_key` 🔑 | `varchar(80)` | NOT NULL | | 설정키. 예: LS_WS_WATCHDOG_SESSION_GATE, LS_WS_KR_HOLD_*, OVERSEAS_WS_ENABLED, LS_TOKEN_* |
| `env_value` | `text` | NOT NULL | | 설정값 문자열. bool/int도 텍스트저장 |
| `updated_at` | `varchar(30)` | NOT NULL | | 마지막갱신시각 |
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `env_config_ext` (
`env_key` varchar(80) NOT NULL COMMENT '설정키. 예: LS_WS_WATCHDOG_SESSION_GATE, LS_WS_KR_HOLD_*, OVERSEAS_WS_ENABLED, LS_TOKEN_*',
`env_value` text NOT NULL COMMENT '설정값 문자열. bool/int도 텍스트저장',
`updated_at` varchar(30) NOT NULL COMMENT '마지막갱신시각',
PRIMARY KEY (`env_key`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='env_config 확장 KV. LS_WS_*·LS_TOKEN_*·OVERSEAS_WS_ENABLED·워치독/hold 등 다수키. 컬럼추가없이 env_key행';
```
</details>
#### `env_auth_config`
**PK**: `id` | 앱키/시크릿/HTS ID/계좌번호 **전용 컬럼 테이블** (키-값 행 아님).
> `get_merged_env_snapshot()` 이 이 테이블 최신 행을 우선 반영. 저장은 `insert_env_snapshot()` → `_insert_env_auth_row()`.
> 앱키를 읽는 코드는 `TradeDB.get_auth_env()` / `get_env_from_db()` 만 사용. `SELECT … FROM env_config` 로 앱키를 읽지 말 것.
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `int` | NOT NULL | AUTO_INCREMENT | 스냅샷 행 |
| `created_at` | `varchar(30)` | NOT NULL | | 저장 시각 |
| `KIS_APP_KEY_REAL` / `_SECRET_REAL` / `_MOCK` | `text` | NULL | NULL | 한투 시세/주문 앱키 |
| `KIS_APP_KEY_OB_REAL` / `_SECRET_OB_REAL` / `_MOCK` | `text` | NULL | NULL | 한투 **호가 전용 2번째 앱키** |
| `KIS_ACCOUNT_NO_*` / `KIS_ACCOUNT_CODE_*` | `text` | NULL | NULL | 실전/모의 계좌 |
| `KIS_HTS_ID` | `text` | NULL | NULL | 조건검색 HTS ID |
| `KIWOOM_APP_KEY_*` / `_SECRET_*` | `text` | NULL | NULL | 키움 |
| `LS_APP_KEY_*` / `_SECRET_*` | `text` | NULL | NULL | LS |
#### `kv_store`
**PK**: `k`
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `k` 🔑 | `varchar(100)` | NOT NULL | | 키 |
| `v` | `mediumtext` | NULL | NULL | 값 |
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `kv_store` (
`k` varchar(100) NOT NULL,
`v` mediumtext DEFAULT NULL,
PRIMARY KEY (`k`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
### 🔬 Optuna 스터디 결과
kis_optuna 의 `studies`/`trials` 와 분리. 웹 Top5·후처리 산출은 `kis_quant_db.optuna_study_result`.
#### `optuna_study_result`
**PK**: `study_name`
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `study_name` 🔑 | `varchar(255)` | NOT NULL | | Optuna study 이름 (kis_optuna 과 동일) |
| `strategy` | `varchar(32)` | NOT NULL | '' | tail\|momentum\|us_momentum\|breakout\|scalp |
| `mode` | `varchar(32)` | NOT NULL | '' | tpe 등 |
| `start_date` | `varchar(10)` | NULL | NULL | 백테 시작 YYYY-MM-DD |
| `end_date` | `varchar(10)` | NULL | NULL | 백테 종료 YYYY-MM-DD |
| `job_id` | `varchar(64)` | NULL | NULL | 웹 잡 id (참고) |
| `symbol` | `varchar(16)` | NULL | NULL | 해외 종목핀일 때만 |
| `study_trials` | `int` | NOT NULL | 0 | 스터디 총 완료 목표. 0이면 미설정 |
| `n_complete` | `int` | NOT NULL | 0 | 완료 trial 수 캐시 |
| `n_running` | `int` | NOT NULL | 0 | 진행 중 trial 수 캐시 |
| `payload_json` | `longtext` | NULL | NULL | 웹 요약과 동일 키 (results_*/mode_combo/postprocess) |
| `briefing_md` | `mediumtext` | NULL | NULL | 브리핑 마크다운 |
| `pp_needed` | `tinyint` | NOT NULL | 0 | 1=목표 미달(이어 돌리기/확정) |
| `pp_status` | `varchar(16)` | NOT NULL | idle | idle\|running\|done\|error |
| `pp_for_n` | `int` | NOT NULL | 0 | 이 후처리가 반영한 n_complete |
| `pp_lock_until` | `datetime` | NULL | NULL | 락 만료 |
| `pp_lock_owner` | `varchar(64)` | NULL | NULL | 잠근 호스트/pid |
| `pp_error` | `varchar(500)` | NULL | NULL | 후처리 실패 메시지 |
| `leftover_note` | `varchar(200)` | NULL | NULL | 남은횟수 안내 |
| `updated_at` | `datetime` | NOT NULL | CURRENT_TIMESTAMP | 행 갱신 |
| `created_at` | `datetime` | NOT NULL | CURRENT_TIMESTAMP | 최초 생성 |
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE IF NOT EXISTS optuna_study_result (
study_name VARCHAR(255) NOT NULL COMMENT 'Optuna study 이름 (kis_optuna 과 동일)',
strategy VARCHAR(32) NOT NULL DEFAULT '' COMMENT 'tail|momentum|us_momentum|breakout|scalp',
mode VARCHAR(32) NOT NULL DEFAULT '' COMMENT 'tpe 등',
start_date VARCHAR(10) NULL COMMENT '백테 시작 YYYY-MM-DD',
end_date VARCHAR(10) NULL COMMENT '백테 종료 YYYY-MM-DD',
job_id VARCHAR(64) NULL COMMENT '웹 잡 id (참고)',
symbol VARCHAR(16) NULL COMMENT '해외 종목핀일 때만',
study_trials INT NOT NULL DEFAULT 0 COMMENT '스터디 총 완료 목표. 0이면 미설정',
n_complete INT NOT NULL DEFAULT 0 COMMENT 'kis_optuna 완료 trial 수 캐시',
n_running INT NOT NULL DEFAULT 0 COMMENT '진행 중 trial 수 캐시 (표시용)',
payload_json LONGTEXT NULL COMMENT 'results_all/gated/stable, mode_combo, postprocess_topn, overfit',
briefing_md MEDIUMTEXT NULL COMMENT '브리핑 마크다운',
pp_needed TINYINT NOT NULL DEFAULT 0 COMMENT '1=목표 도달 전 후처리 대기',
pp_status VARCHAR(16) NOT NULL DEFAULT 'idle' COMMENT 'idle|running|done|error',
pp_for_n INT NOT NULL DEFAULT 0 COMMENT '이 후처리가 반영한 n_complete',
pp_lock_until DATETIME NULL COMMENT '락 만료 (죽은 워커 복구)',
pp_lock_owner VARCHAR(64) NULL COMMENT '잠근 호스트/pid',
pp_error VARCHAR(500) NULL COMMENT '후처리 실패 메시지',
leftover_note VARCHAR(200) NULL COMMENT '웹 남은횟수 안내 캐시',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '행 갱신',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '최초 생성',
PRIMARY KEY (study_name),
KEY idx_pp_needed (pp_needed, pp_status),
KEY idx_job (job_id),
KEY idx_updated (updated_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
COMMENT='Optuna 스터디별 웹 결과·후처리 산출 (파일 JSON 대체)';
```
</details>
### 📡 실시간 마켓 데이터 (WebSocket / Market Data)
#### `ws_candles`
**PK**: `id` | AUTO_INCREMENT=55175852
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `int(11)` | NOT NULL | | 분봉: PK · AUTO_INCREMENT |
| `code` | `varchar(20)` | NOT NULL | | 분봉: 종목코드 (KR 6자리 / US 티커) |
| `market` | `varchar(8)` | NOT NULL | KR | KR/US |
| `timeframe` | `tinyint(4)` | NOT NULL | | 분봉 주기(분) |
| `candle_time` | `varchar(12)` | NOT NULL | | 분봉: 봉 시각 YYYYMMDDHHMM |
| `open` | `double` | NOT NULL | | 분봉: 시가 |
| `high` | `double` | NOT NULL | | 분봉: 고가 |
| `low` | `double` | NOT NULL | | 분봉: 저가 |
| `close` | `double` | NOT NULL | | 분봉: 종가 |
| `volume` | `bigint(20)` | NOT NULL | 0 | 분봉: 거래량(체결량/봉거래량) |
| `rsi_2` | `double` | NULL | NULL | RSI(2) materialized |
| `rsi_3` | `double` | NULL | NULL | RSI(3) materialized |
| `rsi_5` | `double` | NULL | NULL | RSI(5) materialized |
| `is_confirmed` | `tinyint(4)` | NOT NULL | 1 | 분봉: 봉 확정 여부 (1=확정) |
| `source` | `varchar(10)` | NOT NULL | kis | 증권사 (kis/kiwoom). 레거시 rest/kw_rest/ws 는 마이그 |
| `channel` | `varchar(10)` | NOT NULL | ws | ws\|rest\|rollup |
| `updated_at` | `varchar(30)` | NOT NULL | | 분봉: 마지막 갱신 시각 |
| `holding_peak` | `double` | NULL | NULL COMMENT | 보유 중 트레일 고점(WS 틱 max_price 스냅샷) |
| `rsi_14` | `double` | NULL | NULL COMMENT | RSI(14) materialized |
| `ema_9` | `double` | NULL | NULL COMMENT | EMA(9) materialized |
| `ema_21` | `double` | NULL | NULL COMMENT | EMA(21) materialized |
| `rsi_7` | `double` | NULL | NULL COMMENT | RSI(7) materialized |
| `rsi_21` | `double` | NULL | NULL COMMENT | RSI(21) materialized |
| `ema_5` | `double` | NULL | NULL COMMENT | EMA(5) materialized |
| `ema_12` | `double` | NULL | NULL COMMENT | EMA(12) materialized |
| `ema_15` | `double` | NULL | NULL COMMENT | EMA(15) materialized |
| `ema_34` | `double` | NULL | NULL COMMENT | EMA(34) materialized |
**인덱스**:
- `uq_candle`: (`code`, `timeframe`, `candle_time`, `source`, `channel`)
- `idx_tf_time`: (`timeframe`, `candle_time`)
- `idx_ws_candles_market`: (`market`, `code`, `timeframe`, `candle_time`)
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `ws_candles` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`code` varchar(20) NOT NULL,
`market` varchar(8) NOT NULL DEFAULT 'KR' COMMENT 'KR|US',
`timeframe` tinyint(4) NOT NULL,
`candle_time` varchar(12) NOT NULL,
`open` double NOT NULL,
`high` double NOT NULL,
`low` double NOT NULL,
`close` double NOT NULL,
`volume` bigint(20) NOT NULL DEFAULT 0,
`rsi_2` double DEFAULT NULL,
`rsi_3` double DEFAULT NULL,
`rsi_5` double DEFAULT NULL,
`is_confirmed` tinyint(4) NOT NULL DEFAULT 1,
`source` varchar(10) NOT NULL DEFAULT 'kis',
`channel` varchar(10) NOT NULL DEFAULT 'ws' COMMENT 'ws|rest|rollup',
`updated_at` varchar(30) NOT NULL,
`holding_peak` double DEFAULT NULL COMMENT '보유 중 트레일 고점(WS 틱 max_price 스냅샷)',
`rsi_14` double DEFAULT NULL COMMENT 'RSI(14) materialized',
`ema_9` double DEFAULT NULL COMMENT 'EMA(9) materialized',
`ema_21` double DEFAULT NULL COMMENT 'EMA(21) materialized',
`rsi_7` double DEFAULT NULL COMMENT 'RSI(7) materialized',
`rsi_21` double DEFAULT NULL COMMENT 'RSI(21) materialized',
`ema_5` double DEFAULT NULL COMMENT 'EMA(5) materialized',
`ema_12` double DEFAULT NULL COMMENT 'EMA(12) materialized',
`ema_15` double DEFAULT NULL COMMENT 'EMA(15) materialized',
`ema_34` double DEFAULT NULL COMMENT 'EMA(34) materialized',
PRIMARY KEY (`id`),
UNIQUE KEY `uq_candle` (`code`,`timeframe`,`candle_time`,`source`,`channel`),
KEY `idx_tf_time` (`timeframe`,`candle_time`),
KEY `idx_ws_candles_market` (`market`,`code`,`timeframe`,`candle_time`)
) ENGINE=InnoDB AUTO_INCREMENT=55175852 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
#### `ws_ticks`
**PK**: `id` | AUTO_INCREMENT=54623571
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `bigint(20)` | NOT NULL | | 국장틱: PK · AUTO_INCREMENT |
| `market` | `varchar(8)` | NOT NULL | KR | 국장틱: 시장 구분 (KR/US 등) |
| `exchange` | `varchar(16)` | NULL | NULL | 국장틱: 거래소 (NASD/NYSE/AMEX/KRX 등) |
| `code` | `varchar(32)` | NOT NULL | | 국장틱: 종목코드 (KR 6자리 / US 티커) |
| `tick_time` | `varchar(14)` | NOT NULL | | 국장틱: 틱 시각 YYYYMMDDHHMMSS |
| `price` | `double` | NOT NULL | | 국장틱: 주문/체결 가격 |
| `volume` | `bigint(20)` | NOT NULL | 0 | 국장틱: 거래량(체결량/봉거래량) |
| `tick_seq` | `bigint(20)` | NULL | NULL | 국장틱: 틱 일련번호 |
| `session` | `varchar(8)` | NULL | NULL | 국장틱: 세션 태그 |
| `currency` | `varchar(8)` | NOT NULL | KRW | 국장틱: 통화 (KRW/USD) |
| `source` | `varchar(16)` | NOT NULL | kis | 국장틱: 증권사 (kis/kiwoom/ls). REST 현재가 아님 |
| `channel` | `varchar(10)` | NOT NULL | ws | 국장틱: 경로 (ws\|rest). 체결 틱은 ws만 적재. ka10007 INSERT 금지 |
| `recv_ts` | `varchar(30)` | NOT NULL | | 국장틱: 수신 시각 |
**인덱스**:
- `idx_ws_ticks_lookup`: (`market`, `code`, `tick_time`)
- `idx_ws_ticks_recv`: (`recv_ts`)
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `ws_ticks` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`market` varchar(8) NOT NULL DEFAULT 'KR',
`exchange` varchar(16) DEFAULT NULL,
`code` varchar(32) NOT NULL,
`tick_time` varchar(14) NOT NULL,
`price` double NOT NULL,
`volume` bigint(20) NOT NULL DEFAULT 0,
`tick_seq` bigint(20) DEFAULT NULL,
`session` varchar(8) DEFAULT NULL,
`currency` varchar(8) NOT NULL DEFAULT 'KRW',
`source` varchar(16) NOT NULL DEFAULT 'kis',
`channel` varchar(10) NOT NULL DEFAULT 'ws',
`recv_ts` varchar(30) NOT NULL,
PRIMARY KEY (`id`),
KEY `idx_ws_ticks_lookup` (`market`,`code`,`tick_time`),
KEY `idx_ws_ticks_recv` (`recv_ts`)
) ENGINE=InnoDB AUTO_INCREMENT=54623571 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
#### `ws_ticks_us`
**PK**: `id` | AUTO_INCREMENT=1458013
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `bigint(20)` | NOT NULL | | 해외틱: PK · AUTO_INCREMENT |
| `market` | `varchar(8)` | NOT NULL | US | 해외틱: 시장 구분 (KR/US 등) |
| `exchange` | `varchar(16)` | NULL | NULL | 해외틱: 거래소 (NASD/NYSE/AMEX/KRX 등) |
| `code` | `varchar(32)` | NOT NULL | | 해외틱: 종목코드 (KR 6자리 / US 티커) |
| `tick_time` | `varchar(14)` | NOT NULL | | 해외틱: 틱 시각 YYYYMMDDHHMMSS |
| `price` | `double` | NOT NULL | | 해외틱: 주문/체결 가격 |
| `volume` | `bigint(20)` | NOT NULL | 0 | 해외틱: 거래량(체결량/봉거래량) |
| `tick_seq` | `bigint(20)` | NULL | NULL | 해외틱: 틱 일련번호 |
| `session` | `varchar(8)` | NULL | NULL | 해외틱: 세션 태그 |
| `currency` | `varchar(8)` | NOT NULL | USD | 해외틱: 통화 (KRW/USD) |
| `source` | `varchar(16)` | NOT NULL | kis_us | 해외틱: 증권사 (kis_us 등). REST 현재가 아님 |
| `channel` | `varchar(10)` | NOT NULL | ws | 해외틱: 경로 (ws\|rest). 체결 틱은 ws만 적재 |
| `recv_ts` | `varchar(30)` | NOT NULL | | 해외틱: 수신 시각 |
**인덱스**:
- `idx_ws_ticks_us_lookup`: (`market`, `code`, `tick_time`)
- `idx_ws_ticks_us_recv`: (`recv_ts`)
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `ws_ticks_us` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`market` varchar(8) NOT NULL DEFAULT 'US',
`exchange` varchar(16) DEFAULT NULL,
`code` varchar(32) NOT NULL,
`tick_time` varchar(14) NOT NULL,
`price` double NOT NULL,
`volume` bigint(20) NOT NULL DEFAULT 0,
`tick_seq` bigint(20) DEFAULT NULL,
`session` varchar(8) DEFAULT NULL,
`currency` varchar(8) NOT NULL DEFAULT 'USD',
`source` varchar(16) NOT NULL DEFAULT 'kis_us',
`channel` varchar(10) NOT NULL DEFAULT 'ws',
`recv_ts` varchar(30) NOT NULL,
PRIMARY KEY (`id`),
KEY `idx_ws_ticks_us_lookup` (`market`,`code`,`tick_time`),
KEY `idx_ws_ticks_us_recv` (`recv_ts`)
) ENGINE=InnoDB AUTO_INCREMENT=1458013 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
#### `ws_orderbook`
**PK**: `id` | AUTO_INCREMENT=1777328
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `bigint(20)` | NOT NULL | | 호가스냅: PK · AUTO_INCREMENT |
| `market` | `varchar(8)` | NOT NULL | KR | 호가스냅: 시장 구분 (KR/US 등) |
| `code` | `varchar(32)` | NOT NULL | | 호가스냅: 종목코드 (KR 6자리 / US 티커) |
| `snap_time` | `varchar(14)` | NOT NULL | | 호가스냅: 스냅샷 시각 YYYYMMDDHHMMSS |
| `best_bid` | `bigint(20)` | NOT NULL | 0 | 호가스냅: 최우선 매수호가 |
| `best_ask` | `bigint(20)` | NOT NULL | 0 | 호가스냅: 최우선 매도호가 |
| `total_bid_qty` | `bigint(20)` | NOT NULL | 0 | 호가스냅: 총 매수잔량 |
| `total_ask_qty` | `bigint(20)` | NOT NULL | 0 | 호가스냅: 총 매도잔량 |
| `bid_qty_l3` | `bigint(20)` | NOT NULL | 0 | 호가스냅: 매수 1~3호가 잔량합 |
| `ask_qty_l3` | `bigint(20)` | NOT NULL | 0 | 호가스냅: 매도 1~3호가 잔량합 |
| `levels_json` | `mediumtext` | NULL | NULL | 호가스냅: 호가 단계 JSON |
| `source` | `varchar(16)` | NOT NULL | kiwoom_0d | 호가스냅: 데이터 소스 (kis/kiwoom/ls 등) |
| `recv_ts` | `varchar(30)` | NOT NULL | | 호가스냅: 수신 시각 |
| `strategy` | `varchar(16)` | NULL | NULL | 호가스냅: 전략 ID (SHORT/MOMENTUM/BREAKOUT/US_MOMENTUM 등) |
| `reject_code` | `varchar(64)` | NULL | NULL | 호가스냅: REJECT 종목코드 (reject_code) |
| `reject_msg` | `varchar(255)` | NULL | NULL | 호가스냅: REJECT ms G (reject_msg) |
| `eval_price` | `bigint(20)` | NOT NULL | 0 | 호가스냅: EVAL 가격 (eval_price) |
**인덱스**:
- `idx_ws_orderbook_lookup`: (`market`, `code`, `snap_time`)
- `idx_ws_orderbook_recv`: (`recv_ts`)
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `ws_orderbook` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`market` varchar(8) NOT NULL DEFAULT 'KR',
`code` varchar(32) NOT NULL,
`snap_time` varchar(14) NOT NULL,
`best_bid` bigint(20) NOT NULL DEFAULT 0,
`best_ask` bigint(20) NOT NULL DEFAULT 0,
`total_bid_qty` bigint(20) NOT NULL DEFAULT 0,
`total_ask_qty` bigint(20) NOT NULL DEFAULT 0,
`bid_qty_l3` bigint(20) NOT NULL DEFAULT 0,
`ask_qty_l3` bigint(20) NOT NULL DEFAULT 0,
`levels_json` mediumtext DEFAULT NULL,
`source` varchar(16) NOT NULL DEFAULT 'kiwoom_0d',
`recv_ts` varchar(30) NOT NULL,
`strategy` varchar(16) DEFAULT NULL,
`reject_code` varchar(64) DEFAULT NULL,
`reject_msg` varchar(255) DEFAULT NULL,
`eval_price` bigint(20) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_ws_orderbook_lookup` (`market`,`code`,`snap_time`),
KEY `idx_ws_orderbook_recv` (`recv_ts`)
) ENGINE=InnoDB AUTO_INCREMENT=1777328 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
#### `ws_program`
**PK**: `id` | AUTO_INCREMENT=134369
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `bigint(20)` | NOT NULL | | 프로그램매매: PK · AUTO_INCREMENT |
| `market` | `varchar(8)` | NOT NULL | KR | 프로그램매매: 시장 구분 (KR/US 등) |
| `code` | `varchar(32)` | NOT NULL | | 프로그램매매: 종목코드 (KR 6자리 / US 티커) |
| `snap_time` | `varchar(14)` | NOT NULL | | 프로그램매매: 스냅샷 시각 YYYYMMDDHHMMSS |
| `buy_qty` | `bigint(20)` | NOT NULL | 0 | 프로그램매매: BUY 수량 (buy_qty) |
| `sell_qty` | `bigint(20)` | NOT NULL | 0 | 프로그램매매: SELL 수량 (sell_qty) |
| `net_qty` | `bigint(20)` | NOT NULL | 0 | 프로그램매매: NET 수량 (net_qty) |
| `buy_amt` | `bigint(20)` | NOT NULL | 0 | 프로그램매매: BUY AMT (buy_amt) |
| `sell_amt` | `bigint(20)` | NOT NULL | 0 | 프로그램매매: SELL AMT (sell_amt) |
| `net_amt` | `bigint(20)` | NOT NULL | 0 | 프로그램매매: NET AMT (net_amt) |
| `source` | `varchar(16)` | NOT NULL | kiwoom_0w | 프로그램매매: 데이터 소스 (kis/kiwoom/ls 등) |
| `recv_ts` | `varchar(30)` | NOT NULL | | 프로그램매매: 수신 시각 |
| `strategy` | `varchar(16)` | NULL | NULL | 프로그램매매: 전략 ID (SHORT/MOMENTUM/BREAKOUT/US_MOMENTUM 등) |
| `reject_code` | `varchar(64)` | NULL | NULL | 프로그램매매: REJECT 종목코드 (reject_code) |
| `reject_msg` | `varchar(255)` | NULL | NULL | 프로그램매매: REJECT ms G (reject_msg) |
| `eval_price` | `bigint(20)` | NOT NULL | 0 | 프로그램매매: EVAL 가격 (eval_price) |
**인덱스**:
- `idx_ws_program_lookup`: (`market`, `code`, `snap_time`)
- `idx_ws_program_recv`: (`recv_ts`)
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `ws_program` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`market` varchar(8) NOT NULL DEFAULT 'KR',
`code` varchar(32) NOT NULL,
`snap_time` varchar(14) NOT NULL,
`buy_qty` bigint(20) NOT NULL DEFAULT 0,
`sell_qty` bigint(20) NOT NULL DEFAULT 0,
`net_qty` bigint(20) NOT NULL DEFAULT 0,
`buy_amt` bigint(20) NOT NULL DEFAULT 0,
`sell_amt` bigint(20) NOT NULL DEFAULT 0,
`net_amt` bigint(20) NOT NULL DEFAULT 0,
`source` varchar(16) NOT NULL DEFAULT 'kiwoom_0w',
`recv_ts` varchar(30) NOT NULL,
`strategy` varchar(16) DEFAULT NULL,
`reject_code` varchar(64) DEFAULT NULL,
`reject_msg` varchar(255) DEFAULT NULL,
`eval_price` bigint(20) NOT NULL DEFAULT 0,
PRIMARY KEY (`id`),
KEY `idx_ws_program_lookup` (`market`,`code`,`snap_time`),
KEY `idx_ws_program_recv` (`recv_ts`)
) ENGINE=InnoDB AUTO_INCREMENT=134369 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
#### `ws_price_validation`
**PK**: `id` | AUTO_INCREMENT=7869235
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `bigint(20)` | NOT NULL | | PK · AUTO_INCREMENT |
| `ts` | `datetime(3)` | NOT NULL | | ws_price_validation: TS (ts) |
| `code` | `varchar(20)` | NOT NULL | | 종목코드 (KR 6자리 / US 티커) |
| `kis_price` | `double` | NULL | NULL | ws_price_validation: KIS 가격 (kis_price) |
| `kiwoom_price` | `double` | NULL | NULL | ws_price_validation: KIWOOM 가격 (kiwoom_price) |
| `diff_pct` | `double` | NULL | NULL | ws_price_validation: DIFF % (diff_pct) |
| `kis_age_ms` | `int(11)` | NULL | NULL | ws_price_validation: KIS AGE ms (kis_age_ms) |
| `kiwoom_age_ms` | `int(11)` | NULL | NULL | ws_price_validation: KIWOOM AGE ms (kiwoom_age_ms) |
**인덱스**:
- `idx_ts`: (`ts`)
- `idx_code`: (`code`)
- `idx_diff`: (`diff_pct`)
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `ws_price_validation` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`ts` datetime(3) NOT NULL,
`code` varchar(20) NOT NULL,
`kis_price` double DEFAULT NULL,
`kiwoom_price` double DEFAULT NULL,
`diff_pct` double DEFAULT NULL,
`kis_age_ms` int(11) DEFAULT NULL,
`kiwoom_age_ms` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_ts` (`ts`),
KEY `idx_code` (`code`),
KEY `idx_diff` (`diff_pct`)
) ENGINE=InnoDB AUTO_INCREMENT=7869235 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
#### `ws_price_validation_ls`
**PK**: `id` | AUTO_INCREMENT=403761
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `bigint(20)` | NOT NULL | | PK · AUTO_INCREMENT |
| `ts` | `datetime(3)` | NOT NULL | | ws_price_validation_ls: TS (ts) |
| `code` | `varchar(20)` | NOT NULL | | 종목코드 (KR 6자리 / US 티커) |
| `kis_price` | `double` | NULL | NULL | ws_price_validation_ls: KIS 가격 (kis_price) |
| `kiwoom_price` | `double` | NULL | NULL | ws_price_validation_ls: KIWOOM 가격 (kiwoom_price) |
| `ls_price` | `double` | NULL | NULL | ws_price_validation_ls: LS 가격 (ls_price) |
| `diff_kis_ls_pct` | `double` | NULL | NULL | ws_price_validation_ls: DIFF KIS LS % (diff_kis_ls_pct) |
| `diff_kw_ls_pct` | `double` | NULL | NULL | ws_price_validation_ls: DIFF KW LS % (diff_kw_ls_pct) |
| `kis_age_ms` | `int(11)` | NULL | NULL | ws_price_validation_ls: KIS AGE ms (kis_age_ms) |
| `kiwoom_age_ms` | `int(11)` | NULL | NULL | ws_price_validation_ls: KIWOOM AGE ms (kiwoom_age_ms) |
| `ls_age_ms` | `int(11)` | NULL | NULL | ws_price_validation_ls: LS AGE ms (ls_age_ms) |
**인덱스**:
- `idx_lsval_ts`: (`ts`)
- `idx_lsval_code`: (`code`)
- `idx_lsval_diff`: (`diff_kis_ls_pct`)
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `ws_price_validation_ls` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`ts` datetime(3) NOT NULL,
`code` varchar(20) NOT NULL,
`kis_price` double DEFAULT NULL,
`kiwoom_price` double DEFAULT NULL,
`ls_price` double DEFAULT NULL,
`diff_kis_ls_pct` double DEFAULT NULL,
`diff_kw_ls_pct` double DEFAULT NULL,
`kis_age_ms` int(11) DEFAULT NULL,
`kiwoom_age_ms` int(11) DEFAULT NULL,
`ls_age_ms` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_lsval_ts` (`ts`),
KEY `idx_lsval_code` (`code`),
KEY `idx_lsval_diff` (`diff_kis_ls_pct`)
) ENGINE=InnoDB AUTO_INCREMENT=403761 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
#### `ls_ws_candles`
**PK**: `code`, `datetime`, `tf_min`
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `code` 🔑 | `varchar(20)` | NOT NULL | | LS분봉: 종목코드 (KR 6자리 / US 티커) |
| `datetime` 🔑 | `varchar(20)` | NOT NULL | | LS분봉: DATETIME (datetime) |
| `tf_min` 🔑 | `int(11)` | NOT NULL | 1 | LS분봉: 분봉 주기(분) |
| `open` | `double` | NOT NULL | | LS분봉: 시가 |
| `high` | `double` | NOT NULL | | LS분봉: 고가 |
| `low` | `double` | NOT NULL | | LS분봉: 저가 |
| `close` | `double` | NOT NULL | | LS분봉: 종가 |
| `volume` | `double` | NOT NULL | 0 | LS분봉: 거래량(체결량/봉거래량) |
| `tick_count` | `int(11)` | NOT NULL | 0 | LS분봉: TICK COUNT (tick_count) |
| `updated_at` | `datetime(3)` | NOT NULL | | LS분봉: 마지막 갱신 시각 |
**인덱스**:
- `idx_ls_cndl_dt`: (`datetime`)
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `ls_ws_candles` (
`code` varchar(20) NOT NULL,
`datetime` varchar(20) NOT NULL,
`tf_min` int(11) NOT NULL DEFAULT 1,
`open` double NOT NULL,
`high` double NOT NULL,
`low` double NOT NULL,
`close` double NOT NULL,
`volume` double NOT NULL DEFAULT 0,
`tick_count` int(11) NOT NULL DEFAULT 0,
`updated_at` datetime(3) NOT NULL,
PRIMARY KEY (`code`,`datetime`,`tf_min`),
KEY `idx_ls_cndl_dt` (`datetime`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
#### `ls_ws_ticks`
**PK**: `id` | AUTO_INCREMENT=8419294
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `bigint(20)` | NOT NULL | | LS틱: PK · AUTO_INCREMENT |
| `ts` | `datetime(3)` | NOT NULL | | LS틱: TS (ts) |
| `code` | `varchar(20)` | NOT NULL | | LS틱: 종목코드 (KR 6자리 / US 티커) |
| `price` | `double` | NOT NULL | | LS틱: 주문/체결 가격 |
| `volume` | `double` | NULL | NULL | LS틱: 거래량(체결량/봉거래량) |
| `tot_volume` | `double` | NULL | NULL | LS틱: TOT 거래량 (tot_volume) |
| `chetime` | `varchar(16)` | NULL | NULL | LS틱: CHETIME (chetime) |
| `tr_cd` | `varchar(8)` | NULL | NULL | LS틱: TR CD (tr_cd) |
**인덱스**:
- `idx_ls_tick_ts`: (`ts`)
- `idx_ls_tick_code_ts`: (`code`, `ts`)
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `ls_ws_ticks` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`ts` datetime(3) NOT NULL,
`code` varchar(20) NOT NULL,
`price` double NOT NULL,
`volume` double DEFAULT NULL,
`tot_volume` double DEFAULT NULL,
`chetime` varchar(16) DEFAULT NULL,
`tr_cd` varchar(8) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_ls_tick_ts` (`ts`),
KEY `idx_ls_tick_code_ts` (`code`,`ts`)
) ENGINE=InnoDB AUTO_INCREMENT=8419294 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
#### `ls_ws_orderbook`
**PK**: `id` | AUTO_INCREMENT=23812
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `bigint(20)` | NOT NULL | | LS호가: PK · AUTO_INCREMENT |
| `market` | `varchar(8)` | NOT NULL | KR | LS호가: 시장 구분 (KR/US 등) |
| `code` | `varchar(32)` | NOT NULL | | LS호가: 종목코드 (KR 6자리 / US 티커) |
| `snap_time` | `varchar(14)` | NOT NULL | | LS호가: 스냅샷 시각 YYYYMMDDHHMMSS |
| `best_bid` | `bigint(20)` | NOT NULL | 0 | LS호가: 최우선 매수호가 |
| `best_ask` | `bigint(20)` | NOT NULL | 0 | LS호가: 최우선 매도호가 |
| `total_bid_qty` | `bigint(20)` | NOT NULL | 0 | LS호가: 총 매수잔량 |
| `total_ask_qty` | `bigint(20)` | NOT NULL | 0 | LS호가: 총 매도잔량 |
| `bid_qty_l3` | `bigint(20)` | NOT NULL | 0 | LS호가: 매수 1~3호가 잔량합 |
| `ask_qty_l3` | `bigint(20)` | NOT NULL | 0 | LS호가: 매도 1~3호가 잔량합 |
| `levels_json` | `mediumtext` | NULL | NULL | LS호가: 호가 단계 JSON |
| `source` | `varchar(16)` | NOT NULL | ls_uh1 | LS호가: 데이터 소스 (kis/kiwoom/ls 등) |
| `recv_ts` | `varchar(30)` | NOT NULL | | LS호가: 수신 시각 |
**인덱스**:
- `idx_ls_ob_lookup`: (`market`, `code`, `snap_time`)
- `idx_ls_ob_recv`: (`recv_ts`)
- `idx_ls_ob_code`: (`code`)
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `ls_ws_orderbook` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`market` varchar(8) NOT NULL DEFAULT 'KR',
`code` varchar(32) NOT NULL,
`snap_time` varchar(14) NOT NULL,
`best_bid` bigint(20) NOT NULL DEFAULT 0,
`best_ask` bigint(20) NOT NULL DEFAULT 0,
`total_bid_qty` bigint(20) NOT NULL DEFAULT 0,
`total_ask_qty` bigint(20) NOT NULL DEFAULT 0,
`bid_qty_l3` bigint(20) NOT NULL DEFAULT 0,
`ask_qty_l3` bigint(20) NOT NULL DEFAULT 0,
`levels_json` mediumtext DEFAULT NULL,
`source` varchar(16) NOT NULL DEFAULT 'ls_uh1',
`recv_ts` varchar(30) NOT NULL,
PRIMARY KEY (`id`),
KEY `idx_ls_ob_lookup` (`market`,`code`,`snap_time`),
KEY `idx_ls_ob_recv` (`recv_ts`),
KEY `idx_ls_ob_code` (`code`)
) ENGINE=InnoDB AUTO_INCREMENT=23812 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
#### `ls_ws_vi`
**PK**: `id`
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `bigint(20)` | NOT NULL | | LS VI: PK · AUTO_INCREMENT |
| `ts` | `datetime(3)` | NOT NULL | | LS VI: TS (ts) |
| `code` | `varchar(20)` | NOT NULL | | LS VI: 종목코드 (KR 6자리 / US 티커) |
| `event_time` | `varchar(16)` | NULL | NULL | LS VI: EVENT TIME (event_time) |
| `vi_gubun` | `varchar(4)` | NOT NULL | 0 | LS VI: VI GUBUN (vi_gubun) |
| `krx_vi_gubun` | `varchar(4)` | NULL | NULL | LS VI: KRX VI GUBUN (krx_vi_gubun) |
| `nxt_vi_gubun` | `varchar(4)` | NULL | NULL | LS VI: NXT VI GUBUN (nxt_vi_gubun) |
| `svi_recprice` | `double` | NULL | NULL | LS VI: SVI RECPRICE (svi_recprice) |
| `dvi_recprice` | `double` | NULL | NULL | LS VI: DVI RECPRICE (dvi_recprice) |
| `vi_trgprice` | `double` | NULL | NULL | LS VI: VI TRGPRICE (vi_trgprice) |
| `tr_cd` | `varchar(8)` | NULL | NULL | LS VI: TR CD (tr_cd) |
| `exchname` | `varchar(8)` | NULL | NULL | LS VI: EXCHNAME (exchname) |
**인덱스**:
- `idx_ls_vi_ts`: (`ts`)
- `idx_ls_vi_code_ts`: (`code`, `ts`)
- `idx_ls_vi_gubun`: (`vi_gubun`)
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `ls_ws_vi` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`ts` datetime(3) NOT NULL,
`code` varchar(20) NOT NULL,
`event_time` varchar(16) DEFAULT NULL,
`vi_gubun` varchar(4) NOT NULL DEFAULT '0',
`krx_vi_gubun` varchar(4) DEFAULT NULL,
`nxt_vi_gubun` varchar(4) DEFAULT NULL,
`svi_recprice` double DEFAULT NULL,
`dvi_recprice` double DEFAULT NULL,
`vi_trgprice` double DEFAULT NULL,
`tr_cd` varchar(8) DEFAULT NULL,
`exchname` varchar(8) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_ls_vi_ts` (`ts`),
KEY `idx_ls_vi_code_ts` (`code`,`ts`),
KEY `idx_ls_vi_gubun` (`vi_gubun`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
### 🔍 종목 스캔 / 후보 (Universe & Candidates)
#### `target_candidates`
**PK**: `code`
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `code` 🔑 | `varchar(20)` | NOT NULL | | 현재후보: 종목코드 (KR 6자리 / US 티커) |
| `name` | `varchar(100)` | NOT NULL | | 현재후보: 종목명 |
| `score` | `double` | NOT NULL | | 현재후보: 점수/랭크 |
| `price` | `double` | NOT NULL | | 현재후보: 주문/체결 가격 |
| `scan_time` | `varchar(30)` | NOT NULL | | 현재후보: 스캔 시각 |
| `updated_at` | `varchar(30)` | NOT NULL | | 현재후보: 마지막 갱신 시각 |
| `market` | `char(1)` | NULL | Q | 현재후보: 시장 구분 (KR/US 등) |
| `sector` | `varchar(100)` | NULL | NULL | 현재후보: 섹터 |
| `theme` | `varchar(100)` | NULL | NULL | 현재후보: 테마 |
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `target_candidates` (
`code` varchar(20) NOT NULL,
`name` varchar(100) NOT NULL,
`score` double NOT NULL,
`price` double NOT NULL,
`scan_time` varchar(30) NOT NULL,
`updated_at` varchar(30) NOT NULL,
`market` char(1) DEFAULT 'Q',
`sector` varchar(100) DEFAULT NULL,
`theme` varchar(100) DEFAULT NULL,
PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
#### `target_candidates_history`
**PK**: `id` | AUTO_INCREMENT=3718695
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `int(11)` | NOT NULL | | 후보이력: PK · AUTO_INCREMENT |
| `slot_key` | `varchar(12)` | NOT NULL | | 후보이력: 슬롯/히스토리 키 |
| `scan_time` | `varchar(30)` | NOT NULL | | 후보이력: 스캔 시각 |
| `code` | `varchar(20)` | NOT NULL | | 후보이력: 종목코드 (KR 6자리 / US 티커) |
| `name` | `varchar(100)` | NOT NULL | | 후보이력: 종목명 |
| `score` | `double` | NOT NULL | 0 | 후보이력: 점수/랭크 |
| `price` | `double` | NOT NULL | 0 | 후보이력: 주문/체결 가격 |
| `market` | `char(1)` | NULL | Q | 후보이력: 시장 구분 (KR/US 등) |
| `sector` | `varchar(100)` | NULL | NULL | 후보이력: 섹터 |
| `theme` | `varchar(100)` | NULL | NULL | 후보이력: 테마 |
| `strategy_id` | `varchar(30)` | NULL | NULL | 후보이력: 전략 ID |
| `event_time` | `varchar(26)` | NULL | NULL | 후보이력: EVENT TIME (마이크로초 `YYYY-MM-DD HH:MM:SS.ffffff`) |
**인덱스**:
- `idx_slot`: (`slot_key`)
- `idx_scan`: (`scan_time`)
- `idx_strategy_event`: (`strategy_id`, `event_time`)
- `idx_tch_slot_sid`: (`slot_key`, `strategy_id`) — 오늘 운영 당일 이력 집계. 기존 인덱스 유지.
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `target_candidates_history` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`slot_key` varchar(12) NOT NULL,
`scan_time` varchar(30) NOT NULL,
`code` varchar(20) NOT NULL,
`name` varchar(100) NOT NULL DEFAULT '',
`score` double NOT NULL DEFAULT 0,
`price` double NOT NULL DEFAULT 0,
`market` char(1) DEFAULT 'Q',
`sector` varchar(100) DEFAULT NULL,
`theme` varchar(100) DEFAULT NULL,
`strategy_id` varchar(30) DEFAULT NULL,
`event_time` varchar(26) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_slot` (`slot_key`),
KEY `idx_scan` (`scan_time`),
KEY `idx_strategy_event` (`strategy_id`,`event_time`),
KEY `idx_tch_slot_sid` (`slot_key`,`strategy_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3718695 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
#### `condition_job_events`
조건검색 **진입/재진입/이탈** 1이벤트 1행 (스냅샷 테이블과 분리).
공통 플래그 맵: `kis_trader/network/condition_common.py` (`JOB_KO`).
| 컬럼 | 비고 |
|------|------|
| `job_flag` | LS `N`/`R`/`O` · 키움 `I`/`D` |
| `job_ko` | 진입/재진입/이탈 |
| `broker` | `ls` / `kiwoom` |
| `broker_time` | 증권사 HHMMSS(초) |
| `event_time` | 수신 시각(초) |
| `source` | `ls_afr` / `kiwoom_real` 등 |
**LS 시드 참고**: 유니버스 목록 본체는 `ls_candidates_history`(t1859/flush).
t1859 공백(09000)은 history에 안 넣고, RAM0 시 `LS_T1859_EMPTY_RETRY_SEC` REST 재시드.
#### `ls_candidates_history`
**PK**: `id` | AUTO_INCREMENT=969087
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `bigint(20)` | NOT NULL | | LS후보이력: PK · AUTO_INCREMENT |
| `slot_key` | `varchar(12)` | NOT NULL | | LS후보이력: 슬롯/히스토리 키 |
| `scan_time` | `varchar(30)` | NOT NULL | | LS후보이력: 스캔 시각 |
| `code` | `varchar(20)` | NOT NULL | | LS후보이력: 종목코드 (KR 6자리 / US 티커) |
| `name` | `varchar(100)` | NOT NULL | | LS후보이력: 종목명 |
| `score` | `double` | NOT NULL | 0 | LS후보이력: 점수/랭크 |
| `price` | `double` | NOT NULL | 0 | LS후보이력: 주문/체결 가격 |
| `market` | `char(1)` | NULL | Q | LS후보이력: 시장 구분 (KR/US 등) |
| `sector` | `varchar(100)` | NULL | NULL | LS후보이력: 섹터 |
| `theme` | `varchar(100)` | NULL | NULL | LS후보이력: 테마 |
| `strategy_id` | `varchar(32)` | NOT NULL | | LS후보이력: 전략 ID |
| `event_time` | `varchar(30)` | NOT NULL | | LS후보이력: EVENT TIME (event_time) |
| `query_name` | `varchar(64)` | NOT NULL | | LS후보이력: QUERY 종목명 (query_name) |
| `query_index` | `varchar(32)` | NOT NULL | | LS후보이력: QUERY INDEX (query_index) |
| `source` | `varchar(16)` | NOT NULL | ls_afr | LS후보이력: 데이터 소스 (kis/kiwoom/ls 등) |
**인덱스**:
- `idx_ls_cand_slot`: (`slot_key`)
- `idx_ls_cand_sid_evt`: (`strategy_id`, `event_time`)
- `idx_ls_cand_code`: (`code`)
- `idx_ls_cand_scan`: (`scan_time`)
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `ls_candidates_history` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`slot_key` varchar(12) NOT NULL,
`scan_time` varchar(30) NOT NULL,
`code` varchar(20) NOT NULL,
`name` varchar(100) NOT NULL DEFAULT '',
`score` double NOT NULL DEFAULT 0,
`price` double NOT NULL DEFAULT 0,
`market` char(1) DEFAULT 'Q',
`sector` varchar(100) DEFAULT NULL,
`theme` varchar(100) DEFAULT NULL,
`strategy_id` varchar(32) NOT NULL DEFAULT '',
`event_time` varchar(30) NOT NULL DEFAULT '',
`query_name` varchar(64) NOT NULL DEFAULT '',
`query_index` varchar(32) NOT NULL DEFAULT '',
`source` varchar(16) NOT NULL DEFAULT 'ls_afr',
PRIMARY KEY (`id`),
KEY `idx_ls_cand_slot` (`slot_key`),
KEY `idx_ls_cand_sid_evt` (`strategy_id`,`event_time`),
KEY `idx_ls_cand_code` (`code`),
KEY `idx_ls_cand_scan` (`scan_time`)
) ENGINE=InnoDB AUTO_INCREMENT=969087 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
#### `ls_universe_history`
**PK**: `id` | AUTO_INCREMENT=845
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `bigint(20)` | NOT NULL | | LS유니버스이력: PK · AUTO_INCREMENT |
| `slot_key` | `varchar(12)` | NOT NULL | | LS유니버스이력: 슬롯/히스토리 키 |
| `scan_time` | `varchar(30)` | NOT NULL | | LS유니버스이력: 스캔 시각 |
| `code` | `varchar(20)` | NOT NULL | | LS유니버스이력: 종목코드 (KR 6자리 / US 티커) |
| `name` | `varchar(100)` | NOT NULL | | LS유니버스이력: 종목명 |
| `price` | `double` | NOT NULL | 0 | LS유니버스이력: 주문/체결 가격 |
| `tick_count` | `int(11)` | NOT NULL | 0 | LS유니버스이력: TICK COUNT (tick_count) |
| `candle_1m_count` | `int(11)` | NOT NULL | 0 | LS유니버스이력: CANDLE 1M COUNT (candle_1m_count) |
| `last_tick_ts` | `datetime(3)` | NULL | NULL | LS유니버스이력: LAST TICK TS (last_tick_ts) |
| `last_candle_dt` | `varchar(20)` | NULL | NULL | LS유니버스이력: LAST CANDLE DT (last_candle_dt) |
| `gap_1m_missing` | `int(11)` | NOT NULL | 0 | LS유니버스이력: GAP 1M MISSING (gap_1m_missing) |
| `source` | `varchar(16)` | NOT NULL | ls_ws | LS유니버스이력: 데이터 소스 (kis/kiwoom/ls 등) |
| `note` | `varchar(200)` | NULL | NULL | LS유니버스이력: 메모 |
**인덱스**:
- `uq_ls_univ_slot_code`: (`slot_key`, `code`)
- `idx_ls_univ_slot`: (`slot_key`)
- `idx_ls_univ_code`: (`code`)
- `idx_ls_univ_scan`: (`scan_time`)
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `ls_universe_history` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`slot_key` varchar(12) NOT NULL,
`scan_time` varchar(30) NOT NULL,
`code` varchar(20) NOT NULL,
`name` varchar(100) NOT NULL DEFAULT '',
`price` double NOT NULL DEFAULT 0,
`tick_count` int(11) NOT NULL DEFAULT 0,
`candle_1m_count` int(11) NOT NULL DEFAULT 0,
`last_tick_ts` datetime(3) DEFAULT NULL,
`last_candle_dt` varchar(20) DEFAULT NULL,
`gap_1m_missing` int(11) NOT NULL DEFAULT 0,
`source` varchar(16) NOT NULL DEFAULT 'ls_ws',
`note` varchar(200) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uq_ls_univ_slot_code` (`slot_key`,`code`),
KEY `idx_ls_univ_slot` (`slot_key`),
KEY `idx_ls_univ_code` (`code`),
KEY `idx_ls_univ_scan` (`scan_time`)
) ENGINE=InnoDB AUTO_INCREMENT=845 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
#### `permanent_subscriptions`
**PK**: `id` | AUTO_INCREMENT=16
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `bigint(20)` | NOT NULL | | 영구구독: PK · AUTO_INCREMENT |
| `code` | `varchar(16)` | NOT NULL | | 영구구독: 종목코드 (KR 6자리 / US 티커) |
| `market_type` | `varchar(8)` | NOT NULL | KR | 영구구독: 시장유형 (KR/US) |
| `exchange` | `varchar(16)` | NOT NULL | KRX | 영구구독: 거래소 (NASD/NYSE/AMEX/KRX 등) |
| `symbol` | `varchar(32)` | NOT NULL | | 영구구독: 심볼/티커 |
| `tf_min` | `int(11)` | NOT NULL | 60 | 영구구독: 분봉 주기(분) |
| `enabled` | `tinyint(4)` | NOT NULL | 1 | 영구구독: 활성 여부 (1=ON) |
| `note` | `varchar(100)` | NOT NULL | | 영구구독: 메모 |
| `alert_price` | `double` | NULL | | 목표가 알람 가격 (NULL=미설정) |
| `alert_side` | `varchar(8)` | NOT NULL | gte | gte=이상 · lte=이하 |
| `alert_armed` | `tinyint(4)` | NOT NULL | 1 | 1=감시중 · 0=발화 후 대기 |
| `alert_fired_at` | `datetime` | NULL | | 마지막 알람 시각 |
| `created_at` | `datetime` | NULL | current_timestamp() | 영구구독: 생성 시각 |
**인덱스**:
- `uq_perm_code`: (`code`)
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `permanent_subscriptions` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`code` varchar(16) NOT NULL,
`market_type` varchar(8) NOT NULL DEFAULT 'KR',
`exchange` varchar(16) NOT NULL DEFAULT 'KRX',
`symbol` varchar(32) NOT NULL DEFAULT '',
`tf_min` int(11) NOT NULL DEFAULT 60,
`enabled` tinyint(4) NOT NULL DEFAULT 1,
`note` varchar(100) NOT NULL DEFAULT '',
`created_at` datetime DEFAULT current_timestamp(),
PRIMARY KEY (`id`),
UNIQUE KEY `uq_perm_code` (`code`)
) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='영구구독(국내 WS + 해외 WS) 종목';
```
</details>
#### `stock_meta`
**PK**: `code`
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `code` 🔑 | `varchar(20)` | NOT NULL | | 종목코드 (KR 6자리 / US 티커) |
| `name` | `varchar(100)` | NOT NULL | | 종목명 |
| `market` | `char(1)` | NOT NULL | Q | 시장 구분 (KR/US 등) |
| `sector_code` | `varchar(20)` | NULL | NULL | stock_meta: 초 TOR 종목코드 (sector_code) |
| `sector` | `varchar(100)` | NULL | NULL | 섹터 |
| `theme` | `varchar(100)` | NULL | NULL | 테마 |
| `theme_rank` | `tinyint(4)` | NULL | 3 | stock_meta: THEME RANK (theme_rank) |
| `updated_at` | `varchar(30)` | NOT NULL | | 마지막 갱신 시각 |
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `stock_meta` (
`code` varchar(20) NOT NULL,
`name` varchar(100) NOT NULL DEFAULT '',
`market` char(1) NOT NULL DEFAULT 'Q',
`sector_code` varchar(20) DEFAULT NULL,
`sector` varchar(100) DEFAULT NULL,
`theme` varchar(100) DEFAULT NULL,
`theme_rank` tinyint(4) DEFAULT 3,
`updated_at` varchar(30) NOT NULL,
PRIMARY KEY (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
#### `stock_share_meta`
**PK**: `code`
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `code` 🔑 | `varchar(20)` | NOT NULL | | 종목코드 (KR 6자리 / US 티커) |
| `flo_stk` | `bigint(20)` | NOT NULL | 0 | stock_share_meta: FLO STK (flo_stk) |
| `dstr_stk` | `bigint(20)` | NOT NULL | 0 | stock_share_meta: DSTR STK (dstr_stk) |
| `dstr_rt` | `double` | NULL | NULL | stock_share_meta: DSTR RT (dstr_rt) |
| `source` | `varchar(16)` | NOT NULL | ka10001 | 데이터 소스 (kis/kiwoom/ls 등) |
| `updated_at` | `varchar(30)` | NOT NULL | | 마지막 갱신 시각 |
**인덱스**:
- `idx_share_updated`: (`updated_at`)
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `stock_share_meta` (
`code` varchar(20) NOT NULL,
`flo_stk` bigint(20) NOT NULL DEFAULT 0,
`dstr_stk` bigint(20) NOT NULL DEFAULT 0,
`dstr_rt` double DEFAULT NULL,
`source` varchar(16) NOT NULL DEFAULT 'ka10001',
`updated_at` varchar(30) NOT NULL,
PRIMARY KEY (`code`),
KEY `idx_share_updated` (`updated_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
### 📈 전략별 종목 설정 (Per-Stock Config)
#### `holding_stock_config`
**PK**: `id` | AUTO_INCREMENT=17
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `bigint(20)` | NOT NULL | | PK · AUTO_INCREMENT |
| `code` | `varchar(10)` | NOT NULL | | 종목코드 (KR 6자리 / US 티커) |
| `name` | `varchar(50)` | NULL | | 종목명 |
| `created_at` | `datetime` | NULL | current_timestamp() | 생성 시각 |
| `rsi_period` | `float` | NULL | 14 | holding_stock_config: RSI PERIOD (rsi_period) |
| `rsi_buy1` | `float` | NULL | 35 | holding_stock_config: RSI BUY1 (rsi_buy1) |
| `rsi_buy2` | `float` | NULL | 30 | holding_stock_config: RSI BUY2 (rsi_buy2) |
| `rsi_buy3` | `float` | NULL | 25 | holding_stock_config: RSI BUY3 (rsi_buy3) |
| `rsi_sell` | `float` | NULL | 70 | holding_stock_config: RSI SELL (rsi_sell) |
| `take_profit_pct` | `float` | NULL | 4 | holding_stock_config: 익절 % (take_profit_pct) |
| `stop_loss_pct` | `float` | NULL | 10 | holding_stock_config: 손절 % (stop_loss_pct) |
| `buy1_ratio` | `float` | NULL | 30 | holding_stock_config: BUY1 RATIO (buy1_ratio) |
| `buy2_ratio` | `float` | NULL | 30 | holding_stock_config: BUY2 RATIO (buy2_ratio) |
| `buy3_ratio` | `float` | NULL | 40 | holding_stock_config: BUY3 RATIO (buy3_ratio) |
| `slot_money` | `float` | NULL | 3000000 | holding_stock_config: SLOT MONEY (slot_money) |
| `atr_period` | `float` | NULL | 14 | holding_stock_config: ATR PERIOD (atr_period) |
| `ath_drop_min_pct` | `float` | NULL | 0 COMMENT | ATH 대비 최소 낙폭% (0=비활성) |
| `year_drop_min_pct` | `float` | NULL | 0 COMMENT | 연도고점 대비 최소 낙폭% (0=비활성) |
| `w52_drop_min_pct` | `float` | NULL | 0 COMMENT | 52주고점 대비 최소 낙폭% (0=비활성) |
| `ma_fast` | `float` | NULL | 20 COMMENT | 단기 이동평균 기간 |
| `ma_slow` | `float` | NULL | 60 COMMENT | 장기 이동평균 기간 |
| `trail_stop_pct` | `float` | NULL | 8 COMMENT | 트레일링 스탑 % (0=비활성) |
| `trend_filter` | `float` | NULL | 1 COMMENT | 추세 필터 (1=사용/0=미사용) |
| `atr_mult` | `float` | NULL | 3 COMMENT | 샹들리에 엑시트 ATR 배수 |
| `updow_body_drop_min_pct` | `double` | NULL | NULL COMMENT | UPDOW 직전봉 몸통하락% 하한, NULL=env UPDOW_BODY_DROP_MIN_PCT |
| `updow_max_hold_bars` | `int(11)` | NULL | NULL COMMENT | UPDOW 최대 보유 봉 수, NULL=env UPDOW_MAX_HOLD_BARS |
| `updow_exit_on_green` | `double` | NULL | NULL COMMENT | UPDOW 양봉청산 1=ON 0=OFF, NULL=env UPDOW_EXIT_ON_GREEN |
| `updow_tf_min` | `int(11)` | NULL | NULL COMMENT | UPDOW 분봉 tf NULL·<1=env UPDOW_TF_MIN |
| `updow_regime_ma_bars` | `int(11)` | NULL | NULL COMMENT | UPDOW KOSPI프록시 MA봉수 NULL=env |
| `updow_atr_use_dynamic` | `double` | NULL | NULL COMMENT | UPDOW ATR 동적 청산 1=ON 0=OFF NULL=env UPDOW_ATR_USE_DYNAMIC |
| `updow_atr_period` | `int(11)` | NULL | NULL COMMENT | UPDOW ATR 기간(봉), NULL=env UPDOW_ATR_PERIOD |
| `updow_atr_sl_mult` | `double` | NULL | NULL COMMENT | UPDOW ATR 손절 배수, NULL=env UPDOW_ATR_SL_MULT |
| `updow_atr_tp_mult` | `double` | NULL | NULL COMMENT | UPDOW ATR 익절 배수, NULL=env UPDOW_ATR_TP_MULT |
| `updow_atr_sl_min_pct` | `double` | NULL | NULL | holding_stock_config: UPDOW ATR SL MIN % (updow_atr_sl_min_pct) |
| `updow_atr_sl_max_pct` | `double` | NULL | NULL | holding_stock_config: UPDOW ATR SL MAX % (updow_atr_sl_max_pct) |
| `updow_atr_tp_min_pct` | `double` | NULL | NULL | holding_stock_config: UPDOW ATR TP MIN % (updow_atr_tp_min_pct) |
| `updow_atr_tp_max_pct` | `double` | NULL | NULL | holding_stock_config: UPDOW ATR TP MAX % (updow_atr_tp_max_pct) |
| `updow_shoulder_min_high_pct` | `double` | NULL | NULL COMMENT | UPDOW 어깨 발동(%) NULL=env UPDOW_SHOULDER_MIN_HIGH_PCT |
| `updow_shoulder_cut_pct` | `double` | NULL | NULL COMMENT | UPDOW 어깨 폭(%) NULL=env UPDOW_SHOULDER_CUT_PCT |
**인덱스**:
- `idx_holding_config_code`: (`code`)
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `holding_stock_config` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`code` varchar(10) NOT NULL,
`name` varchar(50) DEFAULT '',
`created_at` datetime DEFAULT current_timestamp(),
`rsi_period` float DEFAULT 14,
`rsi_buy1` float DEFAULT 35,
`rsi_buy2` float DEFAULT 30,
`rsi_buy3` float DEFAULT 25,
`rsi_sell` float DEFAULT 70,
`take_profit_pct` float DEFAULT 4,
`stop_loss_pct` float DEFAULT 10,
`buy1_ratio` float DEFAULT 30,
`buy2_ratio` float DEFAULT 30,
`buy3_ratio` float DEFAULT 40,
`slot_money` float DEFAULT 3000000,
`atr_period` float DEFAULT 14,
`ath_drop_min_pct` float DEFAULT 0 COMMENT 'ATH 대비 최소 낙폭% (0=비활성)',
`year_drop_min_pct` float DEFAULT 0 COMMENT '연도고점 대비 최소 낙폭% (0=비활성)',
`w52_drop_min_pct` float DEFAULT 0 COMMENT '52주고점 대비 최소 낙폭% (0=비활성)',
`ma_fast` float DEFAULT 20 COMMENT '단기 이동평균 기간',
`ma_slow` float DEFAULT 60 COMMENT '장기 이동평균 기간',
`trail_stop_pct` float DEFAULT 8 COMMENT '트레일링 스탑 % (0=비활성)',
`trend_filter` float DEFAULT 1 COMMENT '추세 필터 (1=사용/0=미사용)',
`atr_mult` float DEFAULT 3 COMMENT '샹들리에 엑시트 ATR 배수',
`updow_body_drop_min_pct` double DEFAULT NULL COMMENT 'UPDOW 직전봉 몸통하락% 하한, NULL=env UPDOW_BODY_DROP_MIN_PCT',
`updow_max_hold_bars` int(11) DEFAULT NULL COMMENT 'UPDOW 최대 보유 봉 수, NULL=env UPDOW_MAX_HOLD_BARS',
`updow_exit_on_green` double DEFAULT NULL COMMENT 'UPDOW 양봉청산 1=ON 0=OFF, NULL=env UPDOW_EXIT_ON_GREEN',
`updow_tf_min` int(11) DEFAULT NULL COMMENT 'UPDOW 분봉 tf NULL·<1=env UPDOW_TF_MIN',
`updow_regime_ma_bars` int(11) DEFAULT NULL COMMENT 'UPDOW KOSPI프록시 MA봉수 NULL=env',
`updow_atr_use_dynamic` double DEFAULT NULL COMMENT 'UPDOW ATR 동적 청산 1=ON 0=OFF NULL=env UPDOW_ATR_USE_DYNAMIC',
`updow_atr_period` int(11) DEFAULT NULL COMMENT 'UPDOW ATR 기간(봉), NULL=env UPDOW_ATR_PERIOD',
`updow_atr_sl_mult` double DEFAULT NULL COMMENT 'UPDOW ATR 손절 배수, NULL=env UPDOW_ATR_SL_MULT',
`updow_atr_tp_mult` double DEFAULT NULL COMMENT 'UPDOW ATR 익절 배수, NULL=env UPDOW_ATR_TP_MULT',
`updow_atr_sl_min_pct` double DEFAULT NULL,
`updow_atr_sl_max_pct` double DEFAULT NULL,
`updow_atr_tp_min_pct` double DEFAULT NULL,
`updow_atr_tp_max_pct` double DEFAULT NULL,
`updow_shoulder_min_high_pct` double DEFAULT NULL COMMENT 'UPDOW 어깨 발동(%) NULL=env UPDOW_SHOULDER_MIN_HIGH_PCT',
`updow_shoulder_cut_pct` double DEFAULT NULL COMMENT 'UPDOW 어깨 폭(%) NULL=env UPDOW_SHOULDER_CUT_PCT',
PRIMARY KEY (`id`),
KEY `idx_holding_config_code` (`code`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
#### `holding_candles`
**PK**: `id` | AUTO_INCREMENT=6077
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `bigint(20)` | NOT NULL | | PK · AUTO_INCREMENT |
| `code` | `varchar(10)` | NOT NULL | | 종목코드 (KR 6자리 / US 티커) |
| `candle_date` | `date` | NOT NULL | | holding_candles: CANDLE DATE (candle_date) |
| `open` | `float` | NOT NULL | 0 | 시가 |
| `high` | `float` | NOT NULL | 0 | 고가 |
| `low` | `float` | NOT NULL | 0 | 저가 |
| `close` | `float` | NOT NULL | 0 | 종가 |
| `volume` | `bigint(20)` | NOT NULL | 0 | 거래량(체결량/봉거래량) |
| `updated_at` | `datetime` | NULL | current_timestamp() ON UPDATE current_timestamp() | 마지막 갱신 시각 |
| `change_rate` | `float` | NOT NULL | 0 COMMENT | 전일대비등락률(%) |
**인덱스**:
- `uq_holding_candle`: (`code`, `candle_date`)
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `holding_candles` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`code` varchar(10) NOT NULL,
`candle_date` date NOT NULL,
`open` float NOT NULL DEFAULT 0,
`high` float NOT NULL DEFAULT 0,
`low` float NOT NULL DEFAULT 0,
`close` float NOT NULL DEFAULT 0,
`volume` bigint(20) NOT NULL DEFAULT 0,
`updated_at` datetime DEFAULT current_timestamp() ON UPDATE current_timestamp(),
`change_rate` float NOT NULL DEFAULT 0 COMMENT '전일대비등락률(%)',
PRIMARY KEY (`id`),
UNIQUE KEY `uq_holding_candle` (`code`,`candle_date`)
) ENGINE=InnoDB AUTO_INCREMENT=6077 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
#### `holding_min_candles`
**PK**: `id` | AUTO_INCREMENT=102318
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `bigint(20)` | NOT NULL | | PK · AUTO_INCREMENT |
| `code` | `varchar(10)` | NOT NULL | | 종목코드 (KR 6자리 / US 티커) |
| `candle_dt` | `datetime` | NOT NULL | | 60분봉 기준 시작 시간(KST) |
| `tf` | `smallint(6)` | NOT NULL | 60 COMMENT | 분봉 단위 (60=60분봉) |
| `open` | `float` | NOT NULL | 0 | 시가 |
| `high` | `float` | NOT NULL | 0 | 고가 |
| `low` | `float` | NOT NULL | 0 | 저가 |
| `close` | `float` | NOT NULL | 0 | 종가 |
| `volume` | `bigint(20)` | NOT NULL | 0 | 거래량(체결량/봉거래량) |
| `updated_at` | `datetime` | NULL | current_timestamp() ON UPDATE current_timestamp() | 마지막 갱신 시각 |
**인덱스**:
- `uq_holding_min`: (`code`, `tf`, `candle_dt`)
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `holding_min_candles` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`code` varchar(10) NOT NULL,
`candle_dt` datetime NOT NULL COMMENT '60분봉 기준 시작 시간(KST)',
`tf` smallint(6) NOT NULL DEFAULT 60 COMMENT '분봉 단위 (60=60분봉)',
`open` float NOT NULL DEFAULT 0,
`high` float NOT NULL DEFAULT 0,
`low` float NOT NULL DEFAULT 0,
`close` float NOT NULL DEFAULT 0,
`volume` bigint(20) NOT NULL DEFAULT 0,
`updated_at` datetime DEFAULT current_timestamp() ON UPDATE current_timestamp(),
PRIMARY KEY (`id`),
UNIQUE KEY `uq_holding_min` (`code`,`tf`,`candle_dt`)
) ENGINE=InnoDB AUTO_INCREMENT=102318 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
#### `dbband_stock_config`
**PK**: `id` | AUTO_INCREMENT=5
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `bigint(20)` | NOT NULL | | PK · AUTO_INCREMENT |
| `code` | `varchar(32)` | NOT NULL | | 종목코드 (KR 6자리 / US 티커) |
| `market_type` | `varchar(8)` | NOT NULL | KR | 시장유형 (KR/US) |
| `exchange` | `varchar(16)` | NOT NULL | KRX | 거래소 (NASD/NYSE/AMEX/KRX 등) |
| `symbol` | `varchar(32)` | NOT NULL | | 심볼/티커 |
| `name` | `varchar(50)` | NULL | | 종목명 |
| `created_at` | `datetime` | NULL | current_timestamp() | 생성 시각 |
| `tf_min` | `int(11)` | NOT NULL | 15 | 분봉 주기(분) |
| `bb_period` | `int(11)` | NOT NULL | 20 | dbband_stock_config: BB PERIOD (bb_period) |
| `bb_inner_std` | `double` | NOT NULL | 2 | dbband_stock_config: BB INNER STD (bb_inner_std) |
| `bb_outer_std` | `double` | NOT NULL | 3 | dbband_stock_config: BB OUTER STD (bb_outer_std) |
| `trend_ma_period` | `int(11)` | NOT NULL | 200 | dbband_stock_config: TREND MA PERIOD (trend_ma_period) |
| `use_trend_filter` | `double` | NOT NULL | 1 | dbband_stock_config: USE TREND FILTER (use_trend_filter) |
| `side_mode` | `varchar(16)` | NOT NULL | long_only | dbband_stock_config: 매매방향 MODE (side_mode) |
| `entry_valid_bars` | `int(11)` | NOT NULL | 3 | dbband_stock_config: ENTRY VALID BARS (entry_valid_bars) |
| `entry_mode` | `varchar(16)` | NOT NULL | break_high | dbband_stock_config: ENTRY MODE (entry_mode) |
| `stop_mode` | `varchar(16)` | NOT NULL | signal_low | dbband_stock_config: STOP MODE (stop_mode) |
| `stop_buffer_pct` | `double` | NOT NULL | 0.1 | dbband_stock_config: STOP BUFFER % (stop_buffer_pct) |
| `stop_loss_pct` | `double` | NOT NULL | 2 | dbband_stock_config: 손절 % (stop_loss_pct) |
| `tp_mode` | `varchar(16)` | NOT NULL | opposite_band | dbband_stock_config: TP MODE (tp_mode) |
| `take_profit_pct` | `double` | NOT NULL | 3 | dbband_stock_config: 익절 % (take_profit_pct) |
| `rr_ratio` | `double` | NOT NULL | 2 | dbband_stock_config: RR RATIO (rr_ratio) |
| `shoulder_min_high_pct` | `double` | NOT NULL | 0.3 | dbband_stock_config: 어깨 MIN HIGH % (shoulder_min_high_pct) |
| `shoulder_cut_pct` | `double` | NOT NULL | 0.2 | dbband_stock_config: 어깨 CUT % (shoulder_cut_pct) |
| `trail_pct` | `double` | NOT NULL | 0 | dbband_stock_config: 트레일 % (trail_pct) |
| `trail_arm_pct` | `double` | NOT NULL | 0 | dbband_stock_config: 트레일 ARM % (trail_arm_pct) |
| `max_hold_bars` | `int(11)` | NOT NULL | 16 | dbband_stock_config: MAX HOLD BARS (max_hold_bars) |
| `slot_money` | `double` | NOT NULL | 3000000 | dbband_stock_config: SLOT MONEY (slot_money) |
| `cooldown_min` | `double` | NOT NULL | 15 | dbband_stock_config: COOLDOWN MIN (cooldown_min) |
| `max_daily` | `int(11)` | NOT NULL | 3 | dbband_stock_config: MAX DAILY (max_daily) |
| `exit_mode` | `varchar(16)` | NOT NULL | classic | dbband_stock_config: EXIT MODE (exit_mode) |
**인덱스**:
- `idx_dbband_stock_code`: (`code`)
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `dbband_stock_config` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`code` varchar(32) NOT NULL,
`market_type` varchar(8) NOT NULL DEFAULT 'KR',
`exchange` varchar(16) NOT NULL DEFAULT 'KRX',
`symbol` varchar(32) NOT NULL DEFAULT '',
`name` varchar(50) DEFAULT '',
`created_at` datetime DEFAULT current_timestamp(),
`tf_min` int(11) NOT NULL DEFAULT 15,
`bb_period` int(11) NOT NULL DEFAULT 20,
`bb_inner_std` double NOT NULL DEFAULT 2,
`bb_outer_std` double NOT NULL DEFAULT 3,
`trend_ma_period` int(11) NOT NULL DEFAULT 200,
`use_trend_filter` double NOT NULL DEFAULT 1,
`side_mode` varchar(16) NOT NULL DEFAULT 'long_only',
`entry_valid_bars` int(11) NOT NULL DEFAULT 3,
`entry_mode` varchar(16) NOT NULL DEFAULT 'break_high',
`stop_mode` varchar(16) NOT NULL DEFAULT 'signal_low',
`stop_buffer_pct` double NOT NULL DEFAULT 0.1,
`stop_loss_pct` double NOT NULL DEFAULT 2,
`tp_mode` varchar(16) NOT NULL DEFAULT 'opposite_band',
`take_profit_pct` double NOT NULL DEFAULT 3,
`rr_ratio` double NOT NULL DEFAULT 2,
`shoulder_min_high_pct` double NOT NULL DEFAULT 0.3,
`shoulder_cut_pct` double NOT NULL DEFAULT 0.2,
`trail_pct` double NOT NULL DEFAULT 0,
`trail_arm_pct` double NOT NULL DEFAULT 0,
`max_hold_bars` int(11) NOT NULL DEFAULT 16,
`slot_money` double NOT NULL DEFAULT 3000000,
`cooldown_min` double NOT NULL DEFAULT 15,
`max_daily` int(11) NOT NULL DEFAULT 3,
`exit_mode` varchar(16) NOT NULL DEFAULT 'classic',
PRIMARY KEY (`id`),
KEY `idx_dbband_stock_code` (`code`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='DBBAND 더블볼린저 종목별 파라미터';
```
</details>
#### `updow_stock_config`
**PK**: `id` | AUTO_INCREMENT=17
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `bigint(20)` | NOT NULL | | PK · AUTO_INCREMENT |
| `code` | `varchar(10)` | NOT NULL | | 종목코드 (KR 6자리 / US 티커) |
| `market_type` | `varchar(8)` | NOT NULL | KR | 시장유형 (KR/US) |
| `exchange` | `varchar(16)` | NOT NULL | KRX | 거래소 (NASD/NYSE/AMEX/KRX 등) |
| `symbol` | `varchar(32)` | NOT NULL | | 심볼/티커 |
| `name` | `varchar(50)` | NULL | | 종목명 |
| `created_at` | `datetime` | NULL | current_timestamp() | 생성 시각 |
| `body_drop_min_pct` | `double` | NOT NULL | | updow_stock_config: BODY DROP MIN % (body_drop_min_pct) |
| `body_drop_max_pct` | `double` | NOT NULL | 0 | updow_stock_config: BODY DROP MAX % (body_drop_max_pct) |
| `tp_pct` | `double` | NOT NULL | | updow_stock_config: TP % (tp_pct) |
| `stop_loss_pct` | `double` | NOT NULL | | updow_stock_config: 손절 % (stop_loss_pct) |
| `max_hold_bars` | `int(11)` | NOT NULL | | updow_stock_config: MAX HOLD BARS (max_hold_bars) |
| `exit_on_green` | `double` | NOT NULL | 0 | updow_stock_config: EXIT ON GREEN (exit_on_green) |
| `tf_min` | `int(11)` | NOT NULL | 60 | 분봉 주기(분) |
| `slot_money` | `double` | NOT NULL | 3000000 | updow_stock_config: SLOT MONEY (slot_money) |
| `regime_ma_bars` | `int(11)` | NOT NULL | 0 | updow_stock_config: REGIME MA BARS (regime_ma_bars) |
| `regime_ma_ease_pct` | `double` | NOT NULL | 0 | updow_stock_config: REGIME MA EASE % (regime_ma_ease_pct) |
| `atr_use_dynamic` | `double` | NOT NULL | 0 | updow_stock_config: ATR USE DYNAMIC (atr_use_dynamic) |
| `atr_period` | `int(11)` | NOT NULL | 14 | updow_stock_config: ATR PERIOD (atr_period) |
| `atr_sl_mult` | `double` | NOT NULL | 2 | updow_stock_config: ATR SL MULT (atr_sl_mult) |
| `atr_tp_mult` | `double` | NOT NULL | 4 | updow_stock_config: ATR TP MULT (atr_tp_mult) |
| `atr_sl_min_pct` | `double` | NOT NULL | 0.8 | updow_stock_config: ATR SL MIN % (atr_sl_min_pct) |
| `atr_sl_max_pct` | `double` | NOT NULL | 6 | updow_stock_config: ATR SL MAX % (atr_sl_max_pct) |
| `atr_tp_min_pct` | `double` | NOT NULL | 1.5 | updow_stock_config: ATR TP MIN % (atr_tp_min_pct) |
| `atr_tp_max_pct` | `double` | NOT NULL | 12 | updow_stock_config: ATR TP MAX % (atr_tp_max_pct) |
| `shoulder_min_high_pct` | `double` | NOT NULL | 0.3 | updow_stock_config: 어깨 MIN HIGH % (shoulder_min_high_pct) |
| `shoulder_cut_pct` | `double` | NOT NULL | 0.2 | updow_stock_config: 어깨 CUT % (shoulder_cut_pct) |
| `limit_atr_mult` | `double` | NOT NULL | 1.5 | updow_stock_config: LIMIT ATR MULT (limit_atr_mult) |
| `entry_mode` | `varchar(16)` | NOT NULL | | updow_stock_config: ENTRY MODE (entry_mode) |
**인덱스**:
- `idx_updow_stock_code`: (`code`)
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `updow_stock_config` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`code` varchar(10) NOT NULL,
`market_type` varchar(8) NOT NULL DEFAULT 'KR',
`exchange` varchar(16) NOT NULL DEFAULT 'KRX',
`symbol` varchar(32) NOT NULL DEFAULT '',
`name` varchar(50) DEFAULT '',
`created_at` datetime DEFAULT current_timestamp(),
`body_drop_min_pct` double NOT NULL,
`body_drop_max_pct` double NOT NULL DEFAULT 0,
`tp_pct` double NOT NULL,
`stop_loss_pct` double NOT NULL,
`max_hold_bars` int(11) NOT NULL,
`exit_on_green` double NOT NULL DEFAULT 0,
`tf_min` int(11) NOT NULL DEFAULT 60,
`slot_money` double NOT NULL DEFAULT 3000000,
`regime_ma_bars` int(11) NOT NULL DEFAULT 0,
`regime_ma_ease_pct` double NOT NULL DEFAULT 0,
`atr_use_dynamic` double NOT NULL DEFAULT 0,
`atr_period` int(11) NOT NULL DEFAULT 14,
`atr_sl_mult` double NOT NULL DEFAULT 2,
`atr_tp_mult` double NOT NULL DEFAULT 4,
`atr_sl_min_pct` double NOT NULL DEFAULT 0.8,
`atr_sl_max_pct` double NOT NULL DEFAULT 6,
`atr_tp_min_pct` double NOT NULL DEFAULT 1.5,
`atr_tp_max_pct` double NOT NULL DEFAULT 12,
`shoulder_min_high_pct` double NOT NULL DEFAULT 0.3,
`shoulder_cut_pct` double NOT NULL DEFAULT 0.2,
`limit_atr_mult` double NOT NULL DEFAULT 1.5,
`entry_mode` varchar(16) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `idx_updow_stock_code` (`code`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='UPDOW 하락매수 종목별 파라미터';
```
</details>
#### `updown_box_stock_cfg`
**PK**: `id` | AUTO_INCREMENT=4
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `bigint(20)` | NOT NULL | | PK · AUTO_INCREMENT |
| `code` | `varchar(20)` | NOT NULL | | 종목코드 (KR 6자리 / US 티커) |
| `name` | `varchar(50)` | NOT NULL | | 종목명 |
| `near_low_pct` | `double` | NULL | NULL | updown_box_stock_cfg: NEAR LOW % (near_low_pct) |
| `range_max_pct` | `double` | NULL | NULL | updown_box_stock_cfg: RANGE MAX % (range_max_pct) |
| `bb_bw_max` | `double` | NULL | NULL | updown_box_stock_cfg: BB BW MAX (bb_bw_max) |
| `ma_slope_tol_pct` | `double` | NULL | NULL | updown_box_stock_cfg: MA SLOPE TOL % (ma_slope_tol_pct) |
| `body_drop_min_pct` | `double` | NULL | NULL | updown_box_stock_cfg: BODY DROP MIN % (body_drop_min_pct) |
| `breach_buffer_pct` | `double` | NULL | NULL | updown_box_stock_cfg: BREACH BUFFER % (breach_buffer_pct) |
| `panic_from_high_pct` | `double` | NULL | NULL | updown_box_stock_cfg: PANIC FROM HIGH % (panic_from_high_pct) |
| `stop_loss_pct` | `double` | NULL | NULL | updown_box_stock_cfg: 손절 % (stop_loss_pct) |
| `tp_pct` | `double` | NULL | NULL | updown_box_stock_cfg: TP % (tp_pct) |
| `shoulder_min_high_pct` | `double` | NULL | NULL | updown_box_stock_cfg: 어깨 MIN HIGH % (shoulder_min_high_pct) |
| `shoulder_cut_pct` | `double` | NULL | NULL | updown_box_stock_cfg: 어깨 CUT % (shoulder_cut_pct) |
| `max_hold_bars` | `double` | NULL | NULL | updown_box_stock_cfg: MAX HOLD BARS (max_hold_bars) |
| `lookback_bars` | `double` | NULL | NULL | updown_box_stock_cfg: LOOKBACK BARS (lookback_bars) |
| `ratchet_tiers` | `varchar(64)` | NULL | NULL | updown_box_stock_cfg: 래칫 TIERS (ratchet_tiers) |
| `updated_at` | `datetime` | NOT NULL | current_timestamp() ON UPDATE current_timestamp() | 마지막 갱신 시각 |
| `breakout_follow` | `double` | NULL | NULL | updown_box_stock_cfg: BREAKOUT FOLLOW (breakout_follow) |
**인덱스**:
- `uq_updown_box_stock_code`: (`code`)
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `updown_box_stock_cfg` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`code` varchar(20) NOT NULL,
`name` varchar(50) NOT NULL DEFAULT '',
`near_low_pct` double DEFAULT NULL,
`range_max_pct` double DEFAULT NULL,
`bb_bw_max` double DEFAULT NULL,
`ma_slope_tol_pct` double DEFAULT NULL,
`body_drop_min_pct` double DEFAULT NULL,
`breach_buffer_pct` double DEFAULT NULL,
`panic_from_high_pct` double DEFAULT NULL,
`stop_loss_pct` double DEFAULT NULL,
`tp_pct` double DEFAULT NULL,
`shoulder_min_high_pct` double DEFAULT NULL,
`shoulder_cut_pct` double DEFAULT NULL,
`max_hold_bars` double DEFAULT NULL,
`lookback_bars` double DEFAULT NULL,
`ratchet_tiers` varchar(64) DEFAULT NULL,
`updated_at` datetime NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
`breakout_follow` double DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uq_updown_box_stock_code` (`code`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='UPDOWN 박스권 종목별 파라미터 오버라이드(NULL=글로벌 상속)';
```
</details>
#### `updown_watchlist`
**PK**: `id` | AUTO_INCREMENT=5
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `bigint(20)` | NOT NULL | | PK · AUTO_INCREMENT |
| `code` | `varchar(20)` | NOT NULL | | 종목코드 (KR 6자리 / US 티커) |
| `name` | `varchar(50)` | NOT NULL | | 종목명 |
| `market_type` | `varchar(8)` | NOT NULL | KR | 시장유형 (KR/US) |
| `exchange` | `varchar(16)` | NOT NULL | KRX | 거래소 (NASD/NYSE/AMEX/KRX 등) |
| `source` | `varchar(16)` | NOT NULL | manual | 데이터 소스 (kis/kiwoom/ls 등) |
| `status` | `varchar(16)` | NOT NULL | active | 상태 |
| `box_low` | `double` | NOT NULL | 0 | updown_watchlist: BOX LOW (box_low) |
| `box_high` | `double` | NOT NULL | 0 | updown_watchlist: BOX HIGH (box_high) |
| `box_score` | `double` | NOT NULL | 0 | updown_watchlist: BOX SCORE (box_score) |
| `added_at` | `datetime` | NOT NULL | current_timestamp() | updown_watchlist: ADDED AT (added_at) |
| `last_seen_at` | `datetime` | NULL | NULL | updown_watchlist: LAST SEEN AT (last_seen_at) |
| `last_signal_at` | `datetime` | NULL | NULL | updown_watchlist: LAST SIGNAL AT (last_signal_at) |
| `removed_at` | `datetime` | NULL | NULL | updown_watchlist: REMOVED AT (removed_at) |
| `updated_at` | `datetime` | NOT NULL | current_timestamp() ON UPDATE current_timestamp() | 마지막 갱신 시각 |
**인덱스**:
- `uq_updown_watch_code`: (`code`)
- `idx_updown_watch_status`: (`status`)
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `updown_watchlist` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`code` varchar(20) NOT NULL,
`name` varchar(50) NOT NULL DEFAULT '',
`market_type` varchar(8) NOT NULL DEFAULT 'KR',
`exchange` varchar(16) NOT NULL DEFAULT 'KRX',
`source` varchar(16) NOT NULL DEFAULT 'manual',
`status` varchar(16) NOT NULL DEFAULT 'active',
`box_low` double NOT NULL DEFAULT 0,
`box_high` double NOT NULL DEFAULT 0,
`box_score` double NOT NULL DEFAULT 0,
`added_at` datetime NOT NULL DEFAULT current_timestamp(),
`last_seen_at` datetime DEFAULT NULL,
`last_signal_at` datetime DEFAULT NULL,
`removed_at` datetime DEFAULT NULL,
`updated_at` datetime NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
PRIMARY KEY (`id`),
UNIQUE KEY `uq_updown_watch_code` (`code`),
KEY `idx_updown_watch_status` (`status`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='UPDOWN 박스권 sticky 관심종목(멤버십)';
```
</details>
#### `us_momentum_stock_config`
**PK**: `id` | AUTO_INCREMENT=11
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `bigint(20)` | NOT NULL | | PK · AUTO_INCREMENT |
| `code` | `varchar(32)` | NOT NULL | | 종목코드 (KR 6자리 / US 티커) |
| `exchange` | `varchar(16)` | NOT NULL | NASD | 거래소 (NASD/NYSE/AMEX/KRX 등) |
| `symbol` | `varchar(32)` | NOT NULL | | 심볼/티커 |
| `name` | `varchar(64)` | NULL | | 종목명 |
| `stock_group` | `varchar(16)` | NOT NULL | STOCK | us_momentum_stock_config: STOCK GROUP (stock_group) |
| `created_at` | `datetime` | NULL | current_timestamp() | 생성 시각 |
| `updated_at` | `datetime` | NULL | current_timestamp() ON UPDATE current_timestamp() | 마지막 갱신 시각 |
| `sl_pct` | `double` | NULL | NULL | us_momentum_stock_config: SL % (sl_pct) |
| `tp_pct` | `double` | NULL | NULL | us_momentum_stock_config: TP % (tp_pct) |
| `tp_max_pct` | `double` | NULL | NULL | us_momentum_stock_config: TP MAX % (tp_max_pct) |
| `shoulder_min_high_pct` | `double` | NULL | NULL | us_momentum_stock_config: 어깨 MIN HIGH % (shoulder_min_high_pct) |
| `shoulder_cut_pct` | `double` | NULL | NULL | us_momentum_stock_config: 어깨 CUT % (shoulder_cut_pct) |
| `trail_pct` | `double` | NULL | NULL | us_momentum_stock_config: 트레일 % (trail_pct) |
| `trail_arm_pct` | `double` | NULL | NULL | us_momentum_stock_config: 트레일 ARM % (trail_arm_pct) |
| `ratchet_tiers` | `varchar(255)` | NULL | NULL | us_momentum_stock_config: 래칫 TIERS (ratchet_tiers) |
| `max_hold_bars` | `int(11)` | NULL | NULL | us_momentum_stock_config: MAX HOLD BARS (max_hold_bars) |
| `cooldown_sec` | `int(11)` | NULL | NULL | us_momentum_stock_config: COOLDOWN 초 (cooldown_sec) |
| `max_daily` | `int(11)` | NULL | NULL | us_momentum_stock_config: MAX DAILY (max_daily) |
| `slot_money` | `double` | NULL | NULL | us_momentum_stock_config: SLOT MONEY (slot_money) |
| `rsi_min` | `double` | NULL | NULL | us_momentum_stock_config: RSI MIN (rsi_min) |
| `rsi_max` | `double` | NULL | NULL | us_momentum_stock_config: RSI MAX (rsi_max) |
| `vol_mult` | `double` | NULL | NULL | us_momentum_stock_config: VOL MULT (vol_mult) |
| `vol_win` | `int(11)` | NULL | NULL | us_momentum_stock_config: VOL WIN (vol_win) |
| `chase_lookback_min` | `int(11)` | NULL | NULL | us_momentum_stock_config: CHASE LOOKBACK MIN (chase_lookback_min) |
| `pullback_lookback_min` | `int(11)` | NULL | NULL | us_momentum_stock_config: PULLBACK LOOKBACK MIN (pullback_lookback_min) |
| `pullback_min_pct` | `double` | NULL | NULL | us_momentum_stock_config: PULLBACK MIN % (pullback_min_pct) |
| `pullback_max_pct` | `double` | NULL | NULL | us_momentum_stock_config: PULLBACK MAX % (pullback_max_pct) |
| `setup_vol_max_mult` | `double` | NULL | NULL | us_momentum_stock_config: SETUP VOL MAX MULT (setup_vol_max_mult) |
| `setup_bear_bars_min` | `int(11)` | NULL | NULL | us_momentum_stock_config: SETUP BEAR BARS MIN (setup_bear_bars_min) |
| `high_chase_thr` | `double` | NULL | NULL | us_momentum_stock_config: HIGH CHASE THR (high_chase_thr) |
| `max_daily_chg` | `double` | NULL | NULL | us_momentum_stock_config: MAX DAILY CHG (max_daily_chg) |
| `min_price` | `double` | NULL | NULL | us_momentum_stock_config: MIN 가격 (min_price) |
| `ema_fast_period` | `int(11)` | NULL | NULL | us_momentum_stock_config: EMA FAST PERIOD (ema_fast_period) |
| `ema_slow_period` | `int(11)` | NULL | NULL | us_momentum_stock_config: EMA SLOW PERIOD (ema_slow_period) |
| `use_defense_filters` | `tinyint(4)` | NULL | NULL | us_momentum_stock_config: USE DEFENSE FILTERS (use_defense_filters) |
| `use_high_chase_filter` | `tinyint(4)` | NULL | NULL | us_momentum_stock_config: USE HIGH CHASE FILTER (use_high_chase_filter) |
| `use_daily_range_filter` | `tinyint(4)` | NULL | NULL | us_momentum_stock_config: USE DAILY RANGE FILTER (use_daily_range_filter) |
| `use_ema_filter` | `tinyint(4)` | NULL | NULL | us_momentum_stock_config: USE EMA FILTER (use_ema_filter) |
| `use_rsi_max_filter` | `tinyint(4)` | NULL | NULL | us_momentum_stock_config: USE RSI MAX FILTER (use_rsi_max_filter) |
| `pattern_breakout` | `tinyint(4)` | NULL | NULL | us_momentum_stock_config: PATTERN BREAKOUT (pattern_breakout) |
| `pattern_pullback` | `tinyint(4)` | NULL | NULL | us_momentum_stock_config: PATTERN PULLBACK (pattern_pullback) |
**인덱스**:
- `uk_usmom_code`: (`code`)
- `idx_usmom_group`: (`stock_group`)
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `us_momentum_stock_config` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`code` varchar(32) NOT NULL,
`exchange` varchar(16) NOT NULL DEFAULT 'NASD',
`symbol` varchar(32) NOT NULL DEFAULT '',
`name` varchar(64) DEFAULT '',
`stock_group` varchar(16) NOT NULL DEFAULT 'STOCK',
`created_at` datetime DEFAULT current_timestamp(),
`updated_at` datetime DEFAULT current_timestamp() ON UPDATE current_timestamp(),
`sl_pct` double DEFAULT NULL,
`tp_pct` double DEFAULT NULL,
`tp_max_pct` double DEFAULT NULL,
`shoulder_min_high_pct` double DEFAULT NULL,
`shoulder_cut_pct` double DEFAULT NULL,
`trail_pct` double DEFAULT NULL,
`trail_arm_pct` double DEFAULT NULL,
`ratchet_tiers` varchar(255) DEFAULT NULL,
`max_hold_bars` int(11) DEFAULT NULL,
`cooldown_sec` int(11) DEFAULT NULL,
`max_daily` int(11) DEFAULT NULL,
`slot_money` double DEFAULT NULL,
`rsi_min` double DEFAULT NULL,
`rsi_max` double DEFAULT NULL,
`vol_mult` double DEFAULT NULL,
`vol_win` int(11) DEFAULT NULL,
`chase_lookback_min` int(11) DEFAULT NULL,
`pullback_lookback_min` int(11) DEFAULT NULL,
`pullback_min_pct` double DEFAULT NULL,
`pullback_max_pct` double DEFAULT NULL,
`setup_vol_max_mult` double DEFAULT NULL,
`setup_bear_bars_min` int(11) DEFAULT NULL,
`high_chase_thr` double DEFAULT NULL,
`max_daily_chg` double DEFAULT NULL,
`min_price` double DEFAULT NULL,
`ema_fast_period` int(11) DEFAULT NULL,
`ema_slow_period` int(11) DEFAULT NULL,
`use_defense_filters` tinyint(4) DEFAULT NULL,
`use_high_chase_filter` tinyint(4) DEFAULT NULL,
`use_daily_range_filter` tinyint(4) DEFAULT NULL,
`use_ema_filter` tinyint(4) DEFAULT NULL,
`use_rsi_max_filter` tinyint(4) DEFAULT NULL,
`pattern_breakout` tinyint(4) DEFAULT NULL,
`pattern_pullback` tinyint(4) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_usmom_code` (`code`),
KEY `idx_usmom_group` (`stock_group`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='US_MOMENTUM 종목별 TRIGGER/청산 (NULL=전역 US_MOMENTUM_* 폴백)';
```
</details>
### 📰 DART 공시
#### `dart_disclosures`
**PK**: `rcept_no`
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `rcept_no` 🔑 | `varchar(32)` | NOT NULL | | dart_disclosures: RCEPT NO (rcept_no) |
| `corp_code` | `varchar(16)` | NOT NULL | | dart_disclosures: CORP 종목코드 (corp_code) |
| `corp_name` | `varchar(100)` | NOT NULL | | dart_disclosures: CORP 종목명 (corp_name) |
| `stock_code` | `varchar(20)` | NOT NULL | | dart_disclosures: STOCK 종목코드 (stock_code) |
| `report_nm` | `varchar(255)` | NOT NULL | | dart_disclosures: REPORT NM (report_nm) |
| `rcept_dt` | `varchar(8)` | NOT NULL | | dart_disclosures: RCEPT DT (rcept_dt) |
| `url` | `varchar(255)` | NOT NULL | | dart_disclosures: URL (url) |
| `first_seen_at` | `varchar(30)` | NOT NULL | | dart_disclosures: FIRST SEEN AT (first_seen_at) |
| `mm_sent` | `tinyint(4)` | NOT NULL | 0 | dart_disclosures: MM SENT (mm_sent) |
| `filter_ok` | `tinyint(4)` | NULL | NULL | dart_disclosures: FILTER OK (filter_ok) |
| `sales_pct` | `double` | NULL | NULL | dart_disclosures: SALES % (sales_pct) |
| `filter_reason` | `varchar(64)` | NULL | NULL | dart_disclosures: FILTER REASON (filter_reason) |
**인덱스**:
- `idx_dart_seen`: (`first_seen_at`)
- `idx_dart_stock`: (`stock_code`)
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `dart_disclosures` (
`rcept_no` varchar(32) NOT NULL,
`corp_code` varchar(16) NOT NULL DEFAULT '',
`corp_name` varchar(100) NOT NULL DEFAULT '',
`stock_code` varchar(20) NOT NULL DEFAULT '',
`report_nm` varchar(255) NOT NULL DEFAULT '',
`rcept_dt` varchar(8) NOT NULL DEFAULT '',
`url` varchar(255) NOT NULL DEFAULT '',
`first_seen_at` varchar(30) NOT NULL,
`mm_sent` tinyint(4) NOT NULL DEFAULT 0,
`filter_ok` tinyint(4) DEFAULT NULL,
`sales_pct` double DEFAULT NULL,
`filter_reason` varchar(64) DEFAULT NULL,
PRIMARY KEY (`rcept_no`),
KEY `idx_dart_seen` (`first_seen_at`),
KEY `idx_dart_stock` (`stock_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
#### `dart_watchlist`
**PK**: `stock_code`
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `stock_code` 🔑 | `varchar(20)` | NOT NULL | | dart_watchlist: STOCK 종목코드 (stock_code) |
| `corp_name` | `varchar(100)` | NOT NULL | | dart_watchlist: CORP 종목명 (corp_name) |
| `rcept_no` | `varchar(32)` | NOT NULL | | dart_watchlist: RCEPT NO (rcept_no) |
| `report_nm` | `varchar(255)` | NOT NULL | | dart_watchlist: REPORT NM (report_nm) |
| `added_at` | `varchar(30)` | NOT NULL | | dart_watchlist: ADDED AT (added_at) |
| `expires_at` | `varchar(30)` | NOT NULL | | dart_watchlist: EXPIRES AT (expires_at) |
| `enabled` | `tinyint(4)` | NOT NULL | 1 | 활성 여부 (1=ON) |
**인덱스**:
- `idx_dart_watch_exp`: (`expires_at`)
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `dart_watchlist` (
`stock_code` varchar(20) NOT NULL,
`corp_name` varchar(100) NOT NULL DEFAULT '',
`rcept_no` varchar(32) NOT NULL DEFAULT '',
`report_nm` varchar(255) NOT NULL DEFAULT '',
`added_at` varchar(30) NOT NULL,
`expires_at` varchar(30) NOT NULL,
`enabled` tinyint(4) NOT NULL DEFAULT 1,
PRIMARY KEY (`stock_code`),
KEY `idx_dart_watch_exp` (`expires_at`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
### 🤖 AI 분석
#### `ai_analysis_log`
**PK**: `id`
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `int(11)` | NOT NULL | | PK · AUTO_INCREMENT |
| `created_at` | `varchar(30)` | NOT NULL | | 생성 시각 |
| `model` | `varchar(50)` | NOT NULL | | ai_analysis_log: MODEL (model) |
| `context_summary` | `text` | NULL | NULL | ai_analysis_log: CONTEXT SUMMARY (context_summary) |
| `response` | `mediumtext` | NULL | NULL | ai_analysis_log: RESPONSE (response) |
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `ai_analysis_log` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`created_at` varchar(30) NOT NULL,
`model` varchar(50) NOT NULL,
`context_summary` text DEFAULT NULL,
`response` mediumtext DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>
### 📋 주문 실행 로그
#### `order_execution_history`
**PK**: `id`
| 컬럼 | 타입 | NULL | DEFAULT | 비고 |
|------|------|------|---------|------|
| `id` 🔑 | `int(11)` | NOT NULL | | PK · AUTO_INCREMENT |
| `source` | `varchar(20)` | NOT NULL | | 데이터 소스 (kis/kiwoom/ls 등) |
| `ord_no` | `varchar(30)` | NULL | NULL | 증권사 주문번호 |
| `stk_cd` | `varchar(20)` | NULL | NULL | order_execution_history: STK CD (stk_cd) |
| `stk_nm` | `varchar(100)` | NULL | NULL | order_execution_history: STK NM (stk_nm) |
| `trde_tp` | `varchar(20)` | NULL | NULL | order_execution_history: TRDE TP (trde_tp) |
| `ord_qty` | `varchar(20)` | NULL | NULL | order_execution_history: ORD 수량 (ord_qty) |
| `ord_uv` | `varchar(20)` | NULL | NULL | order_execution_history: ORD UV (ord_uv) |
| `cntr_qty` | `varchar(20)` | NULL | NULL | order_execution_history: CNTR 수량 (cntr_qty) |
| `cntr_uv` | `varchar(20)` | NULL | NULL | order_execution_history: CNTR UV (cntr_uv) |
| `ord_tm` | `varchar(20)` | NULL | NULL | order_execution_history: ORD TM (ord_tm) |
| `cnfm_tm` | `varchar(20)` | NULL | NULL | order_execution_history: CNFM TM (cnfm_tm) |
| `sell_tp` | `varchar(20)` | NULL | NULL | order_execution_history: SELL TP (sell_tp) |
| `ord_dt` | `varchar(20)` | NULL | NULL | order_execution_history: ORD DT (ord_dt) |
| `raw_json` | `text` | NULL | NULL | 원본 응답 JSON |
| `fetched_at` | `varchar(30)` | NOT NULL | | order_execution_history: FETCHED AT (fetched_at) |
<details>
<summary>DDL 원문</summary>
```sql
CREATE TABLE `order_execution_history` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`source` varchar(20) NOT NULL,
`ord_no` varchar(30) DEFAULT NULL,
`stk_cd` varchar(20) DEFAULT NULL,
`stk_nm` varchar(100) DEFAULT NULL,
`trde_tp` varchar(20) DEFAULT NULL,
`ord_qty` varchar(20) DEFAULT NULL,
`ord_uv` varchar(20) DEFAULT NULL,
`cntr_qty` varchar(20) DEFAULT NULL,
`cntr_uv` varchar(20) DEFAULT NULL,
`ord_tm` varchar(20) DEFAULT NULL,
`cnfm_tm` varchar(20) DEFAULT NULL,
`sell_tp` varchar(20) DEFAULT NULL,
`ord_dt` varchar(20) DEFAULT NULL,
`raw_json` text DEFAULT NULL,
`fetched_at` varchar(30) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
```
</details>