知微
|
849495c4ba
|
fix: remove stale_push_wlin hardcoded 0.87 fallback — imports mo_models directly, no shadow functions
|
2026-07-01 22:39:20 +08:00 |
|
知微
|
f50b93d427
|
feat: eliminate duplicate price fetches — stale_push_wlin + per_stock_reassess now read from DB instead of self-pulling Tencent API
|
2026-07-01 22:32:30 +08:00 |
|
hmo
|
6abc2e45b0
|
refactor: phase 0-2 MoFin architecture reform — single source of truth
Phase 0 (止血):
- mo_models.py: unified calc_total_assets(), is_hk_stock(), get_hk_rate() — single source of truth
- Fixed 3 files missing frozen_cash: holdings_reconciliation, server, import_holding_xls
- Fixed stale_push_wlin: unified is_hk_stock detection, removed hardcoded 0.866
- Fixed price_monitor: consolidated 2 duplicate total_assets blocks into mo_models calls
- Fixed stock_scorer: replaced broken len()<=5 is_hk_stock heuristic
- Fixed strategy_lifecycle: replaced non-existent currency_utils import with mo_models
Phase 1 (DSA adapter):
- mo_provider.py: wraps DSA DataFetcherManager (16 fetchers, auto-fallback)
- TDX relay as primary, DSA as backup for realtime/kline/news/fundamentals
Phase 2 (Integration):
- mo_bridge.py: injects DSA market review + news context into MoFin analysis prompts
- Graceful degradation if DSA not installed
Infrastructure:
- mo_config.py: centralized Config singleton replacing scattered hardcoded paths
- All 11 changed files pass python compile check
Impact: total_assets now computed in ONE place (mo_models).
is_hk_stock now ONE implementation (no more false negatives).
HK rate now ONE source (hk_rate API → cache → 0.87 fallback).
No more hardcoded 0.866/0.8664/0.8700 divergence.
|
2026-06-29 23:25:54 +08:00 |
|
知微
|
6a97d93018
|
现金更正 + 法拉电子清仓记录
截图确认:
- 可用资金 92,664.20(含天添利)
- 冻结 39,481.40
- 总现金 132,145.60
- 总资产 = 持仓市值1,107,670 + 现金132,145.60 = 1,239,815.60
法拉电子 189.20卖出100股已记录
|
2026-06-29 12:40:50 +08:00 |
|
知微
|
40d74f89ff
|
feat: xmpp bot最终修复版+skill文档同步
xmpp_agent_core.py 当前工作配置记录:
1. send_presence() — presence = available, 否则私聊进离线
2. 入站消息队列(_inbound_queue) — 崩了不丢, 重试3次
3. 出站队列(_outbound_queue) — 崩了自动重启
4. XMPP心跳检测(xep_0199 ping) — run_filters死后15s内重连
5. 私聊回复双通道: send_message(指定resource) + send_stanza(裸JID)
6. AGENT_MENTION动态解析(群聊@知微识别)
7. session_id保持xmpp-zhiwei-v2不变(不因重启换session)
8. 断线重连2秒延迟(防资源冲突)
|
2026-06-26 23:17:21 +08:00 |
|
知微
|
ef7c83a3ed
|
feat: 换仓策略整合深套解套+T+2前瞻
- T+2前瞻: 扫描自选股中价格距买入区5%以内的A股
- 提前评估现金是否足够
- 不足则评分港股持仓,推荐提前卖出最低评分港股
- T+2到账后目标股入买区时现金已到位
- 深套股在换仓评估中自然排后(score_future_outlook)
- 不需专门解套方案,通过换仓机制逐步清理
- 数据治理: holding_strategies去重+中际旭创补策略
每周六cron自动检查
|
2026-06-25 21:32:01 +08:00 |
|
知微
|
b053103377
|
feat: 策略复盘闭环 Phase1
- 新增 scripts/strategy_review.py: 遍历所有active策略
- 腾讯API实时价对比止损/止盈/入场点
- 分类: correct/wrong/partial/pending
- 失败模式归因: 止损过紧/入场过早/止盈过远等
- 写入 accuracy_stats 表(首条真实数据)
- 新增 docs/strategy-review-loop.md: 完整闭环设计文档
- 含失败模式→修复方向映射表
Phase1 结果: 38条策略, 94.7%准确率(19条待定), 1条止损过紧
|
2026-06-25 19:58:00 +08:00 |
|
知微
|
39ff4d95f7
|
feat: macro_context/market数据全部DB优先,JSON回退
- 建 macro_context_log 表,macro_context_collector.py 双写
- strategy_lifecycle.py load_macro_context() 优先DB
- strategy_tree.py detect_scenario() 优先DB
- stale_push_wlin.py load_macro_line() 优先DB
- xiaoguo_signal_consumer.py 大盘判断优先DB
- stock_profile.py load_macro() 优先DB
- system_audit.py 管道审计改查DB market_snapshots
- JSON保留作fallback,确保过渡期不中断
|
2026-06-24 22:34:08 +08:00 |
|
知微
|
9a702a66f7
|
A/H跨市场去重:药明康德不再推H股
药明康德(02359) timing_signal=买入、多头排列,但Dad已持有
药明康德A股(603259)。同股同权,H折CNY还贵7.4%。
新增:stale_push_wlin在推荐前检查portfolio中是否有
同名不同代码的持仓。有则跳过推荐。
测试:之前推H股,现在静默(0可操作→无输出)
|
2026-06-24 15:35:58 +08:00 |
|
知微
|
8f830b8de2
|
信义光能问题修复:两层级过滤+趋势检查
Bug 1 — strategy_lifecycle.py: enrich_timing_signal 用 factors[-1] 当信号
信义光能: base_signal=neutral, factors=[大盘中性,行业偏弱,高估值]
旧逻辑: factors[-1]='行业偏弱'→成为timing_signal→无效信号
新逻辑: 先找有效操作方向(买入/加仓/观望/持有/关注/信号不充分),
找不到→信号不充分。不再从上下文因子里拼凑信号。
Bug 2 — stale_push_wlin.py: 信号过滤太松
旧逻辑: 只跳过特定关键词(等企稳/关注/信号不充分/持有)
新逻辑: 信号必须含"买入"或"加仓"才进推荐,其他一律跳过
Check 3 — 趋势检查(新增)
fetch_trend_data(): 取实时行情+30日K线计算MA排列
空头排列/弱势震荡→不推荐
药明康德通过(多头排列+买入信号) 信义光能不通过(空头+行业偏弱)
|
2026-06-24 14:39:50 +08:00 |
|
知微
|
b5b0f3d0e8
|
总资产修正+购车图标联动
Fix1: 总资产错误 — HK市价被当人民币算
portfolio.json已有正确 total_assets(含港币→人民币换算),
改为直接读取该字段,不再手动累加持仓市值
原代码用 h.get('currency')=='HKD' 判断但strategy_lifecycle
格式不保存currency字段 → 所有HK持仓被当CNY计算 → 总资产多出6.8万
Fix2: 换仓推荐时显示🛒非⚠️
原来用 lots==0 判断→永远⚠️,换仓推荐可让操作变为可行
改为 lots>0 OR swap_text 时用 🛒(可操作)
|
2026-06-24 13:02:30 +08:00 |
|
知微
|
9a984dd4dc
|
6维评分通用模块 + 港股通T+2延迟标注
1. stock_scorer.py — 共享的6维评分模块
- score_future_outlook(code, data) → (score, reasons)
- rank_by_outlook(holdings, data) → 排序列表
- settlement_delay_note(sell_code, buy_code) → 结算延迟说明
- is_hk_stock(code) → 判断港股通标的
2. stale_push_wlin.py 改用共享模块(去掉本地函数定义)
3. 换仓评估增加港股通结算延迟检测:
- 卖港股→买A股时标注⚠️T+2到账限制
- 本次推荐(招商银行+A股→海博思创)无需标注,全是A股
|
2026-06-24 11:59:55 +08:00 |
|
知微
|
c7f15ebe0b
|
换仓评估改全面分析:用决策系统信号评分代替单纯看亏损%\n\n老逻辑:按亏损比例排序,亏最少的先卖 → 错(阿里亏22%但基本面好)\n新逻辑:score_future_outlook() 多维度评分,按前景排序\n\n评分维度:\n1. timing_signal — 买入+3,深套持有-2,持有-0.5\n2. 技术形态 — bearish-1.5,bullish+1.5\n3. 量价关系 — 卖盘-1,买盘+1\n4. 行业背景 — 大跌-0.5\n5. 盈亏比RR — RR≥2得+1,RR<1得-0.5\n6. 股票类别 — 蓝筹+0.5,深套/弱势-0.5\n\n实测:招商银行(亏-3%)评分-4.5(弱势持有+银行大跌+技术偏空),\n双一科技(亏-16%)评分-4.0(持有+bearish+卖盘主导+弱势)\n→ 推荐卖这俩腾38,780元买海博思创
|
2026-06-24 11:54:36 +08:00 |
|
知微
|
68e530a4be
|
换仓评估修复:沉没成本不参与决策
之前逻辑:expected_gain > locked_loss * 1.5 → 沉没成本谬误
错的:把已发生的亏损当成了交易成本
修复后:
1. 已亏损是沉没成本,卖不卖都已损失,不参与决策
2. 只比较持有 old 票的未来预期 vs 换到 new 票的未来预期
3. 深套票(<-15%)默认=死钱,继续持有预期≈-5%~0%
4. 目标票(RR>=3+买入信号)才有换仓资格
5. 最多卖2只、不超过总资产50%
6. 优先选亏损比例小、市值大的(效率高)
输出示例(已实测):
换仓建议:卖双一科技(亏-15.9%);阿里(亏-21.7%)→腾69k→买海博思创1手(53k)
理由:已深套,回本需涨19~28%不现实,死钱换有信号票,止损-3%可控,+17%空间明确
|
2026-06-24 11:48:27 +08:00 |
|
知微
|
92815aac06
|
换仓评估逻辑:现金不足时自动分析卖差票换推荐股
新增 evaluate_swap() 函数:
1. 仅对RR>=2.0且含买入关键词的强信号触发
2. 扫描持仓按亏损排序,找最少卖出组合凑现金缺口
3. 预期盈利 > 锁定亏损×1.5 才推荐切换
4. 最多卖3只,单次换仓不超总资产50%
5. 不划算时维持原预算不足1手消息
已验证:海博思创(688411) RR=5.6但预期盈利9k<锁定亏损46k×1.5
→ 不推荐切换,正确。沐曦如果触发也会按同一逻辑判断。
|
2026-06-24 11:42:26 +08:00 |
|
知微
|
df4f898bc4
|
持仓来源修复:holding.xls导入+持仓数据修正
老问题:scripts读的是 strategy_staleness_report.json 里的旧现金值,
portfolio.json 被 strategy_lifecycle.regenerate_all 反复覆盖。
修复:
1. import_holding_xls.py — 从 ~/stocks/holding.xls 导入TSV持仓
(含25只真实持仓,14A/11H,总市值93万,现金8万,仓位92%)
2. stale_push_wlin 现金来源改读 portfolio.json(取代旧stale_report缓存)
3. 港股市值×汇率修正(之前按1:1当人民币算,总资产多估了)
4. 每条策略的决策树同步重建
脚本执行:python3 MoFin/scripts/import_holding_xls.py (含全量重评)
Dad你以后更新holding.xls后跑这条命令就行
|
2026-06-24 11:19:29 +08:00 |
|
知微
|
3ec5460207
|
stale_push_wlin: 30分钟同股同操作冷却
push_cooldown.json 记录每只股票每种操作的最后推送时间。
每次推送前检查 (code, action_type) 是否在30分钟内推过。
是 → 跳过该股(不出现在推送中)
全部跳过 → 整条消息静默不推
冷却键: {code}_{action_type}(如 300308_buy、688639_buy)
不同操作不受限:同一只股 买入→止损 隔10分钟也能推
不同股票不受限:华恒的buy不影响中际的buy
同步修复:港股每手股数香港股数(之前patch到旧文件没生效)
|
2026-06-24 11:01:53 +08:00 |
|
知微
|
9d3f48a502
|
半手补整阈值50%→90%,防止现金严重不足却标🛒
修正前:长飞光纤预算60K只有1手112K的一半,却因为
budget > lot_cost*0.5 的规则被凑成1手,标了🛒
修正后:只有预算够90%以上才补整1手
实际影响:长飞光纤现在标⚠️而不是🛒
|
2026-06-24 10:53:31 +08:00 |
|
知微
|
e0b7f49c3a
|
stale_push_wlin: 操作符号标记
- ⚠️ 预算不足1手(列了也没法买,但让你知道)
- 🛒 手数达标(现金够买,可直接操作)
取自 position_advice calc_position 的实际计算结果:
lots=0 → 预算不足 ⚠️
lots>0 → 可以买 🛒
|
2026-06-24 10:47:34 +08:00 |
|
知微
|
b229e6f0cb
|
推送治理:静默采集+需要操作才出声
核心原则:数据采集类脚本完全静默(做积累不做推送),
只有需要操作/需要看的才到达Dad。
改动:
1. branch_scanner 已完全静默(上一轮改的)
2. stale_push_wlin return 1 → return 0(修复错误退出码)
3. 开盘简报 deliver=local → deliver=origin(之前没到Dad)
4. 收盘简报 deliver=local → deliver=origin
5. 策略评估-每日 deliver=local → deliver=origin
6. stale_push_wlin 输出格式已包含分支信息:
【弱势震荡→buy】价格回调到支撑区,弱势市场低吸
Dad会收到的消息:
- 自选买入提醒(9:01/12:01)← 需要操作
- 开盘简报(9:35)← 需要看
- 收盘简报(16:10)← 需要看
- 策略评估(21:00)← 需要看
- 价格触发变化 ← 需要知道
其他全部静默
|
2026-06-24 10:45:51 +08:00 |
|
知微
|
102a64d856
|
自成长:分支评估+剪枝+报告接入
补齐「顺势而为 环境预判 策略多分枝」体系中缺失的组件:
branch_evaluator.py(新增)— 每30min评估所有策略树分支
1. detect_scenario() 获取当前宏观情景
2. 对42只股票评估哪个分支当前适用
3. 适用分支 trigger_count+1, last_triggered=now
4. 触发>=3次且成功率<30%→标记pruning_candidate
5. 无决策树的股票自动初始化(init_default_branches)
prune_branches.py(新增)— 每日16:30收盘后剪枝
阈值:触发>=3次且成功率<30%→裁掉并归档到pruned_branches
Dad说「每周太低频」→改为每日
stale_push_wlin.py(修改)— 报告每只股增加分支行:
【弱势震荡→buy_dip】价格回调到支撑区,弱势市场低吸
cron更新:
分支扫描(b809fcabfa5b) → 指向branch_evaluator.py, 每30min
剪枝(a3697c108c7b) → 指向prune_branches.py, 每日16:30
自成长核心:branch_evaluator 运行时自动发现并初始化无策略树股票,
252个分支已生成, trigger_count已开始累积, 反馈循环上线
|
2026-06-24 10:24:11 +08:00 |
|
知微
|
eb86a9091e
|
stale_push_wlin: 仓位分母改为总资产,输出具体手数/股数
仓位计算:
分母:总资产(持仓市值+现金),从portfolio.json+strategy_staleness_report.json读取
非之前用的现金总额
理论仓位:仅基于RR+大盘+品种特性,不受现金限制,纯% of 总资产
当前建议:理论占总资产%→按现金锁死→输出具体手数和股数
报告最终一行:
仓位:理论{theo}%×总资产 | 建议{act}%({N}手({M}股,{cost}元))
Dad要求:仓位是本次操作的仓位,分母是总资产不是现金,
给出仓位后要能直接按手/股操作
|
2026-06-24 10:08:05 +08:00 |
|
知微
|
3ba2b044d7
|
stale_push_wlin: 推荐加理论仓位+当前建议仓位(基于现金)
每只推荐新增第四行:
仓位:理论推荐{theo_pct}% | 当前建议{actual_pct}%({N}手≈预算)
仓位计算:
理论 — 基于RR(8-25%) + 大盘(±20%) + 品种特性(±20%)
当前 — 理论×多只稀释系数 + 按实际现金计算可买手数
兜底 — 预算不够1手时推荐至少1手
Dad要求:买卖不能不写仓位,理论仓位不受现金限制,
当前建议仓位根据portfolio.json实际现金计算
|
2026-06-24 10:00:52 +08:00 |
|
知微
|
b30a5fcdde
|
stale_push_wlin: 每只推荐含大盘/行业/个股三面分析
每只操作建议输出三段线:
第一行:名称代码+买区+1手成本+RR+止损止盈
第二行:大盘走向 | 行业趋势 | PE估值 | 消息面
第三行:技术位(强撑→弱撑→弱压→强压) | 信号
数据来源:signal_factors(策略富化生成的因子列表)、
multi_tf_cache.json(PE/EPS)、
tech_snapshot(技术位)、
macro_line(大盘背景)
Dad要求:推荐必须能看到操作理由的三个维度分析
|
2026-06-24 09:56:26 +08:00 |
|
知微
|
f6ee15489c
|
stale_push_wlin: 重评段删除,只推有清晰操作信号的个股
改动:
- 移除「策略需重评」报告段 — 内部流程,Dad不需要看到
- 移除pick/watch拆分的旧逻辑 — 统一为actionable过滤
- 跳过信号含等企稳关注信号不充分neutral持有等无用描述的个股
- 无操作信号 → 静默不推
- 有操作信号 → 标准格式(含行业context+技术位+止损止盈+RR+1手成本)
Dad要求:要看到的是可以直接操作的建议,不是内部流程记录
|
2026-06-24 09:46:52 +08:00 |
|