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

122 lines
22 KiB
Plaintext
Raw Normal View History

2026-05-26 22:21:27 +02:00
+
<03>j\8<00><00>h<00>Rt^RIt^RIt^RIt^RIt^RIHt^RIHtHt^RI t
^RI H t H t Rt^tRtRtRtR R
0t]!]4P*R , tR R ltRRltRRltRRltRRltRRltRRltRRltRRltRRlt R R!lt!R"R#lt"R$R%lt#]$R&8Xd
]#!4R#R#)'u<>
portfolio.py — Position tracker + ordre-forslag
Kommandoer:
python portfolio.py orders → dagens køb/sælg/hold forslag
python portfolio.py status → åbne positioner + stop/take
python portfolio.py buy TICKER N PRIS → registrer et køb
python portfolio.py sell TICKER PRIS → registrer et salg
Eksempel:
python portfolio.py buy VWS 11 195.00
python portfolio.py sell VWS 244.00
N)<01>Path)<02>datetime<6D>timezone)<02>get_conn<6E>DBConni'g{<14>G<EFBFBD>z<EFBFBD>?g<><67><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?gffffff<66>?<3F> stærk køb<C3B8>købzc25.jsonc<00>$<00>V^8<>dQhR\/#<00><02><00>return<72>r)<01>formats"<22>,/home/hjess/Projects/MoneyMaker/portfolio.py<70> __annotate__r*s<00><00><16><16><06><16>c<04><00>\4#)z4Return a DBConn wrapper. Schema is managed by db.py.)r<00>rr<00>get_dbr*s
<00><00> <13>:<3A>rc<00>$<00>V^8<>dQhR\/#r
)<01>dict)rs"rrr3s<00><00>;<3B>;<3B>$<24>;rc<00><><00>\P!\P44pVP 4UUu/uFwrVR8wgKWbK upp#uuppi)<01>_meta)<05>json<6F>loads<64>C25_PATH<54> read_text<78>items)<03>data<74>k<>vs r<00>_c25_mapr!3sC<00><00> <0F>:<3A>:<3A>h<EFBFBD>(<28>(<28>*<2A> +<2B>D<EFBFBD>!<21>Z<EFBFBD>Z<EFBFBD>\<5C> :<3A>\<5C>T<EFBFBD>Q<EFBFBD>Q<EFBFBD>'<27>\<5C>D<EFBFBD>A<EFBFBD>D<EFBFBD>\<5C> :<3A>:<3A><> :s <00> A<06> Ac<00>><00>V^8<>dQhR\R\R,/#)r <00> ticker_yahoor N)<02>str<74>float)rs"rrr9s<00><00><14><14><13><14><15><14><1C>rc<00><><00>\P!V4Pp\\ VP
4^4# \ dR#i;i)r N)<07>yf<79>Ticker<65> fast_info<66>roundr%<00>
last_price<EFBFBD> Exception)r#<00>infos& r<00>_current_pricer.9sC<00><00><14><11>y<EFBFBD>y<EFBFBD><1C>&<26>0<>0<><04><14>U<EFBFBD>4<EFBFBD>?<3F>?<3F>+<2B>Q<EFBFBD>/<2F>/<2F><> <14><14><13><14>s<00>>A<00> A<03>Ac<00>R<00>V^8<>dQhR\R\\\3,/#)r r#r )r$<00>tuple<6C>int)rs"rrrAs"<00><00> <1B> <1B><13> <1B><15>s<EFBFBD>C<EFBFBD>x<EFBFBD><1F> rc
<04>V<00>\P!V4PpVPR4;'gRP 4pVPR4;'g^pRRRRRRR R
R R /pTPY";'gR 4\ V43# \ dRu#i;i)z,Returnerer (dansk label, antal analytikere).<2E>recommendationKey<65><00>numberOfAnalystOpinions<6E>
strong_buyr<00>buyr<00>hold<6C>sell<6C>sælg<6C> strong_sell<6C> stærk sælg<6C>ukendt)r=<00>)r'r(r-<00>get<65>lowerr1r,)r#r-<00>rec<65>n<> label_maps& r<00>_analyst_labelrDAs<><00><00>
<1B><11>y<EFBFBD>y<EFBFBD><1C>&<26>+<2B>+<2B><04><14><08><08>,<2C>-<2D>3<>3<><12>:<3A>:<3A><<3C><03><13>x<EFBFBD>x<EFBFBD>1<>2<>7<>7<>a<EFBFBD><01> <18>-<2D><15><06> <12>F<EFBFBD>F<EFBFBD>G<EFBFBD>]<5D>N<EFBFBD>
<EFBFBD> <09><19>}<7D>}<7D>S<EFBFBD>/<2F>/<2F><18>2<>C<EFBFBD><01>F<EFBFBD>:<3A>:<3A><> <14><1B><1A><1A><1B>s"<00>7B<00>(B<00>#"B<00>B<00> B(<03>'B(c<00>0<00>V^8<>dQhR\R\/#<00>r <00>dbr <00>r<00>list)rs"rrrPs<00><00>P<01>P<01><06>P<01>4<EFBFBD>Prc<00>@<00>VPR4P4#)z+SELECT * FROM positions ORDER BY entry_date)<02>execute<74>fetchall<6C>rGs&r<00>_open_positionsrNPs<00><00> <0A>:<3A>:<3A>C<> D<> M<> M<> O<>Orc<00>0<00>V^8<>dQhR\R\/#rF<00>rr1)rs"rrrTs<00><00>Q<01>Q<01>F<EFBFBD>Q<01>s<EFBFBD>Qrc<00>N<00>VPR4P4R,#)z%SELECT COUNT(*) AS cnt FROM positions<6E>cnt)rK<00>fetchonerMs&r<00> _open_countrTTs <00><00> <0A>:<3A>:<3A>=<3D> ><3E> G<> G<> I<>%<25> P<>Prc<00>0<00>V^8<>dQhR\R\/#rFrH)rs"rrrXs<00><00><1F><1F>f<EFBFBD><1F><14>rc<04><><00>\\P!44R,
pVPRV34P4#)u7Hent de bedste aktuelle signal-rækker (senest 7 dage).ai
SELECT ticker, MAX(company_name) AS company_name,
MAX(signal_score) AS signal_score,
AVG(sentiment_score) AS sentiment_score,
SUM(CASE WHEN sentiment = 'positive' THEN 1 ELSE 0 END) AS pos_count,
SUM(CASE WHEN sentiment = 'negative' THEN 1 ELSE 0 END) AS neg_count,
COUNT(*) AS article_count,
MAX(momentum_dir) AS momentum_dir,
MAX(claude_magnitude) AS magnitude
FROM article_signals
WHERE analyzed_at > ?
GROUP BY ticker
ORDER BY signal_score DESC
i<>: )r1<00>timerKrL)rG<00>cutoffs& r<00> _best_signalsrYXs=<00><00> <10><14><19><19><1B> <1D> <09> )<29>F<EFBFBD> <0A>:<3A>:<3A> <08> <11><19> <14><1D>H<EFBFBD>J<EFBFBD> rc<00>0<00>V^8<>dQhR\R\/#rFrP)rs"rrros<00><00> #<23> #<23>f<EFBFBD> #<23><13> #rc<00><><00>\V4p\V,
pV^8:d^#\R\V444p\ R\
V,
4p\ WB,4#)r>c3<00>P"<00>TFpVR,VR,,x<00>K R#5i<01><03>shares<65> entry_priceNr<00><02>.0<EFBFBD>ps& r<00> <genexpr><3E> _per_position.<locals>.<genexpr>us(<00><00><00><06>$<24>A<EFBFBD>
<EFBFBD>(<28> <0B>a<EFBFBD> <0A>&<26>&<26>&<26>$<24>s<00>$&<01>)rT<00> MAX_POSITIONS<4E>sumrN<00>max<61>CAPITALr1)rG<00>open_n<5F>slots<74>used<65> remainings& r<00> _per_positionrnos[<00><00><19>"<22>o<EFBFBD>F<EFBFBD><1B>f<EFBFBD>$<24>E<EFBFBD> <0C><01>z<EFBFBD><10> <0E><06> <20><12>$<24><06> <06>D<EFBFBD><14>C<EFBFBD><17>4<EFBFBD><1E>(<28>I<EFBFBD> <0E>y<EFBFBD>!<21> "<22>"rc<00>(<00>V^8<>dQhR\RR/#<00>r rGr Nr )rs"rrr}s<00><00>y <0C>y <0C><06>y <0C>4<EFBFBD>y rc<00>@ <00>\4p\V4p\V4Uu/uF q3R,VbK pp\V4p\ V4p\ RVP 444p\4\RJ4\R\P!\P4PR4 R24\R\R RVR RV R \ R
VR R 2 4\RJ4.p.p .p
VEFGp V R,p VPV /4p V PR V R 24p\!V4pVfKE\#V4wppV R,;'gRpV R,;'g^pV R,;'g^pVV,
pW<>9dV P%W<>W<EFBFBD>VV34K<>V\&9pV\(8<>pV^8<>;'d T;'gV^8;'dVRK9pV'd*V'd"V'dVP%W<>W<EFBFBD>VVV34EKV'g V'gEK1V
P%W<>W<EFBFBD>VVV34EKJ V'Ed<>V\8Ed<>V^8<>Ed<>\4\R4\RL4\V,
pVRVEFkwr<>r<EFBFBD>ppp\+Wo,4pV^8XdMV PR.4p\-RV4R4pV'dRV 2MRp\RV R RVR RV 24KnVV,p\/V^\0,
,^4p\/V^\2,,^4p \/VVV,
,^4p!\/VV V,
,^4p"\RV R RV RVR RVR R 2 4\R VR R!V!R R"24\R#V R R$V"R R"24\R%VR& R'V R(VP54 24\R)V R*V R*V 24\4EKn MV'g\4\R+4V'Edt\4\R,4\RL4VP74EF>wp p#VPV /4p V PR V R 24p\!V4;'g
V#R-,pV#R-,p$V#R.,pVV$,
V$, ^d,p%VV,p&VVV$,
,p'VV#R/,8*p(VV#R0,8<>p)V('dR1M V)'dR2MR3p*\RV R RVR4 R5V$R R6VR R7V%R8 R92 4\R:V&R R;V'R< R7V* 24\R=V#R/,R R>V#R0,R R 24V('g V)'d\R?V R*VR& 24\4EKA V
'd<>\4\R@4\RL4V
RA,F<>wr<>r<EFBFBD>ppp.p+V\(8dV+P%RBVR& RC\( 24V\&9d#V+P%RDVP54 24\RV R RVR R7REP9V+4 24K<> \4\RF4\RG4\RH4\RI4\4R#uupi)M<>tickerc3<00>N"<00>TFqR,VR,,x<00>K R#5ir]rr`s& rrc<00>"evaluate_orders.<locals>.<genexpr><3E>s!<00><00><00>N<><M<>q<EFBFBD>h<EFBFBD>K<EFBFBD>!<21>M<EFBFBD>"2<>2<>2<><M<>s<00>#%u MONEYMAKER ORDRE-FORSLAG · z%d %b %Y %H:%Mz UTCz Kapital: z,.0fu kr │ Brugt: u kr │ Åbne: <20>/u │ Pr. pos: <20> krr#<00>.CON<4F> signal_scorere<00> pos_count<6E> neg_countu 🟢 KØB-SIGNALER<45> <20> leveragedc3<00>b"<00>TF%qPR4R8XgKVR,x<00>K' R#5i)<04> direction<6F>longrrN)r?)ra<00>es& rrcrt<00>s'<00><00><00>Z<>T<EFBFBD><01>U<EFBFBD>U<EFBFBD>;<3B>=O<>SY<53>=Y<> <0B><01>(<28> <0B> <0B>T<EFBFBD>s<00>/<01>/r4u → brug ETP u$ → pris for høj til direkte køb<C3B8><10z>7,.0fz kr/stku KØB <20> stk à z kr = z Stop-loss: z kr (max tab: z kr)z Take-profit: z kr (max gevinst: z Signal: <20>.2fu │ Analytikere (z): z1 Registrer: python portfolio.py buy <20> u$ Ingen klare KØB-signaler lige nu.u 📊 ÅBNE POSITIONERr_r^<00> stop_loss<73> take_profitu🔴 SÆLG (stop-loss!)u🟡 SÆLG (take-profit!)u⏳ HOLD<4C>.0fu stk │ ind: u kr │ nu: u
kr │ z+.1f<EFBFBD>%u Værdi: <20> kr │ P&L: z+,.0fz Stop: u kr │ Take: z2 Registrer: python portfolio.py sell u. 🔍 FØLG MED (signal endnu ikke klart nok):N<>Nzsignal z < z analytikere: z, z Forklaring:uC Stop-loss = sælg automatisk hvis kurs falder 10% fra dit købuB Take-profit = sælg hvis kurs stiger 25% — tag gevinsten hjemuP KØB-krav = signal≥0.25 + analytikere siger KØB + begge peger samme veju<6A>══════════════════════════════════════════════════════════════════>r:r<u<> ──────────────────────────────────────────────────────────────)r!rYrN<00>lenrnrg<00>values<65>printr<00>nowr<00>utc<74>strftimerirfr?r.rD<00>append<6E> BUY_ANALYST<53>
MIN_SIGNALr1<00>nextr*<00> STOP_LOSS_PCT<43>TAKE_PROFIT_PCT<43>upperr<00>join),rG<00>c25<32>signalsrb<00>open_posrj<00>per_posrl<00>buy_suggestions<6E>hold_suggestions<6E>
watch_list<EFBFBD>rowrr<00>meta<74>yahoo<6F>price<63> analyst_lbl<62> analyst_n<5F>score<72>pos_ct<63>neg_ct<63> net_sentiment<6E>
analyst_ok<EFBFBD> signal_ok<6F>enige<67>
slots_leftr^<00>etps<70>etp_buy<75>etp_txt<78>total<61>stop<6F>take<6B>max_loss<73>max_gain<69>pos<6F>entry<72>pct_chg<68>value<75>pnl<6E>stop_hit<69>take_hit<69>action<6F>whys,& r<00>evaluate_ordersr<73>}s<><00><00><18>
<EFBFBD>C<EFBFBD><1D>b<EFBFBD>!<21>G<EFBFBD>)8<><12>)<<3C>=<3D>)<<3C>A<EFBFBD>8<EFBFBD><1B>a<EFBFBD><1E>)<<3C>H<EFBFBD>=<3D><13>H<EFBFBD> <0A>F<EFBFBD><1D>b<EFBFBD>!<21>G<EFBFBD><13>N<>H<EFBFBD>O<EFBFBD>O<EFBFBD><M<>N<>N<>D<EFBFBD> <09>G<EFBFBD> <09>*<2A><15> <09> ,<2C>X<EFBFBD>\<5C>\<5C>(<28>,<2C>,<2C>-G<>-P<>-P<>Qb<51>-c<>,d<>dh<64>
i<EFBFBD>j<> <09>K<EFBFBD><07><04>~<7E>%6<>t<EFBFBD>D<EFBFBD>k<EFBFBD>B<14><1A>8<EFBFBD>1<EFBFBD>]<5D>O<EFBFBD>+;<3B>G<EFBFBD>D<EFBFBD>><3E><13> N<01>O<01> <09>*<2A><15><19>O<EFBFBD><19><14><19>J<EFBFBD><16><03><14>X<EFBFBD><1D><06><14><17><17><16><12>$<24><04><15><18><18>.<2E>V<EFBFBD>H<EFBFBD>C<EFBFBD>.<2E>9<><05><1F><05>&<26><05> <10>=<3D> <14>!/<2F><05>!6<><1E> <0B>Y<EFBFBD><14>^<5E>$<24>+<2B>+<2B><03><05><14>[<5B>!<21>&<26>&<26>Q<EFBFBD><06><14>[<5B>!<21>&<26>&<26>Q<EFBFBD><06><1E><16><0F> <0A> <12> <1D> <1C> #<23> #<23>V<EFBFBD>$<24>{<7B>I<EFBFBD>$V<> W<> <14>!<21>K<EFBFBD>/<2F>
<EFBFBD><1A>j<EFBFBD>(<28> <09>#<23>a<EFBFBD>'<27>6<>6<>J<EFBFBD>{<7B>{<7B>M<EFBFBD>A<EFBFBD><M<><z<><z<>R]<5D>az<61>Rz<52><05> <14><1A><05> <1B> "<22> "<22>F<EFBFBD><14>k<EFBFBD>9<EFBFBD>V[<5B>#\<5C> ]<5D> <16>*<2A>*<2A> <16> <1D> <1D>v<EFBFBD>D<EFBFBD><1B>i<EFBFBD>QV<51>W<> X<>7<17><<17><EFBFBD>6<EFBFBD>M<EFBFBD>1<>g<EFBFBD><01>k<EFBFBD> <0A><07> <0A>$<24>%<25> <0A><1F> <20>"<22>V<EFBFBD>+<2B>
<EFBFBD>IX<EFBFBD>Yd<EFBFBD>Zd<EFBFBD>Ie<EFBFBD> E<>V<EFBFBD>$<24>{<7B>I<EFBFBD>u<EFBFBD><18><17>)<29>*<2A>F<EFBFBD><15><11>{<7B><1B>x<EFBFBD>x<EFBFBD> <0B>R<EFBFBD>0<><04><1E>Z<>T<EFBFBD>Z<>\^<5E>_<><07>9@<40>O<EFBFBD>G<EFBFBD>9<EFBFBD>5<>Fl<46><07><15><02>6<EFBFBD>#<23>,<2C>b<EFBFBD><15>v<EFBFBD><0E>g<EFBFBD>g<EFBFBD>Y<EFBFBD>G<>H<><18><1F>%<25><1E>E<EFBFBD><1E>u<EFBFBD><01>M<EFBFBD>(9<>:<3A>A<EFBFBD>><3E>D<EFBFBD><1E>u<EFBFBD><01>O<EFBFBD>(;<3B><<3C>a<EFBFBD>@<40>D<EFBFBD><1E>v<EFBFBD><15><14><1C>6<><01>:<3A>H<EFBFBD><1E>v<EFBFBD><14><05><1C>6<><01>:<3A>H<EFBFBD> <11>B<EFBFBD>v<EFBFBD>c<EFBFBD>l<EFBFBD>'<27>&<26><18><18>%<25><04><1C>X<EFBFBD>e<EFBFBD>TX<54>\<5C>Y\<5C>]<5D> ^<5E> <11>.<2E>t<EFBFBD>D<EFBFBD>k<EFBFBD>9J<39>8<EFBFBD>TX<54>/<2F>Y]<5D>^<5E> _<> <11>.<2E>t<EFBFBD>D<EFBFBD>k<EFBFBD>9L<39>X<EFBFBD>VZ<56>O<EFBFBD>[_<>`<60> a<> <11>)<29>%<25><03><1B>4H<34><19> <0B>SV<53>Wb<57>Wh<57>Wh<57>Wj<57>Vk<56>l<> m<> <11>E<>f<EFBFBD>X<EFBFBD>Q<EFBFBD>v<EFBFBD>h<EFBFBD>VW<56>X]<5D>W^<5E>_<> `<60> <11>G<EFBFBD>%Jf<01>&<1D> <0A><07> <0A>4<>5<><10>x<EFBFBD> <0A><07> <0A>'<27>(<28> <0A><1F> <20>#<23>><3E>><3E>+<2B>K<EFBFBD>F<EFBFBD>C<EFBFBD><19>g<EFBFBD>g<EFBFBD>f<EFBFBD>b<EFBFBD>)<29>D<EFBFBD><1A>h<EFBFBD>h<EFBFBD>~<7E>&<26><18><13>~<7E>><3E>E<EFBFBD>$<24>U<EFBFBD>+<2B>A<>A<>s<EFBFBD>=<3D>/A<>E<EFBFBD><19>-<2D>(<28>E<EFBFBD><19>(<28>m<EFBFBD>F<EFBFBD><1C>u<EFBFBD>}<7D><05>-<2D><03>3<>G<EFBFBD><1C>u<EFBFBD>n<EFBFBD>E<EFBFBD><1C><05><05> <0A>.<2E>C<EFBFBD><1D><13>[<5B>!1<>1<>H<EFBFBD><1D><13>]<5D>!3<>3<>H<EFBFBD>5=<3D>1<>ck<63>D_<44>q{<7B>F<EFBFBD> <11>B<EFBFBD>v<EFBFBD>c<EFBFBD>l<EFBFBD>"<22>V<EFBFBD>C<EFBFBD>L<EFBFBD>0@<40><15>t<EFBFBD> <0C>N<EFBFBD>[`<60>ae<61>Zf<5A>fp<66>qx<71>y}<7D>p~<7E>~<>A<02> B<02> <11>)<29>%<25><04><1C>_<EFBFBD>S<EFBFBD><15>K<EFBFBD>z<EFBFBD>Z`<60>Ya<59>b<> c<> <11>'<27><03>K<EFBFBD>(8<><14>'><3E>>N<>s<EFBFBD>S`<60>Oa<4F>bf<62>Ng<4E>gj<67>k<> l<><17>8<EFBFBD><15>J<>6<EFBFBD>(<28>RS<52>TY<54>Z]<5D>S^<5E>_<>`<60> <11>G<EFBFBD>',<2C>,<12> <0A><07> <0A>><3E>?<3F> <0A><1F> <20>IS<49>TV<54><1E><1E> E<>V<EFBFBD>$<24>{<7B>I<EFBFBD>u<EFBFBD><14>C<EFBFBD><14>z<EFBFBD>!<21><13>
<EFBFBD>
<EFBFBD>W<EFBFBD>U<EFBFBD>3<EFBFBD>K<EFBFBD>s<EFBFBD>:<3A>,<2C>?<3F>@<40><1A>+<2B>-<2D><13>
<EFBFBD>
<EFBFBD>]<5D>;<3B>+<<3C>+<<3C>+><3E>*?<3F>@<40>A<> <11>B<EFBFBD>v<EFBFBD>c<EFBFBD>l<EFBFBD>"<22>U<EFBFBD>6<EFBFBD>N<EFBFBD>*<2A>T<EFBFBD>Y<EFBFBD>Y<EFBFBD>s<EFBFBD>^<5E><L<>M<> N<> JX<01>
<EFBFBD>G<EFBFBD> <09>/<2F><1A> <09>
O<EFBFBD>P<> <09>
N<EFBFBD>O<> <09>
\<5C>]<5D> <09>G<EFBFBD><47>m>s<00>Zc<00>J<00>V^8<>dQhR\R\\,RR/#<00>r rG<00>argsr N<>rrIr$)rs"rrr<00>s%<00><00>,<2C>,<2C><06>,<2C>d<EFBFBD>3<EFBFBD>i<EFBFBD>,<2C>D<EFBFBD>,rc <00><><00>\V4^8d\R4\R4R#V^,P4p\V^,4p\V^,4p\ V^\
,
,^4p\ V^\ ,,^4p\P!\P4PR4pW4,pVPRR.ROW#WGWV34VPRW#WHV34VP4\RVR R
V R VR R VR R2 4\RVR R24\RVR R24R#)<12>z/Brug: python portfolio.py buy TICKER ANTAL PRISz+Eks: python portfolio.py buy VWS 11 195.00N<EFBFBD>%Y-%m-%d<> positionsrrz<>
INSERT INTO position_events
(ticker, action, shares, price, total_dkk, event_date)
VALUES (?, 'buy', ?, ?, ?, ?)
u✅ KØB registreret: r<><00> stk <20> à r<><00> kr = rvz Stop-loss: z Take-profit: )rrr^r_<00>
entry_dater<EFBFBD>r<>)r<>r<>r<>r%r*r<>r<>rr<>rr<>r<><00>upsertrK<00>commit) rGr<>rrr^r<>r<>r<><00>todayr<79>s && r<00>cmd_buyr<79><00>s9<00><00>
<EFBFBD>4<EFBFBD>y<EFBFBD>1<EFBFBD>}<7D> <0A>?<3F>@<40> <0A>;<3B><<3C><0E> <11>!<21>W<EFBFBD>]<5D>]<5D>_<EFBFBD>F<EFBFBD> <12>4<EFBFBD><01>7<EFBFBD>^<5E>F<EFBFBD> <12>4<EFBFBD><01>7<EFBFBD>^<5E>E<EFBFBD> <12>5<EFBFBD>A<EFBFBD> <0A>-<2D>.<2E><01> 2<>D<EFBFBD> <12>5<EFBFBD>A<EFBFBD><0F>/<2F>0<>!<21> 4<>D<EFBFBD> <15>\<5C>\<5C>(<28>,<2C>,<2C> '<27> 0<> 0<><1A> <<3C>E<EFBFBD> <13>^<5E>E<EFBFBD><06>I<EFBFBD>I<EFBFBD><13>X<EFBFBD>U<> <0F><15>t<EFBFBD>2<><06>
<07>J<EFBFBD>J<EFBFBD><08> <11>%<25><05> .<2E> 0<>
<07>I<EFBFBD>I<EFBFBD>K<EFBFBD> <09> "<22>6<EFBFBD>#<23>,<2C>e<EFBFBD>F<EFBFBD>8<EFBFBD>4<EFBFBD><05>c<EFBFBD>{<7B>&<26>QV<51>WZ<57>P[<5B>[^<5E>
_<EFBFBD>`<60> <09> <1C>T<EFBFBD>#<23>J<EFBFBD>c<EFBFBD>
*<2A>+<2B> <09> <1C>T<EFBFBD>#<23>J<EFBFBD>c<EFBFBD>
*<2A>+rc<00>J<00>V^8<>dQhR\R\\,RR/#r<>r<>)rs"rrrs*<00><00>G<02>G<02><16>G<02>t<EFBFBD>C<EFBFBD>y<EFBFBD>G<02>T<EFBFBD>Grc <00><><00>\V4^8d\R4\R4R#V^,P4p\V^,4pVP RV34P 4pV'g\RV R24R#VR,pVR,pWSV,
,pWS,p\ P!\P4PR 4p V^8<>d^M^p
VP R
V34VP R W%W8WzV 34VP4V^8<>dR MR p \V RVR RV RVR RVR R2
4\RVR RVR RV
'dRMR 24R#)r z*Brug: python portfolio.py sell TICKER PRISz)Eks: python portfolio.py sell VWS 244.00Nz(SELECT * FROM positions WHERE ticker = ?u❌ u — ingen åben position fundetr^r_r<>z&DELETE FROM positions WHERE ticker = ?z<>
INSERT INTO position_events
(ticker, action, shares, price, total_dkk, pnl_dkk, signal_correct, event_date)
VALUES (?, 'sell', ?, ?, ?, ?, ?, ?)
u🟢u🔴z SALG registreret: r<>r<>r<>r<>r<>rvu Købt til: r<><00>+.2fu kr │ Signal: u ✅ korrektu ❌ forkert) r<>r<>r<>r%rKrSrr<>rr<>r<>r<>) rGr<>rrr<>r<>r^r<>r<>r<>r<><00>signal_correct<63>emojis && r<00>cmd_sellr<6C>ss<00><00>
<EFBFBD>4<EFBFBD>y<EFBFBD>1<EFBFBD>}<7D> <0A>:<3A>;<3B> <0A>9<>:<3A><0E> <11>!<21>W<EFBFBD>]<5D>]<5D>_<EFBFBD>F<EFBFBD> <12>4<EFBFBD><01>7<EFBFBD>^<5E>E<EFBFBD> <0F>Z<EFBFBD>Z<EFBFBD>B<>V<EFBFBD>I<EFBFBD> N<> W<> W<> Y<>C<EFBFBD> <0E> <0A><04>V<EFBFBD>H<EFBFBD><<3C>=<3D>><3E><0E><11>(<28>m<EFBFBD>F<EFBFBD><11>-<2D> <20>E<EFBFBD><14><05> <0A>&<26>C<EFBFBD><14>n<EFBFBD>E<EFBFBD><16>l<EFBFBD>l<EFBFBD>8<EFBFBD><<3C><<3C>(<28>1<>1<>*<2A>=<3D>E<EFBFBD><1D><01>'<27>Q<EFBFBD>q<EFBFBD>N<EFBFBD><06>J<EFBFBD>J<EFBFBD>7<>&<26><19>C<><06>J<EFBFBD>J<EFBFBD><08> <11>%<25><03>U<EFBFBD> C<> E<01>
<07>I<EFBFBD>I<EFBFBD>K<EFBFBD><19>Q<EFBFBD>h<EFBFBD>F<EFBFBD>F<EFBFBD>E<EFBFBD> <09>U<EFBFBD>G<EFBFBD>&<26>v<EFBFBD>c<EFBFBD>l<EFBFBD>%<25><06>x<EFBFBD>t<EFBFBD>E<EFBFBD>#<23>;<3B>f<EFBFBD>UZ<55>[^<5E>T_<54>_b<5F>
c<EFBFBD>d<> <09>N<EFBFBD>5<EFBFBD><13>+<2B>_<EFBFBD>S<EFBFBD><14>J<EFBFBD>>P<>bp<62>Q^<5E>wD<02>QE<02> F<02>Grc<00>(<00>V^8<>dQhR\RR/#rpr )rs"rrr8s<00><00> <0C> <0C>6<EFBFBD> <0C>d<EFBFBD> rc<00>4<00>\V4pVPR4P4pV'g \R4M<>\R4VF<>p\ 4P VR,/4pVP RVR, R24p\ V4;'g
VR,pVR,WcR,,
,p\RVR,R R
VR,R R VR,R RVR RVR R2 4\RVR,R RVR,R RVR, R24K<> V'd<>\R4RpVF<>p V R,eRV R,R R2MRp
\RV R, RV R,P4R R
V R,R R
V R,R R!V R",R RV
2 4V R,fK}W<>R,, pK<> VU u.uFq<>R,R#8XgKV NK p p V 'd\R$VR R24\4R#uup i)%zM
SELECT * FROM position_events ORDER BY event_date DESC LIMIT 10
u
Ingen åbne positioner.
u
ÅBNE POSITIONER:rrr#rwr_r^r{r<>r<>r<>z
stk ind r<>z nu z P&L r<>rvz Stop r<>z Take r<>u (købt r<><00>)z
SENESTE HANDLER:re<00>pnl_dkkNr4<00>
event_dater<EFBFBD>z<5r<35>r<>r9z
Samlet realiseret P&L: )rNrKrLr<>r!r?r.r<>) rGr<><00>historyrbr<>r<>r<>r<><00> total_pnlr<6C><00>pnl_txt<78>solds & r<00>
cmd_statusr<EFBFBD>8s#<00><00><1F><02>#<23>I<EFBFBD><12>
<EFBFBD>
<EFBFBD><08> <09> <11><18><1A> <0C> <15> <0A>-<2D>.<2E> <0A>%<25>&<26><1A>A<EFBFBD><1C>J<EFBFBD>N<EFBFBD>N<EFBFBD>1<EFBFBD>X<EFBFBD>;<3B><02>3<>D<EFBFBD><18>H<EFBFBD>H<EFBFBD>^<5E><01>(<28> <0B>}<7D>C<EFBFBD>-@<40>A<>E<EFBFBD>"<22>5<EFBFBD>)<29>=<3D>=<3D>Q<EFBFBD>}<7D>-=<3D>E<EFBFBD><15>h<EFBFBD>K<EFBFBD>5<EFBFBD>]<5D>+;<3B>#;<3B><<3C>C<EFBFBD> <11>B<EFBFBD>q<EFBFBD><18>{<7B>3<EFBFBD>'<27>q<EFBFBD><11>8<EFBFBD><1B>S<EFBFBD>(9<><1A>A<EFBFBD>m<EFBFBD>DT<44>UX<55>CY<43>Y^<5E>_d<5F>eh<65>^i<>io<69>ps<70>tx<74>oy<6F>y|<7C>}<7D> ~<7E> <11>&<26>q<EFBFBD><1B>~<7E>c<EFBFBD>&:<3A>'<27>!<21>M<EFBFBD>BR<42>SV<53>AW<41>W`<60>ab<61>co<63>ap<61>`q<>qr<71>s<> t<> <1B><0F> <0A>$<24>%<25><17> <09><18>A<EFBFBD>9:<3A>9<EFBFBD><1C>9Q<39><06>q<EFBFBD><19>|<7C>D<EFBFBD>1<><13>5<>WY<57>G<EFBFBD> <11>B<EFBFBD>q<EFBFBD><1C><EFBFBD>'<27>r<EFBFBD>!<21>H<EFBFBD>+<2B>*;<3B>*;<3B>*=<3D>b<EFBFBD>)A<><11>1<EFBFBD>X<EFBFBD>;<3B>s<EFBFBD>BS<42>ST<53><16>x<EFBFBD>[<5B><13>%<25>X<EFBFBD>a<EFBFBD><07>j<EFBFBD><13>-=<3D>S<EFBFBD><17> <09>K<01> L<01><10><19>|<7C>'<27><19>y<EFBFBD>\<5C>)<29> <09> <19> #<23><<3C>7<EFBFBD>a<EFBFBD><08>k<EFBFBD>V<EFBFBD>&;<3B><01><01>7<EFBFBD><04><<3C> <0F> <11>/<2F> <09>$<24>/?<3F>s<EFBFBD>C<> D<> <09>G<EFBFBD><47>=s <00>H<04>)Hc<00><00>V^8<>dQhRR/#)r r Nr)rs"rrr]s<00><00><0F><0F>d<EFBFBD>rc<00><><00>\4p\PR,pV'd
V^,MRpVR8Xd \V4MvVR8Xd \ V4McVR8Xd$\ V4^8<>d\ WR,4M9VR8Xd$\ V4^8<>d\WR,4M\\4VP4R#):<3A>NN<4E>orders<72>statusr7r9N) r<00>sys<79>argvr<76>r<>r<>r<>r<>r<><00>__doc__<5F>close)rGr<><00>cmds r<00>mainr<6E>]s<><00><00> <11>8<EFBFBD>B<EFBFBD> <0E>8<EFBFBD>8<EFBFBD>B<EFBFBD><<3C>D<EFBFBD><1A>4<EFBFBD><01>7<EFBFBD><08>C<EFBFBD>
<EFBFBD>h<EFBFBD><EFBFBD><17><02><1B> <0C><08><1F><12>2<EFBFBD><0E> <0C><05><1C>#<23>d<EFBFBD>)<29>q<EFBFBD>.<2E><0F><02><12>H<EFBFBD><1D> <0C><06><1D>3<EFBFBD>t<EFBFBD>9<EFBFBD><01>><3E><10><12>"<22>X<EFBFBD><1E> <0A>g<EFBFBD><0E><06>H<EFBFBD>H<EFBFBD>Jr<00>__main__)%r<>r<>rrW<00>sqlite3<65>pathlibrrr<00>yfinancer'rGrrrirfr<>r<>r<>r<><00>__file__<5F>parentrrr!r.rDrNrTrYrnr<>r<>r<>r<>r<><00>__name__rrr<00><module>r<>s<><00><01> <04> <0B> <0B> <0B><0E><18>'<27><15><1F> <18><07><12> <0A><15> <0A><16><0F><15>
<EFBFBD><1F><16>(<28> <0B> <0F><08>><3E> <20> <20>:<3A> -<2D><08> <16>;<3B> <14> <1B>P<01>Q<01><1F>. #<23>y <0C>@,<2C>:G<02>< <0C>J<0F>& <0C>z<EFBFBD><19><08>F<EFBFBD>r