Files
MoFin/evolution/__init__.py
T

71 lines
2.4 KiB
Python

"""
evolution/__init__.py — 自我进化模块
Loop Engineering: 策略健康度监控 + 教训提取 + 自动迭代
"""
import sqlite3, os
DB = os.environ.get('MOFIN_DB', '/home/hmo/MoFin/data/mofin.db')
def init_evolution_tables(conn=None):
"""初始化进化模块数据表"""
close_conn = False
if conn is None:
conn = sqlite3.connect(DB)
close_conn = True
# 策略健康度每日快照
conn.execute("""
CREATE TABLE IF NOT EXISTS strategy_health (
id INTEGER PRIMARY KEY AUTOINCREMENT,
strategy_version TEXT NOT NULL,
date TEXT NOT NULL,
live_trades INTEGER DEFAULT 0,
live_wins INTEGER DEFAULT 0,
live_return_pct REAL DEFAULT 0,
backtest_wr REAL DEFAULT 0,
backtest_avg_ret REAL DEFAULT 0,
deviation REAL DEFAULT 0,
health_score REAL DEFAULT 0,
created_at TEXT DEFAULT (datetime('now','localtime')),
UNIQUE(strategy_version, date)
)
""")
conn.execute("CREATE INDEX IF NOT EXISTS idx_health_version_date ON strategy_health(strategy_version, date)")
# 教训库
conn.execute("""
CREATE TABLE IF NOT EXISTS strategy_lessons (
id INTEGER PRIMARY KEY AUTOINCREMENT,
strategy_version TEXT NOT NULL,
trade_id INTEGER,
lesson_type TEXT NOT NULL,
lesson_text TEXT NOT NULL,
confidence REAL DEFAULT 0.5,
applied INTEGER DEFAULT 0,
created_at TEXT DEFAULT (datetime('now','localtime'))
)
""")
conn.execute("CREATE INDEX IF NOT EXISTS idx_lessons_version ON strategy_lessons(strategy_version, applied)")
# 策略迭代历史
conn.execute("""
CREATE TABLE IF NOT EXISTS strategy_evolution (
id INTEGER PRIMARY KEY AUTOINCREMENT,
parent_version TEXT NOT NULL,
child_version TEXT NOT NULL,
change_description TEXT,
backtest_result TEXT,
promoted INTEGER DEFAULT 0,
created_at TEXT DEFAULT (datetime('now','localtime'))
)
""")
conn.execute("CREATE INDEX IF NOT EXISTS idx_evolution_parent ON strategy_evolution(parent_version, promoted)")
conn.commit()
if close_conn:
conn.close()
if __name__ == '__main__':
init_evolution_tables()
print("进化模块数据表初始化完成")