[2026-05-27] 포맷 후 복구 설치 스크립트 추가
This commit is contained in:
@@ -7,6 +7,12 @@ import os
|
||||
|
||||
DB_PATH = os.getenv("DB_PATH", "data/stockbot.db")
|
||||
|
||||
def _ensure_columns(cursor, table: str, columns: dict[str, str]):
|
||||
existing = {row[1] for row in cursor.execute(f"PRAGMA table_info({table})").fetchall()}
|
||||
for name, ddl in columns.items():
|
||||
if name not in existing:
|
||||
cursor.execute(f"ALTER TABLE {table} ADD COLUMN {name} {ddl}")
|
||||
|
||||
def init_db():
|
||||
os.makedirs(os.path.dirname(DB_PATH), exist_ok=True)
|
||||
conn = sqlite3.connect(DB_PATH)
|
||||
@@ -80,6 +86,72 @@ def init_db():
|
||||
api_call_success INTEGER DEFAULT 1
|
||||
)""")
|
||||
|
||||
c.execute("""
|
||||
CREATE TABLE IF NOT EXISTS entry_snapshots (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
trade_id INTEGER,
|
||||
date TEXT NOT NULL,
|
||||
ticker TEXT NOT NULL,
|
||||
name TEXT,
|
||||
entry_time TEXT NOT NULL,
|
||||
current_price REAL,
|
||||
entry_price REAL,
|
||||
target_price REAL,
|
||||
stop_price REAL,
|
||||
today_open REAL,
|
||||
prev_high REAL,
|
||||
prev_low REAL,
|
||||
prev_amount REAL,
|
||||
volume REAL,
|
||||
change_pct REAL,
|
||||
market_sentiment TEXT,
|
||||
sentiment_score INTEGER,
|
||||
risk_level TEXT,
|
||||
trade_allowed INTEGER,
|
||||
hot_sectors TEXT,
|
||||
avoid_sectors TEXT,
|
||||
boosted_tickers TEXT,
|
||||
blacklist_tickers TEXT,
|
||||
ai_boosted INTEGER DEFAULT 0,
|
||||
ai_win_score REAL,
|
||||
ai_stop_loss_score REAL,
|
||||
ai_model_version TEXT,
|
||||
position_size_multiplier REAL,
|
||||
combined_multiplier REAL,
|
||||
entry_reason TEXT,
|
||||
strategy TEXT DEFAULT 'VB',
|
||||
created_at TEXT NOT NULL
|
||||
)""")
|
||||
c.execute("CREATE INDEX IF NOT EXISTS idx_entry_snapshots_trade_id ON entry_snapshots(trade_id)")
|
||||
c.execute("CREATE INDEX IF NOT EXISTS idx_entry_snapshots_date_ticker ON entry_snapshots(date, ticker)")
|
||||
_ensure_columns(c, "entry_snapshots", {
|
||||
"ai_win_score": "REAL",
|
||||
"ai_stop_loss_score": "REAL",
|
||||
"ai_model_version": "TEXT",
|
||||
})
|
||||
|
||||
c.execute("""
|
||||
CREATE TABLE IF NOT EXISTS post_entry_snapshots (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
trade_id INTEGER,
|
||||
date TEXT NOT NULL,
|
||||
ticker TEXT NOT NULL,
|
||||
sample_time TEXT NOT NULL,
|
||||
elapsed_sec INTEGER NOT NULL,
|
||||
entry_price REAL,
|
||||
current_price REAL,
|
||||
return_pct REAL,
|
||||
mfe_pct REAL,
|
||||
mae_pct REAL,
|
||||
volume REAL,
|
||||
change_pct REAL,
|
||||
position_open INTEGER DEFAULT 1,
|
||||
created_at TEXT NOT NULL,
|
||||
UNIQUE(trade_id, elapsed_sec)
|
||||
)""")
|
||||
c.execute("CREATE INDEX IF NOT EXISTS idx_post_entry_snapshots_trade_id ON post_entry_snapshots(trade_id)")
|
||||
c.execute("CREATE INDEX IF NOT EXISTS idx_post_entry_snapshots_date_ticker ON post_entry_snapshots(date, ticker)")
|
||||
|
||||
conn.commit()
|
||||
conn.close()
|
||||
print(f"DB 초기화 완료: {DB_PATH}")
|
||||
|
||||
Reference in New Issue
Block a user