From b5c4302b5ec9e898ff12d12e81b57a8380bf2be8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9F=A5=E5=BE=AE?= Date: Wed, 8 Jul 2026 12:37:36 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=89=B9=E9=87=8F=E4=BF=AE=E5=A4=8Dscri?= =?UTF-8?q?pts/*.py=E4=B8=AD=E6=89=80=E6=9C=89Path(=5F=5Ffile=5F=5F).paren?= =?UTF-8?q?t/'data'=E8=B7=AF=E5=BE=84=E9=94=99=E8=AF=AF=E2=80=94=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E6=8C=87=E5=90=91MoFin/data/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- __pycache__/multi_timeframe.cpython-312.pyc | Bin 25708 -> 26641 bytes .../technical_analysis.cpython-312.pyc | Bin 25349 -> 25468 bytes scripts/advice_reconciliation.py | 2 +- scripts/collect_evaluation_data.py | 2 +- scripts/inject_xiaoguo_insight.py | 2 +- scripts/market_insight.py | 2 +- scripts/market_watch.py | 2 +- scripts/migrate_all.py | 2 +- scripts/mofin_news.py | 2 +- scripts/post_mortem.py | 2 +- scripts/stock_sector_enrich.py | 2 +- scripts/strategy_evaluator.py | 2 +- scripts/strategy_feedback.py | 2 +- scripts/trend_detector.py | 2 +- scripts/update_data.py | 2 +- scripts/xiaoguo_news_processor.py | 2 +- 16 files changed, 14 insertions(+), 14 deletions(-) diff --git a/__pycache__/multi_timeframe.cpython-312.pyc b/__pycache__/multi_timeframe.cpython-312.pyc index 4735bd80fe4eef8cb74a34c76a99e5d7d5c363eb..098c2da8ab8b5ef52e6e2eb719a1183b95386f07 100644 GIT binary patch delta 3117 zcmc&$dr(x@89(Rl?%fx=u)81%$a4WV3JZiF#w7B{m>31bbrMZQihH(#%95O2LCL+d z&a_jd<5beqOz@G0+L*+ec1$;uF>R-ln5Hqc>44a3H#Czzl13+)Li{7jKlc0Xa#^tc z)4zIW_jk_s`yThazVF;GF3@MksPm%3VI%OoG|{q4YYI>WHIgWxMXJ6W2D$3bBf*lFhn;gCY~9!Cf`L!)Gl1! z0%{f2-g3KRj!hRqZ&A#o$5X6~D$;TCg7g5G9Ij>39n6D9qF4hYC{g&U(tzGG43H8+ zNtEi572}!NK1;5FQ!z4m38Fgwv`8vzpJ+HH7FQ*Hoh#!|YqqO`Z7l>G}Ncy6xoS$GX}_)-M4NmwFL{#3N5HzYnN z&1<&t@1y29)X)Kb1Y0?{r!NwUBVwSM&WN-BRnE zr71Ap6d2q5_}G>m6HUSK{NS*CS|%3Hq$}%(-6Q=I;<>V(P1Pi$`qo!6ao%%tDw9IA z$%f{)*S>4N@bsmIjU)Y|T}Su7T6ebi^!?`yd6eb7!w*b$p=qAL{{l`14SbKfP9XF(vh7Kk#JYJr#7F=13IcxK+k zGi!loCU_PRNGX?U0|$B+hegaKs%tzIF4dkI=poOyD9iqiC7M3FG=wdlzY^lkgw>qB<1^%Rz~kD^6ajSa=@jEi6~hf1b(m)byxp z?!8OFBYzM?eP`7SR-n4VYhtWWO;;Qs7J*m~X2rXqJn#y|8Ced23$(x`T43a}nRj7e zwpelCQ2#4@Da6ZQWoo)^0q-aWPG-x1^MQ1a>S8fTbt^W$OtJGan5S2>Wp|}W58{|J;hI-Lhi+&CMtf@elJ}wTH14E85I1q z2)EbfK_(Gij}~|LC}@XDp?!87Am@tCHNNFNKzJS6Pa)h88JmtR$K#tk$ZudT4&W={ zUqX{Gbg^ChYh-UC+!BA!VsZLl}SI?gPodXemS!@aT({5{e z)&t*8Zwe9UwSA5e5I%|9HlLSmpP`HpjQ{z`ol>C}=WGTUzmVWb&ioo$A?%8GbbL(< zd^qDykXwBQj(g7Y5&Qr?nU{%3XQQbCY!1ZV>a3#lV{!eP*B{l6iFRNxVUlimNVMT- zW6)l~(UA{;B4LQ^k0gv;d}lu|L(+oQD@5K7pY0)#;YT8iMB9!pHFkjk%ao+8kk3uw)S%o`|8HAqiTDvy90wxiw~T00dL2ZNvf2Vq_J`2YX_ delta 2370 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 delta 2844 zcmZvddvFuS8Nhc>y0hNa)0W?|odCl4L3sp&X`XY~y6F z4nsT`$CJ8QG9eSEb(=5~LYmM~nvm8_n{+0fNpL8kq~T~LosOaOFPOBY478=YDk*+{FIS_C=WibX$ zP)GKtBGwOxq-{^BUX`%O^i9j*)dF0A>{!ADvQ$E?AE!CW1%uQViIf=_>jdPC$xnI= z#x*izKs6{1`r=PsD5Gq`#uouLya-;>sU}iy-rzFH=GQH`RLs~sP(o8FBeP~Vw33Ua z3X3iKrE*~j`IE`(v1h@wcgoubW#>}{)k9`SRsI*-(GvL=tzbJCDU8aZiNCVam3#L7EIhflwjRrA@p{2BR`)k7Q< zH!(|gyvdg~^Mq}173D#tjza!qE#xw0hwa%zxy;#$N`1zfTHJ{!S8#jB|JYaX44pZ< z&3x`c2JFH`ZJBiBDh}PK5xaAS)r=)pU>mk$2X@L^=JaYYcF_yx!o@ick$M!%+!hxN zG?MqXx$e!C7t-{UrfjNaAnQwWMN`&gIre1B1VIce_lL^-{&0*o8+!i><(4@i29H5* zRuL6>;)R`{7C_JiW_2^`_v^aA7_0?Kd3J%j0P?C93>0gYU`uvM*)b9@$5s%p^)6`*P#NcLq;Y%RP5BG zP$V4L7u5tMh1eczdO56wQ7a%%J2sQg9RGnG>GRG3SlZ5fI;ilMYKEa?Uo1fbqFoe_ zhul6g?w(m)l8Mfk28T6WWM4lTU~X-U=n}~>P2#J`B;ffDEFs|@H#zAk*l{1)$jk<_ zqL~g-4m|)jo&?t_ z#_Ppkb9!TGRD#FJoG;~khGov`@AGB8>HDO*x)Huc+N&$zv*~2D0d6`-)#&R?JjKK$ z6`C*}L1k>l_h*VBUWLPuMH_@-TNBk|N*VFf{vFhD3bm$jQ zh`useN$4O6H+@q)LrF0GdQ-{(XVSjrR#@>4B_mEME}uGn>DigfN8bDEq3ixS6A78BNAVhN84?N-T+fPu#nr@FsbDSNHBE zrWP~x+|SlvpMgdh)ej_N33Q1L{Z*Olt@LjS-DEmLYv7SUsC9dXrjH~O2~CHRWBdxD zTg-o!)VJ-w*G$bdGm1u{31vfwrl1*zQFN3K(LY%jYgWm7fo9IM1O-JCGP01Rwuq^Y z#yCxXsgj|E(vmEiqmFO?rOTRPY3e`B_EZq%Qvw01V=&eg-t zhV=2>$Mtr0#S!ljZ2wRP>Fut4l%=WZhQcY$nW85siIfnErs%N_Cn8aFmTGB7YTzF* zG!j>0A*C-w_me3!X)GEYjE|!iSh(kzsc>gZE_Ocw8_Djyfpx6AXx6@wcsvwNgyZ8h zHi|O`e%g3HVOIsQMk*8h>If;sdR9V? zN0E=z_0$y3G97DBnlP3^i=?}!%Cw1vW1=lR*>hQ_`hN?vgNIn5(Izq-_DSs8qbJG9 Za2?#0{$tn)3%(7Z^{Y{V{G<2Ke*v{T%K88R diff --git a/scripts/advice_reconciliation.py b/scripts/advice_reconciliation.py index 93f4fe76..d9483d9f 100644 --- a/scripts/advice_reconciliation.py +++ b/scripts/advice_reconciliation.py @@ -16,7 +16,7 @@ from pathlib import Path from mo_data import read_decisions, read_portfolio from mofin_db import get_conn, write_holding_strategy -ACCURACY_PATH = Path(__file__).parent / "data" / "accuracy_stats.json" +ACCURACY_PATH = Path(__file__).parent.parent / "data" / "accuracy_stats.json" def load_json(path, default=None): try: diff --git a/scripts/collect_evaluation_data.py b/scripts/collect_evaluation_data.py index f27d4bfb..e5eda77f 100644 --- a/scripts/collect_evaluation_data.py +++ b/scripts/collect_evaluation_data.py @@ -23,7 +23,7 @@ import re from datetime import datetime from pathlib import Path -DATA_DIR = Path(__file__).parent / "data" +DATA_DIR = Path(__file__).parent.parent / "data" PROFILES_PATH = DATA_DIR / "stock_profiles.json" OUTPUT_PATH = DATA_DIR / "evaluation_input.json" diff --git a/scripts/inject_xiaoguo_insight.py b/scripts/inject_xiaoguo_insight.py index ad9ac960..6cd44321 100644 --- a/scripts/inject_xiaoguo_insight.py +++ b/scripts/inject_xiaoguo_insight.py @@ -10,7 +10,7 @@ import json from datetime import datetime from pathlib import Path -DATA_DIR = Path(__file__).parent / "data" +DATA_DIR = Path(__file__).parent.parent / "data" def inject(): diff --git a/scripts/market_insight.py b/scripts/market_insight.py index c0bb082e..2bb438c3 100644 --- a/scripts/market_insight.py +++ b/scripts/market_insight.py @@ -15,7 +15,7 @@ import sys from datetime import datetime from pathlib import Path -DATA_DIR = Path(__file__).parent / "data" +DATA_DIR = Path(__file__).parent.parent / "data" # ── 持仓股 → 行业映射(从 stock_profiles 自动提取) ── diff --git a/scripts/market_watch.py b/scripts/market_watch.py index 7c80389e..e6c60d67 100644 --- a/scripts/market_watch.py +++ b/scripts/market_watch.py @@ -18,7 +18,7 @@ from pathlib import Path from mofin_db import get_conn, init_all_tables, write_market_snapshot -DATA_DIR = Path(__file__).parent / "data" +DATA_DIR = Path(__file__).parent.parent / "data" # ── 後端A:東方財富 push2 API(首選,有板塊代碼+實時指數) ── diff --git a/scripts/migrate_all.py b/scripts/migrate_all.py index ed516602..1e27572a 100644 --- a/scripts/migrate_all.py +++ b/scripts/migrate_all.py @@ -22,7 +22,7 @@ from pathlib import Path from mofin_db import get_conn, init_all_tables -DATA_DIR = Path(__file__).parent / "data" +DATA_DIR = Path(__file__).parent.parent / "data" def load_json(name: str): diff --git a/scripts/mofin_news.py b/scripts/mofin_news.py index 4da6ed79..38a32cec 100644 --- a/scripts/mofin_news.py +++ b/scripts/mofin_news.py @@ -16,7 +16,7 @@ try: except ImportError: HAS_AKSHARE = False -DATA_DIR = Path(__file__).parent / "data" +DATA_DIR = Path(__file__).parent.parent / "data" DB_PATH = DATA_DIR / "mofin.db" MAX_ARTICLES = 5 diff --git a/scripts/post_mortem.py b/scripts/post_mortem.py index 9265ba40..fb9c9bbc 100644 --- a/scripts/post_mortem.py +++ b/scripts/post_mortem.py @@ -10,7 +10,7 @@ from collections import defaultdict from datetime import datetime from pathlib import Path -DATA_DIR = Path(__file__).parent / "data" +DATA_DIR = Path(__file__).parent.parent / "data" REPORTS_DIR = DATA_DIR / "reports" diff --git a/scripts/stock_sector_enrich.py b/scripts/stock_sector_enrich.py index 89cf6409..06de0169 100644 --- a/scripts/stock_sector_enrich.py +++ b/scripts/stock_sector_enrich.py @@ -15,7 +15,7 @@ import json import sys from pathlib import Path -DATA_DIR = Path(__file__).parent / "data" +DATA_DIR = Path(__file__).parent.parent / "data" PROFILES_PATH = DATA_DIR / "stock_profiles.json" # ── 内置映射表(优先级最高) ── diff --git a/scripts/strategy_evaluator.py b/scripts/strategy_evaluator.py index 055c19ee..28ca583e 100644 --- a/scripts/strategy_evaluator.py +++ b/scripts/strategy_evaluator.py @@ -23,7 +23,7 @@ from pathlib import Path from mo_data import read_decisions, read_portfolio from mofin_db import get_conn, write_holding_strategy -DATA_DIR = Path(__file__).parent / "data" +DATA_DIR = Path(__file__).parent.parent / "data" ACCURACY_PATH = DATA_DIR / "accuracy_stats.json" UA = "Mozilla/5.0" diff --git a/scripts/strategy_feedback.py b/scripts/strategy_feedback.py index 69a94637..ae8dc9f2 100644 --- a/scripts/strategy_feedback.py +++ b/scripts/strategy_feedback.py @@ -16,7 +16,7 @@ from datetime import datetime, timedelta from pathlib import Path from mo_data import read_decisions -DATA_DIR = Path(__file__).parent / "data" +DATA_DIR = Path(__file__).parent.parent / "data" ACCURACY_PATH = DATA_DIR / "accuracy_stats.json" EVENTS_PATH = DATA_DIR / "price_events.json" FEEDBACK_PATH = DATA_DIR / "strategy_feedback.json" diff --git a/scripts/trend_detector.py b/scripts/trend_detector.py index 1492dcc5..96ed51fb 100644 --- a/scripts/trend_detector.py +++ b/scripts/trend_detector.py @@ -18,7 +18,7 @@ import sys from datetime import datetime from pathlib import Path -DATA_DIR = Path(__file__).parent / "data" +DATA_DIR = Path(__file__).parent.parent / "data" DB_PATH = DATA_DIR / "mofin.db" diff --git a/scripts/update_data.py b/scripts/update_data.py index 97eb910a..f2014d2d 100644 --- a/scripts/update_data.py +++ b/scripts/update_data.py @@ -9,7 +9,7 @@ from pathlib import Path from mo_data import read_decisions from mofin_db import get_conn, write_holding_strategy -DATA_DIR = Path(__file__).parent / "data" +DATA_DIR = Path(__file__).parent.parent / "data" def _save(name, data): diff --git a/scripts/xiaoguo_news_processor.py b/scripts/xiaoguo_news_processor.py index 44c1ae84..b2172f8c 100644 --- a/scripts/xiaoguo_news_processor.py +++ b/scripts/xiaoguo_news_processor.py @@ -23,7 +23,7 @@ try: except ImportError: HAS_AKSHARE = False -DATA_DIR = Path(__file__).parent / "data" +DATA_DIR = Path(__file__).parent.parent / "data" DB_PATH = DATA_DIR / "mofin.db" XIAOGUO_API = "http://node122:18003/v1/chat/completions" # fallback, /etc/hosts resolves to LAN or EasyTier