知微
|
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 |
|