chore: 작업 중 발생한 부수적 변경 사항 및 누락된 파일 전체 커밋
- 프론트엔드 UI 업데이트 (backtest.html, backtest.js) 엔진 라디오 버튼 통합 관련 반영 - Rust 플러그인(kis_rust_core) 및 컴파일 소스코드 추가 - CLI 백테스트 스크립트 수정 및 최신화 - 기타 스크래치 테스트 스크립트, 로그 요약 마크다운(.md) 등 누락 파일 일괄 반영 - 추가적으로 아직 발견되지 않은 엣지 케이스나 렌더링 오류가 포함되어 있을 가능성이 있음
This commit is contained in:
@@ -98,6 +98,8 @@ class TradeDBExt:
|
||||
filled_at VARCHAR(30) DEFAULT NULL,
|
||||
raw_json MEDIUMTEXT DEFAULT NULL,
|
||||
is_mock TINYINT(1) NULL,
|
||||
target_price DOUBLE DEFAULT NULL,
|
||||
slippage_pct DOUBLE DEFAULT NULL,
|
||||
PRIMARY KEY (id),
|
||||
UNIQUE KEY uq_ord_no_ctx (ord_no, strategy_id, code, side, ord_date, is_mock),
|
||||
INDEX idx_strategy_date (strategy_id, ord_date),
|
||||
@@ -109,6 +111,7 @@ class TradeDBExt:
|
||||
self._migrate_orders_pk_scope()
|
||||
self._migrate_orders_is_mock()
|
||||
self._migrate_orders_broker_debug_columns()
|
||||
self._migrate_orders_slippage_columns()
|
||||
logger.info("📊 orders 테이블 확인/생성 완료")
|
||||
except Exception as e:
|
||||
logger.warning("orders 테이블 생성 실패(무시·폴백): %s", e)
|
||||
@@ -248,6 +251,23 @@ class TradeDBExt:
|
||||
except Exception as e:
|
||||
logger.warning("orders broker debug 마이그레이션 실패(무시·폴백): %s", e)
|
||||
|
||||
def _migrate_orders_slippage_columns(self) -> None:
|
||||
"""orders — 실매매 vs 백테스트 슬리피지 갭 모니터링용 컬럼."""
|
||||
specs = {
|
||||
"target_price": "DOUBLE NULL",
|
||||
"slippage_pct": "DOUBLE NULL",
|
||||
}
|
||||
try:
|
||||
cols = self.conn.get_columns("orders")
|
||||
for col, ddl in specs.items():
|
||||
if col not in cols:
|
||||
self.conn.execute(
|
||||
f"ALTER TABLE orders ADD COLUMN `{col}` {ddl}"
|
||||
)
|
||||
logger.info("📌 orders.%s 컬럼 추가 (슬리피지 모니터링)", col)
|
||||
except Exception as e:
|
||||
logger.warning("orders slippage 마이그레이션 실패(무시·폴백): %s", e)
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# orders CRUD
|
||||
# ------------------------------------------------------------------
|
||||
@@ -266,6 +286,7 @@ class TradeDBExt:
|
||||
msg1: Optional[str] = None,
|
||||
raw_json: Optional[str] = None,
|
||||
is_mock=None,
|
||||
target_price: Optional[float] = None,
|
||||
) -> bool:
|
||||
"""
|
||||
주문 기록 INSERT.
|
||||
@@ -283,8 +304,8 @@ class TradeDBExt:
|
||||
"""
|
||||
INSERT INTO orders (
|
||||
ord_no, strategy_id, code, name, side, qty, price,
|
||||
status, msg_cd, msg1, ord_date, submitted_at, raw_json, is_mock
|
||||
) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
|
||||
status, msg_cd, msg1, ord_date, submitted_at, raw_json, is_mock, target_price
|
||||
) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
|
||||
""",
|
||||
(
|
||||
ord_no, strategy_id, code, name, side, qty, price,
|
||||
@@ -293,6 +314,7 @@ class TradeDBExt:
|
||||
now.strftime("%Y-%m-%d %H:%M:%S"),
|
||||
raw_json,
|
||||
mock_flag,
|
||||
target_price,
|
||||
),
|
||||
)
|
||||
return True
|
||||
@@ -334,11 +356,15 @@ class TradeDBExt:
|
||||
self.conn.execute(
|
||||
"""
|
||||
UPDATE orders
|
||||
SET filled_qty=%s, filled_avg_price=%s, status=%s, filled_at=%s
|
||||
SET filled_qty=%s,
|
||||
filled_avg_price=%s,
|
||||
slippage_pct=IF(target_price IS NOT NULL AND target_price > 0, ((%s - target_price) / target_price) * 100, slippage_pct),
|
||||
status=%s,
|
||||
filled_at=%s
|
||||
WHERE ord_no=%s AND strategy_id=%s AND code=%s AND ord_date=%s
|
||||
AND is_mock=%s
|
||||
""",
|
||||
(filled_qty, filled_avg_price, status, now,
|
||||
(filled_qty, filled_avg_price, filled_avg_price, status, now,
|
||||
ord_no, strategy_id, code, od, mock_flag),
|
||||
)
|
||||
return True
|
||||
|
||||
Reference in New Issue
Block a user