自成长体系补齐:分支扫描+每日剪枝+决策树全覆盖+分支输出
核心改动: 1. 创建 branch_scanner.py — 每15分钟扫价格→评估分支适用性→记录trigger_count cron: 分支自成长-盘中 (15,30,45,00 9-15) 2. 创建 prune_branches.py — 每日21:00剪枝(触发>=5次且成功率<50% → 淘汰) cron: 分支剪枝-每日 (0 21 * * 1-5) — 之前是每周,频率太低 3. strategy_tree.py: _check_branch_condition 新增 price_lower 支持 buy_dip 分支同时检查上下界(price<=entry_high AND price_lower>=entry_low) 4. 43只股票全部补全决策树(之前只有6只) init_default_branches 生成每只6条分支:止损/回调买入/突破追涨/减仓/止盈/持有 5. stale_push_wlin 分支输出已存在(302-315行加载策略树,437-455行评估+追加) 下一期报告即显示:【弱势震荡→buy】价格回调到支撑区,弱势市场低吸 新增: 南亚新材(688519) 全面分析+策略+自选 买入区335~350 止损320 止盈400 RR=1.7 6月从285拉至409(+43%)后急跌至331(-19%),今日反弹缩量。高PE(228)炒作品种,等回调确认支撑
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,22 @@
|
||||
记录知微对MoFin系统的缺陷修复和知识萃取项。
|
||||
|
||||
## 2026-06-23 09:00 数据采集脚本修复
|
||||
|
||||
**发现了什么:** `market_watch.py` cron任务报错,exit code 1
|
||||
- 错误:`ModuleNotFoundError: No module named 'mofin_db'`
|
||||
- 原因:脚本在 `/home/hmo/.hermes/scripts/` 下运行,Python路径不包含 `/home/hmo/MoFin/`
|
||||
|
||||
**修改了什么:**
|
||||
- 文件:`/home/hmo/.hermes/scripts/market_watch.py`
|
||||
- 在第19行(`from mofin_db import` 之前)插入:
|
||||
```python
|
||||
import sys
|
||||
sys.path.insert(0, '/home/hmo/MoFin')
|
||||
```
|
||||
|
||||
**效果预期:** 下次cron触发时脚本能正常导入mofin_db并完成市场数据采集+SQLite写入。
|
||||
|
||||
**同步发现的策略检查问题:**
|
||||
- 自选股18只全部处于买入区(价格距离买入区<3%),属正常范围
|
||||
- 其中2只策略为空(楚江新材、中谷物流)— 需补充
|
||||
- 整体仓位93.02%,弱势+深套占比41.9%>40%
|
||||
@@ -0,0 +1,148 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
branch_scanner.py — 盘中分支扫描器
|
||||
|
||||
每15分钟跑一轮:
|
||||
1. 读取所有有 strategy_tree 的股票
|
||||
2. 获取实时价格
|
||||
3. 评估每个分支在当前情景下是否适用
|
||||
4. 适用分支 → 记录 trigger_count + 推送信号
|
||||
|
||||
自成长核心组件:让分支条件得到实际验证。
|
||||
"""
|
||||
|
||||
import json, sys, os, re
|
||||
from datetime import datetime, date
|
||||
from urllib.request import Request, urlopen
|
||||
|
||||
DECISIONS_PATH = "/home/hmo/web-dashboard/data/decisions.json"
|
||||
WATCHLIST_PATH = "/home/hmo/web-dashboard/data/watchlist.json"
|
||||
MACRO_PATH = "/home/hmo/web-dashboard/data/macro_context.json"
|
||||
EVENTS_PATH = "/home/hmo/web-dashboard/data/price_events.json"
|
||||
XMPP_URL = "http://127.0.0.1:5805/"
|
||||
|
||||
|
||||
def get_price(code):
|
||||
"""腾讯API实时价格"""
|
||||
mkt = "sh" if code.startswith("6") or code.startswith("5") else "sz"
|
||||
url = f"http://qt.gtimg.cn/q={mkt}{code}"
|
||||
req = Request(url, headers={"User-Agent": "Mozilla/5.0"})
|
||||
try:
|
||||
resp = urlopen(req, timeout=5).read().decode("gbk")
|
||||
parts = resp.split("~")
|
||||
if len(parts) > 3:
|
||||
return float(parts[3])
|
||||
except Exception:
|
||||
pass
|
||||
return None
|
||||
|
||||
|
||||
def get_scenario():
|
||||
"""读当前情景"""
|
||||
try:
|
||||
sys.path.insert(0, "/home/hmo/MoFin")
|
||||
from strategy_tree import detect_scenario
|
||||
return detect_scenario()
|
||||
except Exception:
|
||||
return {"id": "unknown", "label": "未知", "confidence": 0}
|
||||
|
||||
|
||||
def load_decisions():
|
||||
try:
|
||||
with open(DECISIONS_PATH) as f:
|
||||
return json.load(f)
|
||||
except Exception:
|
||||
return {"decisions": []}
|
||||
|
||||
|
||||
def save_decisions(data):
|
||||
with open(DECISIONS_PATH, "w") as f:
|
||||
json.dump(data, f, indent=2, ensure_ascii=False)
|
||||
|
||||
|
||||
def check_condition(branch, scenario_id, price):
|
||||
"""检查分支条件是否满足"""
|
||||
cond = branch.get("condition", {})
|
||||
required_scenario = cond.get("scenario", "")
|
||||
if required_scenario and required_scenario != scenario_id:
|
||||
return False
|
||||
|
||||
price_cond = cond.get("price", "")
|
||||
if price_cond and price:
|
||||
ops = re.findall(r"([<>=!]+)\s*([\d.]+)", price_cond)
|
||||
for op, val_str in ops:
|
||||
val = float(val_str)
|
||||
if op == "<" and not (price < val): return False
|
||||
if op == ">" and not (price > val): return False
|
||||
if op == "<=" and not (price <= val): return False
|
||||
if op == ">=" and not (price >= val): return False
|
||||
return True
|
||||
|
||||
|
||||
def push_alert(msg):
|
||||
try:
|
||||
payload = json.dumps({"to": "hmo@yoin.fun", "body": msg, "type": "chat"}).encode()
|
||||
urlopen(XMPP_URL, data=payload, timeout=3)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
||||
def main():
|
||||
now = datetime.now()
|
||||
today = now.strftime("%Y-%m-%d")
|
||||
hour = now.hour
|
||||
|
||||
# 盘后才扫无意义
|
||||
if hour < 9 or hour > 16:
|
||||
print("SILENT: 非交易时段")
|
||||
return 0
|
||||
|
||||
scenario = get_scenario()
|
||||
sid = scenario.get("id", "unknown")
|
||||
data = load_decisions()
|
||||
decisions = data.get("decisions", [])
|
||||
|
||||
triggered = []
|
||||
for entry in decisions:
|
||||
code = entry.get("code", "")
|
||||
tree = entry.get("strategy_tree", {})
|
||||
branches = tree.get("branches", [])
|
||||
if not branches:
|
||||
continue
|
||||
|
||||
price = get_price(code)
|
||||
if not price:
|
||||
continue
|
||||
|
||||
for br in branches:
|
||||
if check_condition(br, sid, price):
|
||||
br["trigger_count"] = br.get("trigger_count", 0) + 1
|
||||
br["last_triggered"] = today
|
||||
triggered.append((code, entry.get("name", ""), br))
|
||||
|
||||
if triggered:
|
||||
save_decisions(data)
|
||||
print(f"[SCAN] {now.strftime('%H:%M')} 情景={sid} | {len(triggered)}个分支被触发")
|
||||
|
||||
# 推送重要触发
|
||||
alerts = []
|
||||
for code, name, br in triggered:
|
||||
action = br.get("action", {})
|
||||
action_type = action.get("type", "hold")
|
||||
priority = br.get("priority", 99)
|
||||
rationale = br.get("rationale", "")
|
||||
count = br.get("trigger_count", 1)
|
||||
if action_type != "hold":
|
||||
alerts.append(f" {code} {name}: {action_type}({rationale})触发{count}次")
|
||||
|
||||
if alerts:
|
||||
msg = f"【分支扫描】{now.strftime('%H:%M')} | 情景{sid}\n" + "\n".join(alerts)
|
||||
push_alert(msg)
|
||||
else:
|
||||
print(f"[SCAN] {now.strftime('%H:%M')} | 情景{sid} | 无触发")
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
+5953
-829
File diff suppressed because it is too large
Load Diff
+799
-879
File diff suppressed because it is too large
Load Diff
+147
-147
@@ -1,200 +1,200 @@
|
||||
{
|
||||
"updated_at": "2026-06-22 12:00:26",
|
||||
"data_timestamp": "2026-06-22 12:00:00",
|
||||
"session": "midday",
|
||||
"updated_at": "2026-06-24 09:35:49",
|
||||
"data_timestamp": "2026-06-24 09:35:45",
|
||||
"session": "morning",
|
||||
"has_valid_data": true,
|
||||
"indices": {
|
||||
"上证指数": {
|
||||
"price": 4098.01,
|
||||
"change_pct": 0.18,
|
||||
"high": 4106.08,
|
||||
"low": 4070.17
|
||||
"price": 4100.97,
|
||||
"change_pct": -0.13,
|
||||
"high": 4103.59,
|
||||
"low": 4090.1
|
||||
},
|
||||
"深证成指": {
|
||||
"price": 16077.2,
|
||||
"change_pct": 0.29,
|
||||
"high": 16204.79,
|
||||
"low": 15914.05
|
||||
"price": 15838.49,
|
||||
"change_pct": -0.1,
|
||||
"high": 15853.92,
|
||||
"low": 15782.4
|
||||
},
|
||||
"创业板指": {
|
||||
"price": 4284.03,
|
||||
"change_pct": 0.74,
|
||||
"high": 4326.91,
|
||||
"low": 4229.31
|
||||
"price": 4214.02,
|
||||
"change_pct": 0.52,
|
||||
"high": 4218.59,
|
||||
"low": 4181.91
|
||||
},
|
||||
"科创50": {
|
||||
"price": 1911.91,
|
||||
"change_pct": 0.02,
|
||||
"high": 1963.33,
|
||||
"low": 1879.59
|
||||
"price": 1923.85,
|
||||
"change_pct": 0.4,
|
||||
"high": 1923.85,
|
||||
"low": 1896.34
|
||||
},
|
||||
"恒生指数": {
|
||||
"price": 23715.46,
|
||||
"change_pct": -0.88,
|
||||
"high": 23811.76,
|
||||
"low": 23444.86
|
||||
"price": 23420.7,
|
||||
"change_pct": 0.36,
|
||||
"high": 23420.7,
|
||||
"low": 23420.7
|
||||
},
|
||||
"国企指数": {
|
||||
"price": 7900.2,
|
||||
"change_pct": -0.95,
|
||||
"high": 7935.55,
|
||||
"low": 7795.37
|
||||
"price": 7792.13,
|
||||
"change_pct": 0.42,
|
||||
"high": 7792.13,
|
||||
"low": 7792.13
|
||||
}
|
||||
},
|
||||
"structure": {
|
||||
"overall": "neutral",
|
||||
"description": "均衡"
|
||||
"description": "成长略强"
|
||||
},
|
||||
"key_sectors": [
|
||||
{
|
||||
"name": "机器人产业",
|
||||
"change_pct": -3.64
|
||||
},
|
||||
{
|
||||
"name": "通用航空",
|
||||
"change_pct": -3.12
|
||||
},
|
||||
{
|
||||
"name": "新能电池",
|
||||
"change_pct": 2.44
|
||||
"change_pct": -1.16
|
||||
},
|
||||
{
|
||||
"name": "上证资源",
|
||||
"change_pct": 1.76
|
||||
"change_pct": -0.79
|
||||
},
|
||||
{
|
||||
"name": "上证周期",
|
||||
"change_pct": 1.68
|
||||
"name": "新能电池",
|
||||
"change_pct": -0.75
|
||||
},
|
||||
{
|
||||
"name": "机器人产业",
|
||||
"change_pct": -0.67
|
||||
},
|
||||
{
|
||||
"name": "国证芯片",
|
||||
"change_pct": 1.45
|
||||
},
|
||||
{
|
||||
"name": "治理指数",
|
||||
"change_pct": 0.57
|
||||
"change_pct": 0.61
|
||||
},
|
||||
{
|
||||
"name": "上证信息",
|
||||
"change_pct": 0.52
|
||||
"change_pct": 0.58
|
||||
},
|
||||
{
|
||||
"name": "上证周期",
|
||||
"change_pct": -0.14
|
||||
},
|
||||
{
|
||||
"name": "治理指数",
|
||||
"change_pct": -0.1
|
||||
}
|
||||
],
|
||||
"top_gainers": [
|
||||
{
|
||||
"name": "非金属材料",
|
||||
"name": "化学制药",
|
||||
"code": "",
|
||||
"price": 0,
|
||||
"change": 5.42,
|
||||
"volume": 206.5,
|
||||
"turnover": 141.88,
|
||||
"net_inflow": -1.5,
|
||||
"up_count": 11,
|
||||
"change": 3.68,
|
||||
"volume": 2844.37,
|
||||
"turnover": 477.43,
|
||||
"net_inflow": -1.16,
|
||||
"up_count": 144,
|
||||
"down_count": 13,
|
||||
"avg_price": 16.79,
|
||||
"lead_stock": "新赣江",
|
||||
"lead_stock_change": 27.9
|
||||
},
|
||||
{
|
||||
"name": "生物制品",
|
||||
"code": "",
|
||||
"price": 0,
|
||||
"change": 2.96,
|
||||
"volume": 808.83,
|
||||
"turnover": 136.16,
|
||||
"net_inflow": -0.75,
|
||||
"up_count": 47,
|
||||
"down_count": 7,
|
||||
"avg_price": 16.83,
|
||||
"lead_stock": "赛升药业",
|
||||
"lead_stock_change": 18.44
|
||||
},
|
||||
{
|
||||
"name": "医疗服务",
|
||||
"code": "",
|
||||
"price": 0,
|
||||
"change": 2.39,
|
||||
"volume": 1079.74,
|
||||
"turnover": 225.78,
|
||||
"net_inflow": -0.93,
|
||||
"up_count": 44,
|
||||
"down_count": 11,
|
||||
"avg_price": 20.91,
|
||||
"lead_stock": "睿智医药",
|
||||
"lead_stock_change": 19.95
|
||||
},
|
||||
{
|
||||
"name": "医药商业",
|
||||
"code": "",
|
||||
"price": 0,
|
||||
"change": 2.35,
|
||||
"volume": 502.07,
|
||||
"turnover": 44.73,
|
||||
"net_inflow": -0.09,
|
||||
"up_count": 29,
|
||||
"down_count": 3,
|
||||
"avg_price": 68.71,
|
||||
"lead_stock": "东方碳素",
|
||||
"lead_stock_change": 21.01
|
||||
"avg_price": 8.91,
|
||||
"lead_stock": "合富中国",
|
||||
"lead_stock_change": 9.99
|
||||
},
|
||||
{
|
||||
"name": "中药",
|
||||
"code": "",
|
||||
"price": 0,
|
||||
"change": 2.18,
|
||||
"volume": 1208.33,
|
||||
"turnover": 107.45,
|
||||
"net_inflow": 2.87,
|
||||
"up_count": 57,
|
||||
"down_count": 10,
|
||||
"avg_price": 8.89,
|
||||
"lead_stock": "特一药业",
|
||||
"lead_stock_change": 9.97
|
||||
}
|
||||
],
|
||||
"top_losers": [
|
||||
{
|
||||
"name": "贵金属",
|
||||
"code": "",
|
||||
"price": 0,
|
||||
"change": -8.6,
|
||||
"volume": 1529.11,
|
||||
"turnover": 390.56,
|
||||
"net_inflow": -61.53,
|
||||
"up_count": 1,
|
||||
"down_count": 13,
|
||||
"avg_price": 25.54,
|
||||
"lead_stock": "株冶集团",
|
||||
"lead_stock_change": 4.42
|
||||
},
|
||||
{
|
||||
"name": "小金属",
|
||||
"code": "",
|
||||
"price": 0,
|
||||
"change": 4.8,
|
||||
"volume": 1503.62,
|
||||
"turnover": 737.33,
|
||||
"net_inflow": -13.54,
|
||||
"up_count": 26,
|
||||
"down_count": 3,
|
||||
"avg_price": 49.04,
|
||||
"lead_stock": "中钨高新",
|
||||
"lead_stock_change": 10.0
|
||||
"change": -5.58,
|
||||
"volume": 2154.58,
|
||||
"turnover": 1125.15,
|
||||
"net_inflow": -68.28,
|
||||
"up_count": 4,
|
||||
"down_count": 25,
|
||||
"avg_price": 52.22,
|
||||
"lead_stock": "长裕集团",
|
||||
"lead_stock_change": 9.99
|
||||
},
|
||||
{
|
||||
"name": "保险",
|
||||
"name": "工业金属",
|
||||
"code": "",
|
||||
"price": 0,
|
||||
"change": 4.78,
|
||||
"volume": 341.49,
|
||||
"turnover": 117.85,
|
||||
"net_inflow": 17.04,
|
||||
"change": -5.53,
|
||||
"volume": 6361.35,
|
||||
"turnover": 809.03,
|
||||
"net_inflow": -125.48,
|
||||
"up_count": 5,
|
||||
"down_count": 0,
|
||||
"avg_price": 34.51,
|
||||
"lead_stock": "新华保险",
|
||||
"lead_stock_change": 7.38
|
||||
},
|
||||
{
|
||||
"name": "证券",
|
||||
"code": "",
|
||||
"price": 0,
|
||||
"change": 3.78,
|
||||
"volume": 3200.28,
|
||||
"turnover": 409.47,
|
||||
"net_inflow": 71.49,
|
||||
"up_count": 50,
|
||||
"down_count": 0,
|
||||
"avg_price": 12.79,
|
||||
"lead_stock": "广发证券",
|
||||
"lead_stock_change": 9.98
|
||||
},
|
||||
{
|
||||
"name": "农化制品",
|
||||
"code": "",
|
||||
"price": 0,
|
||||
"change": 2.0,
|
||||
"volume": 1297.23,
|
||||
"turnover": 190.08,
|
||||
"net_inflow": 11.07,
|
||||
"up_count": 37,
|
||||
"down_count": 23,
|
||||
"avg_price": 14.65,
|
||||
"lead_stock": "川金诺",
|
||||
"lead_stock_change": 12.23
|
||||
"down_count": 50,
|
||||
"avg_price": 12.72,
|
||||
"lead_stock": "锌业股份",
|
||||
"lead_stock_change": 6.35
|
||||
}
|
||||
],
|
||||
"top_losers": [
|
||||
{
|
||||
"name": "自动化设备",
|
||||
"code": "",
|
||||
"price": 0,
|
||||
"change": -4.03,
|
||||
"volume": 1106.85,
|
||||
"turnover": 735.82,
|
||||
"net_inflow": -75.95,
|
||||
"up_count": 7,
|
||||
"down_count": 89,
|
||||
"avg_price": 66.48,
|
||||
"lead_stock": "博杰股份",
|
||||
"lead_stock_change": 7.6
|
||||
},
|
||||
{
|
||||
"name": "军工电子",
|
||||
"code": "",
|
||||
"price": 0,
|
||||
"change": -3.71,
|
||||
"volume": 893.12,
|
||||
"turnover": 287.08,
|
||||
"net_inflow": -29.04,
|
||||
"up_count": 3,
|
||||
"down_count": 59,
|
||||
"avg_price": 32.14,
|
||||
"lead_stock": "金信诺",
|
||||
"lead_stock_change": 4.47
|
||||
},
|
||||
{
|
||||
"name": "电机",
|
||||
"code": "",
|
||||
"price": 0,
|
||||
"change": -3.67,
|
||||
"volume": 307.45,
|
||||
"turnover": 62.49,
|
||||
"net_inflow": -10.21,
|
||||
"up_count": 3,
|
||||
"down_count": 23,
|
||||
"avg_price": 20.33,
|
||||
"lead_stock": "佳电股份",
|
||||
"lead_stock_change": 1.09
|
||||
}
|
||||
],
|
||||
"sector_up_ratio": 17.8,
|
||||
"sector_mood": "bearish"
|
||||
"sector_up_ratio": 48.9,
|
||||
"sector_mood": "neutral"
|
||||
}
|
||||
+6772
-823
File diff suppressed because it is too large
Load Diff
+247
-326
@@ -14,21 +14,20 @@
|
||||
"action": "持有观察 | ⚠️盈亏比偏低(1:1.0),不建议加仓 | 止损387.49 | 目标496.33 | 买入区435.13~440.67 | 信号:持有",
|
||||
"strategy_updated": "2026-06-19 16:01",
|
||||
"analysis": {
|
||||
"stop_loss": 362.24,
|
||||
"take_profit": 456.57,
|
||||
"entry_low": 430.6,
|
||||
"entry_high": 434.8,
|
||||
"action": "持有观察 | ⚠️盈亏比偏低(1:1.0),不建议加仓 | 止损362.24 | 目标456.57 | 买入区430.6~434.8 | 信号:持有",
|
||||
"tech_snapshot": "形态:带下影阴线/neutral 量价:数据不足 强撑:389.0 弱撑:430.6 弱压:440.2 强压:480.6",
|
||||
"reassessed_at": "2026-06-22 12:00",
|
||||
"stop_loss": 363.35,
|
||||
"take_profit": 440.92,
|
||||
"entry_low": 408.13,
|
||||
"entry_high": 420.27,
|
||||
"action": "持有观察 | ⚠️盈亏比偏低(1:1.2),不建议加仓 | 止损363.35 | 目标440.92 | 买入区408.13~420.27 | 信号:持有",
|
||||
"tech_snapshot": "形态:光头光脚阴线/bearish 量价:数据不足 强撑:357.07 弱撑:408.13 弱压:433.0 强压:483.47",
|
||||
"reassessed_at": "2026-06-24 09:00",
|
||||
"status": "updated",
|
||||
"rr_ratio": 1.03,
|
||||
"action_note": "⚠️盈亏比偏低(1:1.0),不建议加仓",
|
||||
"timing_signal": "持有"
|
||||
"rr_ratio": 1.19,
|
||||
"action_note": "⚠️盈亏比偏低(1:1.2),不建议加仓",
|
||||
"timing_signal": "大盘中性,行业偏弱,蓝筹,持有"
|
||||
},
|
||||
"price": 433.0,
|
||||
"change_pct": -1.64,
|
||||
"avg_price": 445.7552
|
||||
"price": 416.4,
|
||||
"change_pct": 0.39
|
||||
},
|
||||
{
|
||||
"code": "00981",
|
||||
@@ -44,21 +43,20 @@
|
||||
"action": "盈利持有 | ⚠️盈亏比偏低(1:1.0),不建议加仓 | 止损67.69 | 目标87.26 | 买入区73.68~76.57 | 信号:持有",
|
||||
"strategy_updated": "2026-06-19 16:01",
|
||||
"analysis": {
|
||||
"stop_loss": 66.37,
|
||||
"take_profit": 90.62,
|
||||
"entry_low": 76.5,
|
||||
"entry_high": 79.52,
|
||||
"action": "盈利持有 | ⚠️盈亏比偏低(1:1.1),不建议加仓 | 止损66.37 | 目标90.62 | 买入区76.5~79.52 | 信号:持有",
|
||||
"tech_snapshot": "形态:倒T线/射击之星/bearish 量价:数据不足 强撑:68.42 弱撑:76.5 弱压:81.88 强压:90.62",
|
||||
"reassessed_at": "2026-06-22 12:00",
|
||||
"stop_loss": 70.68,
|
||||
"take_profit": 88.59,
|
||||
"entry_low": 74.87,
|
||||
"entry_high": 78.61,
|
||||
"action": "盈利持有 | ⚠️盈亏比偏低(1:1.3),不建议加仓 | 止损70.68 | 目标88.59 | 买入区74.87~78.61 | 信号:持有",
|
||||
"tech_snapshot": "形态:倒T线/射击之星/bearish 量价:数据不足 强撑:66.68 弱撑:74.87 弱压:82.47 强压:92.28",
|
||||
"reassessed_at": "2026-06-24 09:00",
|
||||
"status": "updated",
|
||||
"rr_ratio": 1.11,
|
||||
"action_note": "⚠️盈亏比偏低(1:1.1),不建议加仓",
|
||||
"timing_signal": "持有"
|
||||
"rr_ratio": 1.29,
|
||||
"action_note": "⚠️盈亏比偏低(1:1.3),不建议加仓",
|
||||
"timing_signal": "大盘中性,行业中性,高估值,蓝筹,持有"
|
||||
},
|
||||
"price": 78.9,
|
||||
"change_pct": 3.14,
|
||||
"avg_price": 76.3899
|
||||
"price": 83.55,
|
||||
"change_pct": 7.32
|
||||
},
|
||||
{
|
||||
"code": "01088",
|
||||
@@ -74,21 +72,20 @@
|
||||
"action": "持有观察 | ⚠️盈亏比偏低(1:1.3),不建议加仓 | 止损35.09 | 目标42.9 | 买入区41.66~42.8 | 信号:持有",
|
||||
"strategy_updated": "2026-06-19 16:01",
|
||||
"analysis": {
|
||||
"stop_loss": 37.9,
|
||||
"take_profit": 46.43,
|
||||
"entry_low": 41.91,
|
||||
"stop_loss": 40.61,
|
||||
"take_profit": 44.57,
|
||||
"entry_low": 41.61,
|
||||
"entry_high": 42.37,
|
||||
"action": "持有观察 | ⚠️盈亏比偏低(1:0.8),不建议加仓 | 止损37.9 | 目标46.43 | 买入区41.91~42.37 | 信号:持有",
|
||||
"tech_snapshot": "形态:带下影阳线/bullish 量价:数据不足 强撑:38.31 弱撑:41.91 弱压:43.19 强压:46.43",
|
||||
"reassessed_at": "2026-06-22 12:00",
|
||||
"action": "持有观察 | ⚠️盈亏比偏低(1:1.2),不建议加仓 | 止损40.61 | 目标44.57 | 买入区41.61~42.37 | 信号:持有",
|
||||
"tech_snapshot": "形态:光头光脚阴线/bearish 量价:数据不足 强撑:38.31 弱撑:41.61 弱压:42.83 强压:46.43",
|
||||
"reassessed_at": "2026-06-24 09:00",
|
||||
"status": "updated",
|
||||
"rr_ratio": 0.83,
|
||||
"action_note": "⚠️盈亏比偏低(1:0.8),不建议加仓",
|
||||
"timing_signal": "持有"
|
||||
"rr_ratio": 1.17,
|
||||
"action_note": "⚠️盈亏比偏低(1:1.2),不建议加仓",
|
||||
"timing_signal": "大盘中性,行业中性,蓝筹,持有"
|
||||
},
|
||||
"price": 42.58,
|
||||
"change_pct": 0.57,
|
||||
"avg_price": 46.1659
|
||||
"price": 41.56,
|
||||
"change_pct": -1.19
|
||||
},
|
||||
{
|
||||
"code": "01211",
|
||||
@@ -104,21 +101,20 @@
|
||||
"action": "深套持有 | 深套持有 | 止损63.99 | 目标87.07 | 买入区72.77~84.89 | 信号:持有",
|
||||
"strategy_updated": "2026-06-19 16:01",
|
||||
"analysis": {
|
||||
"stop_loss": 61.7,
|
||||
"take_profit": 85.12,
|
||||
"entry_low": 70.16,
|
||||
"entry_high": 81.85,
|
||||
"action": "深套持有 | 深套持有 | 止损61.7 | 目标85.12 | 买入区70.16~81.85 | 信号:持有",
|
||||
"tech_snapshot": "形态:带下影阴线/neutral 量价:数据不足 强撑:67.0 弱撑:76.35 弱压:80.85 强压:89.6",
|
||||
"reassessed_at": "2026-06-22 12:00",
|
||||
"stop_loss": 65.31,
|
||||
"take_profit": 81.15,
|
||||
"entry_low": 68.27,
|
||||
"entry_high": 79.64,
|
||||
"action": "深套持有 | 深套持有 | 止损65.31 | 目标81.15 | 买入区68.27~79.64 | 信号:持有",
|
||||
"tech_snapshot": "形态:光头光脚阴线/bearish 量价:数据不足 强撑:64.18 弱撑:74.87 弱压:78.35 强压:88.98",
|
||||
"reassessed_at": "2026-06-24 09:00",
|
||||
"status": "updated",
|
||||
"rr_ratio": 1.0,
|
||||
"rr_ratio": 1.13,
|
||||
"action_note": "深套持有",
|
||||
"timing_signal": "持有"
|
||||
"timing_signal": "大盘中性,行业偏弱,蓝筹,持有"
|
||||
},
|
||||
"price": 78.35,
|
||||
"change_pct": -3.09,
|
||||
"avg_price": 105.4926
|
||||
"price": 74.9,
|
||||
"change_pct": -1.25
|
||||
},
|
||||
{
|
||||
"code": "01478",
|
||||
@@ -134,21 +130,20 @@
|
||||
"action": "深套持有 | 深套持有 | 止损7.33 | 目标10.39 | 买入区7.88~9.19 | 信号:持有",
|
||||
"strategy_updated": "2026-06-19 16:01",
|
||||
"analysis": {
|
||||
"stop_loss": 6.62,
|
||||
"take_profit": 9.37,
|
||||
"entry_low": 7.52,
|
||||
"entry_high": 8.78,
|
||||
"action": "深套持有 | 深套持有 | 止损6.62 | 目标9.37 | 买入区7.52~8.78 | 信号:持有",
|
||||
"tech_snapshot": "形态:光头光脚阴线/neutral 量价:数据不足 强撑:7.18 弱撑:8.14 弱压:8.75 强压:9.86",
|
||||
"reassessed_at": "2026-06-22 12:00",
|
||||
"stop_loss": 6.82,
|
||||
"take_profit": 9.32,
|
||||
"entry_low": 7.09,
|
||||
"entry_high": 8.27,
|
||||
"action": "深套持有 | 深套持有 | 止损6.82 | 目标9.32 | 买入区7.09~8.27 | 信号:持有",
|
||||
"tech_snapshot": "形态:光头光脚阴线/bearish 量价:数据不足 强撑:6.43 弱撑:7.61 弱压:8.38 强压:9.71",
|
||||
"reassessed_at": "2026-06-24 09:00",
|
||||
"status": "updated",
|
||||
"rr_ratio": 1.2,
|
||||
"rr_ratio": 1.26,
|
||||
"action_note": "深套持有",
|
||||
"timing_signal": "持有"
|
||||
"timing_signal": "大盘中性,行业中性,低估值,持有"
|
||||
},
|
||||
"price": 8.38,
|
||||
"change_pct": -4.23,
|
||||
"avg_price": 13.8666
|
||||
"price": 7.63,
|
||||
"change_pct": -3.17
|
||||
},
|
||||
{
|
||||
"code": "01888",
|
||||
@@ -164,21 +159,20 @@
|
||||
"action": "盈利持有 | 短炒强趋势持 | 止损86.34 | 目标141.9 | 买入区85.82~90.11 | 信号:强趋势持",
|
||||
"strategy_updated": "2026-06-19 16:01",
|
||||
"analysis": {
|
||||
"stop_loss": 81.61,
|
||||
"take_profit": 131.46,
|
||||
"entry_low": 87.18,
|
||||
"entry_high": 91.54,
|
||||
"action": "盈利持有 | 短炒强趋势持 | 止损81.61 | 目标131.46 | 买入区87.18~91.54 | 信号:强趋势持",
|
||||
"tech_snapshot": "形态:倒T线/射击之星/neutral 量价:数据不足 强撑:57.27 弱撑:87.18 弱压:98.43 强压:129.57",
|
||||
"reassessed_at": "2026-06-22 12:00",
|
||||
"stop_loss": 77.86,
|
||||
"take_profit": 106.95,
|
||||
"entry_low": 83.32,
|
||||
"entry_high": 87.49,
|
||||
"action": "持有观察 | 短炒强趋势持 | 止损77.86 | 目标106.95 | 买入区83.32~87.49 | 信号:强趋势持",
|
||||
"tech_snapshot": "形态:带下影阴线/neutral 量价:数据不足 强撑:51.48 弱撑:83.32 弱压:91.95 强压:123.78",
|
||||
"reassessed_at": "2026-06-24 09:00",
|
||||
"status": "updated",
|
||||
"rr_ratio": 10.01,
|
||||
"rr_ratio": 9.3,
|
||||
"action_note": "短炒强趋势持",
|
||||
"timing_signal": "强趋势持"
|
||||
"timing_signal": "大盘中性,行业偏弱,高估值,强趋势持"
|
||||
},
|
||||
"price": 91.95,
|
||||
"change_pct": 0.11,
|
||||
"avg_price": 88.7544
|
||||
"price": 94.4,
|
||||
"change_pct": 8.19
|
||||
},
|
||||
{
|
||||
"code": "02202",
|
||||
@@ -194,21 +188,20 @@
|
||||
"action": "深套持有 | 深套持有 | 止损2.0 | 目标2.85 | 买入区2.18~2.54 | 信号:持有",
|
||||
"strategy_updated": "2026-06-19 16:01",
|
||||
"analysis": {
|
||||
"stop_loss": 1.91,
|
||||
"take_profit": 2.63,
|
||||
"entry_low": 2.19,
|
||||
"entry_high": 2.55,
|
||||
"action": "深套持有 | 深套持有 | 止损1.91 | 目标2.63 | 买入区2.19~2.55 | 信号:持有",
|
||||
"tech_snapshot": "形态:锤子线/T字线/bullish 量价:数据不足 强撑:2.05 弱撑:2.37 弱压:2.46 强压:2.77",
|
||||
"reassessed_at": "2026-06-22 12:00",
|
||||
"stop_loss": 2.16,
|
||||
"take_profit": 2.68,
|
||||
"entry_low": 2.16,
|
||||
"entry_high": 2.52,
|
||||
"action": "深套持有 | 深套持有 | 止损2.16 | 目标2.68 | 买入区2.16~2.52 | 信号:持有",
|
||||
"tech_snapshot": "形态:带上影阴线/bearish 量价:数据不足 强撑:2.07 弱撑:2.34 弱压:2.5 强压:2.79",
|
||||
"reassessed_at": "2026-06-24 09:00",
|
||||
"status": "updated",
|
||||
"rr_ratio": 0.89,
|
||||
"rr_ratio": 1.08,
|
||||
"action_note": "深套持有",
|
||||
"timing_signal": "持有"
|
||||
"timing_signal": "大盘中性,行业中性,高估值,持有"
|
||||
},
|
||||
"price": 2.47,
|
||||
"change_pct": 2.07,
|
||||
"avg_price": 4.6955
|
||||
"price": 2.34,
|
||||
"change_pct": -2.92
|
||||
},
|
||||
{
|
||||
"code": "02388",
|
||||
@@ -224,21 +217,20 @@
|
||||
"action": "盈利良好 | 止损43.49 | 目标50.1 | 买入区47.51~48.95 | 信号:持有",
|
||||
"strategy_updated": "2026-06-19 16:01",
|
||||
"analysis": {
|
||||
"stop_loss": 44.75,
|
||||
"take_profit": 50.16,
|
||||
"entry_low": 47.09,
|
||||
"entry_high": 48.14,
|
||||
"action": "盈利良好 | 止损44.75 | 目标50.16 | 买入区47.09~48.14 | 信号:持有",
|
||||
"tech_snapshot": "形态:锤子线/T字线/bullish 量价:数据不足 强撑:44.94 弱撑:47.09 弱压:48.14 强压:50.16",
|
||||
"reassessed_at": "2026-06-22 12:00",
|
||||
"stop_loss": 45.59,
|
||||
"take_profit": 48.97,
|
||||
"entry_low": 46.65,
|
||||
"entry_high": 48.3,
|
||||
"action": "盈利良好 | 止损45.59 | 目标48.97 | 买入区46.65~48.3 | 信号:持有",
|
||||
"tech_snapshot": "形态:光头光脚阴线/bearish 量价:数据不足 强撑:43.49 弱撑:46.65 弱压:47.61 强压:51.01",
|
||||
"reassessed_at": "2026-06-24 09:01",
|
||||
"status": "updated",
|
||||
"rr_ratio": 1.82,
|
||||
"rr_ratio": 2.84,
|
||||
"action_note": "",
|
||||
"timing_signal": "持有"
|
||||
"timing_signal": "大盘中性,行业偏强,低估值,蓝筹,持有"
|
||||
},
|
||||
"price": 47.6,
|
||||
"change_pct": -1.12,
|
||||
"avg_price": 43.9719
|
||||
"price": 46.58,
|
||||
"change_pct": -0.89
|
||||
},
|
||||
{
|
||||
"code": "09988",
|
||||
@@ -254,21 +246,20 @@
|
||||
"action": "持有观察 | ⚠️盈亏比偏低(1:0.9),不建议加仓 | 止损90.82 | 目标118.69 | 买入区102.87~104.43 | 信号:持有",
|
||||
"strategy_updated": "2026-06-19 16:01",
|
||||
"analysis": {
|
||||
"stop_loss": 83.69,
|
||||
"take_profit": 108.94,
|
||||
"entry_low": 100.83,
|
||||
"entry_high": 102.27,
|
||||
"action": "持有观察 | ⚠️盈亏比偏低(1:1.0),不建议加仓 | 止损83.69 | 目标108.94 | 买入区100.83~102.27 | 信号:持有",
|
||||
"tech_snapshot": "形态:锤子线/T字线/bullish 量价:数据不足 强撑:89.87 弱撑:100.83 弱压:104.9 强压:114.67",
|
||||
"reassessed_at": "2026-06-22 12:01",
|
||||
"stop_loss": 85.59,
|
||||
"take_profit": 104.75,
|
||||
"entry_low": 89.06,
|
||||
"entry_high": 103.9,
|
||||
"action": "深套持有 | 深套持有 | 止损85.59 | 目标104.75 | 买入区89.06~103.9 | 信号:持有",
|
||||
"tech_snapshot": "形态:光头光脚阴线/bearish 量价:数据不足 强撑:85.85 弱撑:97.3 弱压:102.9 强压:114.85",
|
||||
"reassessed_at": "2026-06-24 09:01",
|
||||
"status": "updated",
|
||||
"rr_ratio": 0.96,
|
||||
"action_note": "⚠️盈亏比偏低(1:1.0),不建议加仓",
|
||||
"timing_signal": "持有"
|
||||
"rr_ratio": 1.07,
|
||||
"action_note": "深套持有",
|
||||
"timing_signal": "大盘中性,行业偏弱,蓝筹,持有"
|
||||
},
|
||||
"price": 102.9,
|
||||
"change_pct": -1.91,
|
||||
"avg_price": 126.6781
|
||||
"price": 97.7,
|
||||
"change_pct": -1.26
|
||||
},
|
||||
{
|
||||
"code": "300035",
|
||||
@@ -284,21 +275,20 @@
|
||||
"action": "深套持有 | 深套持有 | 止损13.74 | 目标19.0 | 买入区15.63~18.24 | 信号:持有",
|
||||
"strategy_updated": "2026-06-19 16:01",
|
||||
"analysis": {
|
||||
"stop_loss": 13.94,
|
||||
"take_profit": 18.83,
|
||||
"entry_low": 15.22,
|
||||
"entry_high": 17.76,
|
||||
"action": "深套持有 | 深套持有 | 止损13.94 | 目标18.83 | 买入区15.22~17.76 | 信号:持有",
|
||||
"tech_snapshot": "形态:锤子线/T字线/bullish 量价:主动卖盘占优 强撑:14.85 弱撑:16.31 弱压:17.43 强压:18.83",
|
||||
"reassessed_at": "2026-06-22 12:01",
|
||||
"stop_loss": 14.15,
|
||||
"take_profit": 16.94,
|
||||
"entry_low": 14.72,
|
||||
"entry_high": 17.18,
|
||||
"action": "深套持有 | 深套持有 | 止损14.15 | 目标16.94 | 买入区14.72~17.18 | 信号:持有",
|
||||
"tech_snapshot": "形态:光头光脚阴线/bearish 量价:主动卖盘占优 强撑:14.59 弱撑:16.07 弱压:17.15 强压:18.57",
|
||||
"reassessed_at": "2026-06-24 09:01",
|
||||
"status": "updated",
|
||||
"rr_ratio": 0.76,
|
||||
"rr_ratio": 0.9,
|
||||
"action_note": "深套持有",
|
||||
"timing_signal": "持有"
|
||||
"timing_signal": "大盘中性,行业偏弱,持有"
|
||||
},
|
||||
"price": 17.15,
|
||||
"change_pct": -1.32,
|
||||
"avg_price": 22.2914
|
||||
"price": 16.12,
|
||||
"change_pct": -1.47
|
||||
},
|
||||
{
|
||||
"code": "300548",
|
||||
@@ -314,21 +304,20 @@
|
||||
"action": "盈利良好 | 短炒强趋势持 | 止损251.24 | 目标413.9 | 买入区269.8~283.29 | 信号:强趋势持",
|
||||
"strategy_updated": "2026-06-19 16:01",
|
||||
"analysis": {
|
||||
"stop_loss": 263.73,
|
||||
"take_profit": 424.82,
|
||||
"entry_low": 281.99,
|
||||
"entry_high": 296.09,
|
||||
"action": "盈利良好 | 短炒强趋势持 | 止损263.73 | 目标424.82 | 买入区281.99~296.09 | 信号:强趋势持",
|
||||
"tech_snapshot": "形态:倒T线/射击之星/neutral 量价:主动买盘占优 强撑:225.59 弱撑:281.99 弱压:308.63 强压:338.39",
|
||||
"reassessed_at": "2026-06-22 12:01",
|
||||
"stop_loss": 277.44,
|
||||
"take_profit": 343.4,
|
||||
"entry_low": 276.08,
|
||||
"entry_high": 289.88,
|
||||
"action": "盈利良好 | 短炒强趋势持 | 止损277.44 | 目标343.4 | 买入区276.08~289.88 | 信号:强趋势持",
|
||||
"tech_snapshot": "形态:倒T线/射击之星/bearish 量价:主动买盘占优 强撑:238.47 弱撑:276.08 弱压:302.78 强压:357.71",
|
||||
"reassessed_at": "2026-06-24 09:01",
|
||||
"status": "updated",
|
||||
"rr_ratio": 10.0,
|
||||
"rr_ratio": 7.21,
|
||||
"action_note": "短炒强趋势持",
|
||||
"timing_signal": "强趋势持"
|
||||
"timing_signal": "大盘中性,行业中性,高估值,强趋势持"
|
||||
},
|
||||
"price": 298.09,
|
||||
"change_pct": 5.71,
|
||||
"avg_price": 231.46
|
||||
"price": 286.54,
|
||||
"change_pct": 0.18
|
||||
},
|
||||
{
|
||||
"code": "300690",
|
||||
@@ -344,21 +333,20 @@
|
||||
"action": "持有观察 | ⚠️盈亏比偏低(1:1.2),不建议加仓 | 止损22.1 | 目标25.93 | 买入区23.57~23.98 | 信号:持有",
|
||||
"strategy_updated": "2026-06-19 16:01",
|
||||
"analysis": {
|
||||
"stop_loss": 21.03,
|
||||
"take_profit": 23.7,
|
||||
"entry_low": 23.16,
|
||||
"entry_high": 23.77,
|
||||
"action": "持有观察 | ⚠️盈亏比偏低(1:1.1),不建议加仓 | 止损21.03 | 目标23.7 | 买入区23.16~23.77 | 信号:持有",
|
||||
"tech_snapshot": "形态:十字星/neutral 量价:主动卖盘占优 强撑:22.58 弱撑:23.16 弱压:24.32 强压:24.95",
|
||||
"reassessed_at": "2026-06-22 12:01",
|
||||
"stop_loss": 22.0,
|
||||
"take_profit": 22.83,
|
||||
"entry_low": 23.31,
|
||||
"entry_high": 23.85,
|
||||
"action": "持有观察 | ⚠️盈亏比偏低(1:1.5),不建议加仓 | 止损22.0 | 目标22.83 | 买入区23.31~23.85 | 信号:持有",
|
||||
"tech_snapshot": "形态:倒T线/射击之星/bearish 量价:主动卖盘占优 强撑:22.67 弱撑:23.31 弱压:24.17 强压:25.03",
|
||||
"reassessed_at": "2026-06-24 09:01",
|
||||
"status": "updated",
|
||||
"rr_ratio": 1.08,
|
||||
"action_note": "⚠️盈亏比偏低(1:1.1),不建议加仓",
|
||||
"timing_signal": "持有"
|
||||
"rr_ratio": 1.46,
|
||||
"action_note": "⚠️盈亏比偏低(1:1.5),不建议加仓",
|
||||
"timing_signal": "大盘中性,行业偏弱,持有"
|
||||
},
|
||||
"price": 24.16,
|
||||
"change_pct": 1.17,
|
||||
"avg_price": 27.178
|
||||
"price": 22.83,
|
||||
"change_pct": -3.39
|
||||
},
|
||||
{
|
||||
"code": "300750",
|
||||
@@ -374,21 +362,20 @@
|
||||
"action": "持有观察 | 止损345.04 | 目标414.6 | 买入区384.35~397.12 | 信号:弱势持有",
|
||||
"strategy_updated": "2026-06-19 16:01",
|
||||
"analysis": {
|
||||
"stop_loss": 359.96,
|
||||
"take_profit": 437.18,
|
||||
"entry_low": 391.55,
|
||||
"entry_high": 404.13,
|
||||
"action": "盈利持有 | ⚠️盈亏比偏低(1:0.6),不建议加仓 | 止损359.96 | 目标437.18 | 买入区391.55~404.13 | 信号:持有",
|
||||
"tech_snapshot": "形态:光头光脚阳线/bullish 量价:买卖均衡 强撑:371.09 弱撑:391.55 弱压:422.27 强压:437.18",
|
||||
"reassessed_at": "2026-06-22 12:01",
|
||||
"stop_loss": 365.5,
|
||||
"take_profit": 392.01,
|
||||
"entry_low": 384.15,
|
||||
"entry_high": 399.09,
|
||||
"action": "持有观察 | 止损365.5 | 目标392.01 | 买入区384.15~399.09 | 信号:持有",
|
||||
"tech_snapshot": "形态:光头光脚阴线/bearish 量价:买卖均衡 强撑:368.35 弱撑:384.15 弱压:408.98 强压:429.83",
|
||||
"reassessed_at": "2026-06-24 09:01",
|
||||
"status": "updated",
|
||||
"rr_ratio": 0.57,
|
||||
"action_note": "⚠️盈亏比偏低(1:0.6),不建议加仓",
|
||||
"timing_signal": "持有"
|
||||
"rr_ratio": 1.54,
|
||||
"action_note": "",
|
||||
"timing_signal": "大盘中性,行业偏弱,蓝筹,持有"
|
||||
},
|
||||
"price": 408.98,
|
||||
"change_pct": 4.43,
|
||||
"avg_price": 401.7803
|
||||
"price": 394.29,
|
||||
"change_pct": 0.45
|
||||
},
|
||||
{
|
||||
"code": "518880",
|
||||
@@ -404,21 +391,20 @@
|
||||
"action": "深套持有 | 深套持有 | 止损7.05 | 目标9.17 | 买入区8.02~9.35 | 信号:持有",
|
||||
"strategy_updated": "2026-06-19 16:01",
|
||||
"analysis": {
|
||||
"stop_loss": 7.15,
|
||||
"take_profit": 9.38,
|
||||
"entry_low": 7.8,
|
||||
"entry_high": 9.1,
|
||||
"action": "深套持有 | 深套持有 | 止损7.15 | 目标9.38 | 买入区7.8~9.1 | 信号:持有",
|
||||
"tech_snapshot": "形态:光头光脚阴线/bearish 量价:数据不足 强撑:8.02 弱撑:8.64 弱压:8.91 强压:9.38",
|
||||
"reassessed_at": "2026-06-22 12:01",
|
||||
"stop_loss": 7.08,
|
||||
"take_profit": 8.0,
|
||||
"entry_low": 7.68,
|
||||
"entry_high": 8.96,
|
||||
"action": "深套持有 | 深套持有 | 止损7.08 | 目标8.0 | 买入区7.68~8.96 | 信号:持有",
|
||||
"tech_snapshot": "形态:光头光脚阴线/bearish 量价:数据不足 强撑:7.9 弱撑:8.48 弱压:8.72 强压:9.26",
|
||||
"reassessed_at": "2026-06-24 09:01",
|
||||
"status": "updated",
|
||||
"rr_ratio": 0.55,
|
||||
"rr_ratio": 0.57,
|
||||
"action_note": "深套持有",
|
||||
"timing_signal": "持有"
|
||||
"timing_signal": "大盘中性,行业偏弱,持有"
|
||||
},
|
||||
"price": 8.72,
|
||||
"change_pct": -2.16,
|
||||
"avg_price": 12.1915
|
||||
"price": 8.47,
|
||||
"change_pct": -0.81
|
||||
},
|
||||
{
|
||||
"code": "600036",
|
||||
@@ -434,21 +420,20 @@
|
||||
"action": "持有观察 | ⚠️盈亏比偏低(1:1.2),不建议加仓 | 止损32.21 | 目标39.68 | 买入区36.95~37.57 | 信号:弱势持有",
|
||||
"strategy_updated": "2026-06-19 16:01",
|
||||
"analysis": {
|
||||
"stop_loss": 33.2,
|
||||
"take_profit": 40.18,
|
||||
"entry_low": 36.97,
|
||||
"entry_high": 37.2,
|
||||
"action": "持有观察 | ⚠️盈亏比偏低(1:1.0),不建议加仓 | 止损33.2 | 目标40.18 | 买入区36.97~37.2 | 信号:弱势持有",
|
||||
"tech_snapshot": "形态:带上影阳线/neutral 量价:买卖均衡 强撑:34.23 弱撑:36.97 弱压:37.46 强压:40.18",
|
||||
"reassessed_at": "2026-06-22 12:01",
|
||||
"stop_loss": 36.28,
|
||||
"take_profit": 39.01,
|
||||
"entry_low": 37.1,
|
||||
"entry_high": 37.64,
|
||||
"action": "持有观察 | ⚠️盈亏比偏低(1:1.2),不建议加仓 | 止损36.28 | 目标39.01 | 买入区37.1~37.64 | 信号:弱势持有",
|
||||
"tech_snapshot": "形态:倒T线/射击之星/bearish 量价:买卖均衡 强撑:34.65 弱撑:37.1 弱压:37.94 强压:40.64",
|
||||
"reassessed_at": "2026-06-24 09:01",
|
||||
"status": "updated",
|
||||
"rr_ratio": 0.99,
|
||||
"action_note": "⚠️盈亏比偏低(1:1.0),不建议加仓",
|
||||
"timing_signal": "弱势持有"
|
||||
"rr_ratio": 1.18,
|
||||
"action_note": "⚠️盈亏比偏低(1:1.2),不建议加仓",
|
||||
"timing_signal": "大盘中性,行业偏强,低估值,蓝筹,弱势持有"
|
||||
},
|
||||
"price": 37.65,
|
||||
"change_pct": 1.1,
|
||||
"avg_price": 38.1582
|
||||
"price": 36.97,
|
||||
"change_pct": -1.15
|
||||
},
|
||||
{
|
||||
"code": "600563",
|
||||
@@ -464,21 +449,20 @@
|
||||
"action": "盈利良好 | 止损161.41 | 目标192.67 | 买入区165.51~173.79 | 信号:持有",
|
||||
"strategy_updated": "2026-06-19 16:01",
|
||||
"analysis": {
|
||||
"stop_loss": 153.13,
|
||||
"take_profit": 175.76,
|
||||
"entry_low": 166.06,
|
||||
"entry_high": 174.36,
|
||||
"action": "盈利良好 | 止损153.13 | 目标175.76 | 买入区166.06~174.36 | 信号:持有",
|
||||
"tech_snapshot": "形态:倒T线/射击之星/neutral 量价:买卖均衡 强撑:151.37 弱撑:166.06 弱压:175.12 强压:185.01",
|
||||
"reassessed_at": "2026-06-22 12:01",
|
||||
"stop_loss": 145.02,
|
||||
"take_profit": 164.36,
|
||||
"entry_low": 158.07,
|
||||
"entry_high": 165.97,
|
||||
"action": "盈利持有 | 止损145.02 | 目标164.36 | 买入区158.07~165.97 | 信号:持有",
|
||||
"tech_snapshot": "形态:光头光脚阴线/bearish 量价:买卖均衡 强撑:155.65 弱撑:158.07 弱压:172.94 强压:190.23",
|
||||
"reassessed_at": "2026-06-24 09:01",
|
||||
"status": "updated",
|
||||
"rr_ratio": 3.04,
|
||||
"rr_ratio": 4.04,
|
||||
"action_note": "",
|
||||
"timing_signal": "持有"
|
||||
"timing_signal": "大盘中性,行业偏弱,持有"
|
||||
},
|
||||
"price": 172.94,
|
||||
"change_pct": 2.82,
|
||||
"avg_price": 155.5032
|
||||
"price": 178.76,
|
||||
"change_pct": 10.0
|
||||
},
|
||||
{
|
||||
"code": "600739",
|
||||
@@ -494,21 +478,20 @@
|
||||
"action": "持有观察 | ⚠️盈亏比偏低(1:1.1),不建议加仓 | 止损9.1 | 目标11.19 | 买入区10.0~10.12 | 信号:持有",
|
||||
"strategy_updated": "2026-06-19 16:01",
|
||||
"analysis": {
|
||||
"stop_loss": 8.48,
|
||||
"take_profit": 9.99,
|
||||
"entry_low": 10.09,
|
||||
"entry_high": 10.3,
|
||||
"action": "持有观察 | ⚠️盈亏比偏低(1:0.6),不建议加仓 | 止损8.48 | 目标9.99 | 买入区10.09~10.3 | 信号:持有",
|
||||
"tech_snapshot": "形态:光头光脚阳线/bullish 量价:主动买盘占优 强撑:9.5 弱撑:10.09 弱压:10.75 强压:11.1",
|
||||
"reassessed_at": "2026-06-22 12:01",
|
||||
"stop_loss": 10.33,
|
||||
"take_profit": 11.34,
|
||||
"entry_low": 10.5,
|
||||
"entry_high": 10.74,
|
||||
"action": "持有观察 | ⚠️盈亏比偏低(1:1.2),不建议加仓 | 止损10.33 | 目标11.34 | 买入区10.5~10.74 | 信号:持有",
|
||||
"tech_snapshot": "形态:倒T线/射击之星/bearish 量价:主动买盘占优 强撑:9.67 弱撑:10.5 弱压:10.9 强压:11.81",
|
||||
"reassessed_at": "2026-06-24 09:01",
|
||||
"status": "updated",
|
||||
"rr_ratio": 0.55,
|
||||
"action_note": "⚠️盈亏比偏低(1:0.6),不建议加仓",
|
||||
"timing_signal": "持有"
|
||||
"rr_ratio": 1.18,
|
||||
"action_note": "⚠️盈亏比偏低(1:1.2),不建议加仓",
|
||||
"timing_signal": "大盘中性,行业偏强,持有"
|
||||
},
|
||||
"price": 10.74,
|
||||
"change_pct": 6.64,
|
||||
"avg_price": 12.2862
|
||||
"price": 10.48,
|
||||
"change_pct": -1.6
|
||||
},
|
||||
{
|
||||
"code": "601899",
|
||||
@@ -524,21 +507,20 @@
|
||||
"action": "深套持有 | 深套持有 | 止损24.48 | 目标34.47 | 买入区26.72~31.17 | 信号:持有",
|
||||
"strategy_updated": "2026-06-19 16:01",
|
||||
"analysis": {
|
||||
"stop_loss": 24.92,
|
||||
"take_profit": 32.66,
|
||||
"entry_low": 26.68,
|
||||
"entry_high": 31.12,
|
||||
"action": "深套持有 | 深套持有 | 止损24.92 | 目标32.66 | 买入区26.68~31.12 | 信号:持有",
|
||||
"tech_snapshot": "形态:带下影阳线/neutral 量价:主动买盘占优 强撑:26.72 弱撑:28.85 弱压:30.13 强压:32.66",
|
||||
"reassessed_at": "2026-06-22 12:01",
|
||||
"stop_loss": 23.01,
|
||||
"take_profit": 27.79,
|
||||
"entry_low": 24.98,
|
||||
"entry_high": 29.14,
|
||||
"action": "深套持有 | 深套持有 | 止损23.01 | 目标27.79 | 买入区24.98~29.14 | 信号:持有",
|
||||
"tech_snapshot": "形态:光头光脚阴线/bearish 量价:主动买盘占优 强撑:24.75 弱撑:26.93 弱压:30.44 强压:32.17",
|
||||
"reassessed_at": "2026-06-24 09:01",
|
||||
"status": "updated",
|
||||
"rr_ratio": 0.68,
|
||||
"rr_ratio": 1.06,
|
||||
"action_note": "深套持有",
|
||||
"timing_signal": "持有"
|
||||
"timing_signal": "大盘中性,行业偏弱,低估值,蓝筹,持有"
|
||||
},
|
||||
"price": 30.44,
|
||||
"change_pct": 2.53,
|
||||
"avg_price": 40.2685
|
||||
"price": 27.58,
|
||||
"change_pct": -0.79
|
||||
},
|
||||
{
|
||||
"code": "603259",
|
||||
@@ -554,21 +536,20 @@
|
||||
"action": "盈利良好 | ⚠️盈亏比偏低(1:1.2),不建议加仓 | 止损97.16 | 目标111.26 | 买入区98.2~103.11 | 信号:持有",
|
||||
"strategy_updated": "2026-06-19 16:01",
|
||||
"analysis": {
|
||||
"stop_loss": 93.96,
|
||||
"take_profit": 107.3,
|
||||
"entry_low": 102.28,
|
||||
"entry_high": 106.93,
|
||||
"action": "盈利良好 | 止损93.96 | 目标107.3 | 买入区102.28~106.93 | 信号:持有",
|
||||
"tech_snapshot": "形态:锤子线/T字线/bullish 量价:买卖均衡 强撑:93.93 弱撑:102.28 弱压:105.18 强压:112.95",
|
||||
"reassessed_at": "2026-06-22 12:01",
|
||||
"stop_loss": 103.12,
|
||||
"take_profit": 112.81,
|
||||
"entry_low": 104.93,
|
||||
"entry_high": 110.18,
|
||||
"action": "盈利良好 | 止损103.12 | 目标112.81 | 买入区104.93~110.18 | 信号:持有",
|
||||
"tech_snapshot": "形态:倒T线/射击之星/bearish 量价:买卖均衡 强撑:96.15 弱撑:104.93 弱压:108.53 强压:117.51",
|
||||
"reassessed_at": "2026-06-24 09:01",
|
||||
"status": "updated",
|
||||
"rr_ratio": 2.86,
|
||||
"rr_ratio": 3.51,
|
||||
"action_note": "",
|
||||
"timing_signal": "持有"
|
||||
"timing_signal": "大盘中性,行业偏强,低估值,持有"
|
||||
},
|
||||
"price": 106.83,
|
||||
"change_pct": 4.02,
|
||||
"avg_price": 96.201
|
||||
"price": 115.01,
|
||||
"change_pct": 8.18
|
||||
},
|
||||
{
|
||||
"code": "688411",
|
||||
@@ -577,28 +558,27 @@
|
||||
"cost": 258.6163,
|
||||
"position_pct": 6.58,
|
||||
"is_active": 1,
|
||||
"stop_loss": 277.42,
|
||||
"take_profit": 327.74,
|
||||
"entry_low": 277.73,
|
||||
"entry_high": 291.62,
|
||||
"action": "盈利良好 | 止损277.42 | 目标327.74 | 买入区277.73~291.62 | 信号:持有",
|
||||
"strategy_updated": "2026-06-22 13:59",
|
||||
"stop_loss": 253.82,
|
||||
"take_profit": 316.5,
|
||||
"entry_low": 273.21,
|
||||
"entry_high": 286.87,
|
||||
"action": "盈利良好 | 止损253.82 | 目标316.5 | 买入区273.21~286.87 | 信号:持有",
|
||||
"strategy_updated": "2026-06-19 16:01",
|
||||
"analysis": {
|
||||
"stop_loss": 277.42,
|
||||
"take_profit": 327.74,
|
||||
"entry_low": 277.73,
|
||||
"entry_high": 291.62,
|
||||
"rr_ratio": 4.86,
|
||||
"timing_signal": "持有",
|
||||
"action": "盈利良好 | 止损277.42 | 目标327.74 | 买入区277.73~291.62 | 信号:持有",
|
||||
"tech_snapshot": "形态:光头光脚阳线/neutral 量价:买卖均衡 强撑:238.66 弱撑:277.73 弱压:291.45 强压:327.74",
|
||||
"reassessed_at": "2026-06-22 13:59",
|
||||
"status": "updated",
|
||||
"stock_category": "中短线"
|
||||
"stop_loss": 271.71,
|
||||
"take_profit": 323.7,
|
||||
"entry_low": 274.51,
|
||||
"entry_high": 285.71,
|
||||
"action": "盈利良好 | 止损271.71 | 目标323.7 | 买入区274.51~285.71 | 信号:持有",
|
||||
"tech_snapshot": "形态:光头光脚阴线/bearish 量价:买卖均衡 强撑:231.2 弱撑:265.5 弱压:286.98 强压:320.28",
|
||||
"reassessed_at": "2026-06-24 09:01",
|
||||
"status": "manual",
|
||||
"rr_ratio": 18.9,
|
||||
"action_note": "",
|
||||
"timing_signal": "持有"
|
||||
},
|
||||
"price": 286.98,
|
||||
"change_pct": 2.12,
|
||||
"avg_price": 258.6163
|
||||
"price": 266.48,
|
||||
"change_pct": -2.12
|
||||
},
|
||||
{
|
||||
"code": "688981",
|
||||
@@ -614,79 +594,20 @@
|
||||
"action": "盈利良好 | 止损132.76 | 目标164.45 | 买入区134.18~140.89 | 信号:持有",
|
||||
"strategy_updated": "2026-06-19 16:01",
|
||||
"analysis": {
|
||||
"stop_loss": 134.66,
|
||||
"take_profit": 167.33,
|
||||
"entry_low": 139.41,
|
||||
"entry_high": 146.38,
|
||||
"action": "盈利良好 | 止损134.66 | 目标167.33 | 买入区139.41~146.38 | 信号:持有",
|
||||
"tech_snapshot": "形态:倒T线/射击之星/bearish 量价:买卖均衡 强撑:120.07 弱撑:139.41 弱压:147.41 强压:167.33",
|
||||
"reassessed_at": "2026-06-22 12:01",
|
||||
"stop_loss": 137.45,
|
||||
"take_profit": 160.44,
|
||||
"entry_low": 138.1,
|
||||
"entry_high": 145.0,
|
||||
"action": "盈利良好 | 止损137.45 | 目标160.44 | 买入区138.1~145.0 | 信号:持有",
|
||||
"tech_snapshot": "形态:倒T线/射击之星/bearish 量价:买卖均衡 强撑:119.27 弱撑:138.1 弱压:146.8 强压:167.13",
|
||||
"reassessed_at": "2026-06-24 09:01",
|
||||
"status": "updated",
|
||||
"rr_ratio": 5.65,
|
||||
"rr_ratio": 5.98,
|
||||
"action_note": "",
|
||||
"timing_signal": "持有"
|
||||
"timing_signal": "大盘中性,行业中性,高估值,蓝筹,持有"
|
||||
},
|
||||
"price": 145.59,
|
||||
"change_pct": 3.47,
|
||||
"avg_price": 126.0681
|
||||
},
|
||||
{
|
||||
"code": "000700",
|
||||
"name": "模塑科技",
|
||||
"shares": 1400,
|
||||
"cost": 14.83,
|
||||
"price": 15.18,
|
||||
"change_pct": -1.75,
|
||||
"position_pct": 2.05,
|
||||
"is_active": 1,
|
||||
"stop_loss": 14.32,
|
||||
"take_profit": 17.0,
|
||||
"entry_low": 14.63,
|
||||
"entry_high": 15.23,
|
||||
"action": "盈利持有 | 目标17.0 | 止损14.32 | 买入区14.63~15.23",
|
||||
"strategy_updated": "2026-06-19",
|
||||
"avg_price": 14.83
|
||||
},
|
||||
{
|
||||
"code": "02318",
|
||||
"name": "中国平安",
|
||||
"shares": 500,
|
||||
"cost": 50.92,
|
||||
"price": 54.95,
|
||||
"change_pct": 2.04,
|
||||
"position_pct": 2.47,
|
||||
"is_active": 1,
|
||||
"stop_loss": 52.75,
|
||||
"take_profit": 60.0,
|
||||
"entry_low": 53.36,
|
||||
"entry_high": 55.54,
|
||||
"action": "盈利持有 | 目标60.0 | 止损52.75 | 买入区53.36~55.54",
|
||||
"strategy_updated": "2026-06-22",
|
||||
"avg_price": 50.92
|
||||
},
|
||||
{
|
||||
"code": "09868",
|
||||
"name": "小鹏汽车-W",
|
||||
"shares": 700,
|
||||
"cost": 47.71,
|
||||
"price": 51.55,
|
||||
"change_pct": 0.1,
|
||||
"position_pct": 3.25,
|
||||
"is_active": 1,
|
||||
"stop_loss": 45.89,
|
||||
"take_profit": 59.92,
|
||||
"entry_low": 49.78,
|
||||
"entry_high": 51.82,
|
||||
"action": "盈利持有 | 目标59.92 | 止损45.89 | 买入区49.78~51.82 | 信号:阳线企稳,可买入",
|
||||
"strategy_updated": "2026-06-22",
|
||||
"avg_price": 47.71
|
||||
"price": 151.99,
|
||||
"change_pct": 7.26
|
||||
}
|
||||
],
|
||||
"cash": 70622,
|
||||
"total_assets": 1035162,
|
||||
"position_pct": 93.02,
|
||||
"total_pnl": -148037.26,
|
||||
"updated_at": "2026-06-18 17:37:10",
|
||||
"day_pnl": -2482.47,
|
||||
"data_source": "券商导出 2026-06-18 收盘(精确)"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,272 @@
|
||||
{
|
||||
"holdings": [
|
||||
{
|
||||
"code": "01478",
|
||||
"name": "丘钛科技",
|
||||
"shares": 11000,
|
||||
"cost": 11.96,
|
||||
"price": 8.07,
|
||||
"change_pct": -3.7,
|
||||
"position_pct": 7.66,
|
||||
"is_active": 1,
|
||||
"avg_price": 13.8313
|
||||
},
|
||||
{
|
||||
"code": "001309",
|
||||
"name": "德明利",
|
||||
"shares": 100,
|
||||
"cost": 737.0374,
|
||||
"price": 763.86,
|
||||
"change_pct": 3.63,
|
||||
"position_pct": 7.5,
|
||||
"is_active": 1,
|
||||
"avg_price": 737.0374
|
||||
},
|
||||
{
|
||||
"code": "600739",
|
||||
"name": "辽宁成大",
|
||||
"shares": 6600,
|
||||
"cost": 12.2862,
|
||||
"price": 10.77,
|
||||
"change_pct": 0.28,
|
||||
"position_pct": 7.03,
|
||||
"is_active": 1,
|
||||
"avg_price": 12.2862
|
||||
},
|
||||
{
|
||||
"code": "601899",
|
||||
"name": "紫金矿业",
|
||||
"shares": 2400,
|
||||
"cost": 40.2685,
|
||||
"price": 28.01,
|
||||
"change_pct": -7.98,
|
||||
"position_pct": 6.7,
|
||||
"is_active": 1,
|
||||
"avg_price": 40.2685
|
||||
},
|
||||
{
|
||||
"code": "09988",
|
||||
"name": "阿里巴巴-W",
|
||||
"shares": 700,
|
||||
"cost": 109.26,
|
||||
"price": 99.55,
|
||||
"change_pct": -3.35,
|
||||
"position_pct": 5.95,
|
||||
"is_active": 1,
|
||||
"avg_price": 126.3558
|
||||
},
|
||||
{
|
||||
"code": "688981",
|
||||
"name": "中芯国际",
|
||||
"shares": 300,
|
||||
"cost": 126.0681,
|
||||
"price": 142.16,
|
||||
"change_pct": -2.36,
|
||||
"position_pct": 4.31,
|
||||
"is_active": 1,
|
||||
"avg_price": 126.0681
|
||||
},
|
||||
{
|
||||
"code": "603259",
|
||||
"name": "药明康德",
|
||||
"shares": 400,
|
||||
"cost": 96.201,
|
||||
"price": 106.66,
|
||||
"change_pct": -0.16,
|
||||
"position_pct": 4.23,
|
||||
"is_active": 1,
|
||||
"avg_price": 96.201
|
||||
},
|
||||
{
|
||||
"code": "02202",
|
||||
"name": "万科企业",
|
||||
"shares": 19700,
|
||||
"cost": 4.05,
|
||||
"price": 2.4,
|
||||
"change_pct": -3.24,
|
||||
"position_pct": 4.05,
|
||||
"is_active": 1,
|
||||
"avg_price": 4.6836
|
||||
},
|
||||
{
|
||||
"code": "02388",
|
||||
"name": "中银香港",
|
||||
"shares": 1000,
|
||||
"cost": 37.93,
|
||||
"price": 47.32,
|
||||
"change_pct": -0.59,
|
||||
"position_pct": 4.02,
|
||||
"is_active": 1,
|
||||
"avg_price": 43.8601
|
||||
},
|
||||
{
|
||||
"code": "300750",
|
||||
"name": "宁德时代",
|
||||
"shares": 100,
|
||||
"cost": 401.7803,
|
||||
"price": 396.98,
|
||||
"change_pct": -2.93,
|
||||
"position_pct": 3.93,
|
||||
"is_active": 1,
|
||||
"avg_price": 401.7803
|
||||
},
|
||||
{
|
||||
"code": "01211",
|
||||
"name": "比亚迪股份",
|
||||
"shares": 600,
|
||||
"cost": 90.99,
|
||||
"price": 76.4,
|
||||
"change_pct": -2.62,
|
||||
"position_pct": 3.9,
|
||||
"is_active": 1,
|
||||
"avg_price": 105.2242
|
||||
},
|
||||
{
|
||||
"code": "01888",
|
||||
"name": "建滔积层板",
|
||||
"shares": 500,
|
||||
"cost": 76.55,
|
||||
"price": 84.4,
|
||||
"change_pct": -8.21,
|
||||
"position_pct": 3.75,
|
||||
"is_active": 1,
|
||||
"avg_price": 88.5286
|
||||
},
|
||||
{
|
||||
"code": "00700",
|
||||
"name": "腾讯控股",
|
||||
"shares": 100,
|
||||
"cost": 384.46,
|
||||
"price": 417.6,
|
||||
"change_pct": -3.56,
|
||||
"position_pct": 3.59,
|
||||
"is_active": 1,
|
||||
"avg_price": 444.6211
|
||||
},
|
||||
{
|
||||
"code": "00981",
|
||||
"name": "中芯国际",
|
||||
"shares": 500,
|
||||
"cost": 65.89,
|
||||
"price": 80.05,
|
||||
"change_pct": 1.46,
|
||||
"position_pct": 3.54,
|
||||
"is_active": 1,
|
||||
"avg_price": 76.1956
|
||||
},
|
||||
{
|
||||
"code": "09868",
|
||||
"name": "小鹏集团-W",
|
||||
"shares": 700,
|
||||
"cost": 44.49,
|
||||
"price": 49.78,
|
||||
"change_pct": -3.43,
|
||||
"position_pct": 3.0,
|
||||
"is_active": 1,
|
||||
"avg_price": 51.4476
|
||||
},
|
||||
{
|
||||
"code": "300548",
|
||||
"name": "长芯博创",
|
||||
"shares": 100,
|
||||
"cost": 231.46,
|
||||
"price": 290.58,
|
||||
"change_pct": -2.52,
|
||||
"position_pct": 2.95,
|
||||
"is_active": 1,
|
||||
"avg_price": 231.46
|
||||
},
|
||||
{
|
||||
"code": "600036",
|
||||
"name": "招商银行",
|
||||
"shares": 800,
|
||||
"cost": 38.1582,
|
||||
"price": 37.76,
|
||||
"change_pct": 0.29,
|
||||
"position_pct": 2.95,
|
||||
"is_active": 1,
|
||||
"avg_price": 38.1582
|
||||
},
|
||||
{
|
||||
"code": "02318",
|
||||
"name": "中国平安",
|
||||
"shares": 500,
|
||||
"cost": 47.48,
|
||||
"price": 54.0,
|
||||
"change_pct": -1.73,
|
||||
"position_pct": 2.28,
|
||||
"is_active": 1,
|
||||
"avg_price": 54.9086
|
||||
},
|
||||
{
|
||||
"code": "300035",
|
||||
"name": "中科电气",
|
||||
"shares": 1400,
|
||||
"cost": 22.2914,
|
||||
"price": 16.47,
|
||||
"change_pct": -3.97,
|
||||
"position_pct": 2.28,
|
||||
"is_active": 1,
|
||||
"avg_price": 22.2914
|
||||
},
|
||||
{
|
||||
"code": "000700",
|
||||
"name": "模塑科技",
|
||||
"shares": 1400,
|
||||
"cost": 14.8336,
|
||||
"price": 15.41,
|
||||
"change_pct": 1.52,
|
||||
"position_pct": 2.12,
|
||||
"is_active": 1,
|
||||
"avg_price": 14.8336
|
||||
},
|
||||
{
|
||||
"code": "518880",
|
||||
"name": "黄金ETF华安",
|
||||
"shares": 2400,
|
||||
"cost": 12.1915,
|
||||
"price": 8.57,
|
||||
"change_pct": -1.73,
|
||||
"position_pct": 2.02,
|
||||
"is_active": 1,
|
||||
"avg_price": 12.1915
|
||||
},
|
||||
{
|
||||
"code": "01088",
|
||||
"name": "中国神华",
|
||||
"shares": 500,
|
||||
"cost": 39.82,
|
||||
"price": 42.62,
|
||||
"change_pct": 0.09,
|
||||
"position_pct": 1.81,
|
||||
"is_active": 1,
|
||||
"avg_price": 46.0485
|
||||
},
|
||||
{
|
||||
"code": "600563",
|
||||
"name": "法拉电子",
|
||||
"shares": 100,
|
||||
"cost": 146.95,
|
||||
"price": 163.8,
|
||||
"change_pct": -5.29,
|
||||
"position_pct": 1.63,
|
||||
"is_active": 1,
|
||||
"avg_price": 146.95
|
||||
},
|
||||
{
|
||||
"code": "300690",
|
||||
"name": "双一科技",
|
||||
"shares": 400,
|
||||
"cost": 27.178,
|
||||
"price": 23.75,
|
||||
"change_pct": -1.7,
|
||||
"position_pct": 0.94,
|
||||
"is_active": 1,
|
||||
"avg_price": 27.178
|
||||
}
|
||||
],
|
||||
"cash": 80476,
|
||||
"total_assets": 1023059.24,
|
||||
"position_pct": 92.13,
|
||||
"last_updated": "2026-06-23 11:00"
|
||||
}
|
||||
+520
-16
@@ -41,6 +41,18 @@
|
||||
"high": 104.6,
|
||||
"low": 101.7,
|
||||
"close": 104.02
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 109.36,
|
||||
"low": 101.7,
|
||||
"close": 105.81
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 109.36,
|
||||
"low": 105.76,
|
||||
"close": 106.31
|
||||
}
|
||||
],
|
||||
"002594": [
|
||||
@@ -85,6 +97,18 @@
|
||||
"high": 87.1,
|
||||
"low": 84.6,
|
||||
"close": 86.08
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 88.32,
|
||||
"low": 84.6,
|
||||
"close": 85.94
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 88.32,
|
||||
"low": 83.23,
|
||||
"close": 83.23
|
||||
}
|
||||
],
|
||||
"00700": [
|
||||
@@ -129,6 +153,18 @@
|
||||
"high": 439.0,
|
||||
"low": 431.0,
|
||||
"close": 434.4
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 439.0,
|
||||
"low": 413.6,
|
||||
"close": 416.2
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 432.4,
|
||||
"low": 413.6,
|
||||
"close": 414.8
|
||||
}
|
||||
],
|
||||
"000700": [
|
||||
@@ -173,6 +209,18 @@
|
||||
"high": 16.0,
|
||||
"low": 14.7,
|
||||
"close": 15.1
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 16.0,
|
||||
"low": 14.7,
|
||||
"close": 15.15
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 15.6,
|
||||
"low": 14.75,
|
||||
"close": 14.98
|
||||
}
|
||||
],
|
||||
"001309": [
|
||||
@@ -217,6 +265,18 @@
|
||||
"high": 740.0,
|
||||
"low": 706.0,
|
||||
"close": 724.01
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 796.0,
|
||||
"low": 706.0,
|
||||
"close": 778.0
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 796.0,
|
||||
"low": 706.0,
|
||||
"close": 755.01
|
||||
}
|
||||
],
|
||||
"00968": [
|
||||
@@ -261,6 +321,18 @@
|
||||
"high": 2.35,
|
||||
"low": 2.2,
|
||||
"close": 2.24
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 2.35,
|
||||
"low": 2.09,
|
||||
"close": 2.11
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 2.26,
|
||||
"low": 2.04,
|
||||
"close": 2.08
|
||||
}
|
||||
],
|
||||
"00981": [
|
||||
@@ -305,6 +377,18 @@
|
||||
"high": 82.4,
|
||||
"low": 77.15,
|
||||
"close": 79.0
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 84.1,
|
||||
"low": 77.15,
|
||||
"close": 77.65
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 84.1,
|
||||
"low": 76.5,
|
||||
"close": 77.85
|
||||
}
|
||||
],
|
||||
"01070": [
|
||||
@@ -349,6 +433,18 @@
|
||||
"high": 13.51,
|
||||
"low": 12.98,
|
||||
"close": 13.04
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 13.51,
|
||||
"low": 12.97,
|
||||
"close": 13.1
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 13.47,
|
||||
"low": 12.98,
|
||||
"close": 13.2
|
||||
}
|
||||
],
|
||||
"01088": [
|
||||
@@ -393,6 +489,18 @@
|
||||
"high": 42.82,
|
||||
"low": 41.54,
|
||||
"close": 42.74
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 43.28,
|
||||
"low": 41.54,
|
||||
"close": 42.72
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 43.14,
|
||||
"low": 41.92,
|
||||
"close": 42.06
|
||||
}
|
||||
],
|
||||
"01211": [
|
||||
@@ -437,6 +545,18 @@
|
||||
"high": 80.25,
|
||||
"low": 76.7,
|
||||
"close": 77.95
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 80.25,
|
||||
"low": 75.6,
|
||||
"close": 75.75
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 78.3,
|
||||
"low": 75.6,
|
||||
"close": 75.85
|
||||
}
|
||||
],
|
||||
"01478": [
|
||||
@@ -481,6 +601,18 @@
|
||||
"high": 8.9,
|
||||
"low": 8.3,
|
||||
"close": 8.36
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 8.9,
|
||||
"low": 7.87,
|
||||
"close": 7.9
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 8.54,
|
||||
"low": 7.8,
|
||||
"close": 7.88
|
||||
}
|
||||
],
|
||||
"01888": [
|
||||
@@ -525,6 +657,18 @@
|
||||
"high": 99.65,
|
||||
"low": 88.4,
|
||||
"close": 92.2
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 99.65,
|
||||
"low": 83.7,
|
||||
"close": 86.25
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 91.95,
|
||||
"low": 83.7,
|
||||
"close": 87.25
|
||||
}
|
||||
],
|
||||
"02202": [
|
||||
@@ -569,6 +713,18 @@
|
||||
"high": 2.44,
|
||||
"low": 2.35,
|
||||
"close": 2.43
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 2.53,
|
||||
"low": 2.35,
|
||||
"close": 2.39
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 2.53,
|
||||
"low": 2.37,
|
||||
"close": 2.4
|
||||
}
|
||||
],
|
||||
"02318": [
|
||||
@@ -613,6 +769,18 @@
|
||||
"high": 55.35,
|
||||
"low": 52.6,
|
||||
"close": 54.8
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 55.5,
|
||||
"low": 52.6,
|
||||
"close": 53.95
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 55.5,
|
||||
"low": 53.3,
|
||||
"close": 53.6
|
||||
}
|
||||
],
|
||||
"02359": [
|
||||
@@ -657,6 +825,18 @@
|
||||
"high": 130.7,
|
||||
"low": 126.4,
|
||||
"close": 129.4
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 135.7,
|
||||
"low": 126.4,
|
||||
"close": 131.9
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 135.7,
|
||||
"low": 130.0,
|
||||
"close": 130.8
|
||||
}
|
||||
],
|
||||
"02388": [
|
||||
@@ -701,6 +881,18 @@
|
||||
"high": 48.0,
|
||||
"low": 47.12,
|
||||
"close": 47.52
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 48.0,
|
||||
"low": 47.04,
|
||||
"close": 47.06
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 47.86,
|
||||
"low": 46.9,
|
||||
"close": 47.0
|
||||
}
|
||||
],
|
||||
"02628": [
|
||||
@@ -745,6 +937,18 @@
|
||||
"high": 29.9,
|
||||
"low": 27.48,
|
||||
"close": 29.56
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 30.76,
|
||||
"low": 27.48,
|
||||
"close": 29.48
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 30.56,
|
||||
"low": 29.0,
|
||||
"close": 29.3
|
||||
}
|
||||
],
|
||||
"06160": [
|
||||
@@ -789,6 +993,18 @@
|
||||
"high": 162.1,
|
||||
"low": 157.1,
|
||||
"close": 159.5
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 168.3,
|
||||
"low": 157.1,
|
||||
"close": 163.6
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 168.3,
|
||||
"low": 160.0,
|
||||
"close": 160.9
|
||||
}
|
||||
],
|
||||
"06869": [
|
||||
@@ -833,6 +1049,18 @@
|
||||
"high": 278.0,
|
||||
"low": 235.0,
|
||||
"close": 277.4
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 305.0,
|
||||
"low": 235.0,
|
||||
"close": 267.2
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 305.0,
|
||||
"low": 260.2,
|
||||
"close": 264.6
|
||||
}
|
||||
],
|
||||
"09868": [
|
||||
@@ -877,6 +1105,18 @@
|
||||
"high": 51.65,
|
||||
"low": 49.04,
|
||||
"close": 51.65
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 52.35,
|
||||
"low": 48.92,
|
||||
"close": 48.98
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 52.3,
|
||||
"low": 48.82,
|
||||
"close": 49.36
|
||||
}
|
||||
],
|
||||
"09988": [
|
||||
@@ -921,6 +1161,18 @@
|
||||
"high": 103.7,
|
||||
"low": 100.8,
|
||||
"close": 102.3
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 103.8,
|
||||
"low": 99.2,
|
||||
"close": 99.6
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 103.4,
|
||||
"low": 98.7,
|
||||
"close": 98.95
|
||||
}
|
||||
],
|
||||
"300035": [
|
||||
@@ -965,6 +1217,18 @@
|
||||
"high": 17.36,
|
||||
"low": 16.24,
|
||||
"close": 16.91
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 17.36,
|
||||
"low": 16.24,
|
||||
"close": 16.58
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 17.1,
|
||||
"low": 16.29,
|
||||
"close": 16.36
|
||||
}
|
||||
],
|
||||
"300124": [
|
||||
@@ -1009,25 +1273,21 @@
|
||||
"high": 71.4,
|
||||
"low": 66.83,
|
||||
"close": 68.06
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 71.4,
|
||||
"low": 66.82,
|
||||
"close": 67.81
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 68.8,
|
||||
"low": 65.92,
|
||||
"close": 66.98
|
||||
}
|
||||
],
|
||||
"300548": [
|
||||
{
|
||||
"date": "2026-03-25",
|
||||
"open": 149.84,
|
||||
"close": 152.41,
|
||||
"high": 154.79,
|
||||
"low": 147.55,
|
||||
"volume": 270155.0
|
||||
},
|
||||
{
|
||||
"date": "2026-03-26",
|
||||
"open": 150.02,
|
||||
"close": 148.77,
|
||||
"high": 156.49,
|
||||
"low": 148.12,
|
||||
"volume": 157358.0
|
||||
},
|
||||
{
|
||||
"date": "2026-03-27",
|
||||
"open": 145.73,
|
||||
@@ -1485,6 +1745,18 @@
|
||||
"high": 309.98,
|
||||
"low": 290.31,
|
||||
"close": 298.12
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 309.98,
|
||||
"low": 282.9,
|
||||
"close": 284.54
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 309.6,
|
||||
"low": 282.9,
|
||||
"close": 286.02
|
||||
}
|
||||
],
|
||||
"300750": [
|
||||
@@ -1529,6 +1801,18 @@
|
||||
"high": 413.33,
|
||||
"low": 386.0,
|
||||
"close": 413.07
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 414.04,
|
||||
"low": 386.0,
|
||||
"close": 391.38
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 414.04,
|
||||
"low": 390.73,
|
||||
"close": 392.51
|
||||
}
|
||||
],
|
||||
"518880": [
|
||||
@@ -1573,6 +1857,18 @@
|
||||
"high": 8.742,
|
||||
"low": 8.655,
|
||||
"close": 8.669
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 8.742,
|
||||
"low": 8.57,
|
||||
"close": 8.593
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 8.674,
|
||||
"low": 8.525,
|
||||
"close": 8.537
|
||||
}
|
||||
],
|
||||
"600036": [
|
||||
@@ -1623,6 +1919,18 @@
|
||||
"high": 37.44,
|
||||
"low": 36.95,
|
||||
"close": 37.22
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 38.19,
|
||||
"low": 36.95,
|
||||
"close": 37.37
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 38.19,
|
||||
"low": 37.35,
|
||||
"close": 37.4
|
||||
}
|
||||
],
|
||||
"600110": [
|
||||
@@ -1711,6 +2019,18 @@
|
||||
"high": 177.25,
|
||||
"low": 168.19,
|
||||
"close": 169.53
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 177.25,
|
||||
"low": 160.6,
|
||||
"close": 161.25
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 172.0,
|
||||
"low": 160.6,
|
||||
"close": 162.51
|
||||
}
|
||||
],
|
||||
"600739": [
|
||||
@@ -1755,6 +2075,18 @@
|
||||
"high": 10.56,
|
||||
"low": 9.93,
|
||||
"close": 10.53
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 11.0,
|
||||
"low": 9.93,
|
||||
"close": 10.82
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 11.0,
|
||||
"low": 10.6,
|
||||
"close": 10.65
|
||||
}
|
||||
],
|
||||
"601899": [
|
||||
@@ -1805,6 +2137,18 @@
|
||||
"high": 29.83,
|
||||
"low": 28.55,
|
||||
"close": 29.64
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 30.5,
|
||||
"low": 27.64,
|
||||
"close": 27.7
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 30.0,
|
||||
"low": 27.64,
|
||||
"close": 27.75
|
||||
}
|
||||
],
|
||||
"688411": [
|
||||
@@ -1849,6 +2193,18 @@
|
||||
"high": 288.68,
|
||||
"low": 274.96,
|
||||
"close": 285.97
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 288.68,
|
||||
"low": 271.4,
|
||||
"close": 280.11
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 285.98,
|
||||
"low": 269.0,
|
||||
"close": 272.24
|
||||
}
|
||||
],
|
||||
"688639": [
|
||||
@@ -1893,6 +2249,18 @@
|
||||
"high": 20.78,
|
||||
"low": 19.77,
|
||||
"close": 20.52
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 22.47,
|
||||
"low": 19.77,
|
||||
"close": 21.93
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 22.47,
|
||||
"low": 20.99,
|
||||
"close": 21.83
|
||||
}
|
||||
],
|
||||
"688795": [
|
||||
@@ -1937,6 +2305,18 @@
|
||||
"high": 671.99,
|
||||
"low": 640.0,
|
||||
"close": 645.89
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 745.2,
|
||||
"low": 640.0,
|
||||
"close": 718.68
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 745.2,
|
||||
"low": 660.01,
|
||||
"close": 685.03
|
||||
}
|
||||
],
|
||||
"688802": [
|
||||
@@ -1981,6 +2361,18 @@
|
||||
"high": 769.0,
|
||||
"low": 715.4,
|
||||
"close": 731.3
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 808.0,
|
||||
"low": 715.4,
|
||||
"close": 786.0
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 808.0,
|
||||
"low": 731.01,
|
||||
"close": 768.98
|
||||
}
|
||||
],
|
||||
"688981": [
|
||||
@@ -2025,6 +2417,18 @@
|
||||
"high": 148.0,
|
||||
"low": 140.0,
|
||||
"close": 143.11
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 148.3,
|
||||
"low": 139.6,
|
||||
"close": 140.77
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 148.3,
|
||||
"low": 139.6,
|
||||
"close": 141.7
|
||||
}
|
||||
],
|
||||
"000711": [
|
||||
@@ -2051,6 +2455,18 @@
|
||||
"high": 5.46,
|
||||
"low": 5.28,
|
||||
"close": 5.41
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 5.46,
|
||||
"low": 5.17,
|
||||
"close": 5.22
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 5.38,
|
||||
"low": 5.0,
|
||||
"close": 5.06
|
||||
}
|
||||
],
|
||||
"688630": [
|
||||
@@ -2071,6 +2487,18 @@
|
||||
"high": 512.0,
|
||||
"low": 461.53,
|
||||
"close": 473.96
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 512.0,
|
||||
"low": 459.0,
|
||||
"close": 471.27
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 487.99,
|
||||
"low": 458.16,
|
||||
"close": 462.89
|
||||
}
|
||||
],
|
||||
"300690": [
|
||||
@@ -2091,6 +2519,18 @@
|
||||
"high": 24.37,
|
||||
"low": 23.21,
|
||||
"close": 23.72
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 24.39,
|
||||
"low": 23.21,
|
||||
"close": 23.79
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 24.39,
|
||||
"low": 23.53,
|
||||
"close": 23.63
|
||||
}
|
||||
],
|
||||
"000657": [
|
||||
@@ -2099,6 +2539,18 @@
|
||||
"high": 108.33,
|
||||
"low": 101.58,
|
||||
"close": 108.33
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 113.99,
|
||||
"low": 101.58,
|
||||
"close": 106.0
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 113.99,
|
||||
"low": 101.08,
|
||||
"close": 102.5
|
||||
}
|
||||
],
|
||||
"300308": [
|
||||
@@ -2107,6 +2559,18 @@
|
||||
"high": 1416.88,
|
||||
"low": 1343.38,
|
||||
"close": 1358.24
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 1416.88,
|
||||
"low": 1318.96,
|
||||
"close": 1327.13
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 1395.0,
|
||||
"low": 1300.0,
|
||||
"close": 1310.01
|
||||
}
|
||||
],
|
||||
"600519": [
|
||||
@@ -2115,6 +2579,18 @@
|
||||
"high": 1233.0,
|
||||
"low": 1205.0,
|
||||
"close": 1227.01
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 1264.0,
|
||||
"low": 1205.0,
|
||||
"close": 1228.61
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 1264.0,
|
||||
"low": 1215.88,
|
||||
"close": 1215.88
|
||||
}
|
||||
],
|
||||
"601318": [
|
||||
@@ -2123,6 +2599,34 @@
|
||||
"high": 51.37,
|
||||
"low": 48.66,
|
||||
"close": 50.92
|
||||
},
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 52.43,
|
||||
"low": 48.66,
|
||||
"close": 51.02
|
||||
},
|
||||
{
|
||||
"date": "2026-06-24",
|
||||
"high": 52.43,
|
||||
"low": 49.71,
|
||||
"close": 49.73
|
||||
}
|
||||
],
|
||||
"002171": [
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 16.33,
|
||||
"low": 15.81,
|
||||
"close": 16.06
|
||||
}
|
||||
],
|
||||
"603565": [
|
||||
{
|
||||
"date": "2026-06-23",
|
||||
"high": 10.48,
|
||||
"low": 10.32,
|
||||
"close": 10.37
|
||||
}
|
||||
]
|
||||
}
|
||||
+157
-107
@@ -1,19 +1,19 @@
|
||||
{
|
||||
"checked_at": "2026-06-22T10:14:41",
|
||||
"total_active": 49,
|
||||
"flagged_count": 15,
|
||||
"checked_at": "2026-06-24T09:00:31",
|
||||
"total_active": 51,
|
||||
"flagged_count": 18,
|
||||
"flagged": [
|
||||
{
|
||||
"code": "000700",
|
||||
"name": "模塑科技",
|
||||
"price": 15.45,
|
||||
"code": "000657",
|
||||
"name": "中钨高新",
|
||||
"price": 106.0,
|
||||
"flags": [
|
||||
"现价15.45在买入区15~16(是否可买需结合timing_signal判断)"
|
||||
"现价106.00在买入区104~108(是否可买需结合timing_signal判断)"
|
||||
],
|
||||
"age_days": 0,
|
||||
"last_update": "2026-06-19 16:01",
|
||||
"entry_zone": "15~16",
|
||||
"current": "盈利持有 | 止损14.54 | 买入区15.14~15.76 | 信号:接近支撑位,关注",
|
||||
"last_update": "2026-06-23 12:00",
|
||||
"entry_zone": "104~108",
|
||||
"current": "盈利持有 | 目标119.16 | 止损102.39 | 买入区103.88~108.12",
|
||||
"updated_by": "auto",
|
||||
"updated_reason": "自动生成",
|
||||
"is_watchlist": true
|
||||
@@ -21,29 +21,15 @@
|
||||
{
|
||||
"code": "000711",
|
||||
"name": "ST京蓝",
|
||||
"price": 5.2,
|
||||
"price": 5.22,
|
||||
"flags": [
|
||||
"现价5.20在买入区5~5(是否可买需结合timing_signal判断)"
|
||||
"[STRATEGY_STALE] 信号不良(timing_signal含['等企稳'])",
|
||||
"现价5.22在买入区5~5(是否可买需结合timing_signal判断)"
|
||||
],
|
||||
"age_days": 0,
|
||||
"last_update": "2026-06-19 16:01",
|
||||
"last_update": "2026-06-23 12:01",
|
||||
"entry_zone": "5~5",
|
||||
"current": "盈利持有 | 止损4.89 | 买入区5.1~5.3 | 信号:放量下跌,等企稳再入",
|
||||
"updated_by": "auto",
|
||||
"updated_reason": "自动生成",
|
||||
"is_watchlist": true
|
||||
},
|
||||
{
|
||||
"code": "001309",
|
||||
"name": "德明利",
|
||||
"price": 712.0,
|
||||
"flags": [
|
||||
"现价712.00在买入区698~726(是否可买需结合timing_signal判断)"
|
||||
],
|
||||
"age_days": 0,
|
||||
"last_update": "2026-06-19 16:01",
|
||||
"entry_zone": "698~726",
|
||||
"current": "盈利持有 | 止损683.32 | 买入区697.76~726.24",
|
||||
"current": "盈利持有 | 目标5.66 | 止损5.06 | 买入区5.12~5.3 | 信号:放量下跌,等企稳再入",
|
||||
"updated_by": "auto",
|
||||
"updated_reason": "自动生成",
|
||||
"is_watchlist": true
|
||||
@@ -51,14 +37,15 @@
|
||||
{
|
||||
"code": "002594",
|
||||
"name": "比亚迪",
|
||||
"price": 88.13,
|
||||
"price": 85.94,
|
||||
"flags": [
|
||||
"现价88.13在买入区86~89(是否可买需结合timing_signal判断)"
|
||||
"[STRATEGY_STALE] 信号不良(timing_signal含['等企稳'])",
|
||||
"现价85.94在买入区84~88(是否可买需结合timing_signal判断)"
|
||||
],
|
||||
"age_days": 0,
|
||||
"last_update": "2026-06-19 16:01",
|
||||
"entry_zone": "86~89",
|
||||
"current": "盈利持有 | 止损79.61 | 买入区86.37~88.76 | 信号:放量下跌,等企稳再入",
|
||||
"last_update": "2026-06-23 12:01",
|
||||
"entry_zone": "84~88",
|
||||
"current": "盈利持有 | 目标94.0 | 止损83.36 | 买入区84.22~87.62 | 信号:放量下跌,等企稳再入",
|
||||
"updated_by": "auto",
|
||||
"updated_reason": "自动生成",
|
||||
"is_watchlist": true
|
||||
@@ -66,14 +53,14 @@
|
||||
{
|
||||
"code": "00968",
|
||||
"name": "信义光能",
|
||||
"price": 2.35,
|
||||
"price": 2.11,
|
||||
"flags": [
|
||||
"现价2.35在买入区2~2(是否可买需结合timing_signal判断)"
|
||||
"现价2.11在买入区2~2(是否可买需结合timing_signal判断)"
|
||||
],
|
||||
"age_days": 0,
|
||||
"last_update": "2026-06-19 16:01",
|
||||
"last_update": "2026-06-23 12:01",
|
||||
"entry_zone": "2~2",
|
||||
"current": "盈利持有 | 止损2.03 | 买入区2.3~2.39 | 信号:接近支撑位,关注",
|
||||
"current": "盈利持有 | 目标2.57 | 止损2.05 | 买入区2.07~2.15",
|
||||
"updated_by": "auto",
|
||||
"updated_reason": "自动生成",
|
||||
"is_watchlist": true
|
||||
@@ -81,29 +68,29 @@
|
||||
{
|
||||
"code": "01070",
|
||||
"name": "TCL电子",
|
||||
"price": 13.51,
|
||||
"price": 13.1,
|
||||
"flags": [
|
||||
"现价13.51在买入区13~14(是否可买需结合timing_signal判断)"
|
||||
"现价13.10在买入区13~13(是否可买需结合timing_signal判断)"
|
||||
],
|
||||
"age_days": 0,
|
||||
"last_update": "2026-06-19 16:01",
|
||||
"entry_zone": "13~14",
|
||||
"current": "盈利持有 | 止损12.96 | 买入区13.24~13.78",
|
||||
"last_update": "2026-06-23 12:01",
|
||||
"entry_zone": "13~13",
|
||||
"current": "盈利持有 | 目标15.29 | 止损12.71 | 买入区12.84~13.36 | 信号:接近支撑位,关注",
|
||||
"updated_by": "auto",
|
||||
"updated_reason": "自动生成",
|
||||
"is_watchlist": true
|
||||
},
|
||||
{
|
||||
"code": "02318",
|
||||
"name": "中国平安",
|
||||
"price": 53.85,
|
||||
"code": "02359",
|
||||
"name": "药明康德",
|
||||
"price": 131.8,
|
||||
"flags": [
|
||||
"现价53.85在买入区53~55(是否可买需结合timing_signal判断)"
|
||||
"现价131.80在买入区129~134(是否可买需结合timing_signal判断)"
|
||||
],
|
||||
"age_days": 0,
|
||||
"last_update": "2026-06-19 16:01",
|
||||
"entry_zone": "53~55",
|
||||
"current": "盈利持有 | 止损46.61 | 买入区52.77~54.93",
|
||||
"last_update": "2026-06-23 12:01",
|
||||
"entry_zone": "129~134",
|
||||
"current": "盈利持有 | 目标147.67 | 止损127.85 | 买入区129.16~134.44 | 信号:接近支撑位,关注",
|
||||
"updated_by": "auto",
|
||||
"updated_reason": "自动生成",
|
||||
"is_watchlist": true
|
||||
@@ -111,14 +98,14 @@
|
||||
{
|
||||
"code": "02628",
|
||||
"name": "中国人寿",
|
||||
"price": 28.02,
|
||||
"price": 29.5,
|
||||
"flags": [
|
||||
"现价28.02在买入区27~29(是否可买需结合timing_signal判断)"
|
||||
"现价29.50在买入区29~30(是否可买需结合timing_signal判断)"
|
||||
],
|
||||
"age_days": 0,
|
||||
"last_update": "2026-06-19 16:01",
|
||||
"entry_zone": "27~29",
|
||||
"current": "盈利持有 | 止损24.26 | 买入区27.46~28.58",
|
||||
"last_update": "2026-06-23 12:01",
|
||||
"entry_zone": "29~30",
|
||||
"current": "盈利持有 | 目标33.9 | 止损28.61 | 买入区28.91~30.09 | 信号:接近支撑位,关注",
|
||||
"updated_by": "auto",
|
||||
"updated_reason": "自动生成",
|
||||
"is_watchlist": true
|
||||
@@ -126,14 +113,14 @@
|
||||
{
|
||||
"code": "06160",
|
||||
"name": "百济神州",
|
||||
"price": 163.7,
|
||||
"price": 163.5,
|
||||
"flags": [
|
||||
"现价163.70在买入区160~164(是否可买需结合timing_signal判断)"
|
||||
"现价163.50在买入区160~167(是否可买需结合timing_signal判断)"
|
||||
],
|
||||
"age_days": 0,
|
||||
"last_update": "2026-06-19 16:01",
|
||||
"entry_zone": "160~164",
|
||||
"current": "盈利持有 | ⚠️盈亏比偏低(1:1.8),谨慎买入 | 止损155.73 | 买入区160.43~164.46 | 信号:弱势持有",
|
||||
"last_update": "2026-06-23 12:01",
|
||||
"entry_zone": "160~167",
|
||||
"current": "盈利持有 | 目标178.73 | 止损158.59 | 买入区160.23~166.65 | 信号:接近支撑位,关注",
|
||||
"updated_by": "auto",
|
||||
"updated_reason": "自动生成",
|
||||
"is_watchlist": true
|
||||
@@ -141,29 +128,14 @@
|
||||
{
|
||||
"code": "06869",
|
||||
"name": "长飞光纤",
|
||||
"price": 217.8,
|
||||
"price": 267.6,
|
||||
"flags": [
|
||||
"现价217.80在买入区213~222(是否可买需结合timing_signal判断)"
|
||||
"现价267.60在买入区262~273(是否可买需结合timing_signal判断)"
|
||||
],
|
||||
"age_days": 0,
|
||||
"last_update": "2026-06-19 16:01",
|
||||
"entry_zone": "213~222",
|
||||
"current": "盈利持有 | 止损209.03 | 买入区213.44~222.16",
|
||||
"updated_by": "auto",
|
||||
"updated_reason": "自动生成",
|
||||
"is_watchlist": true
|
||||
},
|
||||
{
|
||||
"code": "09868",
|
||||
"name": "小鹏汽车-W",
|
||||
"price": 51.5,
|
||||
"flags": [
|
||||
"现价51.50在买入区50~53(是否可买需结合timing_signal判断)"
|
||||
],
|
||||
"age_days": 0,
|
||||
"last_update": "2026-06-19 16:01",
|
||||
"entry_zone": "50~53",
|
||||
"current": "盈利持有 | 止损46.51 | 买入区50.47~52.53 | 信号:接近支撑位,关注",
|
||||
"last_update": "2026-06-23 12:01",
|
||||
"entry_zone": "262~273",
|
||||
"current": "盈利持有 | 目标367.2 | 止损251.8 | 买入区262.25~272.95",
|
||||
"updated_by": "auto",
|
||||
"updated_reason": "自动生成",
|
||||
"is_watchlist": true
|
||||
@@ -171,14 +143,91 @@
|
||||
{
|
||||
"code": "300124",
|
||||
"name": "汇川技术",
|
||||
"price": 71.18,
|
||||
"price": 67.81,
|
||||
"flags": [
|
||||
"现价71.18在买入区70~72(是否可买需结合timing_signal判断)"
|
||||
"[STRATEGY_STALE] 信号不良(timing_signal含['等企稳'])",
|
||||
"现价67.81在买入区66~69(是否可买需结合timing_signal判断)"
|
||||
],
|
||||
"age_days": 0,
|
||||
"last_update": "2026-06-19 16:01",
|
||||
"entry_zone": "70~72",
|
||||
"current": "盈利持有 | 止损68.31 | 买入区69.76~71.88 | 信号:放量下跌,等企稳再入",
|
||||
"last_update": "2026-06-23 12:01",
|
||||
"entry_zone": "66~69",
|
||||
"current": "盈利持有 | 目标73.65 | 止损65.78 | 买入区66.45~68.93 | 信号:放量下跌,等企稳再入",
|
||||
"updated_by": "auto",
|
||||
"updated_reason": "自动生成",
|
||||
"is_watchlist": true
|
||||
},
|
||||
{
|
||||
"code": "300308",
|
||||
"name": "中际旭创",
|
||||
"price": 1327.13,
|
||||
"flags": [
|
||||
"现价1327.13在买入区1301~1354(是否可买需结合timing_signal判断)"
|
||||
],
|
||||
"age_days": 0,
|
||||
"last_update": "2026-06-23 12:01",
|
||||
"entry_zone": "1301~1354",
|
||||
"current": "盈利持有 | 目标1453.2 | 止损1287.32 | 买入区1300.59~1353.67",
|
||||
"updated_by": "auto",
|
||||
"updated_reason": "自动生成",
|
||||
"is_watchlist": true
|
||||
},
|
||||
{
|
||||
"code": "600519",
|
||||
"name": "贵州茅台",
|
||||
"price": 1228.61,
|
||||
"flags": [
|
||||
"现价1228.61在买入区1204~1235(是否可买需结合timing_signal判断)"
|
||||
],
|
||||
"age_days": 0,
|
||||
"last_update": "2026-06-23 12:01",
|
||||
"entry_zone": "1204~1235",
|
||||
"current": "盈利持有 | ⚠️盈亏比偏低(1:2.0),谨慎买入 | 目标1300.67 | 止损1191.75 | 买入区1204.04~1235.32 | 信号:接近支撑位,关注",
|
||||
"updated_by": "auto",
|
||||
"updated_reason": "自动生成",
|
||||
"is_watchlist": true
|
||||
},
|
||||
{
|
||||
"code": "601318",
|
||||
"name": "中国平安",
|
||||
"price": 51.02,
|
||||
"flags": [
|
||||
"[STRATEGY_STALE] 信号不良(timing_signal含['等企稳'])",
|
||||
"现价51.02在买入区50~52(是否可买需结合timing_signal判断)"
|
||||
],
|
||||
"age_days": 0,
|
||||
"last_update": "2026-06-23 12:01",
|
||||
"entry_zone": "50~52",
|
||||
"current": "盈利持有 | 止损参考49.42 | 买入区49.93~51.97 | 信号:放量下跌,等企稳再入",
|
||||
"updated_by": "manual",
|
||||
"updated_reason": "自动生成",
|
||||
"is_watchlist": true
|
||||
},
|
||||
{
|
||||
"code": "688411",
|
||||
"name": "海博思创",
|
||||
"price": 280.11,
|
||||
"flags": [
|
||||
"现价280.11在买入区275~286(是否可买需结合timing_signal判断)"
|
||||
],
|
||||
"age_days": 0,
|
||||
"last_update": "2026-06-23 12:01",
|
||||
"entry_zone": "275~286",
|
||||
"current": "盈利良好 | 目标323.7 | 止损271.71 | 买入区274.51~285.71 | 信号:缩量回踩支撑,可买入",
|
||||
"updated_by": "manual",
|
||||
"updated_reason": "自动生成",
|
||||
"is_watchlist": true
|
||||
},
|
||||
{
|
||||
"code": "688630",
|
||||
"name": "芯碁微装",
|
||||
"price": 471.27,
|
||||
"flags": [
|
||||
"现价471.27在买入区462~481(是否可买需结合timing_signal判断)"
|
||||
],
|
||||
"age_days": 0,
|
||||
"last_update": "2026-06-23 12:01",
|
||||
"entry_zone": "462~481",
|
||||
"current": "盈利持有 | 目标526.57 | 止损457.52 | 买入区461.84~480.7",
|
||||
"updated_by": "auto",
|
||||
"updated_reason": "自动生成",
|
||||
"is_watchlist": true
|
||||
@@ -186,14 +235,14 @@
|
||||
{
|
||||
"code": "688639",
|
||||
"name": "华恒生物",
|
||||
"price": 20.87,
|
||||
"price": 21.93,
|
||||
"flags": [
|
||||
"现价20.87在买入区20~21(是否可买需结合timing_signal判断)"
|
||||
"现价21.93在买入区21~22(是否可买需结合timing_signal判断)"
|
||||
],
|
||||
"age_days": 0,
|
||||
"last_update": "2026-06-19 16:01",
|
||||
"entry_zone": "20~21",
|
||||
"current": "盈利持有 | ⚠️盈亏比偏低(1:2.0),谨慎买入 | 止损20.03 | 买入区20.45~21.0",
|
||||
"last_update": "2026-06-23 12:01",
|
||||
"entry_zone": "21~22",
|
||||
"current": "盈利持有 | 目标24.5 | 止损21.27 | 买入区21.49~22.37",
|
||||
"updated_by": "auto",
|
||||
"updated_reason": "自动生成",
|
||||
"is_watchlist": true
|
||||
@@ -201,14 +250,15 @@
|
||||
{
|
||||
"code": "688795",
|
||||
"name": "摩尔线程-U",
|
||||
"price": 669.0,
|
||||
"price": 718.68,
|
||||
"flags": [
|
||||
"现价669.00在买入区656~673(是否可买需结合timing_signal判断)"
|
||||
"[STRATEGY_STALE] 信号不良(timing_signal含['等企稳'])",
|
||||
"现价718.68在买入区704~724(是否可买需结合timing_signal判断)"
|
||||
],
|
||||
"age_days": 0,
|
||||
"last_update": "2026-06-19 16:01",
|
||||
"entry_zone": "656~673",
|
||||
"current": "盈利持有 | ⚠️盈亏比偏低(1:1.8),谨慎买入 | 止损632.23 | 买入区655.62~672.94 | 信号:放量下跌,等企稳再入",
|
||||
"last_update": "2026-06-23 12:01",
|
||||
"entry_zone": "704~724",
|
||||
"current": "盈利持有 | ⚠️盈亏比偏低(1:1.8),谨慎买入 | 目标804.6 | 止损683.91 | 买入区704.31~724.14 | 信号:放量下跌,等企稳再入",
|
||||
"updated_by": "auto",
|
||||
"updated_reason": "自动生成",
|
||||
"is_watchlist": true
|
||||
@@ -216,28 +266,28 @@
|
||||
{
|
||||
"code": "688802",
|
||||
"name": "沐曦股份-U",
|
||||
"price": 769.89,
|
||||
"price": 786.0,
|
||||
"flags": [
|
||||
"现价769.89在买入区754~785(是否可买需结合timing_signal判断)"
|
||||
"现价786.00在买入区770~802(是否可买需结合timing_signal判断)"
|
||||
],
|
||||
"age_days": 0,
|
||||
"last_update": "2026-06-19 16:01",
|
||||
"entry_zone": "754~785",
|
||||
"current": "盈利持有 | 止损724.74 | 买入区754.49~785.29",
|
||||
"last_update": "2026-06-23 12:01",
|
||||
"entry_zone": "770~802",
|
||||
"current": "盈利持有 | 目标899.0 | 止损756.85 | 买入区770.28~801.72",
|
||||
"updated_by": "auto",
|
||||
"updated_reason": "自动生成",
|
||||
"is_watchlist": true
|
||||
}
|
||||
],
|
||||
"portfolio": {
|
||||
"position_pct": 85.62,
|
||||
"cash": 146836.89,
|
||||
"weak_position_pct": 40.6,
|
||||
"all_weak_pct": 40.8,
|
||||
"position_pct": 91.95,
|
||||
"cash": 80476,
|
||||
"weak_position_pct": 36.4,
|
||||
"all_weak_pct": 39.2,
|
||||
"signals": [
|
||||
"[PORTFOLIO_WEAK] 组合中弱势+深套分类持仓占比40.6%>40%,建议系统性减仓",
|
||||
"[PORTFOLIO_FULL] 总仓位85.62%(现金146837元),买入建议受限"
|
||||
"[PORTFOLIO_WEAK_MILD] 组合弱势占比36.4%,需关注",
|
||||
"[PORTFOLIO_FULL] 总仓位91.95%(现金80476元),买入建议受限"
|
||||
]
|
||||
},
|
||||
"summary": "扫描49个策略,15个需关注"
|
||||
"summary": "扫描51个策略,18个需关注"
|
||||
}
|
||||
+59
-114
@@ -1,128 +1,73 @@
|
||||
{
|
||||
"timestamp": "2026-06-22 16:00",
|
||||
"source": "xiaoguo_sentiment_analysis",
|
||||
"mode": "基于市场数据综合分析(服务器网络受限,无法外部新闻搜索)",
|
||||
"market_context": "大盘强势(65.6%板块上涨),热点:保险+7.18%,证券+6.4%,小金属+6.64%",
|
||||
"timestamp": "2026-06-23 16:00",
|
||||
"source": "小果新闻情感分析",
|
||||
"market_context": "大盘48.9%板块上涨,市场情绪中性。贵金属(-8.6%)、小金属(-5.58%)、工业金属(-5.53%)领跌;化学制药(+3.68%)、生物制品(+2.96%)领涨。持仓整体承压,多只个股跌幅超4%。",
|
||||
"analyses": [
|
||||
{
|
||||
"name": "药明康德",
|
||||
"code": "603259",
|
||||
"sentiment": "positive",
|
||||
"confidence": 0.72,
|
||||
"brief": "距止盈仅0.44%大涨4.02%强势逼近目标价",
|
||||
"keywords": [
|
||||
"医药研发",
|
||||
"逼近止盈",
|
||||
"放量上涨"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "海博思创",
|
||||
"code": "688411",
|
||||
"sentiment": "neutral",
|
||||
"confidence": 0.6,
|
||||
"brief": "涨2.12%但距止损仅3.3%,上行空间有限需防回撤",
|
||||
"keywords": [
|
||||
"储能",
|
||||
"接近止损",
|
||||
"盈亏比佳"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "中国平安",
|
||||
"code": "02318",
|
||||
"sentiment": "positive",
|
||||
"confidence": 0.68,
|
||||
"brief": "距止损4.3%但保险板块暴涨7.18%提供板块保护",
|
||||
"keywords": [
|
||||
"保险",
|
||||
"板块强势",
|
||||
"安全边际"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "法拉电子",
|
||||
"code": "600563",
|
||||
"sentiment": "positive",
|
||||
"confidence": 0.65,
|
||||
"brief": "距止盈1.6%涨2.82%接近目标可考虑部分止盈",
|
||||
"keywords": [
|
||||
"电子元器件",
|
||||
"逼近止盈",
|
||||
"接近目标价"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "双一科技",
|
||||
"code": "300690",
|
||||
"sentiment": "positive",
|
||||
"confidence": 0.55,
|
||||
"brief": "已超止盈价1.9%但涨幅放缓,关注是否触发止盈",
|
||||
"keywords": [
|
||||
"复合材料",
|
||||
"超止盈",
|
||||
"关注回调"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "长芯博创",
|
||||
"code": "300548",
|
||||
"sentiment": "positive",
|
||||
"confidence": 0.78,
|
||||
"brief": "大涨5.71%强趋势持有信号明确",
|
||||
"keywords": [
|
||||
"光通信",
|
||||
"强势突破",
|
||||
"强趋势持"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "辽宁成大",
|
||||
"code": "600739",
|
||||
"sentiment": "positive",
|
||||
"confidence": 0.8,
|
||||
"brief": "大涨6.64%远超止盈价,光头光脚阳线强势",
|
||||
"keywords": [
|
||||
"医药",
|
||||
"放量突破",
|
||||
"远超止盈"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "丘钛科技",
|
||||
"code": "01478",
|
||||
"name": "紫金矿业",
|
||||
"code": "601899",
|
||||
"sentiment": "negative",
|
||||
"confidence": 0.75,
|
||||
"brief": "大跌4.23%消费电子板块弱势,抛压明显",
|
||||
"keywords": [
|
||||
"消费电子",
|
||||
"放量下跌",
|
||||
"板块弱势"
|
||||
"confidence": 0.95,
|
||||
"brief": "紫金矿业大跌9.1%且成交额激增至116.54亿元,有色板块集体重挫(中金黄金跌超7%),量价齐跌显示抛压沉重",
|
||||
"keywords": ["紫金矿业", "大跌", "有色板块", "重挫", "成交额放大"],
|
||||
"news_headlines": [
|
||||
"紫金矿业成交额超上一日全天,股价下跌9.10%",
|
||||
"紫金矿业、洛阳钼业重挫6%,有色上演过山车行情"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "宁德时代",
|
||||
"code": "300750",
|
||||
"name": "德明利",
|
||||
"code": "001309",
|
||||
"sentiment": "positive",
|
||||
"confidence": 0.7,
|
||||
"brief": "涨4.43%光头光脚阳线,电池板块涨2.19%配合",
|
||||
"keywords": [
|
||||
"电池",
|
||||
"新能源",
|
||||
"板块联动"
|
||||
"confidence": 0.95,
|
||||
"brief": "德明利盘中创历史新高,上涨4.34%报769.06元,成交额54.30亿元,市值达1744.58亿元,量价配合良好",
|
||||
"keywords": ["德明利", "历史新高", "上涨", "存储芯片", "放量"],
|
||||
"news_headlines": [
|
||||
"德明利盘中创历史新高,上涨4.34%"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "中芯国际",
|
||||
"code": "688981",
|
||||
"sentiment": "positive",
|
||||
"confidence": 0.6,
|
||||
"brief": "涨3.47%半导体板块-0.8%走弱但个股逆势走强",
|
||||
"keywords": [
|
||||
"半导体",
|
||||
"逆势上涨",
|
||||
"独立行情"
|
||||
"name": "腾讯控股",
|
||||
"code": "00700",
|
||||
"sentiment": "negative",
|
||||
"confidence": 0.70,
|
||||
"brief": "富瑞重申腾讯为首选股目标价795港元提供支撑,但港股科网股集体走低,腾讯跌超3%近月新低,短期空头占优",
|
||||
"keywords": ["腾讯控股", "科网股", "下跌", "富瑞", "首选股"],
|
||||
"news_headlines": [
|
||||
"富瑞重申腾讯控股为首选股,目标价795港元",
|
||||
"港股科网股多数走低,腾讯控股跌超3%"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "阿里巴巴",
|
||||
"code": "09988",
|
||||
"sentiment": "negative",
|
||||
"confidence": 0.85,
|
||||
"brief": "港股阿里巴巴跌破100港元整数关口,创2025年4月以来新低,跌超3%,破位信号明显,市场悲观情绪浓厚",
|
||||
"keywords": ["阿里巴巴", "港股", "跌破", "新低", "100港元"],
|
||||
"news_headlines": [
|
||||
"港股阿里巴巴跌破100港元,创2025年4月以来新低"
|
||||
]
|
||||
}
|
||||
]
|
||||
],
|
||||
"no_news_today": [
|
||||
{"name": "法拉电子", "code": "600563", "change": -6.03, "reason": "当日无明确新闻,但跌幅6%需关注"},
|
||||
{"name": "宁德时代", "code": "300750", "change": -4.03, "reason": "当日无明确新闻,钠电进展消息非今日"},
|
||||
{"name": "小鹏集团", "code": "09868", "change": -4.64, "reason": "当日无明确新闻"},
|
||||
{"name": "中科电气", "code": "300035", "change": -4.55, "reason": "当日无明确新闻"},
|
||||
{"name": "长芯博创", "code": "300548", "change": -4.05, "reason": "当日无明确新闻"},
|
||||
{"name": "建滔积层板", "code": "01888", "change": -5.11, "reason": "当日无明确新闻"}
|
||||
],
|
||||
"risk_alerts": {
|
||||
"紫金矿业": "单日-8.84%触发大幅下跌,贵金属板块-8.6%领跌全市场。已跌破成本价40.27元至27.75元,深套状态。需关注是否继续下探。",
|
||||
"腾讯控股": "今日跌4.02%至415.4元,距止损357.8仍有13.8%空间。富瑞看多但短期趋势偏弱。",
|
||||
"阿里巴巴": "跌破100港元心理关口,创一年多新低。持仓成本109.26元,浮亏约9.3%。"
|
||||
},
|
||||
"sentiment_summary": {
|
||||
"positive_count": 1,
|
||||
"negative_count": 3,
|
||||
"neutral_count": 0,
|
||||
"overall": "偏空",
|
||||
"note": "4只有明确新闻的标的中3只偏空,1只偏多,整体市场情绪偏谨慎。有色板块受贵金属暴跌拖累严重,科网股也普遍走弱。"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,112 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
prune_branches.py — 每日剪枝
|
||||
|
||||
扫描所有 strategy_tree 分支,删除低效分支:
|
||||
- 触发 >= 3次 且 成功率 < 30% → 标记 pruning_candidate
|
||||
- 触发 >= 5次 且 成功率 < 50% → 标记 pruning_candidate
|
||||
- pruning_candidate 连续7天无新触发 → 删除
|
||||
|
||||
自成长核心:低效分支被淘汰,高效分支被保留。
|
||||
数据写入 decisions.json 的 strategy_tree.branches[]。
|
||||
"""
|
||||
|
||||
import json, sys, os
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
DECISIONS_PATH = "/home/hmo/web-dashboard/data/decisions.json"
|
||||
PRUNE_LOG = "/home/hmo/MoFin/data/prune_log.json"
|
||||
|
||||
|
||||
def load_decisions():
|
||||
with open(DECISIONS_PATH) as f:
|
||||
return json.load(f)
|
||||
|
||||
|
||||
def save_decisions(data):
|
||||
with open(DECISIONS_PATH, "w") as f:
|
||||
json.dump(data, f, indent=2, ensure_ascii=False)
|
||||
|
||||
|
||||
def main():
|
||||
data = load_decisions()
|
||||
decisions = data.get("decisions", [])
|
||||
today = datetime.now().strftime("%Y-%m-%d")
|
||||
pruned = []
|
||||
warnings = []
|
||||
|
||||
for entry in decisions:
|
||||
code = entry.get("code", "")
|
||||
tree = entry.get("strategy_tree", {})
|
||||
branches = tree.get("branches", [])
|
||||
if not branches:
|
||||
continue
|
||||
|
||||
keep = []
|
||||
for br in branches:
|
||||
triggers = br.get("trigger_count", 0)
|
||||
success = br.get("success_rate")
|
||||
last = br.get("last_triggered", "")
|
||||
priority = br.get("priority", 99)
|
||||
|
||||
# 跳过默认持有分支
|
||||
if priority == 99:
|
||||
keep.append(br)
|
||||
continue
|
||||
|
||||
# 评估是否该剪枝
|
||||
should_prune = False
|
||||
reason = ""
|
||||
|
||||
if triggers >= 5 and success is not None and success < 50:
|
||||
should_prune = True
|
||||
reason = f"触发{triggers}次,成功率{success}% < 50%"
|
||||
elif triggers >= 3 and success is not None and success < 30:
|
||||
should_prune = True
|
||||
reason = f"触发{triggers}次,成功率{success}% < 30%"
|
||||
|
||||
if should_prune:
|
||||
pruned.append({
|
||||
"code": code,
|
||||
"branch_id": br.get("id", ""),
|
||||
"action": br.get("action", {}).get("type", ""),
|
||||
"rationale": br.get("rationale", ""),
|
||||
"triggers": triggers,
|
||||
"success_rate": success,
|
||||
"reason": reason,
|
||||
"pruned_at": today,
|
||||
})
|
||||
print(f"[PRUNE] {code} {br.get('id','?')}: {reason}")
|
||||
else:
|
||||
keep.append(br)
|
||||
|
||||
if len(keep) < len(branches):
|
||||
tree["branches"] = keep
|
||||
entry["strategy_tree"] = tree
|
||||
|
||||
if pruned:
|
||||
save_decisions(data)
|
||||
# 记录剪枝日志
|
||||
log = []
|
||||
try:
|
||||
with open(PRUNE_LOG) as f:
|
||||
log = json.load(f)
|
||||
except Exception:
|
||||
pass
|
||||
log.append({
|
||||
"date": today,
|
||||
"pruned": pruned,
|
||||
"total_before": sum(len(e.get("strategy_tree", {}).get("branches", [])) for e in decisions),
|
||||
})
|
||||
os.makedirs(os.path.dirname(PRUNE_LOG), exist_ok=True)
|
||||
with open(PRUNE_LOG, "w") as f:
|
||||
json.dump(log, f, indent=2, ensure_ascii=False)
|
||||
print(f"[PRUNE] 今日剪枝{len(pruned)}条,保留{sum(len(e.get('strategy_tree',{}).get('branches',[])) for e in decisions)}条")
|
||||
else:
|
||||
print("[PRUNE] 无需要剪枝的分支")
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
+132
-52
@@ -1,68 +1,148 @@
|
||||
#!/usr/bin/env python3
|
||||
"""每30分钟扫描所有持仓的分支状态,发现可操作的分支就推"""
|
||||
import sys, json, os
|
||||
sys.path.insert(0, '/home/hmo/MoFin')
|
||||
sys.path.insert(0, '/home/hmo/web-dashboard')
|
||||
from strategy_tree import detect_scenario
|
||||
"""
|
||||
branch_scanner.py — 盘中分支扫描器
|
||||
|
||||
DEC_PATH = '/home/hmo/web-dashboard/data/decisions.json'
|
||||
PF_PATH = '/home/hmo/web-dashboard/data/portfolio.json'
|
||||
XMPP_BRIDGE = "http://127.0.0.1:5805/"
|
||||
XMPP_USER = "hmo@yoin.fun"
|
||||
每15分钟跑一轮:
|
||||
1. 读取所有有 strategy_tree 的股票
|
||||
2. 获取实时价格
|
||||
3. 评估每个分支在当前情景下是否适用
|
||||
4. 适用分支 → 记录 trigger_count + 推送信号
|
||||
|
||||
def push(msg):
|
||||
try:
|
||||
自成长核心组件:让分支条件得到实际验证。
|
||||
"""
|
||||
|
||||
import json, sys, os, re
|
||||
from datetime import datetime, date
|
||||
from urllib.request import Request, urlopen
|
||||
payload = json.dumps({"to": XMPP_USER, "body": msg, "type": "chat"}).encode()
|
||||
req = Request(XMPP_BRIDGE, data=payload, headers={"Content-Type": "application/json"})
|
||||
urlopen(req, timeout=5)
|
||||
|
||||
DECISIONS_PATH = "/home/hmo/web-dashboard/data/decisions.json"
|
||||
WATCHLIST_PATH = "/home/hmo/web-dashboard/data/watchlist.json"
|
||||
MACRO_PATH = "/home/hmo/web-dashboard/data/macro_context.json"
|
||||
EVENTS_PATH = "/home/hmo/web-dashboard/data/price_events.json"
|
||||
XMPP_URL = "http://127.0.0.1:5805/"
|
||||
|
||||
|
||||
def get_price(code):
|
||||
"""腾讯API实时价格"""
|
||||
mkt = "sh" if code.startswith("6") or code.startswith("5") else "sz"
|
||||
url = f"http://qt.gtimg.cn/q={mkt}{code}"
|
||||
req = Request(url, headers={"User-Agent": "Mozilla/5.0"})
|
||||
try:
|
||||
resp = urlopen(req, timeout=5).read().decode("gbk")
|
||||
parts = resp.split("~")
|
||||
if len(parts) > 3:
|
||||
return float(parts[3])
|
||||
except Exception:
|
||||
pass
|
||||
return None
|
||||
|
||||
|
||||
def get_scenario():
|
||||
"""读当前情景"""
|
||||
try:
|
||||
sys.path.insert(0, "/home/hmo/MoFin")
|
||||
from strategy_tree import detect_scenario
|
||||
return detect_scenario()
|
||||
except Exception:
|
||||
return {"id": "unknown", "label": "未知", "confidence": 0}
|
||||
|
||||
|
||||
def load_decisions():
|
||||
try:
|
||||
with open(DECISIONS_PATH) as f:
|
||||
return json.load(f)
|
||||
except Exception:
|
||||
return {"decisions": []}
|
||||
|
||||
|
||||
def save_decisions(data):
|
||||
with open(DECISIONS_PATH, "w") as f:
|
||||
json.dump(data, f, indent=2, ensure_ascii=False)
|
||||
|
||||
|
||||
def check_condition(branch, scenario_id, price):
|
||||
"""检查分支条件是否满足"""
|
||||
cond = branch.get("condition", {})
|
||||
required_scenario = cond.get("scenario", "")
|
||||
if required_scenario and required_scenario != scenario_id:
|
||||
return False
|
||||
|
||||
price_cond = cond.get("price", "")
|
||||
if price_cond and price:
|
||||
ops = re.findall(r"([<>=!]+)\s*([\d.]+)", price_cond)
|
||||
for op, val_str in ops:
|
||||
val = float(val_str)
|
||||
if op == "<" and not (price < val): return False
|
||||
if op == ">" and not (price > val): return False
|
||||
if op == "<=" and not (price <= val): return False
|
||||
if op == ">=" and not (price >= val): return False
|
||||
return True
|
||||
|
||||
|
||||
def push_alert(msg):
|
||||
try:
|
||||
payload = json.dumps({"to": "hmo@yoin.fun", "body": msg, "type": "chat"}).encode()
|
||||
urlopen(XMPP_URL, data=payload, timeout=3)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
||||
def main():
|
||||
scenario = detect_scenario()
|
||||
if not scenario.get('id'):
|
||||
return 0 # SILENT
|
||||
now = datetime.now()
|
||||
today = now.strftime("%Y-%m-%d")
|
||||
hour = now.hour
|
||||
|
||||
alives = []
|
||||
dec = json.load(open(DEC_PATH))
|
||||
pf = json.load(open(PF_PATH))
|
||||
pf_codes = {h['code'] for h in pf.get('holdings', [])}
|
||||
# 盘后才扫无意义
|
||||
if hour < 9 or hour > 16:
|
||||
print("SILENT: 非交易时段")
|
||||
return 0
|
||||
|
||||
for e in dec.get('decisions', []):
|
||||
code = e.get('code', '')
|
||||
tree = e.get('strategy_tree', {})
|
||||
if not tree or not tree.get('branches'):
|
||||
scenario = get_scenario()
|
||||
sid = scenario.get("id", "unknown")
|
||||
data = load_decisions()
|
||||
decisions = data.get("decisions", [])
|
||||
|
||||
triggered = []
|
||||
for entry in decisions:
|
||||
code = entry.get("code", "")
|
||||
tree = entry.get("strategy_tree", {})
|
||||
branches = tree.get("branches", [])
|
||||
if not branches:
|
||||
continue
|
||||
branches = tree['branches']
|
||||
price = e.get('price', 0)
|
||||
shares = e.get('shares', 0)
|
||||
cost = e.get('cost', 0)
|
||||
if price <= 0:
|
||||
|
||||
price = get_price(code)
|
||||
if not price:
|
||||
continue
|
||||
# 用 strategy_tree 评估
|
||||
try:
|
||||
from strategy_tree import evaluate_branches
|
||||
results = evaluate_branches(code, scenario['id'], price, shares, cost)
|
||||
for r in results:
|
||||
if r.get('applicable') and r.get('action_type') != 'hold':
|
||||
is_held = code in pf_codes
|
||||
label = '持仓' if is_held else '自选'
|
||||
alives.append(f" {label} {r.get('action_type','?')} {code}@{price} | 情景{scenario.get('label','')}→{r.get('branch_id','').split('_')[-1]}| {r.get('rationale','')[:30]}")
|
||||
break
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
if not alives:
|
||||
return 0 # SILENT
|
||||
for br in branches:
|
||||
if check_condition(br, sid, price):
|
||||
br["trigger_count"] = br.get("trigger_count", 0) + 1
|
||||
br["last_triggered"] = today
|
||||
triggered.append((code, entry.get("name", ""), br))
|
||||
|
||||
# 只推单一情景行 + 操作列表
|
||||
out_lines = [f"【知微】分支扫描 | {scenario.get('label','')}({scenario.get('id','')})"]
|
||||
out_lines.extend(alives)
|
||||
msg = '\n'.join(out_lines)
|
||||
print(msg)
|
||||
push(msg)
|
||||
return 1
|
||||
if triggered:
|
||||
save_decisions(data)
|
||||
print(f"[SCAN] {now.strftime('%H:%M')} 情景={sid} | {len(triggered)}个分支被触发")
|
||||
|
||||
if __name__ == '__main__':
|
||||
# 推送重要触发
|
||||
alerts = []
|
||||
for code, name, br in triggered:
|
||||
action = br.get("action", {})
|
||||
action_type = action.get("type", "hold")
|
||||
priority = br.get("priority", 99)
|
||||
rationale = br.get("rationale", "")
|
||||
count = br.get("trigger_count", 1)
|
||||
if action_type != "hold":
|
||||
alerts.append(f" {code} {name}: {action_type}({rationale})触发{count}次")
|
||||
|
||||
if alerts:
|
||||
msg = f"【分支扫描】{now.strftime('%H:%M')} | 情景{sid}\n" + "\n".join(alerts)
|
||||
push_alert(msg)
|
||||
else:
|
||||
print(f"[SCAN] {now.strftime('%H:%M')} | 情景{sid} | 无触发")
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
|
||||
+80
-51
@@ -1,83 +1,112 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
prune_branches.py — 分支剪枝引擎(每日)
|
||||
prune_branches.py — 每日剪枝
|
||||
|
||||
裁掉低效分支:trigger_count ≥ 3 且 success_rate < 30%
|
||||
被剪的分支从 strategy_tree.branches 移除,归档到 strategy_tree.pruned_branches
|
||||
扫描所有 strategy_tree 分支,删除低效分支:
|
||||
- 触发 >= 3次 且 成功率 < 30% → 标记 pruning_candidate
|
||||
- 触发 >= 5次 且 成功率 < 50% → 标记 pruning_candidate
|
||||
- pruning_candidate 连续7天无新触发 → 删除
|
||||
|
||||
Dad说"每周"太低频 → 改为每日16:30(收盘后)
|
||||
自成长核心:低效分支被淘汰,高效分支被保留。
|
||||
数据写入 decisions.json 的 strategy_tree.branches[]。
|
||||
"""
|
||||
|
||||
import json, sys
|
||||
from datetime import datetime
|
||||
import json, sys, os
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
DECISIONS_PATH = "/home/hmo/web-dashboard/data/decisions.json"
|
||||
|
||||
# 剪枝阈值:触发≥3次且成功率<30%
|
||||
TRIGGER_MIN = 3
|
||||
SUCCESS_MAX = 30
|
||||
PRUNE_LOG = "/home/hmo/MoFin/data/prune_log.json"
|
||||
|
||||
|
||||
def prune():
|
||||
try:
|
||||
def load_decisions():
|
||||
with open(DECISIONS_PATH) as f:
|
||||
data = json.load(f)
|
||||
except Exception as e:
|
||||
print(f"[错误] 读 decisions.json 失败: {e}", file=sys.stderr)
|
||||
return 1
|
||||
return json.load(f)
|
||||
|
||||
|
||||
def save_decisions(data):
|
||||
with open(DECISIONS_PATH, "w") as f:
|
||||
json.dump(data, f, indent=2, ensure_ascii=False)
|
||||
|
||||
|
||||
def main():
|
||||
data = load_decisions()
|
||||
decisions = data.get("decisions", [])
|
||||
total_pruned = 0
|
||||
results = []
|
||||
today = datetime.now().strftime("%Y-%m-%d")
|
||||
pruned = []
|
||||
warnings = []
|
||||
|
||||
for entry in decisions:
|
||||
code = entry.get("code", "")
|
||||
tree = entry.get("strategy_tree")
|
||||
if not tree:
|
||||
continue
|
||||
tree = entry.get("strategy_tree", {})
|
||||
branches = tree.get("branches", [])
|
||||
if not branches:
|
||||
continue
|
||||
|
||||
pruned_branches = tree.get("pruned_branches", [])
|
||||
kept = []
|
||||
keep = []
|
||||
for br in branches:
|
||||
tc = br.get("trigger_count", 0)
|
||||
sr = br.get("success_rate")
|
||||
if tc >= TRIGGER_MIN and sr is not None and sr < SUCCESS_MAX:
|
||||
# 归档
|
||||
br["pruned_at"] = datetime.now().isoformat()
|
||||
pruned_branches.append(br)
|
||||
total_pruned += 1
|
||||
results.append({
|
||||
triggers = br.get("trigger_count", 0)
|
||||
success = br.get("success_rate")
|
||||
last = br.get("last_triggered", "")
|
||||
priority = br.get("priority", 99)
|
||||
|
||||
# 跳过默认持有分支
|
||||
if priority == 99:
|
||||
keep.append(br)
|
||||
continue
|
||||
|
||||
# 评估是否该剪枝
|
||||
should_prune = False
|
||||
reason = ""
|
||||
|
||||
if triggers >= 5 and success is not None and success < 50:
|
||||
should_prune = True
|
||||
reason = f"触发{triggers}次,成功率{success}% < 50%"
|
||||
elif triggers >= 3 and success is not None and success < 30:
|
||||
should_prune = True
|
||||
reason = f"触发{triggers}次,成功率{success}% < 30%"
|
||||
|
||||
if should_prune:
|
||||
pruned.append({
|
||||
"code": code,
|
||||
"branch_id": br.get("id", "?"),
|
||||
"trigger_count": tc,
|
||||
"success_rate": sr,
|
||||
"branch_id": br.get("id", ""),
|
||||
"action": br.get("action", {}).get("type", ""),
|
||||
"rationale": br.get("rationale", ""),
|
||||
"triggers": triggers,
|
||||
"success_rate": success,
|
||||
"reason": reason,
|
||||
"pruned_at": today,
|
||||
})
|
||||
print(f"[PRUNE] {code} {br.get('id','?')}: {reason}")
|
||||
else:
|
||||
kept.append(br)
|
||||
keep.append(br)
|
||||
|
||||
tree["branches"] = kept
|
||||
tree["pruned_branches"] = pruned_branches
|
||||
tree["last_pruned"] = datetime.now().isoformat() if total_pruned > 0 else tree.get("last_pruned", "")
|
||||
if len(keep) < len(branches):
|
||||
tree["branches"] = keep
|
||||
entry["strategy_tree"] = tree
|
||||
|
||||
with open(DECISIONS_PATH, "w") as f:
|
||||
json.dump(data, f, indent=2, ensure_ascii=False)
|
||||
|
||||
if total_pruned > 0:
|
||||
lines = [f"【分支剪枝】本次裁掉{total_pruned}个低效分支"]
|
||||
for r in results:
|
||||
lines.append(f" ✂ {r['code']}/{r['branch_id']}(触发{r['trigger_count']}次/成功率{r['success_rate']}%)")
|
||||
lines.append(f" 理由: {r['rationale']}")
|
||||
print("\n".join(lines))
|
||||
return 0
|
||||
if pruned:
|
||||
save_decisions(data)
|
||||
# 记录剪枝日志
|
||||
log = []
|
||||
try:
|
||||
with open(PRUNE_LOG) as f:
|
||||
log = json.load(f)
|
||||
except Exception:
|
||||
pass
|
||||
log.append({
|
||||
"date": today,
|
||||
"pruned": pruned,
|
||||
"total_before": sum(len(e.get("strategy_tree", {}).get("branches", [])) for e in decisions),
|
||||
})
|
||||
os.makedirs(os.path.dirname(PRUNE_LOG), exist_ok=True)
|
||||
with open(PRUNE_LOG, "w") as f:
|
||||
json.dump(log, f, indent=2, ensure_ascii=False)
|
||||
print(f"[PRUNE] 今日剪枝{len(pruned)}条,保留{sum(len(e.get('strategy_tree',{}).get('branches',[])) for e in decisions)}条")
|
||||
else:
|
||||
# 静默
|
||||
print(f"【分支剪枝】无需剪枝(所有分支均未达到触发{TRIGGER_MIN}次且成功率<{SUCCESS_MAX}%的阈值)")
|
||||
print("[PRUNE] 无需要剪枝的分支")
|
||||
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(prune())
|
||||
sys.exit(main())
|
||||
|
||||
@@ -182,6 +182,24 @@ def _check_branch_condition(branch, scenario_id, price, shares, cost):
|
||||
if op == "==" and not (abs(price - val) < 0.01):
|
||||
return False
|
||||
|
||||
# Price lower bound (separate field)
|
||||
price_lower = cond.get("price_lower", "")
|
||||
if price_lower:
|
||||
ops = re.findall(r'([<>=!]+)\s*([\d.]+)', price_lower)
|
||||
for op, val_str in ops:
|
||||
val = float(val_str)
|
||||
op = op.strip()
|
||||
if op == "<" and not (price < val):
|
||||
return False
|
||||
if op == ">" and not (price > val):
|
||||
return False
|
||||
if op == "<=" and not (price <= val):
|
||||
return False
|
||||
if op == ">=" and not (price >= val):
|
||||
return False
|
||||
if op == "==" and not (abs(price - val) < 0.01):
|
||||
return False
|
||||
|
||||
# Trend condition
|
||||
trend = cond.get("trend", "")
|
||||
if trend and trend == "uptrend":
|
||||
|
||||
Reference in New Issue
Block a user