# 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=이관 전 미상 |
DDL 원문
```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;
```
#### `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 | 페이퍼보유: 메모 |
DDL 원문
```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;
```
#### `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`)
DDL 원문
```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,
`broker_open_qty` int(11) DEFAULT NULL,
`broker_open_odno` varchar(30) DEFAULT NULL,
`broker_reconcile_at` varchar(30) DEFAULT NULL,
`broker_reconcile_note` varchar(200) 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;
```
#### `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`)
DDL 원문
```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;
```
#### `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=이관 전 미상 |
DDL 원문
```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;
```
#### `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`)
DDL 원문
```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;
```
#### `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 | | 수량(주) |
DDL 원문
```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;
```
#### `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) |
DDL 원문
```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;
```
### ⚙️ 전략 설정 (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) |
DDL 원문
```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;
```
#### `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) |
DDL 원문
```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;
```
#### `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) |
DDL 원문
```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;
```
#### `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) |
DDL 원문
```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;
```
#### `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) |
DDL 원문
```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;
```
#### `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) |
DDL 원문
```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;
```
#### `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) |
DDL 원문
```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;
```
#### `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 |
DDL 원문
```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;
```
#### `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) |
DDL 원문
```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;
```
### 🌍 환경 설정 (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 | 정정취소가능 조회 캐시(초). 기본 30 |
| `CANCELABLE_CCLD_MAX_PAGES` | `text` | NULL | NULL | 모의 cancelable daily-ccld 페이지 상한. 기본 3 |
| `SELL_LOCKED_ENQUEUE_COOLDOWN_SEC` | `text` | NULL | NULL | sell_locked enqueue 쿨다운(초). 기본 20 |
| `CANCELABLE_RECONCILE_ENABLED` | `text` | NULL | NULL | cancelable_open DB↔브로커 reconcile ON/OFF |
| `CANCELABLE_RECONCILE_CANCEL_RETRY` | `text` | NULL | NULL | reconcile 시 cancel_order 재시도 |
| `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재발급금지 |
DDL 원문
```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;
```
#### `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 | | 마지막갱신시각 |
DDL 원문
```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행';
```
#### `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 | 값 |
DDL 원문
```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;
```
### 🔬 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 | 최초 생성 |
DDL 원문
```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 대체)';
```
### 📡 실시간 마켓 데이터 (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`)
DDL 원문
```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;
```
#### `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`)
DDL 원문
```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;
```
#### `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`)
DDL 원문
```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;
```
#### `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`)
DDL 원문
```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;
```
#### `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`)
DDL 원문
```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;
```
#### `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`)
DDL 원문
```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;
```
#### `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`)
DDL 원문
```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;
```
#### `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`)
DDL 원문
```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;
```
#### `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`)
DDL 원문
```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;
```
#### `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`)
DDL 원문
```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;
```
#### `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`)
DDL 원문
```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;
```
### 🔍 종목 스캔 / 후보 (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 | 현재후보: 테마 |
DDL 원문
```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;
```
#### `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`) — 오늘 운영 당일 이력 집계. 기존 인덱스 유지.
DDL 원문
```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;
```
#### `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`)
DDL 원문
```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;
```
#### `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`)
DDL 원문
```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;
```
#### `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`)
DDL 원문
```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) 종목';
```
#### `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 | | 마지막 갱신 시각 |
DDL 원문
```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;
```
#### `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`)
DDL 원문
```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;
```
### 📈 전략별 종목 설정 (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`)
DDL 원문
```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;
```
#### `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`)
DDL 원문
```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;
```
#### `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`)
DDL 원문
```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;
```
#### `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`)
DDL 원문
```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 더블볼린저 종목별 파라미터';
```
#### `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`)
DDL 원문
```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 하락매수 종목별 파라미터';
```
#### `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`)
DDL 원문
```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=글로벌 상속)';
```
#### `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`)
DDL 원문
```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 관심종목(멤버십)';
```
#### `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`)
DDL 원문
```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_* 폴백)';
```
### 📰 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`)
DDL 원문
```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;
```
#### `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`)
DDL 원문
```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;
```
### 🤖 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) |
DDL 원문
```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;
```
### 📋 주문 실행 로그
#### `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) |
DDL 원문
```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;
```