Files
trading-daemon/__pycache__/daemon.cpython-313.pyc

56 lines
10 KiB
Plaintext
Raw Normal View History

2026-01-27 10:48:11 +01:00
<EFBFBD>
2026-01-27 11:30:50 +01:00
<00><>xi<78>"<00><00><><00>SSKrSSKrSSKrSSKrSSKrSSKrSSKJr SSKJ r SSK
2026-01-27 10:48:11 +01:00
J r J r J r SSKJr SSKJr SSKJr \R("\R*SS 9 \R,"S
5r\R0"S S 5r\R0"S S5r\(a \(a\\4OSrSrSrSrSSjrSr \!S:Xa\ "5 gg)<16>N)<01> EIXExchange)<01>
LSExchange)<03> XetraExchange<67>FrankfurtExchange<67>QuotrixExchange)<01>GettexExchange)<01>StuttgartExchange)<01>DatabaseClientz4%(asctime)s - %(name)s - %(levelname)s - %(message)s)<02>level<65>format<61> TradingDaemon<6F>DB_USER<45>admin<69> DB_PASSWORD<52>questc <00><00>URSURSURR5SURSUR
3 n[ R"UR55R5$)u1Erstellt einen eindeutigen Hash für einen Trade.<2E>|)
<EFBFBD>exchange<67>isin<69> timestamp<6D> isoformat<61>price<63>quantity<74>hashlib<69>md5<64>encode<64> hexdigest)<02>trade<64>keys <20> daemon.py<70>get_trade_hashr!sf<00><00> <12>^<5E>^<5E> <1C>A<EFBFBD>e<EFBFBD>j<EFBFBD>j<EFBFBD>\<5C><11>5<EFBFBD>?<3F>?<3F>+D<>+D<>+F<>*G<>q<EFBFBD><15><1B><1B> <0A>UV<55>W\<5C>We<57>We<57>Vf<56>
g<EFBFBD>C<EFBFBD> <12>;<3B>;<3B>s<EFBFBD>z<EFBFBD>z<EFBFBD>|<7C> $<24> .<2E> .<2E> 0<>0<>c
<00><00>[5nURS5nSUSUS3n[R"US3SU0[SS9nUR
S :Xa<>UR 5nURS
5(a<>US
H<>nUup<>p<EFBFBD>n [U [5(aU RS S 5nOG[RRU S - [RRS9R5nU SU
SUSU SU 3 nUR[ R""UR%55R'55 M<> U$![(a#n[*R-SU35 SnAU$SnAff=f)uFHolt alle Trade-Hashes für eine Exchange seit einem bestimmten Datum.z%Y-%m-%dT%H:%M:%S.000000ZzPSELECT exchange, isin, timestamp, price, quantity FROM trades WHERE exchange = 'z' AND timestamp >= '<27>'<27>/exec<65>query<72><)<03>params<6D>auth<74>timeout<75><74><00>dataset<65>Z<>+00:00<30>@B<00><01>tzrz'Could not fetch existing trade hashes: N)<17>set<65>strftime<6D>requests<74>get<65>DB_AUTH<54> status_code<64>json<6F>
isinstance<EFBFBD>str<74>replace<63>datetime<6D> fromtimestamp<6D>timezone<6E>utcr<00>addrrrr<00> Exception<6F>logger<65>warning)<11>db_url<72> exchange_name<6D>
since_date<EFBFBD>hashes<65>date_strr&<00>response<73>data<74>rowrr<00>tsr<00>qty<74>ts_isor<00>es r <00>get_existing_trade_hashesrPs<><00><00> <10>U<EFBFBD>F<EFBFBD><1A>"<22>"<22>#><3E>?<3F>H<EFBFBD>^<5E>_l<5F>^m<>nB<02>CK<02>BL<02>LM<02> N<02>E<EFBFBD>F<01><1B><<3C><<3C>6<EFBFBD>(<28>%<25> 0<>'<27>5<EFBFBD>9I<39>PW<50>ac<61>d<><08> <13> <1F> <1F>3<EFBFBD> &<26><1B>=<3D>=<3D>?<3F>D<EFBFBD><13>x<EFBFBD>x<EFBFBD> <09>"<22>"<22><1F> <09>?<3F>C<EFBFBD>58<35>2<>H<EFBFBD>B<EFBFBD>s<EFBFBD>!<21>"<22>c<EFBFBD>*<2A>*<2A>!#<23><1A><1A>C<EFBFBD><18>!:<3A><06>!)<29>!2<>!2<>!@<40>!@<40><12>g<EFBFBD><1C>RZ<52>Rc<52>Rc<52>Rg<52>Rg<52>!@<40>!h<>!r<>!r<>!t<><06>%<25>J<EFBFBD>a<EFBFBD><04>v<EFBFBD>Q<EFBFBD>v<EFBFBD>h<EFBFBD>a<EFBFBD><05>w<EFBFBD>a<EFBFBD><03>u<EFBFBD>E<>C<EFBFBD><1A>J<EFBFBD>J<EFBFBD>w<EFBFBD>{<7B>{<7B>3<EFBFBD>:<3A>:<3A><<3C>8<>B<>B<>D<>E<>+<2B> <12>M<EFBFBD><4D> <15>F<01><0E><0E><0E>@<40><11><03>D<>E<>E<> <11>M<EFBFBD><4D>F<01>s<00>D(E<00>
E=<03>E8<03>8E=c<00><><00>SUS3n[R"US3SU0[S9nURS:Xa<>UR 5nUS(a<>USSSn[ U[ 5(a/[RRURS S
55$[RRUS - [RRS 9$[RR R[RRS9$![a%n[RS USU35 SnANiSnAff=f)Nztrades where exchange = 'z' latest by timestampr%r&<00>r(r)r+r,rr-r.r/r0zNo existing data for z or DB unreachable: <20><01>tzinfo)r4r5r6r7r8r9r:r<<00> fromisoformatr;r=r>r?rArB<00>debug<75>min)rDrEr&rIrJ<00>ts_valuerOs r <00>get_last_trade_timestamprY9s,<00><00>'<27> <0A><EFBFBD>6K<36> L<>E<EFBFBD>U<01><1B><<3C><<3C>6<EFBFBD>(<28>%<25> 0<>'<27>5<EFBFBD>9I<39>PW<50>X<><08> <13> <1F> <1F>3<EFBFBD> &<26><1B>=<3D>=<3D>?<3F>D<EFBFBD><13>I<EFBFBD><EFBFBD> <20> <09>?<3F>1<EFBFBD>-<2D>a<EFBFBD>0<><08><1D>h<EFBFBD><03>,<2C>,<2C>#<23>,<2C>,<2C>:<3A>:<3A>8<EFBFBD>;K<>;K<>C<EFBFBD>QY<51>;Z<>[<5B>[<5B>#<23>,<2C>,<2C>:<3A>:<3A>8<EFBFBD>g<EFBFBD>;M<>RZ<52>Rc<52>Rc<52>Rg<52>Rg<52>:<3A>h<>h<> <14> <1C> <1C> <20> <20> (<28> (<28><08>0A<30>0A<30>0E<30>0E<30> (<28> F<>F<><46> <15>U<01><0E> <0C> <0C>,<2C>]<5D>O<EFBFBD>;O<>PQ<50>s<EFBFBD>S<>T<>T<><54>U<01>s<00>BD<00> 8D<00>
2026-01-27 11:30:50 +01:00
E<03>"E<03>Ec <00><00>[RSUS35 [5n[5n[ 5n[ 5n[ 5n[5n[5nUSU(aSOS04USU04USU04USU04USU04USU04USU04/n[S[[S9n UGH&up<>Sn [X<>R5n [RS U
2026-01-27 10:48:11 +01:00
RS
U S35 U R5nU
RS :XaHU(dAU R[ R"R$S 9US 'SU;aUR'S5 U
2026-01-27 11:30:50 +01:00
R("S0UD6nU(d%[RSU
RS35 M<>[+SU55n[-SU55nU[ R."SS9-
n[1X<>RU5nU(aR[RS[3U5S35 /nUH'n[5U5nUU;dMUR7U5 M) O[RS5 Un[RS[3U5S[3U5S35 U(aFUR9SS9 U R;U5 [RS5S35 GM&GM) g![<a1n[R?SU
RSU35 SnAGMbSnAff=f) Nz0Starting Trading Data Fetcher task (Historical: z)...<2E>limit<69><00>include_yesterday<61>questdb)<03>host<73>user<65>password<72>http://questdb:9000zFetching data from z (Last trade: <20>EIXrSrFzNo trades fetched from <20>.c3<00>8# <00>UHoRv<00> M g7f<01>N<>r<00><02>.0<EFBFBD>ts r <00> <genexpr><3E>run_task.<locals>.<genexpr><3E><00><00><00><00>!><3E>v<EFBFBD>!<21>+<2B>+<2B>v<EFBFBD><76><00>c3<00>8# <00>UHoRv<00> M g7frfrgrhs r rkrl<00>rmrn<00>)<01>dayszFound z' existing trade hashes in DB for periodz-No existing hashes found - all trades are newz total trades, z are new.c<00><00>UR$rfrg)<01>xs r <00><lambda><3E>run_task.<locals>.<lambda><3E>s<00><00>a<EFBFBD>k<EFBFBD>kr")rzStored z new trades in QuestDB.zError processing exchange z: <20>) rB<00>inforrrrrrr r
rrrY<00>name<6D>copyr;r<r>r?<00>pop<6F>fetch_latest_tradesrW<00>max<61> timedeltarP<00>lenr!<00>append<6E>sort<72> save_tradesrA<00>error)<18>
historical<EFBFBD>eix<69>ls<6C>xetra<72> frankfurt<72>quotrix<69>gettex<65> stuttgart<72>exchanges_to_process<73>dbr<00>argsrD<00>last_ts<74> call_args<67>trades<65>oldest_trade_ts<74>newest_trade_ts<74> check_since<63>existing_hashes<65>
new_tradesrj<00>
trade_hashrOs r <00>run_taskr<6B>Ns<><00><00>
2026-01-27 10:48:11 +01:00
<EFBFBD>K<EFBFBD>K<EFBFBD>B<>:<3A>,<2C>d<EFBFBD>S<>T<> <16>-<2D>C<EFBFBD> <13><1C>B<EFBFBD> <1A>O<EFBFBD>E<EFBFBD>!<21>#<23>I<EFBFBD><1D><1F>G<EFBFBD> <1B> <1D>F<EFBFBD>!<21>#<23>I<EFBFBD>
<0A>w<EFBFBD>
<EFBFBD><04><01>2<>3<> <0B>!<21>:<3A> .<2E>/<2F> <0E>$<24>j<EFBFBD>1<>2<> <12>(<28>*<2A>5<>6<> <10>&<26>
<EFBFBD>3<>4<> <0F>%<25>z<EFBFBD>2<>3<> <12>(<28>*<2A>5<>6<> <06><18>
2026-01-27 11:30:50 +01:00
<18>Y<EFBFBD>W<EFBFBD>{<7B> K<>B<EFBFBD>.<2E><0E><08>2 L<01>*<2A>F<EFBFBD>.<2E>v<EFBFBD>}<7D>}<7D>E<>G<EFBFBD> <12>K<EFBFBD>K<EFBFBD>-<2D>h<EFBFBD>m<EFBFBD>m<EFBFBD>_<EFBFBD>N<EFBFBD>7<EFBFBD>)<29>SW<53>X<> Y<><1D> <09> <09> <0B>I<EFBFBD><17>}<7D>}<7D><05>%<25>j<EFBFBD>+2<>?<3F>?<3F>(<28>BS<42>BS<42>BW<42>BW<42>?<3F>+X<><19><<3C>(<28><1B>y<EFBFBD>(<28><1E>]<5D>]<5D>7<EFBFBD>+<2B><1D>1<>1<>><3E>I<EFBFBD>><3E>F<EFBFBD><19><16> <0B> <0B>5<>h<EFBFBD>m<EFBFBD>m<EFBFBD>_<EFBFBD>A<EFBFBD>F<>G<><18>"<22>!><3E>v<EFBFBD>!><3E>><3E>O<EFBFBD>!<21>!><3E>v<EFBFBD>!><3E>><3E>O<EFBFBD>*<2A>H<EFBFBD>,><3E>,><3E>A<EFBFBD>,F<>F<>K<EFBFBD>7<><06> <0A> <0A>{<7B>[<5B>O<EFBFBD><1E><16> <0B> <0B>f<EFBFBD>S<EFBFBD><1F>%9<>$:<3A>:a<>b<>c<> <20>
<EFBFBD><1F>A<EFBFBD>!/<2F><01>!2<>J<EFBFBD>!<21><1F>8<>"<22>)<29>)<29>!<21>,<2C> <20> <17> <0B> <0B>K<>M<>#<23>
<EFBFBD> <12>K<EFBFBD>K<EFBFBD>&<26><13>V<EFBFBD><1B> <0A>_<EFBFBD>S<EFBFBD><1A>_<EFBFBD><M<>Y<EFBFBD>W<> X<><19><1A><0F><0F>$9<><0F>:<3A><12><0E><0E>z<EFBFBD>*<2A><16> <0B> <0B>g<EFBFBD>c<EFBFBD>*<2A>o<EFBFBD>%6<>6M<36>N<>O<> <1A>[/<2F><>d<19> L<01> <12>L<EFBFBD>L<EFBFBD>5<>h<EFBFBD>m<EFBFBD>m<EFBFBD>_<EFBFBD>B<EFBFBD>q<EFBFBD>c<EFBFBD>J<> K<> K<><4B> L<01>s'<00>*C!K<02> BK<02>!B%K<02>
L
<05>%L<05>L
c<00><><00>[RS5 SnSn[R"US3SS0[S9nUR
2026-01-27 10:48:11 +01:00
S:Xa+UR 5nUS (aUS S
S
S
:<3A>aS nU(a[RS 5 [SS 9 O3[RS5 [S S 9 [RS5 [RR5nURS:Xa/URS
2026-01-27 11:30:50 +01:00
:Xa[S S 9 [R"S5 [R"S5 Mu![a SnN<>f=f)NzTrading Daemon started.rbTr%r&zselect count(*) from tradesrRr+r,rFzPDatabase is empty or table doesn't exist. Triggering initial historical fetch...)r<>z<Found existing data in database. Triggering catch-up sync...z<Catch-up sync completed. Waiting for scheduled run at 23:00.<2E><00>=<00>)rBrwr4r5r6r7r8rAr<>r<<00>now<6F>hour<75>minute<74>time<6D>sleep)rD<00>is_emptyrIrJr<>s r <00>mainr<6E><00>s<00><00>
2026-01-27 10:48:11 +01:00
<EFBFBD>K<EFBFBD>K<EFBFBD>)<29>*<2A>#<23>F<EFBFBD><13>H<EFBFBD> <18><1B><<3C><<3C>6<EFBFBD>(<28>%<25> 0<>'<27>C`<60>9a<39>ho<68>p<><08> <13> <1F> <1F>3<EFBFBD> &<26><1B>=<3D>=<3D>?<3F>D<EFBFBD><13>I<EFBFBD><EFBFBD>4<EFBFBD> <09>?<3F>1<EFBFBD>#5<>a<EFBFBD>#8<>1<EFBFBD>#<<3C> <20><08>
<10><0E> <0B> <0B>f<>g<><10>D<EFBFBD>!<21><0E> <0B> <0B>R<>S<><10>E<EFBFBD>"<22><0E> <0B> <0B>R<>S<>
<0E><16><1F><1F>#<23>#<23>%<25><03> <0E>8<EFBFBD>8<EFBFBD>r<EFBFBD>><3E>c<EFBFBD>j<EFBFBD>j<EFBFBD>A<EFBFBD>o<EFBFBD> <14><05> &<26> <10>J<EFBFBD>J<EFBFBD>r<EFBFBD>N<EFBFBD> <0A>
<EFBFBD>
2026-01-27 11:30:50 +01:00
<EFBFBD>2<EFBFBD><0E> <0F><> <15><18><17><08><18>s<00>AE<00> E<03>E<03>__main__)F)"r<><00>loggingr<r<00>osr4<00>src.exchanges.eixr<00>src.exchanges.lsr<00>src.exchanges.deutsche_boerserrr<00>src.exchanges.gettexr<00>src.exchanges.stuttgartr <00>src.database.questdb_clientr
<00> basicConfig<69>INFO<46> getLoggerrB<00>getenvrrr6r!rPrYr<>r<><00>__name__rvr"r <00><module>r<>s<><00><01> <0B><0E><0F><0E> <09><0F>)<29>'<27>[<5B>[<5B>/<2F>5<>6<><07><13><13>
2026-01-27 10:48:11 +01:00
<11>,<2C>,<2C> A<><02>
<11> <1A> <1A>?<3F> +<2B><06>
<0C>)<29>)<29>I<EFBFBD>w<EFBFBD>
'<27><07><10>i<EFBFBD>i<EFBFBD> <0A>w<EFBFBD>/<2F> <0B>$+<2B> <0B>7<EFBFBD>K<EFBFBD>
<20><14><07>1<>
2026-01-27 11:30:50 +01:00
<12>8G<01>*TL<01>l#<17>J <0C>z<EFBFBD><19><08>F<EFBFBD>r"