From 0bfb819110472ef3c5878dc683ec3c1cf83eb330 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9F=A5=E5=BE=AE?= Date: Fri, 3 Jul 2026 14:42:30 +0800 Subject: [PATCH] =?UTF-8?q?DB=E6=B8=AF=E8=82=A1=E4=BB=B7=E6=A0=BC+?= =?UTF-8?q?=E6=88=90=E6=9C=AC=E4=BF=AE=E5=A4=8D=E5=9B=9EHKD=E5=8E=9F?= =?UTF-8?q?=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 笑笑重构把HK股的价格和成本都转CNY写入DB。 price_monitor同时改了新逻辑要写HKD,但DB已经是CNY, 两个方向打架导致建滔(-2.5%实际浮亏)被算成-15.5%。 修复: DB holdings表8只HK股的price和cost从CNY转回HKD currency改回HKD 现金修正为132,121.93(Dad 7/3截图确认) 总资产=957,656.13 仓位=86.2% --- data/candidate_pool.json | 164 ++++++++++++++++++++++++++++++++---- data/mofin.db-shm | Bin 32768 -> 32768 bytes data/mofin.db-wal | Bin 57712 -> 94792 bytes data/portfolio.json | 175 ++++++++++++++++++++------------------- data/price_events.json | 20 +++++ data/price_history.json | 26 +++--- 6 files changed, 271 insertions(+), 114 deletions(-) diff --git a/data/candidate_pool.json b/data/candidate_pool.json index 48887ca..1499a2b 100644 --- a/data/candidate_pool.json +++ b/data/candidate_pool.json @@ -1,6 +1,6 @@ { - "last_updated": "2026-07-03 13:42", - "total_candidates": 11, + "last_updated": "2026-07-03 14:18", + "total_candidates": 15, "sectors_analyzed_today": [ "半导体", "金属新材料", @@ -605,21 +605,25 @@ "name": "拓普集团", "sector": "汽车零部件", "xiaoguo_score": 8.5, - "xiaoguo_reason": "特斯拉/华为核心供应商,智能底盘+轻量化双轮驱动,Q2业绩预期强劲,资金持续加仓,技术面突破年线后回踩确认支撑。", + "xiaoguo_reason": "新能源底盘轻量化与空气悬架核心供应商,绑定特斯拉/理想/蔚来等头部车企,订单可见度高;业绩增速匹配估值,机构持仓稳定。", "xiaoguo_strategy": { - "entry_range": "58.5-60.2", - "stop_loss": "56.0", - "target": "68.0-72.0" + "entry_range": "63.5-66.0元", + "stop_loss": "60.0元", + "target": "78.0-82.0元" }, "verified_price": 62.43, "verified_change": 10.01, "added_at": "2026-07-03 13:40", - "last_updated": "2026-07-03 13:40", - "num_observations": 1, + "last_updated": "2026-07-03 14:14", + "num_observations": 2, "score_history": [ { "date": "2026-07-03 13:40", "score": 8.5 + }, + { + "date": "2026-07-03 14:14", + "score": 8.5 } ], "zhiwei_star": null, @@ -669,21 +673,153 @@ "name": "伯特利", "sector": "汽车零部件", "xiaoguo_score": 8.2, - "xiaoguo_reason": "线控制动市占率领先,智能驾驶渗透率提升直接受益,研发壁垒高,技术面放量突破平台,资金介入明显。", + "xiaoguo_reason": "线控制动与ESP国产替代先锋,技术壁垒高;ADAS渗透率提升直接拉动需求,客户覆盖主流自主品牌及合资车企,估值处于历史中低位。", "xiaoguo_strategy": { - "entry_range": "42.0-43.5", - "stop_loss": "40.0", - "target": "48.0-52.0" + "entry_range": "46.5-49.0元", + "stop_loss": "43.5元", + "target": "58.0-62.0元" }, "verified_price": 27.65, "verified_change": 9.98, "added_at": "2026-07-03 13:40", - "last_updated": "2026-07-03 13:40", - "num_observations": 1, + "last_updated": "2026-07-03 14:14", + "num_observations": 2, "score_history": [ { "date": "2026-07-03 13:40", "score": 8.2 + }, + { + "date": "2026-07-03 14:14", + "score": 8.2 + } + ], + "zhiwei_star": null, + "zhiwei_reviewed": false, + "zhiwei_reviewed_at": null, + "promoted": false, + "promoted_at": null, + "dropped": false, + "drop_reason": null, + "trend_warning": false, + "trend_note": "" + }, + { + "code": "002050", + "name": "三花智控", + "sector": "汽车零部件", + "xiaoguo_score": 8.0, + "xiaoguo_reason": "全球热管理龙头,深度受益电动车渗透率提升;积极布局机器人机电执行器,第二增长曲线明确;需关注行业价格战对毛利率的短期扰动。", + "xiaoguo_strategy": { + "entry_range": "27.0-28.5元", + "stop_loss": "25.5元", + "target": "34.0-36.0元" + }, + "verified_price": 48.6, + "verified_change": 8.19, + "added_at": "2026-07-03 14:14", + "last_updated": "2026-07-03 14:14", + "num_observations": 1, + "score_history": [ + { + "date": "2026-07-03 14:14", + "score": 8.0 + } + ], + "zhiwei_star": null, + "zhiwei_reviewed": false, + "zhiwei_reviewed_at": null, + "promoted": false, + "promoted_at": null, + "dropped": false, + "drop_reason": null, + "trend_warning": false, + "trend_note": "" + }, + { + "code": "002475", + "name": "立讯精密", + "sector": "消费电子", + "xiaoguo_score": 8.5, + "xiaoguo_reason": "苹果AI手机核心代工龙头,MR/汽车电子第二曲线加速落地,业绩确定性强,机构资金持续加仓,技术面呈多头排列。", + "xiaoguo_strategy": { + "entry_range": "38.5-39.8元", + "stop_loss": "36.5元", + "target": "45.0元" + }, + "verified_price": 65.2, + "verified_change": 7.06, + "added_at": "2026-07-03 14:18", + "last_updated": "2026-07-03 14:18", + "num_observations": 1, + "score_history": [ + { + "date": "2026-07-03 14:18", + "score": 8.5 + } + ], + "zhiwei_star": null, + "zhiwei_reviewed": false, + "zhiwei_reviewed_at": null, + "promoted": false, + "promoted_at": null, + "dropped": false, + "drop_reason": null, + "trend_warning": false, + "trend_note": "" + }, + { + "code": "002241", + "name": "歌尔股份", + "sector": "消费电子", + "xiaoguo_score": 8.0, + "xiaoguo_reason": "VR/AR声学及光学组件全球龙头,Meta/苹果订单预期回暖,估值处于历史中低位,弹性大且资金介入明显。", + "xiaoguo_strategy": { + "entry_range": "22.0-23.2元", + "stop_loss": "20.5元", + "target": "28.0元" + }, + "verified_price": 22.2, + "verified_change": 2.21, + "added_at": "2026-07-03 14:18", + "last_updated": "2026-07-03 14:18", + "num_observations": 1, + "score_history": [ + { + "date": "2026-07-03 14:18", + "score": 8.0 + } + ], + "zhiwei_star": null, + "zhiwei_reviewed": false, + "zhiwei_reviewed_at": null, + "promoted": false, + "promoted_at": null, + "dropped": false, + "drop_reason": null, + "trend_warning": false, + "trend_note": "" + }, + { + "code": "300433", + "name": "蓝思科技", + "sector": "消费电子", + "xiaoguo_score": 7.5, + "xiaoguo_reason": "玻璃盖板与精密结构件双轮驱动,AI终端外观创新(陶瓷/微晶玻璃)直接受益,业绩拐点明确,技术面突破年线。", + "xiaoguo_strategy": { + "entry_range": "15.8-16.5元", + "stop_loss": "14.8元", + "target": "20.0元" + }, + "verified_price": 52.41, + "verified_change": 3.39, + "added_at": "2026-07-03 14:18", + "last_updated": "2026-07-03 14:18", + "num_observations": 1, + "score_history": [ + { + "date": "2026-07-03 14:18", + "score": 7.5 } ], "zhiwei_star": null, diff --git a/data/mofin.db-shm b/data/mofin.db-shm index c9e30019a567d7b5ebd7c4d1ad2d4fe9cc9f99c3..f5156c614ac55cec0f29556352d53e5e4d2f054e 100644 GIT binary patch delta 378 zcmb8qtxJPZ6bA6~+65}r%omYHM^jefgl5;S(suHlR=b;n05_fkRjqfAXrw9 zVh{`-Fqs4e!-8Nmh`}m)?krXx_;I-(=Wwp~#(UEmd7YvV{3@1p-A#x-_TLxZ=91<1 z?DhTg@lvJPxmj2}du;soedrw$`hNdO?~rJ%cM&#WfUL@?yeg=wnzlqUs^*A%M0A@X znn>%N`cfMiqVyvk;}P;Kdk#gGE1X_5?=ZwtGq5b@K+MtroYq)q>u!XIW!}caI%`NlYk|QN=_1F{ RGRU%wI+R%s4f;~Z;Q3(3q?LH+m+3tX)+NU^wbyo- zk*XeKHVA;s{f`8|f(#5+P?~{349HRkVi{ub#*fmDoBugUv2J3##Uskhz{0@Fz{bGN dz`?-Dz{SALz{9}1@#9s6$!}thY+~%<0svilH0S^T diff --git a/data/mofin.db-wal b/data/mofin.db-wal index e507e1cc0e9c7ae98ccc078c7193c19a392bb256..0795349ef2448375c28dd0e4a066c33ffca74434 100644 GIT binary patch literal 94792 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ְ%?UZ?L=^& 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 P0>}lB3m_Nxx?JG@t(GcA diff --git a/data/portfolio.json b/data/portfolio.json index ba95f0b..c1621c5 100644 --- a/data/portfolio.json +++ b/data/portfolio.json @@ -5,9 +5,9 @@ "name": "中际旭创", "shares": 100, "cost": 1316.53, - "price": 1143.84, - "market_value": 114101.0, - "change_pct": 0.07, + "price": 1124.57, + "market_value": 112300.0, + "change_pct": -1.61, "currency": "CNY", "position_pct": 15.27, "_currency": "CNY" @@ -16,34 +16,34 @@ "code": "06869", "name": "长飞光纤光缆", "shares": 500, - "cost": 228.65, - "price": 177.39, - "market_value": 89910.0, - "change_pct": 3.35, - "currency": "CNY", + "cost": 263.73, + "price": 204.2, + "market_value": 88175.0, + "change_pct": 3.152, + "currency": "HKD", "position_pct": 13.47, - "_currency": "CNY" + "_currency": "HKD" }, { "code": "01478", "name": "丘钛科技", "shares": 11000, - "cost": 11.68, - "price": 6.09, - "market_value": 67210.0, - "change_pct": 4.464, - "currency": "CNY", + "cost": 13.47, + "price": 7.07, + "market_value": 67320.0, + "change_pct": 5.208, + "currency": "HKD", "position_pct": 7.97, - "_currency": "CNY" + "_currency": "HKD" }, { "code": "601899", "name": "紫金矿业", "shares": 2400, "cost": 39.89, - "price": 27.86, - "market_value": 66864.0, - "change_pct": 5.93, + "price": 27.88, + "market_value": 66888.0, + "change_pct": 6.01, "currency": "CNY", "position_pct": 7.34, "_currency": "CNY" @@ -53,9 +53,9 @@ "name": "海博思创", "shares": 200, "cost": 266.95, - "price": 254.42, - "market_value": 50842.0, - "change_pct": -0.5, + "price": 252.41, + "market_value": 50496.0, + "change_pct": -1.29, "currency": "CNY", "position_pct": 6.31, "_currency": "CNY" @@ -65,9 +65,9 @@ "name": "中芯国际", "shares": 300, "cost": 126.07, - "price": 143.01, - "market_value": 42600.0, - "change_pct": -0.76, + "price": 141.28, + "market_value": 42324.0, + "change_pct": -1.96, "currency": "CNY", "position_pct": 5.44, "_currency": "CNY" @@ -76,22 +76,22 @@ "code": "01888", "name": "建滔积层板", "shares": 500, - "cost": 76.5, - "price": 73.96, - "market_value": 37325.0, - "change_pct": 1.79, - "currency": "CNY", + "cost": 88.24, + "price": 86.0, + "market_value": 37520.0, + "change_pct": 2.625, + "currency": "HKD", "position_pct": 5.28, - "_currency": "CNY" + "_currency": "HKD" }, { "code": "688639", "name": "华恒生物", "shares": 2800, "cost": 21.51, - "price": 16.71, - "market_value": 46900.0, - "change_pct": -1.42, + "price": 16.63, + "market_value": 46564.0, + "change_pct": -1.89, "currency": "CNY", "position_pct": 5.25, "_currency": "CNY" @@ -101,9 +101,9 @@ "name": "宁德时代", "shares": 100, "cost": 401.78, - "price": 380.88, - "market_value": 38032.0, - "change_pct": -0.38, + "price": 380.78, + "market_value": 38105.0, + "change_pct": -0.41, "currency": "CNY", "position_pct": 4.64, "_currency": "CNY" @@ -112,58 +112,58 @@ "code": "01211", "name": "比亚迪股份", "shares": 600, - "cost": 90.92, - "price": 71.4, - "market_value": 43044.0, - "change_pct": 5.172, - "currency": "CNY", + "cost": 104.87, + "price": 83.4, + "market_value": 43542.0, + "change_pct": 6.513, + "currency": "HKD", "position_pct": 4.62, - "_currency": "CNY" + "_currency": "HKD" }, { "code": "02202", "name": "万科企业", "shares": 19700, - "cost": 4.05, - "price": 1.99, - "market_value": 39203.0, - "change_pct": 2.69, - "currency": "CNY", + "cost": 4.67, + "price": 2.32, + "market_value": 39794.0, + "change_pct": 4.036, + "currency": "HKD", "position_pct": 4.6, - "_currency": "CNY" + "_currency": "HKD" }, { "code": "00700", "name": "腾讯", "shares": 100, - "cost": null, - "price": 374.72, - "market_value": 37541.0, - "change_pct": 0.465, - "currency": "CNY", + "cost": 0.0, + "price": 435.2, + "market_value": 37801.0, + "change_pct": 1.162, + "currency": "HKD", "position_pct": null, - "_currency": "CNY" + "_currency": "HKD" }, { "code": "00981", "name": "中芯国际", "shares": 500, - "cost": 65.84, - "price": 67.63, - "market_value": 34440.0, - "change_pct": -2.985, - "currency": "CNY", + "cost": 75.94, + "price": 78.15, + "market_value": 33900.0, + "change_pct": -2.799, + "currency": "HKD", "position_pct": 4.2, - "_currency": "CNY" + "_currency": "HKD" }, { "code": "300548", "name": "长芯博创", "shares": 100, "cost": 231.46, - "price": 226.24, - "market_value": 22599.0, - "change_pct": 1.91, + "price": 222.45, + "market_value": 22236.0, + "change_pct": 0.2, "currency": "CNY", "position_pct": 3.2, "_currency": "CNY" @@ -173,9 +173,9 @@ "name": "黄金ETF华安", "shares": 2400, "cost": 12.19, - "price": 8.67, - "market_value": 20832.0, - "change_pct": 2.32, + "price": 8.66, + "market_value": 20784.0, + "change_pct": 2.22, "currency": "CNY", "position_pct": 2.45, "_currency": "CNY" @@ -185,9 +185,9 @@ "name": "中科电气", "shares": 1400, "cost": 22.29, - "price": 14.37, - "market_value": 20062.0, - "change_pct": 1.41, + "price": 14.3, + "market_value": 20006.0, + "change_pct": 0.92, "currency": "CNY", "position_pct": 2.42, "_currency": "CNY" @@ -197,9 +197,9 @@ "name": "模塑科技", "shares": 1400, "cost": 14.83, - "price": 17.66, - "market_value": 25088.0, - "change_pct": 4.68, + "price": 17.6, + "market_value": 24654.0, + "change_pct": 4.33, "currency": "CNY", "position_pct": 2.41, "_currency": "CNY" @@ -209,9 +209,9 @@ "name": "法拉电子", "shares": 100, "cost": 147.18, - "price": 160.15, - "market_value": 15900.0, - "change_pct": -2.53, + "price": 157.93, + "market_value": 15800.0, + "change_pct": -3.88, "currency": "CNY", "position_pct": 2.3, "_currency": "CNY" @@ -220,21 +220,22 @@ "code": "01088", "name": "中国神华", "shares": 500, - "cost": 39.79, - "price": 34.56, - "market_value": 17305.0, - "change_pct": 0.657, - "currency": "CNY", + "cost": 45.89, + "price": 39.97, + "market_value": 17340.0, + "change_pct": 0.909, + "currency": "HKD", "position_pct": 2.14, - "_currency": "CNY" + "_currency": "HKD" } ], - "total_assets": 859635.43, - "total_mv": 779159.43, + "total_assets": 957656.13, + "total_mv": 825534.2, "stock_value": null, - "cash": 80476.0, - "frozen_cash": 0.0, - "position_pct": 90.64, + "cash": 132121.93, + "frozen_cash": 0, + "position_pct": 86.2, "currency": "CNY", - "updated_at": "2026-07-03 13:44" + "updated_at": "2026-07-03 14:45", + "_source": "db_sync" } \ No newline at end of file diff --git a/data/price_events.json b/data/price_events.json index f6cc9e9..aeb126f 100644 --- a/data/price_events.json +++ b/data/price_events.json @@ -9129,6 +9129,26 @@ "event_label": "买入区间", "timestamp": "2026-07-03T13:30:30.458142", "date": "2026-07-03" + }, + { + "code": "688981", + "name": "中芯国际", + "event_type": "stop_loss", + "price": 140.94, + "trigger_value": "140.94", + "event_label": "", + "timestamp": "2026-07-03T14:32:04.634438", + "date": "2026-07-03" + }, + { + "code": "688981", + "name": "中芯国际", + "event_type": "stop_loss", + "price": 140.9, + "trigger_value": "140.94", + "event_label": "", + "timestamp": "2026-07-03T14:36:05.312970", + "date": "2026-07-03" } ] } \ No newline at end of file diff --git a/data/price_history.json b/data/price_history.json index 826fe60..c0799db 100644 --- a/data/price_history.json +++ b/data/price_history.json @@ -25,8 +25,8 @@ { "date": "2026-07-03", "high": 1215.52, - "low": 1188.0, - "close": 1188.7 + "low": 1185.0, + "close": 1195.45 } ], "02202": [ @@ -61,8 +61,8 @@ { "date": "2026-07-03", "high": 50.2, - "low": 48.4, - "close": 48.44 + "low": 48.31, + "close": 49.06 } ], "02359": [ @@ -118,7 +118,7 @@ "date": "2026-07-03", "high": 502.0, "low": 444.55, - "close": 494.57 + "close": 482.68 } ], "06160": [ @@ -154,7 +154,7 @@ "date": "2026-07-03", "high": 687.04, "low": 633.01, - "close": 646.83 + "close": 644.5 } ], "09868": [ @@ -196,7 +196,7 @@ "date": "2026-07-03", "high": 757.88, "low": 713.0, - "close": 733.9 + "close": 738.2 } ], "300124": [ @@ -210,7 +210,7 @@ "date": "2026-07-03", "high": 74.63, "low": 67.31, - "close": 73.13 + "close": 72.22 } ], "000657": [ @@ -224,7 +224,7 @@ "date": "2026-07-03", "high": 101.5, "low": 87.88, - "close": 91.78 + "close": 90.33 } ], "000711": [ @@ -252,7 +252,7 @@ "date": "2026-07-03", "high": 892.1, "low": 795.0, - "close": 887.87 + "close": 882.5 } ], "002594": [ @@ -264,9 +264,9 @@ }, { "date": "2026-07-03", - "high": 87.28, + "high": 88.78, "low": 81.9, - "close": 86.45 + "close": 88.72 } ], "00700": [ @@ -334,7 +334,7 @@ "date": "2026-07-03", "high": 646.85, "low": 574.1, - "close": 635.0 + "close": 620.31 } ] } \ No newline at end of file