v1.6.0: 目标跟踪(概念/主题/股票) - watch_targets表+概念智能体跟踪(关键词检索+受益个股+影响度判定+邮件通知), 自动化页加持仓管理和目标管理, 报告支持股票/概念双类型

This commit is contained in:
2026-08-19 23:49:37 +08:00
parent b34006c0d8
commit 9406f9de43
7 changed files with 389 additions and 65 deletions
+27 -4
View File
@@ -689,18 +689,18 @@ def api_tracking_detail(rid):
@app.route("/api/tracking/run", methods=["POST"])
def api_tracking_run():
"""立即跟踪全部自选股(后台)"""
"""立即跟踪全部目标(持仓+概念/主题/股票,后台)"""
import threading
def run():
from engine.agent import track_watchlist
from engine.agent import track_all
try:
track_watchlist()
track_all()
except Exception as e:
log.error("track run fail: %s", e)
threading.Thread(target=run, daemon=True).start()
return jsonify({"ok": True, "msg": "跟踪任务已启动(逐分析,约每只30-60秒)"})
return jsonify({"ok": True, "msg": "跟踪任务已启动(逐目标分析,约每只30-60秒)"})
@app.route("/api/tracking/run/<code>", methods=["POST"])
@@ -718,6 +718,29 @@ def api_tracking_run_one(code):
return jsonify({"ok": True, "msg": "跟踪已启动"})
@app.route("/api/targets")
def api_targets_list():
from engine.agent import list_targets
return jsonify({"items": list_targets()})
@app.route("/api/targets", methods=["POST"])
def api_targets_add():
from engine.agent import add_target
body = request.get_json(silent=True) or {}
r = add_target(body.get("type", "concept"), body.get("name", ""),
body.get("code", ""), body.get("keywords", ""))
if r.get("error"):
return jsonify(r), 400
return jsonify(r)
@app.route("/api/targets/<int:tid>", methods=["DELETE"])
def api_targets_delete(tid):
from engine.agent import delete_target
return jsonify(delete_target(tid))
# ------------------------------------------------------------------ 数据管理
@app.route("/api/admin/stats")
def api_admin_stats():