Files
mmd/__pycache__/runner.cpython-314.pyc

92 lines
10 KiB
Plaintext
Raw Normal View History

2026-05-26 22:21:27 +02:00
+
=<3D>jr"<00><00><><00>Rt^RIt^RIt^RIt^RIHtHt^RIHtHtH t ^RI
H t ^RI H t ^RIHt^RIHtHtHt^RIHtRR R
lltR R ltR t]R8Xd
]!4R#R#)u<>
runner.py — MoneyMaker pipeline orchestrator.
Usage:
python runner.py # full pipeline (fetch → analyze → evaluate → execute)
python runner.py --dry-run # simulate everything, no real orders
python runner.py --analyze-only # only fetch news + run NLP, no orders
python runner.py --report # print P&L report only
Pipeline flow (each run):
1. Fetch Ground News + Danish RSS feeds
2. Run NLP+Claude analysis on new articles
3. Evaluate buy/sell signals vs open positions
4. Execute orders on Saxo SIM (skip if --dry-run)
5. Print status summary
Scheduled by cron:
06:00 CET --analyze-only (full NLP before market opens)
09:30 CET (default) trade window 1
12:00 CET (default) trade window 2
14:30 CET (default) trade window 3
16:30 CET (default) trade window 4
19:00 CET --report daily P&L summary
N)<02>datetime<6D>timezone)<03>get_conn<6E>DB_TYPE<50> init_schema)<01> fetch_all)<01> fetch_all_rss)<01>analyze_articles)<03>evaluate_orders<72>get_db<64>_open_positions)<01> print_reportc<00>4<00>V^8<>dQhR\R\RR/#)<05><00>dry_run<75> analyze_only<6C>returnN)<01>bool)<01>formats"<22>)/home/hjess/Projects/MoneyMaker/runner.py<70> __annotate__r&s!<00><00>5,<2C>5,<2C>$<24>5,<2C>d<EFBFBD>5,<2C>t<EFBFBD>5,<2C>c<00><><00>\P!\P4P R4p\ RR 24\ RV 24\ RV'dRMR R\ 24\ R R24\4\4p\ R 4\V4p\ R
V R 24\ R 4\V4p\ R
V R 24VP4\ R4\RVRRR7V'd\ R4R#\ R4\4p\V4VP4V'g \!4M \ R4\ R4R# \dp\ RT 24Rp?ELRp?ii;i TP4i;i TP4i;i)z%Y-%m-%d %H:%M UTC<54>
u MONEYMAKER RUNNER · z Mode: zDRY RUN<55>LIVEu
· DB: z([runner] WARNING: init_schema() failed: Nu[runner] Henter Ground News …z +z nye artikler fra Ground Newsu$[runner] Henter danske RSS feeds …z nye artikler fra RSS feedsu
[runner] Kører NLP analyse …FT)<04>forcer<00>
use_claude<EFBFBD>
auto_fetchz5
[runner] --analyze-only flag sat. Stopper efter NLP.u%
[runner] Evaluerer ordre-forslag …u+
[runner] DRY RUN — ingen ordre placeret.u
[runner] Pipeline færdig.
u<EFBFBD>════════════════════════════════════════════════════════════)r<00>nowr<00>utc<74>strftime<6D>printrr<00> Exceptionrrr<00>closer <00> portfolio_dbr
<00> _auto_execute)rr<00>ts<74>e<>db<64>n_gn<67>n_rss<73>pdbs&& r<00> run_pipeliner,&s<><00><00> <11><1C><1C>h<EFBFBD>l<EFBFBD>l<EFBFBD> #<23> ,<2C> ,<2C>-A<> B<>B<EFBFBD> <09>B<EFBFBD>x<EFBFBD>j<EFBFBD>/<2F><1A> <09> %<25>b<EFBFBD>T<EFBFBD>
*<2A>+<2B> <09>H<EFBFBD>'<27>Y<EFBFBD>v<EFBFBD>6<>j<EFBFBD><17> <09>
J<EFBFBD>K<> <09>X<EFBFBD>J<EFBFBD>b<EFBFBD>/<2F><1A>><3E><13> <0A>
<12><1A>B<EFBFBD> <13> <0A>/<2F>0<><18><12>}<7D><04> <0A><03>D<EFBFBD>6<EFBFBD>6<>7<>8<> <0A>4<>5<><1D>b<EFBFBD>!<21><05> <0A><03>E<EFBFBD>7<EFBFBD>5<>6<>7<>
<EFBFBD><08><08>
<EFBFBD>
<EFBFBD>
-<2D>.<2E><14><13><17><17><18> <06><14> <0A>F<>G<><0E>
<EFBFBD>
2<EFBFBD>3<>
<16>.<2E>C<EFBFBD><14><17><03><1C> <0B> <09> <09> <0B> <13><15><0F> <0A><<3C>=<3D> <09>
*<2A>+<2B><>W <15>><3E> <0A>8<><11><03><<3C>=<3D>=<3D><>><3E><> <0B><08><08>
<EFBFBD><EFBFBD>* <0C> <09> <09> <0B>s1<00>>
E8<00>A
F<00>2 F4<00>8 F<03>F<03>F<03>F1<03>4Gc<00><00>V^8<>dQhRR/#)rrN<>)rs"rrr^s<00><00>t<10>t<10>t<EFBFBD>trc <04>:<00>^RIHpHpHpHpHpHpHpHpH pH
p ^RI H p
H p ^RIp \4p V!4pV!V 4F<>pVR,pVP!V/4P!RVR,4pV P#V4P$P!R4pT'gKjTTR
,8*pTTR ,8<>pT'g T'gK<>T'dR MR p\)RTR,R RT RTR RT R2 4T
!TTR,RTRT 2R7p\)RT 24T !T T\+T4.4K<> V!V 4pV!V 4Uu/uF pVR,VbK ppVEF<>pVR,pVR,;'g^pVR,;'gRpVV8dK<VV9dKE\-V4V8<>dEMz^RIHpV!V4pVR,P34P5R R!4P74p V V9d\)R"V R#VR, 24K<>TP!T/4P!RTR,4pT P#T4P$P!R4pT'g\)R"T R%24EK,T!T 4p!T!R&8d\)R"T R'T! R(24EKQ\9T!T,4p"T"^8d\)R"T R)TR R*24EK<>\)R+T" RT R,TR R-TR. R2 4T
!TT"R/TTTR,R0TR. R1T 2R27p\)RT 24RT/TT&EK<> V P;4R# \&dp\)RT R T 24Rp?EK/Rp?ii;i \&dp\)RT 24Rp?ELoRp?ii;iuupi \&dp\)R"T R$T 24Rp?EK^Rp?ii;i \&dp\)R"T R T 24Rp?EK<>Rp?ii;i \&dp\)R3T 24Rp?L<>Rp?ii;i)4aM
Auto-place orders on Saxo SIM based on portfolio recommendations.
1. AUTO-SELL: close positions that have hit stop-loss or take-profit.
2. AUTO-BUY: open new positions when signal + analyst consensus align.
Orders are placed via saxo_broker.place_order() and logged to saxo_orders.
Sells record signal_correct in position_events.
)
<EFBFBD>CAPITAL<41> MAX_POSITIONS<4E>
MIN_SIGNAL<EFBFBD> BUY_ANALYSTr <00> _open_count<6E> _best_signals<6C> _per_position<6F>_c25_map<61>cmd_sell)<02> place_order<65>find_uicN<63>ticker<65> ticker_yahooz.CO<43> lastPricez SKIP SELL u — kurs fejl: <20> stop_loss<73> take_profitz stop-lossz take-profitu → SÆLGER <20>sharesz.0fz stk u à z.2fz kr (<28>)<29>Sellzrunner auto-sell )<02> price_dkk<6B>notez Saxo svar: z FEJL ved Saxo ordre: <20> signal_score<72> momentum_dir<69>unknown)<01> analyst_rec<65>labelu🟢<>z SKIP u — analyst=u — analyst check failed: u — ingen kurs fra yfinancei<65>u — for lidt kapital: z DKKu — 0 aktier til z DKK/stku → KØBER u à ~z
DKK (sig=z.3f<EFBFBD>Buyzrunner auto-buy sig=z mom=)rCrErHrDz FEJL ved ordre: )<1E> portfolior0r1r2r3r r4r5r6r7r8<00> saxo_brokerr9r:<00>yfinancer$<00>get<65>Ticker<65> fast_infor"r!<00>str<74>len<65>signalsrH<00>lower<65>replace<63>strip<69>intr#)#r0r1r2r3r r4r5r6r7r8r9r:<00>yfr+<00>c25<32>posr;<00> yf_ticker<65>pricer'<00>stop_hit<69>take_hit<69>reason<6F>resprT<00>p<>open_pos<6F>sig<69>score<72>momentumrH<00>rec<65>rec_label_lower<65>per_posr@s# rr%r%^sF<00><00><06><06><06>
2<><19>
<16>.<2E>C<EFBFBD>
<12>*<2A>C<EFBFBD><1F>s<EFBFBD>#<23><03><17><08>M<EFBFBD><06><17>G<EFBFBD>G<EFBFBD>F<EFBFBD>B<EFBFBD>'<27>+<2B>+<2B>N<EFBFBD>F<EFBFBD>U<EFBFBD>N<EFBFBD>K<> <09> <15><16>I<EFBFBD>I<EFBFBD>i<EFBFBD>(<28>2<>2<>6<>6<>{<7B>C<>E<EFBFBD>
<15> <14><18>C<EFBFBD> <0B>,<2C>,<2C><08><18>C<EFBFBD> <0A>.<2E>.<2E><08> <13>x<EFBFBD>x<EFBFBD>$,<2C>[<5B>-<2D>F<EFBFBD> <11>N<EFBFBD>3<EFBFBD>x<EFBFBD>=<3D><13>"5<>U<EFBFBD>6<EFBFBD>(<28>$<24>u<EFBFBD>S<EFBFBD>k<EFBFBD>QV<51>W]<5D>V^<5E>^_<>`<60> a<> 7<>"<22><1A>C<EFBFBD><08>M<EFBFBD>6<EFBFBD>#<23>,<2C>V<EFBFBD>H<EFBFBD>5<><12><04>
<16><0F><04>v<EFBFBD>.<2E>/<2F> <15>S<EFBFBD>6<EFBFBD>3<EFBFBD>u<EFBFBD>:<3A>.<2E> /<2F>9$<24>><1D>S<EFBFBD>!<21>G<EFBFBD>(7<><03>(<<3C>=<3D>(<<3C>1<EFBFBD><01>(<28> <0B>Q<EFBFBD><0E>(<<3C>H<EFBFBD>=<3D><16><03><19>(<28>m<EFBFBD><06><19>.<2E>)<29>.<2E>.<2E>Q<EFBFBD><05><19>.<2E>)<29>6<>6<>Y<EFBFBD><08> <11>:<3A> <1D> <14> <11>X<EFBFBD> <1D> <14> <0E>x<EFBFBD>=<3D>M<EFBFBD> )<29> <11> <15> +<2B><1D>f<EFBFBD>%<25>C<EFBFBD>!<21>'<27>l<EFBFBD>0<>0<>2<>:<3A>:<3A>6<EFBFBD>2<EFBFBD>F<>L<>L<>N<>O<EFBFBD><1E>k<EFBFBD>1<><15><07><06>x<EFBFBD>}<7D>S<EFBFBD><17>\<5C>N<EFBFBD>C<>D<><18>2<> <15><1B><07><07><06><02>+<2B>/<2F>/<2F><0E><06><15><0E>O<>I<EFBFBD><16>I<EFBFBD>I<EFBFBD>i<EFBFBD>(<28>2<>2<>6<>6<>{<7B>C<>E<EFBFBD><18><15><07><06>x<EFBFBD>'C<>D<>E<><18><19> <20><03>$<24><07> <12>S<EFBFBD>=<3D> <11>G<EFBFBD>F<EFBFBD>8<EFBFBD>#:<3A>7<EFBFBD>)<29>4<EFBFBD>H<> I<> <14><14>W<EFBFBD><05>%<25>&<26><06> <11>A<EFBFBD>:<3A> <11>G<EFBFBD>F<EFBFBD>8<EFBFBD>#5<>e<EFBFBD>C<EFBFBD>[<5B><08>I<> J<> <14> <0A> <0A>f<EFBFBD>X<EFBFBD>U<EFBFBD>6<EFBFBD>(<28>%<25><05>c<EFBFBD>{<7B>*<2A>U<EFBFBD>SV<53>K<EFBFBD>WX<57>Y<>Z<>
.<2E><1E><16><06><05><1F>"<22><1F><07>L<EFBFBD>+<2B>E<EFBFBD>#<23>;<3B>e<EFBFBD>H<EFBFBD>:<3A>F<> <0E>D<EFBFBD> <12>O<EFBFBD>D<EFBFBD>6<EFBFBD>*<2A> +<2B>%<25>f<EFBFBD>-<2D><08><16><18>u<17>x<08>I<EFBFBD>I<EFBFBD>K<EFBFBD><4B>s<19> <15> <11>L<EFBFBD><16><08>(8<><11><03><<3C> =<3D> <14><> <15><>(<1D> 7<><15>1<>!<21><13>5<>6<>6<><36> 7<><37>><3E><>.<19> <15> <11>G<EFBFBD>F<EFBFBD>8<EFBFBD>#><3E>q<EFBFBD>c<EFBFBD>B<> C<> <14><> <15><><19> <15> <11>G<EFBFBD>F<EFBFBD>8<EFBFBD>#3<>A<EFBFBD>3<EFBFBD>7<> 8<> <14><> <15><>0<19> .<2E> <11>(<28><11><03>,<2C> -<2D> -<2D><> .<2E>s<EFBFBD><00>4*M
<02>%M5<02>N<04>?A"N!<02>%AO <02>O <02>+O7<02>
M2<05>M-<05>-M2<05>5 N<05>N<05>N<05>! O <05>,O<05>O <05> O4<05>O/<05>/O4<05>7 P<05>P<05>Pc<00> <00>\P!RR7pVPRRRR7VPRRRR7VPRRR R7VP4pVP'd \ 4R
#\ VPVPR 7R
# \d\R 4R
#\d;\R 4\P!4\P!^4R
#i;i)zMoneyMaker pipeline runner)<01> descriptionz --dry-run<75>
store_truezSimulate, no real orders)<02>action<6F>helpz--analyze-onlyzOnly fetch + NLP, no ordersz--reportzPrint P&L report and exitN)rrz
[runner] Afbrudt.z[runner] FEJL:)<10>argparse<73>ArgumentParser<65> add_argument<6E>
parse_args<EFBFBD>reportr r,rr<00>KeyboardInterruptr!r"<00> traceback<63> print_exc<78>sys<79>exit)<02>parser<65>argss r<00>mainr{<00>s<><00><00> <15> $<24> $<24>1M<31> N<>F<EFBFBD>
<EFBFBD><17><17> <0B><1C>D^<5E><17>_<>
<EFBFBD><17><17>(<28><1C>Da<44><17>b<>
<EFBFBD><17><17>
<EFBFBD><1C>D_<44><17>`<60> <11> <1C> <1C> <1E>D<EFBFBD> <0B>{<7B>{<7B>{<7B><14><0E><0E><14><14>T<EFBFBD>\<5C>\<5C><04>8I<38>8I<38>J<><4A> <1C>%<25> <0A>#<23>$<24> <14><14> <0A><1E><1F><11><1B><1B><1D> <0B><08><08><11> <0B><14>s<00>!B&<00>&D<03>?D<03>7D<03>D<03>__main__)FF)<1B>__doc__rwrorurrr(rrr<00> ground_newsr<00> rss_feedsr<00>analyzer rLr
r r$r rsr r,r%r{<00>__name__r.rr<00><module>r<>sV<00><01><04>0 <0B><0F><10>'<27>-<2D>-<2D>!<21>#<23>$<24>N<>N<><1F>5,<2C>pt<10>n<14>* <0C>z<EFBFBD><19><08>F<EFBFBD>r