-- 自动交易系统数据库初始化脚本 CREATE DATABASE IF NOT EXISTS `auto_trade_sys` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; USE `auto_trade_sys`; -- 配置表 CREATE TABLE IF NOT EXISTS `trading_config` ( `id` INT PRIMARY KEY AUTO_INCREMENT, `config_key` VARCHAR(100) UNIQUE NOT NULL, `config_value` TEXT NOT NULL, `config_type` VARCHAR(50) NOT NULL COMMENT 'string, number, boolean, json', `category` VARCHAR(50) NOT NULL COMMENT 'position, risk, scan, strategy, api', `description` TEXT, `updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `updated_by` VARCHAR(50), INDEX `idx_category` (`category`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='交易配置表'; -- 交易记录表 CREATE TABLE IF NOT EXISTS `trades` ( `id` INT PRIMARY KEY AUTO_INCREMENT, `symbol` VARCHAR(20) NOT NULL, `side` VARCHAR(10) NOT NULL COMMENT 'BUY, SELL', `quantity` DECIMAL(20, 8) NOT NULL, `entry_price` DECIMAL(20, 8) NOT NULL, `exit_price` DECIMAL(20, 8), `entry_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, `exit_time` TIMESTAMP NULL, `pnl` DECIMAL(20, 8) DEFAULT 0, `pnl_percent` DECIMAL(10, 4) DEFAULT 0, `leverage` INT DEFAULT 10, `entry_reason` TEXT, `exit_reason` VARCHAR(50) COMMENT 'stop_loss, take_profit, trailing_stop, manual', `status` VARCHAR(20) DEFAULT 'open' COMMENT 'open, closed, cancelled', `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, INDEX `idx_symbol` (`symbol`), INDEX `idx_entry_time` (`entry_time`), INDEX `idx_status` (`status`), INDEX `idx_symbol_status` (`symbol`, `status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='交易记录表'; -- 账户快照表 CREATE TABLE IF NOT EXISTS `account_snapshots` ( `id` INT PRIMARY KEY AUTO_INCREMENT, `total_balance` DECIMAL(20, 8) NOT NULL, `available_balance` DECIMAL(20, 8) NOT NULL, `total_position_value` DECIMAL(20, 8) DEFAULT 0, `total_pnl` DECIMAL(20, 8) DEFAULT 0, `open_positions` INT DEFAULT 0, `snapshot_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, INDEX `idx_snapshot_time` (`snapshot_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='账户快照表'; -- 市场扫描记录表 CREATE TABLE IF NOT EXISTS `market_scans` ( `id` INT PRIMARY KEY AUTO_INCREMENT, `scan_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, `symbols_scanned` INT DEFAULT 0, `symbols_found` INT DEFAULT 0, `top_symbols` JSON, `scan_duration` DECIMAL(10, 3) COMMENT '扫描耗时(秒)', INDEX `idx_scan_time` (`scan_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='市场扫描记录表'; -- 策略信号表 CREATE TABLE IF NOT EXISTS `trading_signals` ( `id` INT PRIMARY KEY AUTO_INCREMENT, `symbol` VARCHAR(20) NOT NULL, `signal_direction` VARCHAR(10) NOT NULL COMMENT 'BUY, SELL', `signal_strength` INT NOT NULL COMMENT '0-10', `signal_reason` TEXT, `rsi` DECIMAL(10, 4), `macd_histogram` DECIMAL(20, 8), `market_regime` VARCHAR(20) COMMENT 'trending, ranging', `signal_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, `executed` BOOLEAN DEFAULT FALSE, INDEX `idx_symbol` (`symbol`), INDEX `idx_signal_time` (`signal_time`), INDEX `idx_executed` (`executed`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='交易信号表'; -- 推荐交易对表 CREATE TABLE IF NOT EXISTS `trade_recommendations` ( `id` INT PRIMARY KEY AUTO_INCREMENT, `symbol` VARCHAR(20) NOT NULL, `direction` VARCHAR(10) NOT NULL COMMENT 'BUY, SELL', `recommendation_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP, `current_price` DECIMAL(20, 8) NOT NULL, `change_percent` DECIMAL(10, 4) COMMENT '24小时涨跌幅', `recommendation_reason` TEXT NOT NULL COMMENT '推荐原因', `signal_strength` INT NOT NULL COMMENT '信号强度 0-10', `market_regime` VARCHAR(20) COMMENT 'trending, ranging', `trend_4h` VARCHAR(10) COMMENT '4H周期趋势: up, down, neutral', -- 技术指标 `rsi` DECIMAL(10, 4) COMMENT 'RSI指标', `macd_histogram` DECIMAL(20, 8) COMMENT 'MACD柱状图', `bollinger_upper` DECIMAL(20, 8) COMMENT '布林带上轨', `bollinger_middle` DECIMAL(20, 8) COMMENT '布林带中轨', `bollinger_lower` DECIMAL(20, 8) COMMENT '布林带下轨', `ema20` DECIMAL(20, 8) COMMENT 'EMA20', `ema50` DECIMAL(20, 8) COMMENT 'EMA50', `ema20_4h` DECIMAL(20, 8) COMMENT '4H周期EMA20', `atr` DECIMAL(20, 8) COMMENT '平均真实波幅', -- 建议参数 `suggested_stop_loss` DECIMAL(20, 8) COMMENT '建议止损价', `suggested_take_profit_1` DECIMAL(20, 8) COMMENT '建议第一目标止盈价(盈亏比1:1)', `suggested_take_profit_2` DECIMAL(20, 8) COMMENT '建议第二目标止盈价', `suggested_position_percent` DECIMAL(10, 4) COMMENT '建议仓位百分比', `suggested_leverage` INT DEFAULT 10 COMMENT '建议杠杆倍数', -- 市场数据 `volume_24h` DECIMAL(20, 8) COMMENT '24小时成交量', `volatility` DECIMAL(10, 4) COMMENT '波动率', -- 状态 `status` VARCHAR(20) DEFAULT 'active' COMMENT 'active: 有效, expired: 已过期, executed: 已执行, cancelled: 已取消', `executed_at` TIMESTAMP NULL COMMENT '执行时间', `execution_result` VARCHAR(50) COMMENT '执行结果: success, failed', `execution_trade_id` INT COMMENT '关联的交易记录ID', `expires_at` TIMESTAMP NULL COMMENT '推荐过期时间(默认24小时后)', `notes` TEXT COMMENT '备注信息', INDEX `idx_symbol` (`symbol`), INDEX `idx_recommendation_time` (`recommendation_time`), INDEX `idx_status` (`status`), INDEX `idx_direction` (`direction`), INDEX `idx_signal_strength` (`signal_strength`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='推荐交易对表'; -- 初始化默认配置 INSERT INTO `trading_config` (`config_key`, `config_value`, `config_type`, `category`, `description`) VALUES -- 仓位控制 ('MAX_POSITION_PERCENT', '0.05', 'number', 'position', '单笔最大仓位:账户余额的5%'), ('MAX_TOTAL_POSITION_PERCENT', '0.30', 'number', 'position', '总仓位上限:账户余额的30%'), ('MIN_POSITION_PERCENT', '0.01', 'number', 'position', '单笔最小仓位:账户余额的1%'), -- 涨跌幅阈值 ('MIN_CHANGE_PERCENT', '2.0', 'number', 'scan', '最小涨跌幅阈值:2%'), ('TOP_N_SYMBOLS', '10', 'number', 'scan', '每次扫描后处理的交易对数量(从符合条件的交易对中选择前N个进行详细分析)'), ('MAX_SCAN_SYMBOLS', '500', 'number', 'scan', '扫描的最大交易对数量(0表示扫描所有,建议100-500)'), -- 风险控制 ('STOP_LOSS_PERCENT', '0.03', 'number', 'risk', '止损:3%'), ('TAKE_PROFIT_PERCENT', '0.05', 'number', 'risk', '止盈:5%'), -- 市场扫描(1小时主周期) ('SCAN_INTERVAL', '3600', 'number', 'scan', '扫描间隔:1小时(秒)'), ('KLINE_INTERVAL', '1h', 'string', 'scan', 'K线周期:1小时'), ('PRIMARY_INTERVAL', '1h', 'string', 'scan', '主周期:1小时'), ('CONFIRM_INTERVAL', '4h', 'string', 'scan', '确认周期:4小时'), ('ENTRY_INTERVAL', '15m', 'string', 'scan', '入场周期:15分钟'), -- 过滤条件 ('MIN_VOLUME_24H', '10000000', 'number', 'scan', '最小24小时成交量:1000万USDT'), ('MIN_VOLATILITY', '0.02', 'number', 'scan', '最小波动率:2%'), -- 高胜率策略参数 ('MIN_SIGNAL_STRENGTH', '7', 'number', 'strategy', '最小信号强度(0-10),已提升至7以提高入场质量'), ('LEVERAGE', '10', 'number', 'strategy', '杠杆倍数'), ('USE_TRAILING_STOP', 'true', 'boolean', 'strategy', '是否使用移动止损'), ('TRAILING_STOP_ACTIVATION', '0.01', 'number', 'strategy', '移动止损激活阈值(盈利1%后激活)'), ('TRAILING_STOP_PROTECT', '0.01', 'number', 'strategy', '移动止损保护利润(保护1%利润)'), -- 持仓同步 ('POSITION_SYNC_INTERVAL', '300', 'number', 'scan', '持仓状态同步间隔(秒),默认5分钟,用于同步币安实际持仓与数据库状态'), -- API配置 ('BINANCE_API_KEY', '', 'string', 'api', '币安API密钥'), ('BINANCE_API_SECRET', '', 'string', 'api', '币安API密钥'), ('USE_TESTNET', 'false', 'boolean', 'api', '是否使用测试网') ON DUPLICATE KEY UPDATE `config_value` = VALUES(`config_value`);