191 lines
6.6 KiB
Python
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() |