auto_trade_sys/backend/database/init.sql
薇薇安 b00bce9650 a
2026-01-15 14:50:04 +08:00

177 lines
8.3 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 自动交易系统数据库初始化脚本
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_MARGIN_USDT', '0.5', 'number', 'position', '最小保证金要求0.5 USDT避免手续费侵蚀收益'),
-- 涨跌幅阈值
('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_DYNAMIC_LEVERAGE', 'true', 'boolean', 'strategy', '是否启用动态杠杆(根据信号强度调整杠杆倍数)'),
('MAX_LEVERAGE', '20', '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`);