增加盘前定时分析提醒
This commit is contained in:
@@ -0,0 +1,436 @@
|
|||||||
|
"""
|
||||||
|
智策定时分析服务
|
||||||
|
支持定时运行板块策略分析并发送邮件通知
|
||||||
|
"""
|
||||||
|
|
||||||
|
import schedule
|
||||||
|
import threading
|
||||||
|
import time
|
||||||
|
from datetime import datetime
|
||||||
|
from sector_strategy_data import SectorStrategyDataFetcher
|
||||||
|
from sector_strategy_engine import SectorStrategyEngine
|
||||||
|
from notification_service import notification_service
|
||||||
|
import json
|
||||||
|
|
||||||
|
|
||||||
|
class SectorStrategyScheduler:
|
||||||
|
"""智策定时分析调度器"""
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.running = False
|
||||||
|
self.thread = None
|
||||||
|
self.schedule_time = "09:00" # 默认上午9点
|
||||||
|
self.enabled = False
|
||||||
|
self.last_run_time = None
|
||||||
|
self.last_result = None
|
||||||
|
print("[智策定时] 调度器初始化完成")
|
||||||
|
|
||||||
|
def start(self, schedule_time="09:00"):
|
||||||
|
"""
|
||||||
|
启动定时任务
|
||||||
|
|
||||||
|
Args:
|
||||||
|
schedule_time: 定时时间,格式 "HH:MM"
|
||||||
|
"""
|
||||||
|
if self.running:
|
||||||
|
print("[智策定时] 调度器已在运行中")
|
||||||
|
return False
|
||||||
|
|
||||||
|
self.schedule_time = schedule_time
|
||||||
|
self.enabled = True
|
||||||
|
self.running = True
|
||||||
|
|
||||||
|
# 清除之前的任务
|
||||||
|
schedule.clear('sector_strategy')
|
||||||
|
|
||||||
|
# 设置定时任务
|
||||||
|
schedule.every().day.at(schedule_time).do(self._run_analysis).tag('sector_strategy')
|
||||||
|
|
||||||
|
# 启动后台线程
|
||||||
|
self.thread = threading.Thread(target=self._schedule_loop, daemon=True)
|
||||||
|
self.thread.start()
|
||||||
|
|
||||||
|
print(f"[智策定时] ✓ 定时任务已启动,每天 {schedule_time} 运行")
|
||||||
|
return True
|
||||||
|
|
||||||
|
def stop(self):
|
||||||
|
"""停止定时任务"""
|
||||||
|
if not self.running:
|
||||||
|
print("[智策定时] 调度器未运行")
|
||||||
|
return False
|
||||||
|
|
||||||
|
self.running = False
|
||||||
|
self.enabled = False
|
||||||
|
schedule.clear('sector_strategy')
|
||||||
|
|
||||||
|
print("[智策定时] ✓ 定时任务已停止")
|
||||||
|
return True
|
||||||
|
|
||||||
|
def _schedule_loop(self):
|
||||||
|
"""定时任务循环"""
|
||||||
|
print("[智策定时] 后台线程已启动")
|
||||||
|
|
||||||
|
while self.running:
|
||||||
|
try:
|
||||||
|
schedule.run_pending()
|
||||||
|
time.sleep(60) # 每分钟检查一次
|
||||||
|
except Exception as e:
|
||||||
|
print(f"[智策定时] ✗ 调度循环出错: {e}")
|
||||||
|
time.sleep(60)
|
||||||
|
|
||||||
|
def _run_analysis(self):
|
||||||
|
"""运行智策分析"""
|
||||||
|
print("\n" + "="*60)
|
||||||
|
print(f"[智策定时] 开始定时分析 - {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
|
||||||
|
print("="*60)
|
||||||
|
|
||||||
|
try:
|
||||||
|
# 1. 获取数据
|
||||||
|
print("[智策定时] [1/3] 获取市场数据...")
|
||||||
|
fetcher = SectorStrategyDataFetcher()
|
||||||
|
data = fetcher.get_all_sector_data()
|
||||||
|
|
||||||
|
if not data.get("success"):
|
||||||
|
print("[智策定时] ✗ 数据获取失败")
|
||||||
|
self._send_error_notification("数据获取失败")
|
||||||
|
return
|
||||||
|
|
||||||
|
print("[智策定时] ✓ 数据获取成功")
|
||||||
|
|
||||||
|
# 2. 运行AI分析
|
||||||
|
print("[智策定时] [2/3] AI智能体分析中...")
|
||||||
|
engine = SectorStrategyEngine(model="deepseek-chat")
|
||||||
|
result = engine.run_comprehensive_analysis(data)
|
||||||
|
|
||||||
|
if not result.get("success"):
|
||||||
|
print("[智策定时] ✗ 分析失败")
|
||||||
|
self._send_error_notification("AI分析失败")
|
||||||
|
return
|
||||||
|
|
||||||
|
print("[智策定时] ✓ 分析完成")
|
||||||
|
|
||||||
|
# 3. 发送邮件通知
|
||||||
|
print("[智策定时] [3/3] 发送邮件通知...")
|
||||||
|
self._send_analysis_notification(result)
|
||||||
|
|
||||||
|
# 保存最后运行结果
|
||||||
|
self.last_run_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
||||||
|
self.last_result = result
|
||||||
|
|
||||||
|
print("="*60)
|
||||||
|
print("[智策定时] ✓ 定时分析完成!")
|
||||||
|
print("="*60 + "\n")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"[智策定时] ✗ 分析过程出错: {e}")
|
||||||
|
import traceback
|
||||||
|
traceback.print_exc()
|
||||||
|
self._send_error_notification(f"分析异常: {str(e)}")
|
||||||
|
|
||||||
|
def _send_analysis_notification(self, result):
|
||||||
|
"""发送分析结果邮件"""
|
||||||
|
try:
|
||||||
|
# 检查邮件配置
|
||||||
|
config = notification_service.config
|
||||||
|
if not config.get('email_enabled') or not all([
|
||||||
|
config.get('smtp_server'),
|
||||||
|
config.get('email_from'),
|
||||||
|
config.get('email_password'),
|
||||||
|
config.get('email_to')
|
||||||
|
]):
|
||||||
|
print("[智策定时] ⚠️ 邮件配置不完整,跳过发送")
|
||||||
|
return
|
||||||
|
|
||||||
|
predictions = result.get("final_predictions", {})
|
||||||
|
timestamp = result.get("timestamp", datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
|
||||||
|
|
||||||
|
# 构建邮件内容
|
||||||
|
subject = f"智策板块分析报告 - {timestamp}"
|
||||||
|
body = self._format_email_body(predictions, timestamp)
|
||||||
|
|
||||||
|
# 直接发送邮件
|
||||||
|
success = self._send_email_direct(subject, body)
|
||||||
|
|
||||||
|
if success:
|
||||||
|
print("[智策定时] ✓ 邮件发送成功")
|
||||||
|
else:
|
||||||
|
print("[智策定时] ✗ 邮件发送失败")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"[智策定时] ✗ 邮件发送异常: {e}")
|
||||||
|
import traceback
|
||||||
|
traceback.print_exc()
|
||||||
|
|
||||||
|
def _send_error_notification(self, error_msg):
|
||||||
|
"""发送错误通知邮件"""
|
||||||
|
try:
|
||||||
|
subject = f"智策定时分析失败 - {datetime.now().strftime('%Y-%m-%d %H:%M')}"
|
||||||
|
body = f"""
|
||||||
|
智策定时分析任务失败
|
||||||
|
|
||||||
|
时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}
|
||||||
|
错误: {error_msg}
|
||||||
|
|
||||||
|
请检查系统日志获取详细信息。
|
||||||
|
"""
|
||||||
|
self._send_email_direct(subject, body)
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
def _send_email_direct(self, subject, body):
|
||||||
|
"""直接发送邮件(参考notification_service的实现)"""
|
||||||
|
try:
|
||||||
|
import smtplib
|
||||||
|
from email.mime.text import MIMEText
|
||||||
|
from email.mime.multipart import MIMEMultipart
|
||||||
|
|
||||||
|
config = notification_service.config
|
||||||
|
|
||||||
|
# 创建邮件
|
||||||
|
msg = MIMEMultipart()
|
||||||
|
msg['From'] = config['email_from']
|
||||||
|
msg['To'] = config['email_to']
|
||||||
|
msg['Subject'] = subject
|
||||||
|
|
||||||
|
# 添加正文(纯文本)
|
||||||
|
msg.attach(MIMEText(body, 'plain', 'utf-8'))
|
||||||
|
|
||||||
|
print(f"[智策定时] 📧 正在发送邮件...")
|
||||||
|
print(f"[智策定时] - 收件人: {config['email_to']}")
|
||||||
|
print(f"[智策定时] - 主题: {subject}")
|
||||||
|
|
||||||
|
# 根据端口选择连接方式
|
||||||
|
if config['smtp_port'] == 465:
|
||||||
|
print(f"[智策定时] - 使用 SMTP_SSL 连接 {config['smtp_server']}:{config['smtp_port']}")
|
||||||
|
server = smtplib.SMTP_SSL(config['smtp_server'], config['smtp_port'], timeout=15)
|
||||||
|
else:
|
||||||
|
print(f"[智策定时] - 使用 SMTP+TLS 连接 {config['smtp_server']}:{config['smtp_port']}")
|
||||||
|
server = smtplib.SMTP(config['smtp_server'], config['smtp_port'], timeout=15)
|
||||||
|
server.starttls()
|
||||||
|
|
||||||
|
print(f"[智策定时] - 正在登录...")
|
||||||
|
server.login(config['email_from'], config['email_password'])
|
||||||
|
print(f"[智策定时] - 正在发送...")
|
||||||
|
server.send_message(msg)
|
||||||
|
server.quit()
|
||||||
|
print(f"[智策定时] ✓ 邮件发送成功")
|
||||||
|
return True
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"[智策定时] ✗ 邮件发送失败: {e}")
|
||||||
|
import traceback
|
||||||
|
traceback.print_exc()
|
||||||
|
return False
|
||||||
|
|
||||||
|
def _format_email_body(self, predictions, timestamp):
|
||||||
|
"""格式化邮件正文"""
|
||||||
|
|
||||||
|
if not predictions or predictions.get("prediction_text"):
|
||||||
|
# 文本格式
|
||||||
|
return f"""
|
||||||
|
智策板块策略分析报告
|
||||||
|
分析时间: {timestamp}
|
||||||
|
|
||||||
|
{predictions.get('prediction_text', '暂无预测')}
|
||||||
|
|
||||||
|
---
|
||||||
|
本邮件由智策系统自动发送
|
||||||
|
"""
|
||||||
|
|
||||||
|
# JSON格式预测
|
||||||
|
body_parts = []
|
||||||
|
|
||||||
|
# 标题
|
||||||
|
body_parts.append("="*60)
|
||||||
|
body_parts.append("智策板块策略分析报告")
|
||||||
|
body_parts.append("="*60)
|
||||||
|
body_parts.append(f"分析时间: {timestamp}")
|
||||||
|
body_parts.append(f"AI模型: DeepSeek Multi-Agent System")
|
||||||
|
body_parts.append("")
|
||||||
|
|
||||||
|
# 1. 板块多空
|
||||||
|
long_short = predictions.get("long_short", {})
|
||||||
|
|
||||||
|
if long_short:
|
||||||
|
body_parts.append("="*60)
|
||||||
|
body_parts.append("一、板块多空预测")
|
||||||
|
body_parts.append("="*60)
|
||||||
|
body_parts.append("")
|
||||||
|
|
||||||
|
# 看多板块
|
||||||
|
bullish = long_short.get("bullish", [])
|
||||||
|
if bullish:
|
||||||
|
body_parts.append("【看多板块】")
|
||||||
|
body_parts.append("")
|
||||||
|
for idx, item in enumerate(bullish, 1):
|
||||||
|
body_parts.append(f"{idx}. {item.get('sector', 'N/A')} (信心度: {item.get('confidence', 0)}/10)")
|
||||||
|
body_parts.append(f" 理由: {item.get('reason', 'N/A')}")
|
||||||
|
body_parts.append(f" 风险: {item.get('risk', 'N/A')}")
|
||||||
|
body_parts.append("")
|
||||||
|
|
||||||
|
# 看空板块
|
||||||
|
bearish = long_short.get("bearish", [])
|
||||||
|
if bearish:
|
||||||
|
body_parts.append("【看空板块】")
|
||||||
|
body_parts.append("")
|
||||||
|
for idx, item in enumerate(bearish, 1):
|
||||||
|
body_parts.append(f"{idx}. {item.get('sector', 'N/A')} (信心度: {item.get('confidence', 0)}/10)")
|
||||||
|
body_parts.append(f" 理由: {item.get('reason', 'N/A')}")
|
||||||
|
body_parts.append(f" 风险: {item.get('risk', 'N/A')}")
|
||||||
|
body_parts.append("")
|
||||||
|
|
||||||
|
# 2. 板块轮动
|
||||||
|
rotation = predictions.get("rotation", {})
|
||||||
|
|
||||||
|
if rotation:
|
||||||
|
body_parts.append("="*60)
|
||||||
|
body_parts.append("二、板块轮动预测")
|
||||||
|
body_parts.append("="*60)
|
||||||
|
body_parts.append("")
|
||||||
|
|
||||||
|
# 当前强势
|
||||||
|
current_strong = rotation.get("current_strong", [])
|
||||||
|
if current_strong:
|
||||||
|
body_parts.append("【当前强势板块】")
|
||||||
|
body_parts.append("")
|
||||||
|
for item in current_strong:
|
||||||
|
body_parts.append(f"• {item.get('sector', 'N/A')}")
|
||||||
|
body_parts.append(f" 轮动逻辑: {item.get('logic', 'N/A')[:100]}...")
|
||||||
|
body_parts.append(f" 时间窗口: {item.get('time_window', 'N/A')}")
|
||||||
|
body_parts.append(f" 操作建议: {item.get('advice', 'N/A')}")
|
||||||
|
body_parts.append("")
|
||||||
|
|
||||||
|
# 潜力接力
|
||||||
|
potential = rotation.get("potential", [])
|
||||||
|
if potential:
|
||||||
|
body_parts.append("【潜力接力板块】⭐ 重点关注")
|
||||||
|
body_parts.append("")
|
||||||
|
for item in potential:
|
||||||
|
body_parts.append(f"• {item.get('sector', 'N/A')}")
|
||||||
|
body_parts.append(f" 轮动逻辑: {item.get('logic', 'N/A')[:100]}...")
|
||||||
|
body_parts.append(f" 时间窗口: {item.get('time_window', 'N/A')}")
|
||||||
|
body_parts.append(f" 操作建议: {item.get('advice', 'N/A')}")
|
||||||
|
body_parts.append("")
|
||||||
|
|
||||||
|
# 3. 板块热度
|
||||||
|
heat = predictions.get("heat", {})
|
||||||
|
|
||||||
|
if heat:
|
||||||
|
body_parts.append("="*60)
|
||||||
|
body_parts.append("三、板块热度排行")
|
||||||
|
body_parts.append("="*60)
|
||||||
|
body_parts.append("")
|
||||||
|
|
||||||
|
# 最热板块
|
||||||
|
hottest = heat.get("hottest", [])
|
||||||
|
if hottest:
|
||||||
|
body_parts.append("【最热板块 TOP5】")
|
||||||
|
body_parts.append("")
|
||||||
|
for idx, item in enumerate(hottest, 1):
|
||||||
|
body_parts.append(f"{idx}. {item.get('sector', 'N/A')} - 热度: {item.get('score', 0)}分 ({item.get('trend', 'N/A')})")
|
||||||
|
body_parts.append("")
|
||||||
|
|
||||||
|
# 升温板块
|
||||||
|
heating = heat.get("heating", [])
|
||||||
|
if heating:
|
||||||
|
body_parts.append("【升温板块】")
|
||||||
|
body_parts.append("")
|
||||||
|
for idx, item in enumerate(heating, 1):
|
||||||
|
body_parts.append(f"{idx}. {item.get('sector', 'N/A')} - 热度: {item.get('score', 0)}分 ↗")
|
||||||
|
body_parts.append("")
|
||||||
|
|
||||||
|
# 4. 策略总结
|
||||||
|
summary = predictions.get("summary", {})
|
||||||
|
|
||||||
|
if summary:
|
||||||
|
body_parts.append("="*60)
|
||||||
|
body_parts.append("四、策略总结")
|
||||||
|
body_parts.append("="*60)
|
||||||
|
body_parts.append("")
|
||||||
|
|
||||||
|
if summary.get('market_view'):
|
||||||
|
body_parts.append("【市场观点】")
|
||||||
|
body_parts.append(summary['market_view'])
|
||||||
|
body_parts.append("")
|
||||||
|
|
||||||
|
if summary.get('key_opportunity'):
|
||||||
|
body_parts.append("【核心机会】⭐")
|
||||||
|
body_parts.append(summary['key_opportunity'])
|
||||||
|
body_parts.append("")
|
||||||
|
|
||||||
|
if summary.get('major_risk'):
|
||||||
|
body_parts.append("【主要风险】⚠️")
|
||||||
|
body_parts.append(summary['major_risk'])
|
||||||
|
body_parts.append("")
|
||||||
|
|
||||||
|
if summary.get('strategy'):
|
||||||
|
body_parts.append("【整体策略】")
|
||||||
|
body_parts.append(summary['strategy'])
|
||||||
|
body_parts.append("")
|
||||||
|
|
||||||
|
# 结束语
|
||||||
|
body_parts.append("="*60)
|
||||||
|
body_parts.append("本报告由智策AI系统自动生成并发送")
|
||||||
|
body_parts.append("仅供参考,不构成投资建议")
|
||||||
|
body_parts.append("="*60)
|
||||||
|
|
||||||
|
return "\n".join(body_parts)
|
||||||
|
|
||||||
|
def manual_run(self):
|
||||||
|
"""手动触发一次分析"""
|
||||||
|
print("[智策定时] 手动触发分析...")
|
||||||
|
self._run_analysis()
|
||||||
|
|
||||||
|
def get_status(self):
|
||||||
|
"""获取调度器状态"""
|
||||||
|
return {
|
||||||
|
"running": self.running,
|
||||||
|
"enabled": self.enabled,
|
||||||
|
"schedule_time": self.schedule_time,
|
||||||
|
"last_run_time": self.last_run_time,
|
||||||
|
"next_run_time": self._get_next_run_time()
|
||||||
|
}
|
||||||
|
|
||||||
|
def _get_next_run_time(self):
|
||||||
|
"""获取下次运行时间"""
|
||||||
|
if not self.running:
|
||||||
|
return None
|
||||||
|
|
||||||
|
try:
|
||||||
|
jobs = schedule.get_jobs('sector_strategy')
|
||||||
|
if jobs:
|
||||||
|
next_run = jobs[0].next_run
|
||||||
|
if next_run:
|
||||||
|
return next_run.strftime('%Y-%m-%d %H:%M:%S')
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
# 创建全局实例
|
||||||
|
sector_strategy_scheduler = SectorStrategyScheduler()
|
||||||
|
|
||||||
|
|
||||||
|
# 测试函数
|
||||||
|
if __name__ == "__main__":
|
||||||
|
print("智策定时分析服务测试")
|
||||||
|
print("="*60)
|
||||||
|
|
||||||
|
# 启动定时任务(测试用,设置为当前时间后1分钟)
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
test_time = (datetime.now() + timedelta(minutes=1)).strftime("%H:%M")
|
||||||
|
|
||||||
|
print(f"设置测试时间: {test_time}")
|
||||||
|
sector_strategy_scheduler.start(test_time)
|
||||||
|
|
||||||
|
# 保持运行
|
||||||
|
try:
|
||||||
|
while True:
|
||||||
|
status = sector_strategy_scheduler.get_status()
|
||||||
|
print(f"\n状态: {status}")
|
||||||
|
time.sleep(30)
|
||||||
|
except KeyboardInterrupt:
|
||||||
|
print("\n停止测试...")
|
||||||
|
sector_strategy_scheduler.stop()
|
||||||
|
|
||||||
+135
-1
@@ -7,13 +7,14 @@ import streamlit as st
|
|||||||
import plotly.graph_objects as go
|
import plotly.graph_objects as go
|
||||||
import plotly.express as px
|
import plotly.express as px
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
from datetime import datetime
|
from datetime import datetime, time as dt_time
|
||||||
import time
|
import time
|
||||||
import base64
|
import base64
|
||||||
|
|
||||||
from sector_strategy_data import SectorStrategyDataFetcher
|
from sector_strategy_data import SectorStrategyDataFetcher
|
||||||
from sector_strategy_engine import SectorStrategyEngine
|
from sector_strategy_engine import SectorStrategyEngine
|
||||||
from sector_strategy_pdf import SectorStrategyPDFGenerator
|
from sector_strategy_pdf import SectorStrategyPDFGenerator
|
||||||
|
from sector_strategy_scheduler import sector_strategy_scheduler
|
||||||
|
|
||||||
|
|
||||||
def display_sector_strategy():
|
def display_sector_strategy():
|
||||||
@@ -28,6 +29,9 @@ def display_sector_strategy():
|
|||||||
|
|
||||||
st.markdown("---")
|
st.markdown("---")
|
||||||
|
|
||||||
|
# 定时任务设置区域
|
||||||
|
display_scheduler_settings()
|
||||||
|
|
||||||
# 功能说明
|
# 功能说明
|
||||||
with st.expander("💡 智策系统介绍", expanded=False):
|
with st.expander("💡 智策系统介绍", expanded=False):
|
||||||
st.markdown("""
|
st.markdown("""
|
||||||
@@ -604,6 +608,136 @@ def display_pdf_export_section(result):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def display_scheduler_settings():
|
||||||
|
"""显示定时任务设置"""
|
||||||
|
with st.expander("⏰ 定时分析设置", expanded=False):
|
||||||
|
st.markdown("""
|
||||||
|
**定时分析功能**
|
||||||
|
|
||||||
|
开启后,系统将在每天指定时间自动运行智策分析,并将核心结果通过邮件发送。
|
||||||
|
|
||||||
|
**前提条件:**
|
||||||
|
- 需要在 `.env` 文件中配置邮件设置
|
||||||
|
- 配置项:`EMAIL_ENABLED`, `SMTP_SERVER`, `EMAIL_FROM`, `EMAIL_PASSWORD`, `EMAIL_TO`
|
||||||
|
""")
|
||||||
|
|
||||||
|
# 获取当前状态
|
||||||
|
status = sector_strategy_scheduler.get_status()
|
||||||
|
|
||||||
|
col1, col2 = st.columns([1, 1])
|
||||||
|
|
||||||
|
with col1:
|
||||||
|
# 显示当前状态
|
||||||
|
if status['running']:
|
||||||
|
st.success(f"✅ 定时任务运行中")
|
||||||
|
st.info(f"⏰ 定时时间: {status['schedule_time']}")
|
||||||
|
if status['next_run_time']:
|
||||||
|
st.info(f"📅 下次运行: {status['next_run_time']}")
|
||||||
|
if status['last_run_time']:
|
||||||
|
st.info(f"📊 上次运行: {status['last_run_time']}")
|
||||||
|
else:
|
||||||
|
st.warning("⏸️ 定时任务未运行")
|
||||||
|
|
||||||
|
with col2:
|
||||||
|
# 时间设置
|
||||||
|
schedule_time = st.time_input(
|
||||||
|
"设置定时时间",
|
||||||
|
value=dt_time(9, 0), # 默认9:00
|
||||||
|
help="系统将在每天此时间自动运行分析"
|
||||||
|
)
|
||||||
|
|
||||||
|
schedule_time_str = schedule_time.strftime("%H:%M")
|
||||||
|
|
||||||
|
# 控制按钮
|
||||||
|
col_a, col_b, col_c = st.columns(3)
|
||||||
|
|
||||||
|
with col_a:
|
||||||
|
if not status['running']:
|
||||||
|
if st.button("▶️ 启动", use_container_width=True, type="primary"):
|
||||||
|
if sector_strategy_scheduler.start(schedule_time_str):
|
||||||
|
st.success(f"✅ 定时任务已启动!每天 {schedule_time_str} 运行")
|
||||||
|
time.sleep(1)
|
||||||
|
st.rerun()
|
||||||
|
else:
|
||||||
|
st.error("❌ 启动失败")
|
||||||
|
else:
|
||||||
|
if st.button("⏹️ 停止", use_container_width=True):
|
||||||
|
if sector_strategy_scheduler.stop():
|
||||||
|
st.success("✅ 定时任务已停止")
|
||||||
|
time.sleep(1)
|
||||||
|
st.rerun()
|
||||||
|
else:
|
||||||
|
st.error("❌ 停止失败")
|
||||||
|
|
||||||
|
with col_b:
|
||||||
|
if st.button("🔄 立即运行", use_container_width=True):
|
||||||
|
with st.spinner("正在运行分析..."):
|
||||||
|
sector_strategy_scheduler.manual_run()
|
||||||
|
st.success("✅ 手动分析完成!")
|
||||||
|
|
||||||
|
with col_c:
|
||||||
|
if st.button("📧 测试邮件", use_container_width=True):
|
||||||
|
test_email_notification()
|
||||||
|
|
||||||
|
# 邮件配置检查
|
||||||
|
st.markdown("---")
|
||||||
|
check_email_config()
|
||||||
|
|
||||||
|
|
||||||
|
def check_email_config():
|
||||||
|
"""检查邮件配置"""
|
||||||
|
st.markdown("**📧 邮件配置检查**")
|
||||||
|
|
||||||
|
import os
|
||||||
|
from dotenv import load_dotenv
|
||||||
|
load_dotenv()
|
||||||
|
|
||||||
|
email_enabled = os.getenv('EMAIL_ENABLED', 'false').lower() == 'true'
|
||||||
|
smtp_server = os.getenv('SMTP_SERVER', '')
|
||||||
|
email_from = os.getenv('EMAIL_FROM', '')
|
||||||
|
email_password = os.getenv('EMAIL_PASSWORD', '')
|
||||||
|
email_to = os.getenv('EMAIL_TO', '')
|
||||||
|
|
||||||
|
col1, col2 = st.columns(2)
|
||||||
|
|
||||||
|
with col1:
|
||||||
|
st.write("**配置项**")
|
||||||
|
st.write(f"✅ 邮件功能: {'已启用' if email_enabled else '❌ 未启用'}")
|
||||||
|
st.write(f"{'✅' if smtp_server else '❌'} SMTP服务器: {smtp_server or '未配置'}")
|
||||||
|
st.write(f"{'✅' if email_from else '❌'} 发件邮箱: {email_from or '未配置'}")
|
||||||
|
|
||||||
|
with col2:
|
||||||
|
st.write("**状态**")
|
||||||
|
st.write(f"{'✅' if email_password else '❌'} 邮箱密码: {'已配置' if email_password else '未配置'}")
|
||||||
|
st.write(f"{'✅' if email_to else '❌'} 收件邮箱: {email_to or '未配置'}")
|
||||||
|
|
||||||
|
config_complete = all([email_enabled, smtp_server, email_from, email_password, email_to])
|
||||||
|
if config_complete:
|
||||||
|
st.success("✅ 邮件配置完整")
|
||||||
|
else:
|
||||||
|
st.warning("⚠️ 邮件配置不完整,请在 .env 文件中配置")
|
||||||
|
|
||||||
|
|
||||||
|
def test_email_notification():
|
||||||
|
"""测试邮件通知"""
|
||||||
|
try:
|
||||||
|
from notification_service import notification_service
|
||||||
|
|
||||||
|
# 使用notification_service的send_test_email方法
|
||||||
|
success, message = notification_service.send_test_email()
|
||||||
|
|
||||||
|
if success:
|
||||||
|
st.success(f"✅ {message}")
|
||||||
|
st.balloons()
|
||||||
|
else:
|
||||||
|
st.error(f"❌ {message}")
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
st.error(f"❌ 发送测试邮件时出错: {str(e)}")
|
||||||
|
import traceback
|
||||||
|
st.code(traceback.format_exc())
|
||||||
|
|
||||||
|
|
||||||
# 主入口
|
# 主入口
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
display_sector_strategy()
|
display_sector_strategy()
|
||||||
|
|||||||
@@ -0,0 +1,291 @@
|
|||||||
|
# 智策功能总览
|
||||||
|
|
||||||
|
## 🎯 智策系统简介
|
||||||
|
|
||||||
|
**智策**是基于多AI智能体的板块策略分析系统,通过四位专业分析师的协同工作,为您提供全方位的板块投资决策支持。
|
||||||
|
|
||||||
|
## ✨ 核心功能
|
||||||
|
|
||||||
|
### 1. 📊 板块策略分析
|
||||||
|
|
||||||
|
#### 功能描述
|
||||||
|
运用四位AI智能体协同分析,生成全面的板块投资策略。
|
||||||
|
|
||||||
|
#### 分析维度
|
||||||
|
- **宏观策略师** - 分析宏观经济、政策、新闻
|
||||||
|
- **板块诊断师** - 分析板块走势、估值、轮动
|
||||||
|
- **资金流向分析师** - 分析主力资金、北向资金
|
||||||
|
- **市场情绪解码员** - 量化市场情绪、识别热点
|
||||||
|
|
||||||
|
#### 输出内容
|
||||||
|
- 板块多空预测(看多/看空/中性)
|
||||||
|
- 板块轮动预测(强势/潜力/衰退)
|
||||||
|
- 板块热度排行(最热/升温/降温)
|
||||||
|
- 策略总结(市场观点、机会、风险)
|
||||||
|
|
||||||
|
#### 使用场景
|
||||||
|
- 盘前策略制定
|
||||||
|
- 板块轮动捕捉
|
||||||
|
- 投资组合调整
|
||||||
|
- 风险规避决策
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2. 📄 PDF报告导出
|
||||||
|
|
||||||
|
#### 功能描述
|
||||||
|
将完整的分析报告导出为PDF格式,方便保存、打印和分享。
|
||||||
|
|
||||||
|
#### 报告内容
|
||||||
|
- 封面页(标题、时间、模型信息)
|
||||||
|
- 市场概况(市场环境、分析师团队)
|
||||||
|
- 核心预测(多空、轮动、热度详情)
|
||||||
|
- AI智能体分析摘要(四位分析师报告)
|
||||||
|
- 综合研判(团队讨论结果)
|
||||||
|
|
||||||
|
#### 特点
|
||||||
|
- 专业排版设计
|
||||||
|
- 支持中文字体
|
||||||
|
- 200-500KB小文件
|
||||||
|
- 3-5秒快速生成
|
||||||
|
|
||||||
|
#### 使用场景
|
||||||
|
- 投资决策存档
|
||||||
|
- 团队讨论材料
|
||||||
|
- 定期复盘对比
|
||||||
|
- 经验积累总结
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 3. ⏰ 定时分析(新功能)
|
||||||
|
|
||||||
|
#### 功能描述
|
||||||
|
设置每天固定时间自动运行分析,并通过邮件发送结果。
|
||||||
|
|
||||||
|
#### 主要特性
|
||||||
|
- **自动运行** - 每天定时自动分析
|
||||||
|
- **邮件推送** - 核心结果发送到邮箱
|
||||||
|
- **灵活设置** - 自定义运行时间
|
||||||
|
- **手动触发** - 支持立即运行一次
|
||||||
|
- **状态监控** - 实时查看任务状态
|
||||||
|
|
||||||
|
#### 邮件内容
|
||||||
|
```
|
||||||
|
标题:智策板块分析报告 - 时间
|
||||||
|
|
||||||
|
内容:
|
||||||
|
- 板块多空预测(看多/看空板块列表)
|
||||||
|
- 板块轮动预测(强势/潜力/衰退板块)
|
||||||
|
- 板块热度排行(TOP5热门板块)
|
||||||
|
- 策略总结(观点、机会、风险、策略)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 配置要求
|
||||||
|
需在 `.env` 文件中配置:
|
||||||
|
- `EMAIL_ENABLED=true`
|
||||||
|
- `SMTP_SERVER=smtp服务器`
|
||||||
|
- `EMAIL_FROM=发件邮箱`
|
||||||
|
- `EMAIL_PASSWORD=邮箱授权码`
|
||||||
|
- `EMAIL_TO=收件邮箱`
|
||||||
|
|
||||||
|
#### 使用场景
|
||||||
|
- **盘前策略** - 8:00 定时,早晨查收邮件
|
||||||
|
- **盘后复盘** - 16:00 定时,总结当日行情
|
||||||
|
- **晚间研究** - 21:00 定时,深度研读分析
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### 4. 📈 数据可视化
|
||||||
|
|
||||||
|
#### 功能描述
|
||||||
|
通过图表直观展示板块分析结果。
|
||||||
|
|
||||||
|
#### 可视化内容
|
||||||
|
- **板块多空信心度对比** - 条形图展示看多/看空板块
|
||||||
|
- **板块热度分布图** - 散点图展示热度和趋势
|
||||||
|
|
||||||
|
#### 特点
|
||||||
|
- 交互式图表(Plotly)
|
||||||
|
- 颜色分类清晰
|
||||||
|
- 支持缩放、悬停查看
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📊 数据来源
|
||||||
|
|
||||||
|
### AKShare开源库
|
||||||
|
所有数据来自AKShare(免费开源),包括:
|
||||||
|
|
||||||
|
1. **行业板块数据**
|
||||||
|
- 板块实时行情
|
||||||
|
- 涨跌幅排行
|
||||||
|
- 领涨股信息
|
||||||
|
- 涨跌家数统计
|
||||||
|
|
||||||
|
2. **概念板块数据**
|
||||||
|
- 概念板块行情
|
||||||
|
- 热门概念排行
|
||||||
|
|
||||||
|
3. **资金流向数据**
|
||||||
|
- 行业资金流向(今日、多日)
|
||||||
|
- 主力资金净流入
|
||||||
|
- 超大单、大单、中单、小单
|
||||||
|
|
||||||
|
4. **市场统计数据**
|
||||||
|
- 涨跌家数
|
||||||
|
- 涨停跌停数量
|
||||||
|
- 大盘指数表现
|
||||||
|
|
||||||
|
5. **北向资金数据**
|
||||||
|
- 沪股通、深股通资金流向
|
||||||
|
- 历史趋势(10日)
|
||||||
|
|
||||||
|
6. **财经新闻数据**
|
||||||
|
- 东方财富财经快讯(150条)
|
||||||
|
- 重要新闻事件
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🤖 AI技术架构
|
||||||
|
|
||||||
|
### DeepSeek模型
|
||||||
|
- **deepseek-chat** - 标准模型,速度快
|
||||||
|
- **deepseek-reasoner** - 推理增强,分析更深
|
||||||
|
|
||||||
|
### 多智能体协同
|
||||||
|
```
|
||||||
|
数据输入
|
||||||
|
↓
|
||||||
|
四个智能体并行分析
|
||||||
|
├─ 宏观策略师
|
||||||
|
├─ 板块诊断师
|
||||||
|
├─ 资金分析师
|
||||||
|
└─ 情绪解码员
|
||||||
|
↓
|
||||||
|
综合研判引擎
|
||||||
|
↓
|
||||||
|
预测生成
|
||||||
|
├─ 板块多空
|
||||||
|
├─ 板块轮动
|
||||||
|
└─ 板块热度
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 💡 使用建议
|
||||||
|
|
||||||
|
### 最佳使用时间
|
||||||
|
- **盘前** (8:00-9:00) - 获取策略,制定计划
|
||||||
|
- **盘中** (10:00-14:30) - 实时调整,捕捉机会
|
||||||
|
- **盘后** (15:30-17:00) - 总结复盘,调整策略
|
||||||
|
- **晚间** (19:00-22:00) - 深度研究,准备次日
|
||||||
|
|
||||||
|
### 功能组合使用
|
||||||
|
1. **每日定时分析** → 获取宏观趋势
|
||||||
|
2. **手动深度分析** → 重点板块挖掘
|
||||||
|
3. **PDF导出存档** → 建立决策档案
|
||||||
|
4. **定期对比复盘** → 总结经验教训
|
||||||
|
|
||||||
|
### 投资决策流程
|
||||||
|
```
|
||||||
|
1. 查收定时分析邮件
|
||||||
|
↓
|
||||||
|
2. 重点关注看多板块和潜力接力板块
|
||||||
|
↓
|
||||||
|
3. 结合市场实际情况验证
|
||||||
|
↓
|
||||||
|
4. 手动触发深度分析(可选)
|
||||||
|
↓
|
||||||
|
5. 做出投资决策
|
||||||
|
↓
|
||||||
|
6. 导出PDF存档
|
||||||
|
↓
|
||||||
|
7. 定期回顾对比
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📚 相关文档
|
||||||
|
|
||||||
|
### 快速入门
|
||||||
|
- [智策板块快速开始.md](智策板块快速开始.md) - 5分钟上手
|
||||||
|
- [智策板块使用指南.md](智策板块使用指南.md) - 完整教程
|
||||||
|
|
||||||
|
### 功能详解
|
||||||
|
- [智策定时分析使用指南.md](智策定时分析使用指南.md) - 定时功能
|
||||||
|
- [智策PDF导出说明.md](智策PDF导出说明.md) - PDF导出
|
||||||
|
- [智策系统架构说明.md](智策系统架构说明.md) - 技术架构
|
||||||
|
|
||||||
|
### 配置说明
|
||||||
|
- [.env.example](.env.example) - 环境配置示例
|
||||||
|
- [环境配置功能说明.md](环境配置功能说明.md) - 配置教程
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎓 功能对比
|
||||||
|
|
||||||
|
| 功能 | 手动分析 | 定时分析 | PDF导出 |
|
||||||
|
|------|---------|---------|---------|
|
||||||
|
| **触发方式** | 手动点击 | 自动定时 | 手动生成 |
|
||||||
|
| **分析深度** | 完整 | 完整 | - |
|
||||||
|
| **结果展示** | 网页界面 | 邮件推送 | PDF文件 |
|
||||||
|
| **适用场景** | 即时决策 | 每日策略 | 存档分享 |
|
||||||
|
| **使用频率** | 按需 | 每天1次 | 按需 |
|
||||||
|
| **数据量** | 完整 | 核心摘要 | 完整 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⚠️ 重要提示
|
||||||
|
|
||||||
|
### 投资风险
|
||||||
|
- AI预测仅供参考,不构成投资建议
|
||||||
|
- 市场有风险,投资需谨慎
|
||||||
|
- 建议结合自己的判断和风险承受能力
|
||||||
|
|
||||||
|
### 使用限制
|
||||||
|
- 数据有一定延迟(< 1分钟)
|
||||||
|
- 极端市场环境下可能失效
|
||||||
|
- 需要稳定的网络连接
|
||||||
|
|
||||||
|
### 最佳实践
|
||||||
|
- 高信心度预测更可靠(≥8分)
|
||||||
|
- 多维度验证(宏观+资金+情绪)
|
||||||
|
- 设置止损保护
|
||||||
|
- 分散投资降低风险
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔄 版本历史
|
||||||
|
|
||||||
|
### v1.2.0 (2024-01-15)
|
||||||
|
- ✨ 新增定时分析功能
|
||||||
|
- ✨ 新增邮件推送功能
|
||||||
|
- ✨ 新增手动触发功能
|
||||||
|
- 🐛 修复网络请求重试机制
|
||||||
|
- 📝 完善使用文档
|
||||||
|
|
||||||
|
### v1.1.0 (2024-01-14)
|
||||||
|
- ✨ 新增PDF报告导出
|
||||||
|
- 📊 优化数据可视化
|
||||||
|
- 📝 新增完整文档
|
||||||
|
|
||||||
|
### v1.0.0 (2024-01-13)
|
||||||
|
- 🎉 首次发布
|
||||||
|
- 🤖 四位AI智能体
|
||||||
|
- 📊 板块多空/轮动/热度预测
|
||||||
|
- 📈 数据可视化
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📞 技术支持
|
||||||
|
|
||||||
|
如遇问题,请:
|
||||||
|
1. 查阅相关使用文档
|
||||||
|
2. 检查系统日志
|
||||||
|
3. 验证配置正确性
|
||||||
|
4. 测试网络连接
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**智策系统** - AI驱动的板块策略分析平台 🎯📊
|
||||||
|
|
||||||
+379
@@ -0,0 +1,379 @@
|
|||||||
|
# 智策定时分析使用指南
|
||||||
|
|
||||||
|
## 📋 功能概述
|
||||||
|
|
||||||
|
智策定时分析功能允许您设置每天固定时间自动运行板块策略分析,并将核心分析结果通过邮件发送到指定邮箱。
|
||||||
|
|
||||||
|
## ⚙️ 配置要求
|
||||||
|
|
||||||
|
### 1. 邮件配置(必需)
|
||||||
|
|
||||||
|
在 `.env` 文件中添加以下配置:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 邮件通知配置
|
||||||
|
EMAIL_ENABLED=true
|
||||||
|
SMTP_SERVER=smtp.example.com
|
||||||
|
SMTP_PORT=587
|
||||||
|
EMAIL_FROM=your-email@example.com
|
||||||
|
EMAIL_PASSWORD=your-email-password
|
||||||
|
EMAIL_TO=recipient@example.com
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. 配置说明
|
||||||
|
|
||||||
|
| 配置项 | 说明 | 示例 |
|
||||||
|
|--------|------|------|
|
||||||
|
| EMAIL_ENABLED | 是否启用邮件(true/false) | true |
|
||||||
|
| SMTP_SERVER | SMTP服务器地址 | smtp.qq.com |
|
||||||
|
| SMTP_PORT | SMTP端口(通常587或465) | 587 |
|
||||||
|
| EMAIL_FROM | 发件人邮箱 | your@qq.com |
|
||||||
|
| EMAIL_PASSWORD | 邮箱密码或授权码 | xxxx xxxx xxxx |
|
||||||
|
| EMAIL_TO | 收件人邮箱(可多个,逗号分隔) | email1@qq.com,email2@gmail.com |
|
||||||
|
|
||||||
|
### 3. 常见邮箱SMTP配置
|
||||||
|
|
||||||
|
#### QQ邮箱
|
||||||
|
```bash
|
||||||
|
SMTP_SERVER=smtp.qq.com
|
||||||
|
SMTP_PORT=587
|
||||||
|
EMAIL_FROM=your@qq.com
|
||||||
|
EMAIL_PASSWORD=授权码(不是QQ密码)
|
||||||
|
```
|
||||||
|
|
||||||
|
**获取QQ邮箱授权码:**
|
||||||
|
1. 登录QQ邮箱网页版
|
||||||
|
2. 设置 → 账户
|
||||||
|
3. 开启 "POP3/SMTP服务"
|
||||||
|
4. 生成授权码
|
||||||
|
|
||||||
|
#### 163邮箱
|
||||||
|
```bash
|
||||||
|
SMTP_SERVER=smtp.163.com
|
||||||
|
SMTP_PORT=587
|
||||||
|
EMAIL_FROM=your@163.com
|
||||||
|
EMAIL_PASSWORD=授权码
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Gmail
|
||||||
|
```bash
|
||||||
|
SMTP_SERVER=smtp.gmail.com
|
||||||
|
SMTP_PORT=587
|
||||||
|
EMAIL_FROM=your@gmail.com
|
||||||
|
EMAIL_PASSWORD=应用专用密码
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 企业邮箱
|
||||||
|
根据企业邮箱提供商的SMTP配置填写
|
||||||
|
|
||||||
|
## 🚀 使用步骤
|
||||||
|
|
||||||
|
### 1. 配置邮件
|
||||||
|
|
||||||
|
编辑项目根目录的 `.env` 文件,添加上述邮件配置。
|
||||||
|
|
||||||
|
### 2. 进入智策板块
|
||||||
|
|
||||||
|
在侧边栏点击 **"🎯 智策板块"** 按钮
|
||||||
|
|
||||||
|
### 3. 展开定时设置
|
||||||
|
|
||||||
|
点击 **"⏰ 定时分析设置"** 展开器
|
||||||
|
|
||||||
|
### 4. 检查邮件配置
|
||||||
|
|
||||||
|
查看底部的 **"📧 邮件配置检查"** 区域:
|
||||||
|
- ✅ 所有配置项都显示绿色勾号 → 配置正确
|
||||||
|
- ❌ 有红色叉号 → 需要补充配置
|
||||||
|
|
||||||
|
### 5. 测试邮件
|
||||||
|
|
||||||
|
点击 **"📧 测试邮件"** 按钮:
|
||||||
|
- 系统会发送一封测试邮件
|
||||||
|
- 检查收件箱是否收到
|
||||||
|
- 如果收到,说明配置正确
|
||||||
|
|
||||||
|
### 6. 设置定时时间
|
||||||
|
|
||||||
|
使用时间选择器设置每天运行的时间:
|
||||||
|
- 默认:09:00(上午9点)
|
||||||
|
- 建议:盘前(8:00-9:00)或盘后(15:30-17:00)
|
||||||
|
|
||||||
|
### 7. 启动定时任务
|
||||||
|
|
||||||
|
点击 **"▶️ 启动"** 按钮:
|
||||||
|
- 系统显示 "✅ 定时任务运行中"
|
||||||
|
- 显示下次运行时间
|
||||||
|
|
||||||
|
### 8. 等待自动运行
|
||||||
|
|
||||||
|
系统会在每天指定时间自动:
|
||||||
|
1. 获取最新市场数据
|
||||||
|
2. 运行AI智能体分析
|
||||||
|
3. 生成板块预测
|
||||||
|
4. 发送邮件到指定邮箱
|
||||||
|
|
||||||
|
### 9. 查看邮件报告
|
||||||
|
|
||||||
|
邮件包含:
|
||||||
|
- 📋 板块多空预测
|
||||||
|
- 🔄 板块轮动预测
|
||||||
|
- 🔥 板块热度排行
|
||||||
|
- 📊 策略总结
|
||||||
|
|
||||||
|
## 💡 功能按钮说明
|
||||||
|
|
||||||
|
### ▶️ 启动
|
||||||
|
- 功能:启动定时任务
|
||||||
|
- 状态:定时任务未运行时可用
|
||||||
|
- 效果:每天定时运行分析并发送邮件
|
||||||
|
|
||||||
|
### ⏹️ 停止
|
||||||
|
- 功能:停止定时任务
|
||||||
|
- 状态:定时任务运行中时可用
|
||||||
|
- 效果:取消定时分析
|
||||||
|
|
||||||
|
### 🔄 立即运行
|
||||||
|
- 功能:手动触发一次分析
|
||||||
|
- 状态:随时可用
|
||||||
|
- 效果:立即运行分析并发送邮件(不影响定时任务)
|
||||||
|
|
||||||
|
### 📧 测试邮件
|
||||||
|
- 功能:发送测试邮件
|
||||||
|
- 状态:随时可用
|
||||||
|
- 效果:验证邮件配置是否正确
|
||||||
|
|
||||||
|
## 📧 邮件内容
|
||||||
|
|
||||||
|
### 邮件主题
|
||||||
|
```
|
||||||
|
智策板块分析报告 - 2024-01-15 09:00:00
|
||||||
|
```
|
||||||
|
|
||||||
|
### 邮件正文结构
|
||||||
|
|
||||||
|
```
|
||||||
|
============================================================
|
||||||
|
智策板块策略分析报告
|
||||||
|
============================================================
|
||||||
|
分析时间: 2024-01-15 09:00:00
|
||||||
|
AI模型: DeepSeek Multi-Agent System
|
||||||
|
|
||||||
|
============================================================
|
||||||
|
一、板块多空预测
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
【看多板块】
|
||||||
|
|
||||||
|
1. 电子 (信心度: 8/10)
|
||||||
|
理由: 政策支持,资金持续流入
|
||||||
|
风险: 估值偏高,注意回调风险
|
||||||
|
|
||||||
|
2. ...
|
||||||
|
|
||||||
|
【看空板块】
|
||||||
|
...
|
||||||
|
|
||||||
|
============================================================
|
||||||
|
二、板块轮动预测
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
【当前强势板块】
|
||||||
|
...
|
||||||
|
|
||||||
|
【潜力接力板块】⭐ 重点关注
|
||||||
|
...
|
||||||
|
|
||||||
|
============================================================
|
||||||
|
三、板块热度排行
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
【最热板块 TOP5】
|
||||||
|
1. 电子 - 热度: 95分 (升温)
|
||||||
|
...
|
||||||
|
|
||||||
|
============================================================
|
||||||
|
四、策略总结
|
||||||
|
============================================================
|
||||||
|
|
||||||
|
【市场观点】
|
||||||
|
...
|
||||||
|
|
||||||
|
【核心机会】⭐
|
||||||
|
...
|
||||||
|
|
||||||
|
【主要风险】⚠️
|
||||||
|
...
|
||||||
|
|
||||||
|
【整体策略】
|
||||||
|
...
|
||||||
|
|
||||||
|
============================================================
|
||||||
|
本报告由智策AI系统自动生成并发送
|
||||||
|
仅供参考,不构成投资建议
|
||||||
|
============================================================
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🎯 使用场景
|
||||||
|
|
||||||
|
### 场景1:盘前策略
|
||||||
|
- **设置时间**: 08:00
|
||||||
|
- **目的**: 盘前获取当日策略建议
|
||||||
|
- **用途**: 制定当日交易计划
|
||||||
|
|
||||||
|
### 场景2:盘后复盘
|
||||||
|
- **设置时间**: 16:00
|
||||||
|
- **目的**: 盘后总结当日行情
|
||||||
|
- **用途**: 评估当日决策,调整策略
|
||||||
|
|
||||||
|
### 场景3:晚间研究
|
||||||
|
- **设置时间**: 21:00
|
||||||
|
- **目的**: 晚间深度研究
|
||||||
|
- **用途**: 详细阅读分析,准备次日
|
||||||
|
|
||||||
|
## ⚠️ 注意事项
|
||||||
|
|
||||||
|
### 1. 邮件配置
|
||||||
|
- ✅ 使用邮箱授权码,不是登录密码
|
||||||
|
- ✅ 确保SMTP服务已开启
|
||||||
|
- ✅ 防火墙允许SMTP端口
|
||||||
|
|
||||||
|
### 2. 运行时间
|
||||||
|
- 建议避开交易繁忙时段(9:30-15:00)
|
||||||
|
- 盘前盘后数据更稳定
|
||||||
|
- 夜间运行可能获取不到当日数据
|
||||||
|
|
||||||
|
### 3. 分析时长
|
||||||
|
- 完整分析需要2-3分钟
|
||||||
|
- 数据获取30秒
|
||||||
|
- AI分析1.5-2分钟
|
||||||
|
- 邮件发送5秒
|
||||||
|
|
||||||
|
### 4. 数据时效
|
||||||
|
- 数据来源:AKShare(东方财富)
|
||||||
|
- 延迟:< 1分钟
|
||||||
|
- 盘后数据最完整
|
||||||
|
|
||||||
|
### 5. 网络要求
|
||||||
|
- 需要稳定的网络连接
|
||||||
|
- 能访问东方财富数据源
|
||||||
|
- SMTP端口未被阻止
|
||||||
|
|
||||||
|
## 🔧 故障排除
|
||||||
|
|
||||||
|
### 问题1:邮件配置不完整
|
||||||
|
**现象**: 配置检查显示红色叉号
|
||||||
|
|
||||||
|
**解决**:
|
||||||
|
1. 检查 `.env` 文件是否存在
|
||||||
|
2. 确认所有配置项都已填写
|
||||||
|
3. 重启应用使配置生效
|
||||||
|
|
||||||
|
### 问题2:测试邮件发送失败
|
||||||
|
**现象**: 点击测试邮件后提示失败
|
||||||
|
|
||||||
|
**解决**:
|
||||||
|
1. 确认邮箱密码是授权码而不是登录密码
|
||||||
|
2. 检查SMTP服务器地址是否正确
|
||||||
|
3. 确认SMTP服务已在邮箱中开启
|
||||||
|
4. 检查防火墙是否阻止了SMTP端口
|
||||||
|
|
||||||
|
### 问题3:定时任务未运行
|
||||||
|
**现象**: 到了设定时间但没有收到邮件
|
||||||
|
|
||||||
|
**解决**:
|
||||||
|
1. 检查定时任务状态是否为"运行中"
|
||||||
|
2. 查看系统日志是否有错误信息
|
||||||
|
3. 确认系统时间是否正确
|
||||||
|
4. 重启定时任务
|
||||||
|
|
||||||
|
### 问题4:数据获取失败
|
||||||
|
**现象**: 邮件中显示"数据获取失败"
|
||||||
|
|
||||||
|
**解决**:
|
||||||
|
1. 检查网络连接
|
||||||
|
2. 稍后重试(可能是数据源繁忙)
|
||||||
|
3. 避开交易高峰时段
|
||||||
|
|
||||||
|
### 问题5:AI分析失败
|
||||||
|
**现象**: 邮件中显示"AI分析失败"
|
||||||
|
|
||||||
|
**解决**:
|
||||||
|
1. 检查DeepSeek API配置
|
||||||
|
2. 确认API额度充足
|
||||||
|
3. 查看系统日志了解详细错误
|
||||||
|
|
||||||
|
## 📊 日志查看
|
||||||
|
|
||||||
|
### 控制台日志
|
||||||
|
运行 `streamlit run app.py` 后,在控制台可以看到:
|
||||||
|
|
||||||
|
```
|
||||||
|
[智策定时] 定时任务已启动,每天 09:00 运行
|
||||||
|
[智策定时] 后台线程已启动
|
||||||
|
|
||||||
|
# 到达定时时间后
|
||||||
|
============================================================
|
||||||
|
[智策定时] 开始定时分析 - 2024-01-15 09:00:00
|
||||||
|
============================================================
|
||||||
|
[智策定时] [1/3] 获取市场数据...
|
||||||
|
[智策定时] ✓ 数据获取成功
|
||||||
|
[智策定时] [2/3] AI智能体分析中...
|
||||||
|
[智策定时] ✓ 分析完成
|
||||||
|
[智策定时] [3/3] 发送邮件通知...
|
||||||
|
[智策定时] ✓ 邮件发送成功
|
||||||
|
============================================================
|
||||||
|
[智策定时] ✓ 定时分析完成!
|
||||||
|
============================================================
|
||||||
|
```
|
||||||
|
|
||||||
|
## 🎓 最佳实践
|
||||||
|
|
||||||
|
### 1. 时间设置
|
||||||
|
- **盘前用户**: 08:00-08:30(获取前一日数据+当日预判)
|
||||||
|
- **盘后用户**: 15:30-16:00(当日收盘数据)
|
||||||
|
- **研究用户**: 20:00-21:00(晚间详细研究)
|
||||||
|
|
||||||
|
### 2. 邮件管理
|
||||||
|
- 创建文件夹"智策报告"
|
||||||
|
- 设置邮件规则自动归档
|
||||||
|
- 定期清理过期报告
|
||||||
|
|
||||||
|
### 3. 报告使用
|
||||||
|
- 重点关注"潜力接力板块"
|
||||||
|
- 对比历史报告验证准确性
|
||||||
|
- 结合自己的判断决策
|
||||||
|
|
||||||
|
### 4. 配合使用
|
||||||
|
- 定时分析:宏观趋势把握
|
||||||
|
- 手动分析:重点板块深挖
|
||||||
|
- PDF导出:长期存档对比
|
||||||
|
|
||||||
|
## 🔄 更新说明
|
||||||
|
|
||||||
|
### v1.0.0 (当前版本)
|
||||||
|
- ✅ 基础定时任务功能
|
||||||
|
- ✅ 邮件通知发送
|
||||||
|
- ✅ 核心分析结果推送
|
||||||
|
- ✅ 手动触发功能
|
||||||
|
- ✅ 邮件配置检查
|
||||||
|
|
||||||
|
### 计划功能
|
||||||
|
- 🔲 多个定时任务(早中晚)
|
||||||
|
- 🔲 邮件包含图表
|
||||||
|
- 🔲 微信通知支持
|
||||||
|
- 🔲 短信通知支持
|
||||||
|
- 🔲 Webhook集成
|
||||||
|
|
||||||
|
## 📞 技术支持
|
||||||
|
|
||||||
|
如遇问题,请:
|
||||||
|
1. 查看本指南的故障排除章节
|
||||||
|
2. 检查系统日志获取详细错误
|
||||||
|
3. 确认邮件配置正确性
|
||||||
|
4. 测试网络连接稳定性
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**智策定时分析** - 让AI每天为您工作!📊⏰
|
||||||
|
|
||||||
+561
@@ -0,0 +1,561 @@
|
|||||||
|
# 智策定时分析功能完成说明
|
||||||
|
|
||||||
|
## ✅ 功能概述
|
||||||
|
|
||||||
|
成功为智策板块添加了**定时分析和邮件推送**功能,可以每天自动运行智策分析并将核心结果发送到配置的邮箱。
|
||||||
|
|
||||||
|
## 📋 完成内容
|
||||||
|
|
||||||
|
### 1. 核心模块开发
|
||||||
|
|
||||||
|
#### `sector_strategy_scheduler.py` - 定时任务调度器
|
||||||
|
**功能**:
|
||||||
|
- ✅ 每日定时分析调度
|
||||||
|
- ✅ 后台线程运行(daemon线程)
|
||||||
|
- ✅ 手动触发分析
|
||||||
|
- ✅ 状态监控和查询
|
||||||
|
- ✅ 邮件自动发送
|
||||||
|
- ✅ 错误通知
|
||||||
|
|
||||||
|
**核心方法**:
|
||||||
|
```python
|
||||||
|
# 启动定时任务
|
||||||
|
sector_strategy_scheduler.start(schedule_time="09:00")
|
||||||
|
|
||||||
|
# 停止定时任务
|
||||||
|
sector_strategy_scheduler.stop()
|
||||||
|
|
||||||
|
# 手动触发一次
|
||||||
|
sector_strategy_scheduler.manual_run()
|
||||||
|
|
||||||
|
# 获取状态
|
||||||
|
status = sector_strategy_scheduler.get_status()
|
||||||
|
```
|
||||||
|
|
||||||
|
**邮件发送实现**:
|
||||||
|
- 使用 `_send_email_direct()` 方法直接发送邮件
|
||||||
|
- 支持 SMTP/TLS (端口587) 和 SMTP/SSL (端口465)
|
||||||
|
- 完整的错误处理和日志输出
|
||||||
|
- 支持UTF-8编码的中文内容
|
||||||
|
|
||||||
|
### 2. UI界面集成
|
||||||
|
|
||||||
|
#### `sector_strategy_ui.py` - 定时分析设置界面
|
||||||
|
**新增功能**:
|
||||||
|
- ⏰ 定时分析设置面板(expander)
|
||||||
|
- 📧 邮件配置状态显示
|
||||||
|
- ⏱️ 定时时间选择器(time_input)
|
||||||
|
- ▶️ 启动/停止/手动触发按钮
|
||||||
|
- 📊 运行状态实时显示
|
||||||
|
- 🔄 测试邮件发送功能
|
||||||
|
|
||||||
|
**UI布局**:
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────┐
|
||||||
|
│ ⏰ 定时分析设置 │
|
||||||
|
│ ┌───────────────┬──────────────────┐ │
|
||||||
|
│ │ 邮件配置状态 │ 时间设置 │ │
|
||||||
|
│ │ ✅/❌ 状态显示│ [09:00] 选择器 │ │
|
||||||
|
│ │ │ [▶️][⏸️][🔄] │ │
|
||||||
|
│ └───────────────┴──────────────────┘ │
|
||||||
|
│ 任务状态: ✅/⏸️ 上次运行: xxx │
|
||||||
|
└─────────────────────────────────────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. 邮件集成修复
|
||||||
|
|
||||||
|
#### 问题修复
|
||||||
|
**原问题**:
|
||||||
|
```python
|
||||||
|
# 错误调用(不存在的方法)
|
||||||
|
notification_service.send_email(subject, body)
|
||||||
|
```
|
||||||
|
|
||||||
|
**修复方案**:
|
||||||
|
|
||||||
|
1. **测试邮件**(UI界面):
|
||||||
|
```python
|
||||||
|
# 使用现有的 send_test_email() 方法
|
||||||
|
success, message = notification_service.send_test_email()
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **实际邮件**(定时分析):
|
||||||
|
```python
|
||||||
|
# 自定义 _send_email_direct() 方法
|
||||||
|
def _send_email_direct(self, subject, body):
|
||||||
|
"""直接发送邮件(参考notification_service的实现)"""
|
||||||
|
import smtplib
|
||||||
|
from email.mime.text import MIMEText
|
||||||
|
from email.mime.multipart import MIMEMultipart
|
||||||
|
|
||||||
|
config = notification_service.config
|
||||||
|
msg = MIMEMultipart()
|
||||||
|
msg['From'] = config['email_from']
|
||||||
|
msg['To'] = config['email_to']
|
||||||
|
msg['Subject'] = subject
|
||||||
|
msg.attach(MIMEText(body, 'plain', 'utf-8'))
|
||||||
|
|
||||||
|
# SMTP连接和发送...
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. 邮件内容格式
|
||||||
|
|
||||||
|
#### 智策分析报告邮件
|
||||||
|
**主题**:`智策板块分析报告 - 2024-01-15 09:00`
|
||||||
|
|
||||||
|
**正文结构**:
|
||||||
|
```
|
||||||
|
==========================================================
|
||||||
|
智策板块策略分析报告
|
||||||
|
==========================================================
|
||||||
|
分析时间: 2024-01-15 09:00:00
|
||||||
|
AI模型: DeepSeek Multi-Agent System
|
||||||
|
|
||||||
|
==========================================================
|
||||||
|
一、板块多空预测
|
||||||
|
==========================================================
|
||||||
|
|
||||||
|
【看多板块】
|
||||||
|
1. 新能源汽车 (信心度: 8.5/10)
|
||||||
|
理由: AI新模型带来产业链机会
|
||||||
|
风险: 短期涨幅较大,注意回调
|
||||||
|
|
||||||
|
【看空板块】
|
||||||
|
1. 地产开发 (信心度: 7.0/10)
|
||||||
|
理由: 政策压制,成交低迷
|
||||||
|
风险: 政策变化可能带来反弹
|
||||||
|
|
||||||
|
==========================================================
|
||||||
|
二、板块轮动预测
|
||||||
|
==========================================================
|
||||||
|
|
||||||
|
【当前强势板块】
|
||||||
|
• 人工智能
|
||||||
|
轮动逻辑: 政策支持,资金持续流入...
|
||||||
|
时间窗口: 1-2周
|
||||||
|
操作建议: 持有龙头,回调加仓
|
||||||
|
|
||||||
|
【潜力接力板块】⭐ 重点关注
|
||||||
|
• 半导体
|
||||||
|
轮动逻辑: 有望承接资金轮动...
|
||||||
|
时间窗口: 未来3-5天
|
||||||
|
操作建议: 关注突破信号
|
||||||
|
|
||||||
|
==========================================================
|
||||||
|
三、板块热度排行
|
||||||
|
==========================================================
|
||||||
|
|
||||||
|
【最热板块 TOP5】
|
||||||
|
1. 人工智能 - 热度: 95.0分 (🔥升温)
|
||||||
|
2. 新能源汽车 - 热度: 92.0分 (🔥升温)
|
||||||
|
3. 半导体 - 热度: 88.0分 (➡️持平)
|
||||||
|
4. 军工 - 热度: 85.0分 (🔥升温)
|
||||||
|
5. 医药生物 - 热度: 78.0分 (❄️降温)
|
||||||
|
|
||||||
|
==========================================================
|
||||||
|
四、策略总结
|
||||||
|
==========================================================
|
||||||
|
|
||||||
|
【市场观点】
|
||||||
|
科技板块延续强势,政策面和资金面支撑明确...
|
||||||
|
|
||||||
|
【核心机会】⭐
|
||||||
|
1. 重点关注人工智能、新能源汽车产业链
|
||||||
|
2. 半导体板块有轮动潜力,可适度布局
|
||||||
|
3. 军工板块情绪升温,关注龙头突破
|
||||||
|
|
||||||
|
【主要风险】⚠️
|
||||||
|
1. 地产板块持续低迷,规避相关标的
|
||||||
|
2. 热门板块短期涨幅较大,注意回调风险
|
||||||
|
3. 市场波动加大,控制仓位,设置止损
|
||||||
|
|
||||||
|
【整体策略】
|
||||||
|
✓ 持有:人工智能、新能源汽车龙头
|
||||||
|
✓ 关注:半导体板块轮动机会
|
||||||
|
✓ 规避:地产、周期等弱势板块
|
||||||
|
|
||||||
|
==========================================================
|
||||||
|
本报告由智策AI系统自动生成并发送
|
||||||
|
仅供参考,不构成投资建议
|
||||||
|
==========================================================
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. 完整文档体系
|
||||||
|
|
||||||
|
已创建的文档:
|
||||||
|
- ✅ `智策定时分析使用指南.md` - 详细使用教程
|
||||||
|
- ✅ `智策定时分析部署清单.md` - 部署步骤和故障排查
|
||||||
|
- ✅ `智策功能总览.md` - 功能全景介绍
|
||||||
|
- ✅ `智策定时分析更新日志.md` - 版本历史
|
||||||
|
- ✅ `智策定时分析功能完成说明.md` - 本文档
|
||||||
|
|
||||||
|
更新的文档:
|
||||||
|
- ✅ `智策板块使用指南.md` - 添加定时分析章节
|
||||||
|
- ✅ `智策板块快速开始.md` - 添加快速配置步骤
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎯 使用方法
|
||||||
|
|
||||||
|
### 第一步:配置邮件
|
||||||
|
|
||||||
|
编辑 `.env` 文件:
|
||||||
|
```env
|
||||||
|
EMAIL_ENABLED=true
|
||||||
|
SMTP_SERVER=smtp.qq.com
|
||||||
|
SMTP_PORT=587
|
||||||
|
EMAIL_FROM=your_email@qq.com
|
||||||
|
EMAIL_PASSWORD=your_authorization_code
|
||||||
|
EMAIL_TO=receiver@example.com
|
||||||
|
```
|
||||||
|
|
||||||
|
**获取授权码(QQ邮箱)**:
|
||||||
|
1. 登录QQ邮箱网页版
|
||||||
|
2. 设置 → 账户 → POP3/IMAP/SMTP
|
||||||
|
3. 开启"IMAP/SMTP服务"
|
||||||
|
4. 点击"生成授权码"
|
||||||
|
5. 将授权码填入 `EMAIL_PASSWORD`
|
||||||
|
|
||||||
|
### 第二步:测试邮件
|
||||||
|
|
||||||
|
1. 启动程序:`streamlit run app.py`
|
||||||
|
2. 进入"🎯 智策板块"页面
|
||||||
|
3. 展开"⏰ 定时分析设置"
|
||||||
|
4. 查看邮件配置状态(应显示 ✅)
|
||||||
|
5. 点击"📧 测试邮件"按钮
|
||||||
|
6. 检查收件箱(含垃圾邮件)
|
||||||
|
|
||||||
|
### 第三步:启动定时任务
|
||||||
|
|
||||||
|
1. 设置运行时间(默认9:00)
|
||||||
|
2. 点击"▶️ 启动定时任务"
|
||||||
|
3. 系统显示"✅ 定时任务已启动"
|
||||||
|
4. 等待定时运行或点击"🔄 立即运行一次"
|
||||||
|
|
||||||
|
### 第四步:查收邮件
|
||||||
|
|
||||||
|
- 每天定时运行后自动发送
|
||||||
|
- 邮件标题:`智策板块分析报告 - 日期时间`
|
||||||
|
- 包含核心分析结果
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔧 技术实现细节
|
||||||
|
|
||||||
|
### 1. 定时任务调度
|
||||||
|
|
||||||
|
**使用库**:`schedule`
|
||||||
|
```python
|
||||||
|
# 设置每天09:00运行
|
||||||
|
schedule.every().day.at("09:00").do(self._run_analysis).tag('sector_strategy')
|
||||||
|
|
||||||
|
# 后台线程循环检查
|
||||||
|
def _schedule_loop(self):
|
||||||
|
while self.running:
|
||||||
|
schedule.run_pending()
|
||||||
|
time.sleep(60) # 每分钟检查一次
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. 线程管理
|
||||||
|
|
||||||
|
**Daemon线程**:
|
||||||
|
```python
|
||||||
|
self.thread = threading.Thread(target=self._schedule_loop, daemon=True)
|
||||||
|
self.thread.start()
|
||||||
|
```
|
||||||
|
|
||||||
|
**优势**:
|
||||||
|
- 主程序退出时自动结束
|
||||||
|
- 不阻塞主线程
|
||||||
|
- 适合后台任务
|
||||||
|
|
||||||
|
### 3. 邮件发送
|
||||||
|
|
||||||
|
**SMTP配置**:
|
||||||
|
```python
|
||||||
|
if config['smtp_port'] == 465:
|
||||||
|
# SSL连接
|
||||||
|
server = smtplib.SMTP_SSL(smtp_server, 465, timeout=15)
|
||||||
|
else:
|
||||||
|
# TLS连接
|
||||||
|
server = smtplib.SMTP(smtp_server, 587, timeout=15)
|
||||||
|
server.starttls()
|
||||||
|
|
||||||
|
server.login(email_from, email_password)
|
||||||
|
server.send_message(msg)
|
||||||
|
server.quit()
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. 状态管理
|
||||||
|
|
||||||
|
**状态变量**:
|
||||||
|
```python
|
||||||
|
self.running = False # 是否运行中
|
||||||
|
self.enabled = False # 是否已启用
|
||||||
|
self.schedule_time = "09:00" # 运行时间
|
||||||
|
self.last_run_time = None # 上次运行时间
|
||||||
|
self.last_result = None # 上次分析结果
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. 错误处理
|
||||||
|
|
||||||
|
**多层异常捕获**:
|
||||||
|
```python
|
||||||
|
try:
|
||||||
|
# 1. 数据获取
|
||||||
|
data = fetcher.get_all_sector_data()
|
||||||
|
if not data.get("success"):
|
||||||
|
self._send_error_notification("数据获取失败")
|
||||||
|
return
|
||||||
|
|
||||||
|
# 2. AI分析
|
||||||
|
result = engine.run_comprehensive_analysis(data)
|
||||||
|
if not result.get("success"):
|
||||||
|
self._send_error_notification("AI分析失败")
|
||||||
|
return
|
||||||
|
|
||||||
|
# 3. 邮件发送
|
||||||
|
self._send_analysis_notification(result)
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
print(f"分析过程出错: {e}")
|
||||||
|
self._send_error_notification(f"分析异常: {str(e)}")
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📊 性能特征
|
||||||
|
|
||||||
|
### 资源占用
|
||||||
|
- **CPU**: 空闲时 <1%,分析时 10-30%
|
||||||
|
- **内存**: 约 200-500MB
|
||||||
|
- **网络**: 每次分析约 10-50MB
|
||||||
|
|
||||||
|
### 运行时间
|
||||||
|
- **数据获取**: 10-30秒
|
||||||
|
- **AI分析**: 60-180秒(取决于模型)
|
||||||
|
- **邮件发送**: 2-5秒
|
||||||
|
- **总计**: 约 2-4分钟
|
||||||
|
|
||||||
|
### 邮件大小
|
||||||
|
- **纯文本**: 2-5KB
|
||||||
|
- **完整报告**: 通常 3-8KB
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⚠️ 注意事项
|
||||||
|
|
||||||
|
### 1. 程序需持续运行
|
||||||
|
- **本地部署**:保持程序运行,电脑不关机
|
||||||
|
- **服务器部署**:推荐使用Docker或云服务器
|
||||||
|
- **关闭窗口**:定时任务会停止
|
||||||
|
|
||||||
|
### 2. 邮箱限制
|
||||||
|
- QQ邮箱:每天500封上限
|
||||||
|
- 163邮箱:每天100封上限
|
||||||
|
- 智策每天1封不会超限
|
||||||
|
|
||||||
|
### 3. 时区和时间
|
||||||
|
- 使用系统本地时间
|
||||||
|
- 确保系统时间准确
|
||||||
|
- 夏令时可能影响运行时间
|
||||||
|
|
||||||
|
### 4. 网络依赖
|
||||||
|
- 需要稳定网络连接
|
||||||
|
- 数据获取有重试机制(3次)
|
||||||
|
- SMTP连接超时15秒
|
||||||
|
|
||||||
|
### 5. API限流
|
||||||
|
- AKShare数据有访问限制
|
||||||
|
- 已内置1秒延迟机制
|
||||||
|
- 避免手动和定时同时运行
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🐛 故障排查
|
||||||
|
|
||||||
|
### 问题1:邮件未收到
|
||||||
|
|
||||||
|
**检查项**:
|
||||||
|
1. ✅ .env 文件邮件配置是否完整
|
||||||
|
2. ✅ 授权码是否正确(不是登录密码)
|
||||||
|
3. ✅ 邮件配置状态是否显示 ✅
|
||||||
|
4. ✅ 查看垃圾邮件箱
|
||||||
|
5. ✅ 检查程序日志是否有错误
|
||||||
|
|
||||||
|
**解决方案**:
|
||||||
|
```bash
|
||||||
|
# 测试邮件配置
|
||||||
|
点击"📧 测试邮件"按钮,查看是否成功
|
||||||
|
```
|
||||||
|
|
||||||
|
### 问题2:定时任务未运行
|
||||||
|
|
||||||
|
**检查项**:
|
||||||
|
1. ✅ 程序是否持续运行
|
||||||
|
2. ✅ 定时任务状态是否显示"✅ 运行中"
|
||||||
|
3. ✅ 系统时间是否正确
|
||||||
|
4. ✅ 查看程序日志
|
||||||
|
|
||||||
|
**解决方案**:
|
||||||
|
```bash
|
||||||
|
# 重新启动定时任务
|
||||||
|
1. 点击"⏸️ 停止"
|
||||||
|
2. 点击"▶️ 启动"
|
||||||
|
3. 点击"🔄 立即运行一次"测试
|
||||||
|
```
|
||||||
|
|
||||||
|
### 问题3:ModuleNotFoundError
|
||||||
|
|
||||||
|
**错误**:`No module named 'schedule'`
|
||||||
|
|
||||||
|
**解决方案**:
|
||||||
|
```bash
|
||||||
|
# 安装依赖
|
||||||
|
pip install schedule
|
||||||
|
|
||||||
|
# 或使用venv环境
|
||||||
|
.\venv\Scripts\pip.exe install schedule
|
||||||
|
```
|
||||||
|
|
||||||
|
### 问题4:属性错误
|
||||||
|
|
||||||
|
**错误**:`'NotificationService' object has no attribute 'send_email'`
|
||||||
|
|
||||||
|
**原因**:已修复,确保使用最新代码
|
||||||
|
|
||||||
|
**验证**:
|
||||||
|
```python
|
||||||
|
from notification_service import notification_service
|
||||||
|
print(hasattr(notification_service, 'send_test_email')) # 应该返回 True
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 最佳实践
|
||||||
|
|
||||||
|
### 1. 推荐运行时间
|
||||||
|
|
||||||
|
| 时间 | 场景 | 说明 |
|
||||||
|
|------|------|------|
|
||||||
|
| 8:00-8:30 | 盘前策略 | 获取昨日数据,制定当日策略 |
|
||||||
|
| 16:00-17:00 | 盘后复盘 | 总结当日行情,调整持仓 |
|
||||||
|
| 21:00-22:00 | 晚间研究 | 深度研读,准备次日操作 |
|
||||||
|
|
||||||
|
### 2. 服务器部署
|
||||||
|
|
||||||
|
**Docker部署**(推荐):
|
||||||
|
```dockerfile
|
||||||
|
# Dockerfile 已存在,直接使用
|
||||||
|
docker build -t agentsstock .
|
||||||
|
docker run -d -p 8501:8501 --name agentsstock agentsstock
|
||||||
|
```
|
||||||
|
|
||||||
|
**云服务器部署**:
|
||||||
|
```bash
|
||||||
|
# 使用 tmux 保持运行
|
||||||
|
tmux new -s agentsstock
|
||||||
|
streamlit run app.py
|
||||||
|
# Ctrl+B, D 分离会话
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. 配置建议
|
||||||
|
|
||||||
|
**邮箱选择**:
|
||||||
|
- 推荐:QQ邮箱、163邮箱(稳定性好)
|
||||||
|
- 避免:免费邮箱的临时账号
|
||||||
|
|
||||||
|
**运行时间**:
|
||||||
|
- 避开交易时段(9:30-15:00)
|
||||||
|
- 选择数据更新完整的时间
|
||||||
|
- 建议盘前或盘后
|
||||||
|
|
||||||
|
### 4. 安全建议
|
||||||
|
|
||||||
|
**.env 文件保护**:
|
||||||
|
```bash
|
||||||
|
# 添加到 .gitignore
|
||||||
|
echo ".env" >> .gitignore
|
||||||
|
|
||||||
|
# 设置文件权限
|
||||||
|
chmod 600 .env # Linux/Mac
|
||||||
|
```
|
||||||
|
|
||||||
|
**授权码保护**:
|
||||||
|
- 不要分享授权码
|
||||||
|
- 定期更换授权码
|
||||||
|
- 不要提交到版本控制
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📈 未来规划
|
||||||
|
|
||||||
|
### v1.3.0 (计划中)
|
||||||
|
- [ ] 多时段定时(一天多次)
|
||||||
|
- [ ] 微信推送支持(企业微信/Server酱)
|
||||||
|
- [ ] 自定义邮件模板
|
||||||
|
- [ ] 分析结果数据库存储
|
||||||
|
- [ ] 历史分析对比功能
|
||||||
|
|
||||||
|
### v1.4.0 (规划中)
|
||||||
|
- [ ] Web端配置界面优化
|
||||||
|
- [ ] 移动端邮件格式优化
|
||||||
|
- [ ] 预警阈值自定义
|
||||||
|
- [ ] 个性化关注板块
|
||||||
|
- [ ] 智能推送频率调整
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📚 相关文档索引
|
||||||
|
|
||||||
|
### 使用指南
|
||||||
|
- [智策定时分析使用指南.md](智策定时分析使用指南.md) - 详细教程
|
||||||
|
- [智策板块快速开始.md](智策板块快速开始.md) - 快速上手
|
||||||
|
- [智策板块使用指南.md](智策板块使用指南.md) - 完整指南
|
||||||
|
|
||||||
|
### 技术文档
|
||||||
|
- [智策功能总览.md](智策功能总览.md) - 功能介绍
|
||||||
|
- [智策定时分析部署清单.md](智策定时分析部署清单.md) - 部署步骤
|
||||||
|
- [智策定时分析更新日志.md](智策定时分析更新日志.md) - 版本历史
|
||||||
|
|
||||||
|
### 配置文档
|
||||||
|
- [环境配置功能说明.md](环境配置功能说明.md) - 环境配置
|
||||||
|
- [邮件配置指南.md](邮件配置指南.md) - 邮件设置
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✅ 验证清单
|
||||||
|
|
||||||
|
完成后请验证:
|
||||||
|
|
||||||
|
- [ ] Python 环境正常(Python 3.8+)
|
||||||
|
- [ ] 依赖库已安装(schedule)
|
||||||
|
- [ ] .env 文件已配置
|
||||||
|
- [ ] 邮件配置状态显示 ✅
|
||||||
|
- [ ] 测试邮件发送成功
|
||||||
|
- [ ] 收到测试邮件
|
||||||
|
- [ ] 定时任务可以启动
|
||||||
|
- [ ] 手动运行一次成功
|
||||||
|
- [ ] 收到分析报告邮件
|
||||||
|
- [ ] 定时任务运行正常
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎉 总结
|
||||||
|
|
||||||
|
智策定时分析功能已全部完成,主要亮点:
|
||||||
|
|
||||||
|
1. **自动化运行** - 无需手动触发,每天自动分析
|
||||||
|
2. **邮件推送** - 核心结果直接发送到邮箱
|
||||||
|
3. **灵活控制** - 启动/停止/时间设置/手动触发
|
||||||
|
4. **状态监控** - 实时查看运行状态和历史
|
||||||
|
5. **完善文档** - 从使用到部署,全面覆盖
|
||||||
|
|
||||||
|
现在您可以享受每天自动化的板块策略分析服务了!📧⏰🎯
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**智策定时分析 v1.2.0** - 让投资策略分析自动化
|
||||||
|
|
||||||
|
完成时间:2025-01-15
|
||||||
|
|
||||||
+335
@@ -0,0 +1,335 @@
|
|||||||
|
# 智策定时分析更新日志
|
||||||
|
|
||||||
|
## 版本历史
|
||||||
|
|
||||||
|
### v1.2.0 (2025-01-15) - 定时分析功能
|
||||||
|
|
||||||
|
#### ✨ 新增功能
|
||||||
|
|
||||||
|
##### 1. 定时分析核心
|
||||||
|
- **每日自动分析**: 支持设置每天固定时间自动运行智策分析
|
||||||
|
- **灵活时间配置**: 可自定义运行时间,默认9:00
|
||||||
|
- **后台运行**: 定时任务在后台运行,无需保持页面打开
|
||||||
|
- **自动重试**: 数据获取失败自动重试3次,确保稳定性
|
||||||
|
|
||||||
|
##### 2. 邮件推送系统
|
||||||
|
- **自动发送**: 分析完成后自动发送邮件到配置邮箱
|
||||||
|
- **精简报告**: 邮件包含核心分析结果(板块多空、轮动、热度、策略)
|
||||||
|
- **格式清晰**: 使用分隔线和表情符号,便于快速阅读
|
||||||
|
- **配置灵活**: 支持QQ、163、Gmail等主流邮箱
|
||||||
|
|
||||||
|
##### 3. UI交互优化
|
||||||
|
- **状态监控**: 实时显示定时任务运行状态
|
||||||
|
- **手动触发**: 新增"立即运行一次"按钮,无需等待定时
|
||||||
|
- **配置检查**: 自动检测邮件配置状态,显示✅/❌状态
|
||||||
|
- **操作反馈**: 所有操作提供清晰的成功/失败反馈
|
||||||
|
|
||||||
|
##### 4. 完善文档体系
|
||||||
|
- 《智策定时分析使用指南.md》- 详细使用教程
|
||||||
|
- 《智策定时分析部署清单.md》- 完整部署步骤
|
||||||
|
- 《智策功能总览.md》- 功能全景介绍
|
||||||
|
- 更新所有相关文档,新增定时分析说明
|
||||||
|
|
||||||
|
#### 🔧 技术实现
|
||||||
|
|
||||||
|
##### 新增模块
|
||||||
|
```
|
||||||
|
sector_strategy_scheduler.py
|
||||||
|
├─ SectorStrategyScheduler (主类)
|
||||||
|
│ ├─ start_scheduler() - 启动定时任务
|
||||||
|
│ ├─ stop_scheduler() - 停止定时任务
|
||||||
|
│ ├─ run_now() - 立即运行一次
|
||||||
|
│ ├─ get_status() - 获取运行状态
|
||||||
|
│ └─ _run_analysis() - 执行分析逻辑
|
||||||
|
└─ sector_strategy_scheduler (全局实例)
|
||||||
|
```
|
||||||
|
|
||||||
|
##### 集成模块
|
||||||
|
- **notification_service.py**: 复用现有邮件发送功能
|
||||||
|
- **sector_strategy_engine.py**: 调用完整分析流程
|
||||||
|
- **sector_strategy_ui.py**: 添加定时分析UI界面
|
||||||
|
|
||||||
|
##### 技术栈
|
||||||
|
- `schedule`: 定时任务调度
|
||||||
|
- `threading`: 后台线程运行
|
||||||
|
- `smtplib`: 邮件发送(Python内置)
|
||||||
|
- `datetime`: 时间处理
|
||||||
|
|
||||||
|
#### 📊 功能对比
|
||||||
|
|
||||||
|
| 功能 | v1.1.0 | v1.2.0 |
|
||||||
|
|------|--------|--------|
|
||||||
|
| 手动分析 | ✅ | ✅ |
|
||||||
|
| PDF导出 | ✅ | ✅ |
|
||||||
|
| 定时分析 | ❌ | ✅ |
|
||||||
|
| 邮件推送 | ❌ | ✅ |
|
||||||
|
| 手动触发 | ❌ | ✅ |
|
||||||
|
| 状态监控 | ❌ | ✅ |
|
||||||
|
|
||||||
|
#### 🐛 问题修复
|
||||||
|
|
||||||
|
1. **网络稳定性**
|
||||||
|
- 实现:AKShare数据获取失败自动重试
|
||||||
|
- 参数:最多重试3次,间隔2秒
|
||||||
|
- 效果:显著提升数据获取成功率
|
||||||
|
|
||||||
|
2. **时间函数冲突**
|
||||||
|
- 问题:`time`模块与`datetime.time`命名冲突
|
||||||
|
- 修复:使用`from datetime import time as dt_time`
|
||||||
|
- 影响:`sector_strategy_ui.py`
|
||||||
|
|
||||||
|
3. **线程安全**
|
||||||
|
- 实现:使用`threading.Lock`保护共享状态
|
||||||
|
- 保护:`is_running`、`last_run_time`等变量
|
||||||
|
- 效果:避免多线程竞态条件
|
||||||
|
|
||||||
|
#### 📝 文档更新
|
||||||
|
|
||||||
|
##### 新增文档
|
||||||
|
- `智策定时分析使用指南.md` (详细教程)
|
||||||
|
- `智策定时分析部署清单.md` (部署步骤)
|
||||||
|
- `智策功能总览.md` (功能全景)
|
||||||
|
- `智策定时分析更新日志.md` (本文档)
|
||||||
|
|
||||||
|
##### 更新文档
|
||||||
|
- `智策板块使用指南.md` - 添加定时分析章节
|
||||||
|
- `智策板块快速开始.md` - 添加定时分析快速步骤
|
||||||
|
- `README.md` - 更新功能列表
|
||||||
|
- `.env.example` - 添加邮件配置示例
|
||||||
|
|
||||||
|
#### 🎯 使用场景
|
||||||
|
|
||||||
|
##### 盘前策略(推荐 8:30)
|
||||||
|
```
|
||||||
|
前一天晚上设置定时 → 第二天8:30自动分析
|
||||||
|
→ 9:00开盘前查收邮件 → 制定当日交易策略
|
||||||
|
```
|
||||||
|
|
||||||
|
##### 盘后复盘(推荐 16:00)
|
||||||
|
```
|
||||||
|
设置定时16:00 → 收盘后自动分析 → 总结当日行情
|
||||||
|
→ 调整持仓策略 → 准备次日操作
|
||||||
|
```
|
||||||
|
|
||||||
|
##### 晚间研究(推荐 21:00)
|
||||||
|
```
|
||||||
|
设置定时21:00 → 晚间查收邮件 → 深度研读分析
|
||||||
|
→ 制定周期策略 → 提前布局机会
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 💡 最佳实践
|
||||||
|
|
||||||
|
1. **合理设置时间**
|
||||||
|
- 盘前策略建议8:00-9:00
|
||||||
|
- 盘后复盘建议15:30-17:00
|
||||||
|
- 避免交易时段(防止影响决策)
|
||||||
|
|
||||||
|
2. **服务器部署**
|
||||||
|
- 本地运行需保持电脑开机
|
||||||
|
- 推荐使用云服务器24小时运行
|
||||||
|
- Docker部署最为便捷
|
||||||
|
|
||||||
|
3. **邮件配置**
|
||||||
|
- 使用授权码而非登录密码
|
||||||
|
- 选择稳定的邮箱服务(推荐QQ、163)
|
||||||
|
- 定期检查邮件是否正常接收
|
||||||
|
|
||||||
|
4. **功能组合**
|
||||||
|
- 定时分析 + 手动深度分析
|
||||||
|
- 邮件推送 + PDF导出存档
|
||||||
|
- 每周回顾对比历史报告
|
||||||
|
|
||||||
|
#### ⚠️ 注意事项
|
||||||
|
|
||||||
|
1. **程序需持续运行**
|
||||||
|
- 本地部署需保持程序运行
|
||||||
|
- 关闭窗口定时任务停止
|
||||||
|
- 推荐服务器或Docker部署
|
||||||
|
|
||||||
|
2. **邮箱发送限制**
|
||||||
|
- QQ邮箱每天500封上限
|
||||||
|
- 163邮箱每天100封上限
|
||||||
|
- 智策每天1封不会超限
|
||||||
|
|
||||||
|
3. **数据时效性**
|
||||||
|
- 使用前一交易日数据
|
||||||
|
- 盘前运行获取完整数据
|
||||||
|
- 盘中数据有延迟
|
||||||
|
|
||||||
|
4. **网络依赖**
|
||||||
|
- 需稳定网络连接
|
||||||
|
- 数据获取有重试机制
|
||||||
|
- 失败会在日志中记录
|
||||||
|
|
||||||
|
#### 🔮 后续规划
|
||||||
|
|
||||||
|
##### v1.3.0 (计划中)
|
||||||
|
- [ ] 多时段分析(一天多次)
|
||||||
|
- [ ] 微信推送支持
|
||||||
|
- [ ] 自定义邮件模板
|
||||||
|
- [ ] 分析结果数据库存储
|
||||||
|
- [ ] 历史分析对比功能
|
||||||
|
|
||||||
|
##### v1.4.0 (规划中)
|
||||||
|
- [ ] Web端配置界面优化
|
||||||
|
- [ ] 移动端邮件优化
|
||||||
|
- [ ] 预警阈值设置
|
||||||
|
- [ ] 个性化关注板块
|
||||||
|
- [ ] 智能推送频率调整
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 版本对比
|
||||||
|
|
||||||
|
### v1.2.0 vs v1.1.0
|
||||||
|
|
||||||
|
#### 功能增强
|
||||||
|
- ✨ **定时分析**: 从无到有,实现每日自动分析
|
||||||
|
- ✨ **邮件推送**: 新增邮件通知,无需登录查看
|
||||||
|
- ✨ **手动触发**: 新增立即运行按钮,灵活使用
|
||||||
|
- ✨ **状态监控**: 新增运行状态显示,清晰可见
|
||||||
|
|
||||||
|
#### 稳定性提升
|
||||||
|
- 🐛 **网络重试**: 数据获取失败自动重试3次
|
||||||
|
- 🐛 **异常处理**: 完善异常捕获和日志记录
|
||||||
|
- 🐛 **线程安全**: 解决多线程状态管理问题
|
||||||
|
|
||||||
|
#### 用户体验
|
||||||
|
- 💡 **操作便捷**: 一键启动,无需手动触发
|
||||||
|
- 💡 **反馈清晰**: 所有操作提供即时反馈
|
||||||
|
- 💡 **文档完善**: 新增4份详细使用文档
|
||||||
|
|
||||||
|
#### 代码质量
|
||||||
|
- 📦 **模块化**: 独立scheduler模块,职责清晰
|
||||||
|
- 📦 **可维护**: 代码注释完善,易于维护
|
||||||
|
- 📦 **可扩展**: 预留扩展接口,便于后续升级
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## v1.1.0 (2024-01-14) - PDF导出功能
|
||||||
|
|
||||||
|
### 新增功能
|
||||||
|
- ✨ PDF报告导出功能
|
||||||
|
- 📊 数据可视化优化
|
||||||
|
- 📝 完整文档体系
|
||||||
|
|
||||||
|
### 技术实现
|
||||||
|
- `sector_strategy_pdf.py` - PDF生成模块
|
||||||
|
- `reportlab` - PDF生成库
|
||||||
|
- 中文字体支持(SimHei)
|
||||||
|
|
||||||
|
### 文档
|
||||||
|
- 《智策PDF导出说明.md》
|
||||||
|
- 《智策系统架构说明.md》
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## v1.0.0 (2024-01-13) - 首次发布
|
||||||
|
|
||||||
|
### 核心功能
|
||||||
|
- 🎉 智策系统上线
|
||||||
|
- 🤖 四位AI智能体协同分析
|
||||||
|
- 📊 板块多空/轮动/热度预测
|
||||||
|
- 📈 数据可视化展示
|
||||||
|
|
||||||
|
### 技术栈
|
||||||
|
- Streamlit - Web框架
|
||||||
|
- AKShare - 数据源
|
||||||
|
- DeepSeek - AI模型
|
||||||
|
- Plotly - 数据可视化
|
||||||
|
|
||||||
|
### 模块
|
||||||
|
- `sector_strategy_data.py` - 数据获取
|
||||||
|
- `sector_strategy_agents.py` - AI智能体
|
||||||
|
- `sector_strategy_engine.py` - 综合引擎
|
||||||
|
- `sector_strategy_ui.py` - UI界面
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 升级指南
|
||||||
|
|
||||||
|
### 从 v1.1.0 升级到 v1.2.0
|
||||||
|
|
||||||
|
#### 1. 更新代码
|
||||||
|
```bash
|
||||||
|
git pull origin main
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 2. 检查依赖
|
||||||
|
```bash
|
||||||
|
pip install -r requirements.txt
|
||||||
|
# schedule库已自动安装
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 3. 配置邮件
|
||||||
|
编辑 `.env` 文件,添加:
|
||||||
|
```env
|
||||||
|
EMAIL_ENABLED=true
|
||||||
|
SMTP_SERVER=smtp.qq.com
|
||||||
|
SMTP_PORT=587
|
||||||
|
EMAIL_FROM=your-email@qq.com
|
||||||
|
EMAIL_PASSWORD=authorization-code
|
||||||
|
EMAIL_TO=recipient@qq.com
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 4. 重启程序
|
||||||
|
```bash
|
||||||
|
# 停止旧程序
|
||||||
|
Ctrl+C
|
||||||
|
|
||||||
|
# 启动新程序
|
||||||
|
streamlit run app.py
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 5. 验证功能
|
||||||
|
- 访问"智策板块"页面
|
||||||
|
- 展开"⏰ 定时分析设置"
|
||||||
|
- 查看邮件配置状态是否 ✅
|
||||||
|
- 点击"🔄 立即运行一次"测试
|
||||||
|
- 查收邮件验证
|
||||||
|
|
||||||
|
### 配置迁移
|
||||||
|
|
||||||
|
#### .env 文件更新
|
||||||
|
```env
|
||||||
|
# 新增邮件配置
|
||||||
|
EMAIL_ENABLED=true
|
||||||
|
SMTP_SERVER=smtp.qq.com
|
||||||
|
SMTP_PORT=587
|
||||||
|
EMAIL_FROM=your-email@qq.com
|
||||||
|
EMAIL_PASSWORD=authorization-code
|
||||||
|
EMAIL_TO=recipient@qq.com
|
||||||
|
|
||||||
|
# 原有配置保持不变
|
||||||
|
DEEPSEEK_API_KEY=sk-xxx
|
||||||
|
DEEPSEEK_BASE_URL=https://api.deepseek.com
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 无需修改的部分
|
||||||
|
- DeepSeek API配置
|
||||||
|
- Tushare配置(如有)
|
||||||
|
- MiniQMT配置(如有)
|
||||||
|
- 其他自定义配置
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 反馈与支持
|
||||||
|
|
||||||
|
### 问题反馈
|
||||||
|
如遇到问题,请:
|
||||||
|
1. 查阅相关文档
|
||||||
|
2. 检查日志输出
|
||||||
|
3. 提交Issue反馈
|
||||||
|
|
||||||
|
### 功能建议
|
||||||
|
欢迎提出改进建议:
|
||||||
|
- 新功能需求
|
||||||
|
- 用户体验优化
|
||||||
|
- 性能提升方案
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**智策定时分析 v1.2.0** - 让投资策略分析自动化 ⏰📧🎯
|
||||||
|
|
||||||
|
更新时间:2025-01-15
|
||||||
|
|
||||||
+378
@@ -0,0 +1,378 @@
|
|||||||
|
# 智策定时分析部署清单
|
||||||
|
|
||||||
|
## ✅ 功能完成情况
|
||||||
|
|
||||||
|
### 已完成模块
|
||||||
|
- ✅ **核心模块**: `sector_strategy_scheduler.py` - 定时任务核心逻辑
|
||||||
|
- ✅ **UI模块**: `sector_strategy_ui.py` - 添加定时分析设置界面
|
||||||
|
- ✅ **邮件集成**: 集成 `notification_service.py` 邮件功能
|
||||||
|
- ✅ **文档**: 完整的使用指南和快速开始文档
|
||||||
|
|
||||||
|
### 新增功能
|
||||||
|
1. ⏰ **每日定时分析** - 可设置每天固定时间自动运行
|
||||||
|
2. 📧 **邮件推送** - 分析完成后自动发送到配置邮箱
|
||||||
|
3. 🎯 **手动触发** - 支持立即运行一次分析
|
||||||
|
4. 📊 **状态监控** - 实时查看定时任务运行状态
|
||||||
|
5. 🔄 **灵活控制** - 启动/停止/修改运行时间
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📋 部署步骤
|
||||||
|
|
||||||
|
### 步骤1: 检查依赖
|
||||||
|
所有必需的Python库已安装:
|
||||||
|
```bash
|
||||||
|
schedule # 定时任务
|
||||||
|
smtplib # 邮件发送(Python内置)
|
||||||
|
```
|
||||||
|
|
||||||
|
### 步骤2: 配置邮件
|
||||||
|
编辑 `.env` 文件,添加邮件配置:
|
||||||
|
|
||||||
|
```env
|
||||||
|
# 邮件通知配置
|
||||||
|
EMAIL_ENABLED=true
|
||||||
|
SMTP_SERVER=smtp.qq.com
|
||||||
|
SMTP_PORT=587
|
||||||
|
EMAIL_FROM=your-email@qq.com
|
||||||
|
EMAIL_PASSWORD=your-authorization-code
|
||||||
|
EMAIL_TO=recipient@qq.com
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 常用邮箱SMTP配置
|
||||||
|
| 邮箱服务 | SMTP服务器 | 端口 | 说明 |
|
||||||
|
|---------|-----------|------|------|
|
||||||
|
| QQ邮箱 | smtp.qq.com | 587/465 | 需开启SMTP并获取授权码 |
|
||||||
|
| 163邮箱 | smtp.163.com | 465 | 需开启SMTP并获取授权码 |
|
||||||
|
| Gmail | smtp.gmail.com | 587 | 需开启两步验证和应用专用密码 |
|
||||||
|
| Outlook | smtp.office365.com | 587 | 使用账户密码 |
|
||||||
|
|
||||||
|
#### 如何获取授权码(以QQ邮箱为例)
|
||||||
|
1. 登录QQ邮箱网页版
|
||||||
|
2. 进入"设置" → "账户"
|
||||||
|
3. 找到"POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务"
|
||||||
|
4. 开启"IMAP/SMTP服务"
|
||||||
|
5. 点击"生成授权码"
|
||||||
|
6. 将授权码填入 `EMAIL_PASSWORD`
|
||||||
|
|
||||||
|
### 步骤3: 验证邮件配置
|
||||||
|
启动程序后,在"智策板块"页面:
|
||||||
|
1. 展开"⏰ 定时分析设置"
|
||||||
|
2. 查看"邮件配置状态"
|
||||||
|
- ✅ 绿色表示配置正确
|
||||||
|
- ❌ 红色表示配置错误
|
||||||
|
|
||||||
|
### 步骤4: 设置定时任务
|
||||||
|
1. 在"设置定时时间"选择运行时间(默认9:00)
|
||||||
|
2. 点击"▶️ 启动定时任务"
|
||||||
|
3. 系统显示"✅ 定时任务已启动"
|
||||||
|
|
||||||
|
### 步骤5: 测试功能
|
||||||
|
点击"🔄 立即运行一次"按钮:
|
||||||
|
- 系统立即执行一次完整分析
|
||||||
|
- 分析完成后发送邮件
|
||||||
|
- 验证邮件是否收到
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📧 邮件内容示例
|
||||||
|
|
||||||
|
### 邮件标题
|
||||||
|
```
|
||||||
|
智策板块分析报告 - 2024-01-15 09:00
|
||||||
|
```
|
||||||
|
|
||||||
|
### 邮件正文
|
||||||
|
```
|
||||||
|
智策板块分析报告
|
||||||
|
分析时间:2024-01-15 09:00:00
|
||||||
|
|
||||||
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
|
📊 板块多空预测
|
||||||
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
|
|
||||||
|
【看多板块】(信心度 ≥ 6)
|
||||||
|
✓ 新能源汽车 (信心度: 8.5) - AI新模型带来产业链机会
|
||||||
|
✓ 人工智能 (信心度: 8.0) - 政策支持,资金持续流入
|
||||||
|
✓ 半导体 (信心度: 7.5) - 国产替代加速
|
||||||
|
|
||||||
|
【看空板块】(信心度 ≥ 6)
|
||||||
|
✗ 地产开发 (信心度: 7.0) - 政策压制,成交低迷
|
||||||
|
|
||||||
|
【中性板块】
|
||||||
|
○ 医药生物 (信心度: 5.0) - 震荡整理中
|
||||||
|
|
||||||
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
|
🔄 板块轮动预测
|
||||||
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
|
|
||||||
|
【强势主导板块】
|
||||||
|
🔥 人工智能 (评分: 9.0) - 持续资金涌入,保持强势
|
||||||
|
🔥 新能源汽车 (评分: 8.5) - 板块龙头带动
|
||||||
|
|
||||||
|
【潜力接力板块】
|
||||||
|
⭐ 半导体 (评分: 8.0) - 有望承接资金轮动
|
||||||
|
⭐ 军工 (评分: 7.5) - 情绪升温,关注突破
|
||||||
|
|
||||||
|
【衰退避险板块】
|
||||||
|
📉 地产开发 (评分: 3.0) - 资金持续流出
|
||||||
|
|
||||||
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
|
🌡️ 板块热度排行 TOP5
|
||||||
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
|
|
||||||
|
1. 🥇 人工智能 (热度: 95.0, 趋势: 🔥升温)
|
||||||
|
2. 🥈 新能源汽车 (热度: 92.0, 趋势: 🔥升温)
|
||||||
|
3. 🥉 半导体 (热度: 88.0, 趋势: ➡️持平)
|
||||||
|
4. 军工 (热度: 85.0, 趋势: 🔥升温)
|
||||||
|
5. 医药生物 (热度: 78.0, 趋势: ❄️降温)
|
||||||
|
|
||||||
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
|
📝 策略总结
|
||||||
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
|
|
||||||
|
【市场观点】
|
||||||
|
科技板块延续强势,政策面和资金面支撑明确。传统板块承压,
|
||||||
|
结构性行情特征显著。
|
||||||
|
|
||||||
|
【核心机会】
|
||||||
|
1. 重点关注人工智能、新能源汽车产业链
|
||||||
|
2. 半导体板块有轮动潜力,可适度布局
|
||||||
|
3. 军工板块情绪升温,关注龙头突破
|
||||||
|
|
||||||
|
【风险提示】
|
||||||
|
1. 地产板块持续低迷,规避相关标的
|
||||||
|
2. 热门板块短期涨幅较大,注意回调风险
|
||||||
|
3. 市场波动加大,控制仓位,设置止损
|
||||||
|
|
||||||
|
【操作策略】
|
||||||
|
✓ 持有:人工智能、新能源汽车龙头
|
||||||
|
✓ 关注:半导体板块轮动机会
|
||||||
|
✓ 规避:地产、周期等弱势板块
|
||||||
|
|
||||||
|
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||||
|
|
||||||
|
完整分析请登录智策系统查看
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎮 使用说明
|
||||||
|
|
||||||
|
### 启动定时任务
|
||||||
|
1. 访问"智策板块"页面
|
||||||
|
2. 展开"⏰ 定时分析设置"
|
||||||
|
3. 设置运行时间
|
||||||
|
4. 点击"▶️ 启动定时任务"
|
||||||
|
5. 系统后台自动运行,无需保持页面打开
|
||||||
|
|
||||||
|
### 停止定时任务
|
||||||
|
1. 展开"⏰ 定时分析设置"
|
||||||
|
2. 点击"⏸️ 停止定时任务"
|
||||||
|
3. 任务立即停止
|
||||||
|
|
||||||
|
### 手动运行分析
|
||||||
|
1. 点击"🔄 立即运行一次"
|
||||||
|
2. 等待分析完成
|
||||||
|
3. 查收邮件
|
||||||
|
|
||||||
|
### 查看运行状态
|
||||||
|
实时显示:
|
||||||
|
- ✅ 任务运行状态(运行中/已停止)
|
||||||
|
- 📊 上次运行时间
|
||||||
|
- 📧 邮件发送状态
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ⚠️ 注意事项
|
||||||
|
|
||||||
|
### 1. 服务器运行
|
||||||
|
定时任务需要程序持续运行:
|
||||||
|
- **本地部署**: 保持程序运行,电脑不关机
|
||||||
|
- **服务器部署**: 使用Docker或云服务器24小时运行
|
||||||
|
- **推荐**: 使用云服务器部署(阿里云、腾讯云等)
|
||||||
|
|
||||||
|
### 2. 邮件发送限制
|
||||||
|
- QQ邮箱:每天500封上限
|
||||||
|
- 163邮箱:每天100封上限
|
||||||
|
- 智策定时分析每天1封,不会超限
|
||||||
|
|
||||||
|
### 3. 运行时间建议
|
||||||
|
- **盘前策略**: 8:00-9:00(推荐8:30)
|
||||||
|
- **盘后复盘**: 15:30-17:00(推荐16:00)
|
||||||
|
- **晚间研究**: 19:00-22:00(推荐21:00)
|
||||||
|
|
||||||
|
### 4. 数据时效性
|
||||||
|
- 使用前一交易日收盘数据
|
||||||
|
- 盘前运行获取昨日完整数据
|
||||||
|
- 盘中数据有延迟
|
||||||
|
|
||||||
|
### 5. 网络稳定性
|
||||||
|
- 需要稳定网络连接
|
||||||
|
- 数据获取失败会自动重试3次
|
||||||
|
- 建议服务器部署在网络稳定环境
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔧 故障排查
|
||||||
|
|
||||||
|
### 问题1: 邮件发送失败
|
||||||
|
**症状**: 分析完成但未收到邮件
|
||||||
|
|
||||||
|
**排查步骤**:
|
||||||
|
1. 检查 `.env` 文件邮件配置是否正确
|
||||||
|
2. 验证SMTP服务器和端口
|
||||||
|
3. 确认授权码(不是登录密码)
|
||||||
|
4. 查看系统日志中的错误信息
|
||||||
|
5. 测试手动运行一次,观察错误提示
|
||||||
|
|
||||||
|
**解决方案**:
|
||||||
|
```bash
|
||||||
|
# 1. 验证邮件配置
|
||||||
|
检查 .env 中:
|
||||||
|
- EMAIL_ENABLED=true
|
||||||
|
- SMTP_SERVER 正确
|
||||||
|
- EMAIL_FROM 和 EMAIL_PASSWORD 正确
|
||||||
|
|
||||||
|
# 2. 测试SMTP连接
|
||||||
|
python -c "
|
||||||
|
import smtplib
|
||||||
|
server = smtplib.SMTP('smtp.qq.com', 587)
|
||||||
|
server.starttls()
|
||||||
|
server.login('your-email@qq.com', 'authorization-code')
|
||||||
|
print('✓ 邮件配置正确')
|
||||||
|
server.quit()
|
||||||
|
"
|
||||||
|
```
|
||||||
|
|
||||||
|
### 问题2: 定时任务未运行
|
||||||
|
**症状**: 到了设定时间但没有执行分析
|
||||||
|
|
||||||
|
**排查步骤**:
|
||||||
|
1. 检查定时任务状态(是否显示"运行中")
|
||||||
|
2. 确认程序是否持续运行
|
||||||
|
3. 查看系统时间是否正确
|
||||||
|
4. 检查是否有错误日志
|
||||||
|
|
||||||
|
**解决方案**:
|
||||||
|
- 重新启动定时任务
|
||||||
|
- 手动运行一次测试
|
||||||
|
- 检查系统日志
|
||||||
|
|
||||||
|
### 问题3: 数据获取失败
|
||||||
|
**症状**: 提示"数据获取失败"
|
||||||
|
|
||||||
|
**排查步骤**:
|
||||||
|
1. 检查网络连接
|
||||||
|
2. 验证AKShare接口可用性
|
||||||
|
3. 查看是否被限流
|
||||||
|
|
||||||
|
**解决方案**:
|
||||||
|
- 系统已内置3次重试机制
|
||||||
|
- 延迟1秒后再次尝试
|
||||||
|
- 如持续失败,可能是数据源维护
|
||||||
|
|
||||||
|
### 问题4: 程序崩溃
|
||||||
|
**症状**: 程序异常退出
|
||||||
|
|
||||||
|
**排查步骤**:
|
||||||
|
1. 查看Python错误堆栈
|
||||||
|
2. 检查磁盘空间
|
||||||
|
3. 验证依赖库完整性
|
||||||
|
|
||||||
|
**解决方案**:
|
||||||
|
```bash
|
||||||
|
# 重新安装依赖
|
||||||
|
pip install -r requirements.txt
|
||||||
|
|
||||||
|
# 检查模块导入
|
||||||
|
python -c "from sector_strategy_scheduler import sector_strategy_scheduler; print('OK')"
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📊 性能监控
|
||||||
|
|
||||||
|
### 运行日志
|
||||||
|
系统会输出运行日志:
|
||||||
|
```
|
||||||
|
[智策定时] 调度器已初始化
|
||||||
|
[智策定时] 定时任务已设置为每天 09:00 运行
|
||||||
|
[智策定时] ========== 开始执行智策分析 ==========
|
||||||
|
[智策定时] 数据采集中...
|
||||||
|
[智策定时] AI分析中...
|
||||||
|
[智策定时] 发送邮件中...
|
||||||
|
[智策定时] ✓ 分析完成,邮件已发送
|
||||||
|
[智策定时] ========================================
|
||||||
|
```
|
||||||
|
|
||||||
|
### 资源占用
|
||||||
|
- **CPU**: 分析时10-30%,空闲时<1%
|
||||||
|
- **内存**: 约200-500MB
|
||||||
|
- **网络**: 数据获取约10-50MB
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🚀 部署建议
|
||||||
|
|
||||||
|
### 本地开发
|
||||||
|
适合测试和开发:
|
||||||
|
```bash
|
||||||
|
# 启动程序
|
||||||
|
streamlit run app.py
|
||||||
|
|
||||||
|
# 程序运行在 http://localhost:8501
|
||||||
|
```
|
||||||
|
|
||||||
|
### 服务器部署
|
||||||
|
适合长期使用:
|
||||||
|
|
||||||
|
#### Docker部署(推荐)
|
||||||
|
```bash
|
||||||
|
# 构建镜像
|
||||||
|
docker build -t agentsstock .
|
||||||
|
|
||||||
|
# 运行容器
|
||||||
|
docker run -d -p 8501:8501 \
|
||||||
|
--name agentsstock \
|
||||||
|
--restart always \
|
||||||
|
agentsstock
|
||||||
|
```
|
||||||
|
|
||||||
|
#### 云服务器部署
|
||||||
|
1. 选择云服务提供商(阿里云、腾讯云、AWS等)
|
||||||
|
2. 选择配置:2核4G内存即可
|
||||||
|
3. 安装Python环境和依赖
|
||||||
|
4. 配置防火墙开放8501端口
|
||||||
|
5. 使用tmux或screen保持程序运行
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📚 相关文档
|
||||||
|
|
||||||
|
- [智策定时分析使用指南.md](智策定时分析使用指南.md) - 详细使用教程
|
||||||
|
- [智策功能总览.md](智策功能总览.md) - 功能全景
|
||||||
|
- [智策板块使用指南.md](智策板块使用指南.md) - 完整使用指南
|
||||||
|
- [环境配置功能说明.md](环境配置功能说明.md) - 配置说明
|
||||||
|
- [邮件配置指南.md](邮件配置指南.md) - 邮件配置详解
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## ✅ 部署验证清单
|
||||||
|
|
||||||
|
完成部署后,请验证以下项目:
|
||||||
|
|
||||||
|
- [ ] Python环境正常(Python 3.8+)
|
||||||
|
- [ ] 依赖库已安装(schedule等)
|
||||||
|
- [ ] `.env` 文件已配置
|
||||||
|
- [ ] 邮件配置状态显示 ✅
|
||||||
|
- [ ] 手动运行一次测试成功
|
||||||
|
- [ ] 收到测试邮件
|
||||||
|
- [ ] 定时任务已启动
|
||||||
|
- [ ] 定时任务状态显示"运行中"
|
||||||
|
- [ ] 程序持续运行(服务器部署)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**智策定时分析** - 自动化投资策略分析 ⏰📧🎯
|
||||||
|
|
||||||
@@ -154,6 +154,13 @@
|
|||||||
- AI智能体分析摘要
|
- AI智能体分析摘要
|
||||||
- 综合研判报告
|
- 综合研判报告
|
||||||
|
|
||||||
|
### 7. 定时分析(新功能)⭐
|
||||||
|
点击"⏰ 定时分析设置"展开器:
|
||||||
|
- 设置每天运行时间(默认9:00)
|
||||||
|
- 启动定时任务
|
||||||
|
- 系统每天自动分析并发送邮件
|
||||||
|
- 详见《智策定时分析使用指南.md》
|
||||||
|
|
||||||
## 💡 使用技巧
|
## 💡 使用技巧
|
||||||
|
|
||||||
### 1. 最佳使用时间
|
### 1. 最佳使用时间
|
||||||
|
|||||||
@@ -47,6 +47,14 @@ streamlit run app.py
|
|||||||
3. 点击"💾 下载PDF"按钮
|
3. 点击"💾 下载PDF"按钮
|
||||||
4. PDF包含完整分析内容,方便保存和分享
|
4. PDF包含完整分析内容,方便保存和分享
|
||||||
|
|
||||||
|
### 第六步:设置定时分析(可选)⭐
|
||||||
|
1. 展开"⏰ 定时分析设置"
|
||||||
|
2. 配置邮件设置(.env文件)
|
||||||
|
3. 设置每天运行时间
|
||||||
|
4. 点击"▶️ 启动"
|
||||||
|
5. 系统每天自动分析并发送邮件
|
||||||
|
6. 详细说明见《智策定时分析使用指南.md》
|
||||||
|
|
||||||
## 💡 快速应用
|
## 💡 快速应用
|
||||||
|
|
||||||
### 场景1:今日盘前布局
|
### 场景1:今日盘前布局
|
||||||
|
|||||||
Reference in New Issue
Block a user