22日1515-Mex价格趋势买卖价格区分和无成交日期支持.md 5.9 KB

Mex价格趋势买卖价格区分和无成交日期支持

时间: 2025年06月22日 15:15
状态: ✅ 已完成
类型: 功能改进

📋 任务概述

根据用户需求,改进Mex模块的价格趋势系统,实现以下功能:

  1. 价格区分:区分买入价格和卖出价格
  2. 无成交日期处理:没有成交时使用前一日数据或价格配置数据
  3. 趋势连续性:确保价格趋势图表不会因无成交而断档

🎯 需求分析

原始问题

  • 昨天没有任何成交,无法形成价格趋势
  • 价格趋势只有总体价格,无法区分买入和卖出价格
  • 价格趋势图表会因为无成交日期而出现断档

解决方案

  • 买卖价格区分:分别计算买入和卖出交易的价格统计
  • 数据回退机制:无成交时使用前一日数据,无历史数据时使用价格配置
  • 连续性保证:确保每日都能生成趋势记录

🔧 技术实现

1. 数据库结构扩展

添加10个新字段支持买入卖出价格统计:

-- 买入价格字段
ALTER TABLE kku_mex_daily_price_trends 
ADD COLUMN buy_open_price decimal(15,5) DEFAULT NULL COMMENT '买入开盘价',
ADD COLUMN buy_close_price decimal(15,5) DEFAULT NULL COMMENT '买入收盘价',
ADD COLUMN buy_high_price decimal(15,5) DEFAULT NULL COMMENT '买入最高价',
ADD COLUMN buy_low_price decimal(15,5) DEFAULT NULL COMMENT '买入最低价',
ADD COLUMN buy_avg_price decimal(15,5) DEFAULT NULL COMMENT '买入平均价';

-- 卖出价格字段
ALTER TABLE kku_mex_daily_price_trends 
ADD COLUMN sell_open_price decimal(15,5) DEFAULT NULL COMMENT '卖出开盘价',
ADD COLUMN sell_close_price decimal(15,5) DEFAULT NULL COMMENT '卖出收盘价',
ADD COLUMN sell_high_price decimal(15,5) DEFAULT NULL COMMENT '卖出最高价',
ADD COLUMN sell_low_price decimal(15,5) DEFAULT NULL COMMENT '卖出最低价',
ADD COLUMN sell_avg_price decimal(15,5) DEFAULT NULL COMMENT '卖出平均价';

2. 模型和DTO更新

MexDailyPriceTrend模型

  • 更新fillable数组包含新字段
  • 更新casts数组支持decimal类型转换

MexDailyPriceTrendDto

  • 添加买入卖出价格属性
  • 更新fromModel方法支持新字段

3. 逻辑层改进

MexDailyPriceTrendLogic核心改进

// 无成交记录时的处理
if ($transactions->isEmpty()) {
    return $this->generateTrendFromPreviousOrConfig($date, $itemId, $currencyType);
}

// 计算买入卖出价格统计
$buyPriceStats = $this->calculateBuyPriceStatistics($transactions);
$sellPriceStats = $this->calculateSellPriceStatistics($transactions);

新增方法

  • generateTrendFromPreviousOrConfig(): 从前一日数据或价格配置生成趋势
  • calculateBuyPriceStatistics(): 计算买入价格统计
  • calculateSellPriceStatistics(): 计算卖出价格统计

4. 回退机制设计

三级回退策略:

  1. 前一日数据:使用前一日收盘价作为当日所有价格
  2. 价格配置数据:使用价格配置的中间价作为参考价格
  3. 返回null:没有任何可用数据时返回null

📊 测试验证

测试场景1:无成交日期(有历史数据)

测试日期: 2025-06-23
结果: 成功生成趋势记录
- 使用前一日收盘价: 0.066
- 所有价格字段: 0.066
- 成交量: 0
- 价格变化: 0

测试场景2:有成交日期(买卖区分)

测试日期: 2025-06-22
结果: 成功区分买卖价格
- 买入开盘价: 0.066
- 买入收盘价: 0.066
- 卖出价格: null(当日无卖出)
- 买入量: 100
- 卖出量: 0

测试场景3:无价格配置商品

测试商品ID: 999
结果: 未能生成趋势记录(符合预期)
- 没有历史数据
- 没有价格配置
- 正确返回null

🎯 功能特点

1. 买卖价格透明化

  • 独立计算买入和卖出的开盘、收盘、最高、最低价
  • 支持买入卖出成交量和成交额统计
  • 为价格趋势图表提供更丰富的数据

2. 数据连续性保证

  • 无成交日期不再返回null
  • 使用合理的价格填充策略
  • 确保价格趋势图表的连续性

3. 智能回退机制

  • 优先使用前一日真实成交数据
  • 回退到价格配置的合理估值
  • 避免无意义的数据生成

4. 业务友好设计

  • 符合传统金融市场的处理方式
  • 保持价格趋势的可读性和连续性
  • 支持多种业务场景的需求

📈 改进效果

数据完整性

  • ✅ 解决了无成交日期无法生成趋势的问题
  • ✅ 提供了买入卖出价格的独立统计
  • ✅ 确保了价格趋势数据的连续性

用户体验

  • ✅ 价格趋势图表不再出现断档
  • ✅ 可以清晰看到买入和卖出价格走势
  • ✅ 数据更加透明和可信

技术架构

  • ✅ 保持了现有API的兼容性
  • ✅ 扩展了数据模型的表达能力
  • ✅ 实现了合理的数据回退策略

🔄 后续工作

  1. 图表控制器开发:基于新的价格数据创建可视化图表
  2. 前端界面适配:支持买入卖出价格的分别显示
  3. 性能优化:考虑大量数据时的查询优化
  4. 监控告警:添加价格异常变动的监控机制

📝 文件变更

数据库

  • kku_mex_daily_price_trends: 添加10个价格字段

模型层

  • app/Module/Mex/Models/MexDailyPriceTrend.php: 更新字段定义
  • app/Module/Mex/Dto/MexDailyPriceTrendDto.php: 添加新属性

逻辑层

  • app/Module/Mex/Logic/MexDailyPriceTrendLogic.php: 核心逻辑改进

文档

  • AiWork/now.md: 更新当前工作状态
  • AiWork/2025年06月/22日1515-Mex价格趋势买卖价格区分和无成交日期支持.md: 本文档

✅ 任务完成确认

  • 数据库结构扩展完成
  • 模型和DTO更新完成
  • 逻辑层改进完成
  • 功能测试验证完成
  • 文档记录完成

总结: 成功实现了Mex价格趋势的买卖价格区分和无成交日期支持,解决了价格趋势断档问题,提供了更完整和连续的价格数据。