trading.ai/test_optimized_notification.py
2025-09-23 16:12:18 +08:00

191 lines
6.6 KiB
Python

#!/usr/bin/env python3
"""
测试优化后的钉钉通知格式(创新高回踩确认版)
"""
import sys
from pathlib import Path
from datetime import datetime
# 添加项目根目录到路径
current_dir = Path(__file__).parent
sys.path.insert(0, str(current_dir))
from src.utils.notification import NotificationManager
from loguru import logger
def test_optimized_notification():
"""
测试优化后的钉钉通知格式
"""
logger.info("🚀 开始测试优化后的钉钉通知格式...")
# 配置通知管理器(测试模式,不实际发送)
notification_config = {
'dingtalk': {
'enabled': False, # 设置为True并提供真实webhook进行实际测试
'webhook_url': 'https://oapi.dingtalk.com/robot/send?access_token=TEST_TOKEN'
}
}
notification_manager = NotificationManager(notification_config)
# 测试1: 单个策略信号通知
logger.info("\n📊 测试1: 单个策略信号通知")
test_signal_data = {
'stock_code': '000001.SZ',
'stock_name': '平安银行',
'timeframe': 'daily',
'signal_type': '两阳+阴+阳突破(创新高回踩确认)',
'price': 14.50,
'signal_date': '2024-01-11',
'additional_info': {
'pattern_date': '2024-01-04',
'breakout_price': 11.60,
'new_high_price': 14.50,
'new_high_date': '2024-01-10',
'yin_high': 11.20,
'confirmation_date': '2024-01-11',
'confirmation_days': 7,
'pullback_distance': -0.89,
'yang1_entity_ratio': 0.60,
'yang2_entity_ratio': 0.67,
'final_yang_entity_ratio': 0.89,
'breakout_pct': 3.57,
'turnover_ratio': 2.50,
'above_ema20': True
}
}
try:
# 模拟发送单个信号通知
if notification_config['dingtalk']['enabled']:
success = notification_manager.send_strategy_signal(**test_signal_data)
logger.info(f"单个信号通知发送: {'✅成功' if success else '❌失败'}")
else:
logger.info("单个信号通知格式测试完成(未实际发送)")
except Exception as e:
logger.error(f"单个信号通知测试失败: {e}")
# 测试2: 策略汇总通知
logger.info("\n📊 测试2: 策略汇总通知")
test_summary_data = {
'000001.SZ': {
'daily': [
{
'stock_name': '平安银行',
'date': '2024-01-04',
'breakout_price': 11.60,
'new_high_price': 14.50,
'new_high_date': '2024-01-10',
'confirmation_date': '2024-01-11',
'confirmation_days': 7,
'pullback_distance': -0.89,
'yin_high': 11.20,
'turnover_ratio': 2.5,
'breakout_pct': 3.57,
'above_ema20': True,
'new_high_confirmed': True # 标记为新格式
}
]
},
'000002.SZ': {
'daily': [
{
'stock_name': '万科A',
'date': '2024-01-05',
'breakout_price': 9.80,
'new_high_price': 12.30,
'new_high_date': '2024-01-09',
'confirmation_date': '2024-01-12',
'confirmation_days': 7,
'pullback_distance': -1.2,
'yin_high': 9.60,
'turnover_ratio': 3.2,
'breakout_pct': 2.08,
'above_ema20': True,
'new_high_confirmed': True # 标记为新格式
}
]
}
}
scan_stats = {
'total_scanned': 100,
'data_source': '双数据源合并'
}
try:
# 模拟发送汇总通知
if notification_config['dingtalk']['enabled']:
success = notification_manager.send_strategy_summary(test_summary_data, scan_stats)
logger.info(f"汇总通知发送: {'✅成功' if success else '❌失败'}")
else:
logger.info("汇总通知格式测试完成(未实际发送)")
except Exception as e:
logger.error(f"汇总通知测试失败: {e}")
# 测试3: 回踩提醒通知
logger.info("\n📊 测试3: 回踩提醒通知")
test_pullback_alerts = [
{
'stock_code': '000001.SZ',
'stock_name': '平安银行',
'signal_date': '2024-01-11',
'current_date': '2024-01-18',
'timeframe': 'daily',
'yin_high': 11.20,
'breakout_price': 11.60,
'current_price': 11.15,
'current_low': 11.10,
'pullback_pct': -4.5,
'distance_to_yin_high': -0.45,
'days_since_signal': 7,
'alert_type': 'pullback_to_yin_high'
}
]
try:
# 模拟发送回踩提醒
if notification_config['dingtalk']['enabled']:
success = notification_manager.send_pullback_alerts(test_pullback_alerts)
logger.info(f"回踩提醒发送: {'✅成功' if success else '❌失败'}")
else:
logger.info("回踩提醒格式测试完成(未实际发送)")
except Exception as e:
logger.error(f"回踩提醒测试失败: {e}")
# 显示消息格式预览
print("\n" + "="*80)
print("📱 优化后的钉钉消息格式预览")
print("="*80)
print("\n🎯 单个信号通知示例:")
print("标题: 🎯 两阳+阴+阳突破(创新高回踩确认)信号确认")
print("内容包含: 股票信息、创新高回踩确认详情、技术指标、操作建议等")
print("\n📊 汇总通知示例:")
print("标题: 🎯 K线形态策略信号汇总")
print("内容包含: 扫描统计、确认信号详情(模式日期+确认日期+创新高价等)")
print("\n⚠️ 回踩提醒示例:")
print("标题: ⚠️ 已确认信号二次回踩提醒")
print("内容包含: 已确认信号的二次回踩情况、支撑分析建议等")
print("\n✅ 钉钉消息优化完成!")
print("主要改进:")
print("- 突出创新高回踩确认逻辑")
print("- 详细展示时间线(模式日期→创新高日期→确认日期)")
print("- 增加操作建议和风险提示")
print("- 区分新旧格式信号,向下兼容")
def main():
"""主函数"""
logger.info("🚀 开始钉钉通知优化测试...")
test_optimized_notification()
if __name__ == "__main__":
main()