-- Gate 策略管理 — Station 数据库表 -- 策略实时状态(apiKeyMd5 唯一,UPSERT) CREATE TABLE IF NOT EXISTS `strategy_status` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键', `api_key_md5` VARCHAR(64) NOT NULL COMMENT 'apiKey MD5', `alias_name` VARCHAR(64) DEFAULT NULL COMMENT '实例别名(Station 端自定义显示名)', `contract` VARCHAR(32) DEFAULT NULL COMMENT '合约名称', `state` VARCHAR(32) DEFAULT NULL COMMENT '策略状态:ACTIVE / STOPPED / WAITING_KLINE', `leverage` VARCHAR(16) DEFAULT NULL COMMENT '杠杆倍数', `grid_rate` VARCHAR(16) DEFAULT NULL COMMENT '网格间距比例', `expected_profit` VARCHAR(32) DEFAULT NULL COMMENT '预期收益(USDT)', `max_loss` VARCHAR(32) DEFAULT NULL COMMENT '最大亏损(USDT)', `base_quantity` VARCHAR(16) DEFAULT NULL COMMENT '基底开仓张数', `quantity` VARCHAR(16) DEFAULT NULL COMMENT '每次下单张数', `max_position_size` INT(11) DEFAULT 0 COMMENT '最大持仓张数(单方向)', `stop_loss_count` INT(11) DEFAULT 0 COMMENT '止损阶梯次数', `take_profit_grid_span` INT(11) DEFAULT 2 COMMENT '止盈网格跨度', `stop_loss_count_mode` VARCHAR(16) DEFAULT NULL COMMENT '止损统计方式:single / dual', `add_position_interval` INT(11) DEFAULT 0 COMMENT '加仓间隔', `add_position_quantity` INT(11) DEFAULT 0 COMMENT '加仓数量', `max_position_per_side` INT(11) DEFAULT 0 COMMENT '单边最大仓位', `add_position_start_threshold` INT(11) DEFAULT 0 COMMENT '加仓启动阈值', `place_excess_take_profit` VARCHAR(16) DEFAULT 'off' COMMENT '止盈挂单模式:off / concentrated / dispersed', `price_drive_enabled` TINYINT(1) DEFAULT 1 COMMENT '价格驱动开关', `dual_stop_loss_enabled` TINYINT(1) DEFAULT 0 COMMENT '双开止损触发开关', `long_stop_loss_price` VARCHAR(32) DEFAULT NULL COMMENT '多头止损触发价', `short_stop_loss_price` VARCHAR(32) DEFAULT NULL COMMENT '空头止损触发价', `tp_trigger_opposite_add_enabled` TINYINT(1) DEFAULT 0 COMMENT '止盈成交触发对向加仓开关', `tp_trigger_opposite_add_quantity` INT(11) DEFAULT 0 COMMENT '对向加仓挂单数量', `base_take_profit_per_grid` VARCHAR(32) DEFAULT NULL COMMENT '单格止盈张数(基础仓位止盈,支持小数)', `base_take_profit_grid_count` INT(11) DEFAULT 0 COMMENT '止盈网格数量(基础仓位止盈)', `current_round` INT(11) DEFAULT 0 COMMENT '当前轮次', `total_rounds` INT(11) DEFAULT 0 COMMENT '总轮数上限', `accumulated_long_loss` INT(11) DEFAULT 0 COMMENT '多头累计止损次数', `accumulated_short_loss` INT(11) DEFAULT 0 COMMENT '空头累计止损次数', `cumulative_pnl` VARCHAR(32) DEFAULT '0' COMMENT '累计已实现盈亏', `unrealized_pnl` VARCHAR(32) DEFAULT '0' COMMENT '未实现盈亏', `principal` VARCHAR(32) DEFAULT NULL COMMENT '初始本金', `create_by` VARCHAR(64) DEFAULT NULL, `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP, `update_by` VARCHAR(64) DEFAULT NULL, `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `version` INT(11) DEFAULT 0, PRIMARY KEY (`id`), UNIQUE KEY `uk_api_key_md5` (`api_key_md5`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='策略实时状态'; -- 策略事件日志(只追加,eventId 唯一去重) CREATE TABLE IF NOT EXISTS `strategy_event_log` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键', `event_id` VARCHAR(64) NOT NULL COMMENT '事件唯一 ID(幂等去重)', `event_type` VARCHAR(64) NOT NULL COMMENT '事件类型:HEARTBEAT / STRATEGY_START / STRATEGY_STOP / ROUND_COMPLETE / STOP_LOSS_TRIGGERED / ENTRY_FILLED / PNL_SNAPSHOT', `api_key_md5` VARCHAR(64) NOT NULL COMMENT 'apiKey MD5', `contract` VARCHAR(32) DEFAULT NULL COMMENT '合约名称', `event_time` BIGINT(20) DEFAULT NULL COMMENT '事件时间戳(ms)', `payload_json` TEXT DEFAULT NULL COMMENT 'JSON payload', `create_by` VARCHAR(64) DEFAULT NULL, `create_time` DATETIME DEFAULT CURRENT_TIMESTAMP, `update_by` VARCHAR(64) DEFAULT NULL, `update_time` DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `version` INT(11) DEFAULT 0, PRIMARY KEY (`id`), UNIQUE KEY `uk_event_id` (`event_id`), KEY `idx_api_key_md5_time` (`api_key_md5`, `event_time`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='策略事件日志'; -- ============================================================ -- 升级脚本:为已存在的 strategy_status 表补齐配置回显字段 -- (新增字段与上方建表语句保持一致;若已执行过可忽略 Duplicate column 报错) -- ============================================================ ALTER TABLE `strategy_status` ADD COLUMN `expected_profit` VARCHAR(32) DEFAULT NULL COMMENT '预期收益(USDT)' AFTER `grid_rate`, ADD COLUMN `max_loss` VARCHAR(32) DEFAULT NULL COMMENT '最大亏损(USDT)' AFTER `grid_rate`, ADD COLUMN `quantity` VARCHAR(16) DEFAULT NULL COMMENT '每次下单张数' AFTER `base_quantity`, ADD COLUMN `max_position_size` INT(11) DEFAULT 0 COMMENT '最大持仓张数(单方向)' AFTER `base_quantity`, ADD COLUMN `stop_loss_count` INT(11) DEFAULT 0 COMMENT '止损阶梯次数' AFTER `base_quantity`, ADD COLUMN `take_profit_grid_span` INT(11) DEFAULT 2 COMMENT '止盈网格跨度' AFTER `base_quantity`, ADD COLUMN `price_drive_enabled` TINYINT(1) DEFAULT 1 COMMENT '价格驱动开关' AFTER `place_excess_take_profit`; -- ============================================================ -- 实例别名(Station 端自定义显示名,2026-08 新增) -- ============================================================ ALTER TABLE `strategy_status` ADD COLUMN `alias_name` VARCHAR(64) DEFAULT NULL COMMENT '实例别名(Station 端自定义显示名)' AFTER `api_key_md5`; -- ============================================================ -- 升级脚本:双开止损触发价参数(2026-09 新增) -- ============================================================ ALTER TABLE `strategy_status` ADD COLUMN `dual_stop_loss_enabled` TINYINT(1) DEFAULT 0 COMMENT '双开止损触发开关' AFTER `price_drive_enabled`, ADD COLUMN `long_stop_loss_price` VARCHAR(32) DEFAULT NULL COMMENT '多头止损触发价' AFTER `dual_stop_loss_enabled`, ADD COLUMN `short_stop_loss_price` VARCHAR(32) DEFAULT NULL COMMENT '空头止损触发价' AFTER `long_stop_loss_price`; -- ============================================================ -- 升级脚本:止盈挂单模式从布尔开关升级为三态字符串(2026-09 新增) -- off=关闭 / concentrated=集中止盈 / dispersed=分散止盈 -- ============================================================ ALTER TABLE `strategy_status` MODIFY COLUMN `place_excess_take_profit` VARCHAR(16) DEFAULT 'off' COMMENT '止盈挂单模式:off / concentrated / dispersed'; -- 旧数据迁移:1(开启)→concentrated,0(关闭)→off UPDATE `strategy_status` SET `place_excess_take_profit` = 'concentrated' WHERE `place_excess_take_profit` = '1'; UPDATE `strategy_status` SET `place_excess_take_profit` = 'off' WHERE `place_excess_take_profit` = '0'; -- ============================================================ -- 升级脚本:止盈成交触发对向加仓(2026-09 新增) -- ============================================================ ALTER TABLE `strategy_status` ADD COLUMN `tp_trigger_opposite_add_enabled` TINYINT(1) DEFAULT 0 COMMENT '止盈成交触发对向加仓开关' AFTER `short_stop_loss_price`, ADD COLUMN `tp_trigger_opposite_add_quantity` INT(11) DEFAULT 0 COMMENT '对向加仓挂单数量' AFTER `tp_trigger_opposite_add_enabled`; -- ============================================================ -- 升级脚本:基础仓位止盈挂单参数(2026-09 新增) -- ============================================================ ALTER TABLE `strategy_status` ADD COLUMN `base_take_profit_per_grid` VARCHAR(32) DEFAULT NULL COMMENT '单格止盈张数(基础仓位止盈,支持小数)' AFTER `tp_trigger_opposite_add_quantity`, ADD COLUMN `base_take_profit_grid_count` INT(11) DEFAULT 0 COMMENT '止盈网格数量(基础仓位止盈)' AFTER `base_take_profit_per_grid`;