Files
IB-Dashboard/backend/__pycache__/ib_client.cpython-313.pyc

47 lines
12 KiB
Plaintext
Raw Normal View History

<EFBFBD>
E<><45>i<EFBFBD>"<00><00>l<00>SrSSKrSSKrSSKrSSKJrJr SSKJr SSK J
r
SSK J r "SS\ \5r g) a<>Lightweight IB client wrapper using ibapi.
This wraps a minimal subset of EClient/EWrapper to subscribe to market
data and track positions in-memory. It's designed to be used by a
small Flask backend that serves a browser dashboard.
Notes:
- Keep behavior simple: subscribe to market data for provided symbols.
- Store latest quotes in `self.quotes` and positions in `self.positions`.
<EFBFBD>N)<02>Dict<63>List)<01>EClient)<01>Contract)<01>EWrapperc <00><>^<00>\rSrSrSS\S\S\4SjjrSSjrSS jrS
\4U4S jjr S r
S r Sr Sr SrSrS\4SjrSS\S\S\S\4SjjrS\SS4SjrSSjrS\\\44SjrS\\4SjrSrU=r$)<1F>IBClient<6E><00>host<73>port<72> client_idc<00><><00>[R"X5 U(dSn[U[5(d [U5nXlX lX0lSUlSUl [R"5Ul [5Ul0Ul/Ul0Ul[5Ul[&R("[&R*S9 g![a SnN<>f=f)N<> 127.0.0.1<EFBFBD>H<00>)<01>level)r<00>__init__<5F>
isinstance<EFBFBD>int<6E> Exceptionr r r <00>_thread<61> _next_req_id<69> threading<6E>Event<6E>_connected_event<6E>set<65>_pending_subscriptions<6E>quotes<65> positions<6E>_req_map<61>_requested_symbols<6C>logging<6E> basicConfig<69>INFO)<04>selfr r r s <20>0c:\Users\joerg\IB-Dashboard\backend\ib_client.pyr<00>IBClient.__init__s<><00><00><0F><18><18><14>$<24><13><1E>D<EFBFBD><19>$<24><03>$<24>$<24> <1C><1A>4<EFBFBD>y<EFBFBD><04><19> <09><18> <09>"<22><0E><1B><04> <0C><1D><04><19>!*<2A><0F><0F> 1<><04><1D>'*<2A>e<EFBFBD><04>#<23>(*<2A><04> <0B>%'<27><04><0E>)+<2B><04> <0A>"%<25>%<25><04><1F> <10><1B><1B>'<27>,<2C>,<2C>/<2F><>1<1D> <1C><1B><04> <1C>s<00> C<00> C <03>C <03>returnNc<00>f<00>UR5(d<>[R"SURUR5 UR URURUR 5 [R"URSS9Ul
URR5 gg)NzConnecting to IB gateway %s:%sT<73><02>target<65>daemon) <0C> isConnectedr"<00>infor r <00>connectr r<00>Thread<61>runr<00>start<72>r%s r&<00>connect_and_start<72>IBClient.connect_and_start8ss<00><00><13><1F><1F>!<21>!<21> <13>L<EFBFBD>L<EFBFBD>9<>4<EFBFBD>9<EFBFBD>9<EFBFBD>d<EFBFBD>i<EFBFBD>i<EFBFBD> P<> <10>L<EFBFBD>L<EFBFBD><14><19><19>D<EFBFBD>I<EFBFBD>I<EFBFBD>t<EFBFBD>~<7E>~<7E> ><3E>$<24>+<2B>+<2B>4<EFBFBD>8<EFBFBD>8<EFBFBD>D<EFBFBD>I<>D<EFBFBD>L<EFBFBD> <10>L<EFBFBD>L<EFBFBD> <1E> <1E> <20> "<22>c<00>r<00>UR5(aUR5 gg![a gf=f<01>N)r-<00>
disconnectrr3s r&<00>disconnect_and_stop<6F>IBClient.disconnect_and_stop@s7<00><00> <11><13><1F><1F>!<21>!<21><14><0F><0F>!<21>"<22><><18> <11> <10> <11>s <00>%)<00>
6<03>6<03>orderIdc<00><>><01>[TU]U5 U(aXR:<3A>aXlURR 5 UR (aK[UR 5nUR R5 UHnURU5 M gg![
a Nif=f![
a [R"SU5 MOf=f)Nz)Failed to process pending subscription %s) <0C>super<65> nextValidIdrrrrr<00>list<73>clear<61>subscribe_market_datar"<00> exception)r%r<<00>pending<6E>s<> __class__s <20>r&r?<00>IBClient.nextValidIdHs<><00><><00> <0A><07><1B>G<EFBFBD>$<24> <12>w<EFBFBD>!2<>!2<>2<> '<27> <1D> <11> <10> !<21> !<21> %<25> %<25> '<27> <10> &<26> &<26><1A>4<EFBFBD>6<>6<>7<>G<EFBFBD> <10> '<27> '<27> -<2D> -<2D> /<2F><1C><01>V<01><18>.<2E>.<2E>q<EFBFBD>1<><1D> '<27><><19> <11> <10> <11><>!<21>V<01><1B>%<25>%<25>&Q<>ST<53>U<>V<01>s#<00>B%<00>B5<02>%
B2<03>1B2<03>5!C<05>Cc<00>4<00>[R"SXU5 g)NzIB error (req=%s code=%s): %s)r"<00>error)r%<00>reqId<49> errorCode<64> errorStrings r&rI<00>IBClient.error\s<00><00><0F> <0A> <0A>5<>u<EFBFBD><1B>Ur6c<00><><00>UcgURRU5nU(dgURRU05nX6S'g)N<>last<73>r <00>getr<00>
setdefault)r%rJ<00>tickType<70>price<63>attrib<69>symbol<6F>datas r&<00> tickPrice<63>IBClient.tickPrice_sA<00><00> <10>=<3D> <12><15><1D><1D>"<22>"<22>5<EFBFBD>)<29><06><15> <12><13>{<7B>{<7B>%<25>%<25>f<EFBFBD>b<EFBFBD>1<><04><1C>V<EFBFBD> r6c<00><><00>URRU5nU(dgURRU05nX5S'g)N<>sizerP)r%rJrSr[rVrWs r&<00>tickSize<7A>IBClient.tickSizeis9<00><00><15><1D><1D>"<22>"<22>5<EFBFBD>)<29><06><15> <12><13>{<7B>{<7B>%<25>%<25>f<EFBFBD>b<EFBFBD>1<><04><1B>V<EFBFBD> r6c <00><00>U(aUR(dgURUUUS.n [UR5H-up<>U RS5U S:XdMX<>RU
' g URR U 5 g)N)rV<00>position<6F> marketPrice<63> marketValuerV)rV<00> enumeraterrQ<00>append) r%<00>contractr_r`ra<00> averageCost<73> unrealizedPNL<4E> realizedPNL<4E> accountName<6D>pos<6F>i<>ps r&<00>updatePortfolio<69>IBClient.updatePortfoliopss<00><00><17>x<EFBFBD><EFBFBD><EFBFBD> <12><1E>o<EFBFBD>o<EFBFBD> <20>&<26>&<26> 
<EFBFBD><03><1E>d<EFBFBD>n<EFBFBD>n<EFBFBD>-<2D>D<EFBFBD>A<EFBFBD><10>u<EFBFBD>u<EFBFBD>X<EFBFBD><EFBFBD>#<23>h<EFBFBD>-<2D>/<2F>$'<27><0E><0E>q<EFBFBD>!<21><15>.<2E>
<11>N<EFBFBD>N<EFBFBD> !<21> !<21>#<23> &r6c<00>X<00>[R"S[UR55 g)Nz3Position update batch complete. %d positions stored)r"r.<00>lenrr3s r&<00> positionEnd<6E>IBClient.positionEnd<6E>s<00><00><0F> <0C> <0C>J<>C<EFBFBD>PT<50>P^<5E>P^<5E>L_<4C>`r6c<00><><00>U(a[USS5(dgURUUUS.n[UR5HDupgUR S5US:XdMUR S5U:XdM6XPRU' g URR U5 g![ a [R"S5 gf=f)z~Handle positions returned by `reqPositions()`.
Signature from EWrapper: position(self, account, contract, position, avgCost)
rVN)rVr_re<00>accountrsz Error handling position callback) <09>getattrrVrbrrQrcrr"rC)r%rsrdr_<00>avgCostrirjrks r&r_<00>IBClient.position<6F>s<><00><00>
 B<01><1B>7<EFBFBD>8<EFBFBD>X<EFBFBD>t<EFBFBD>#D<>#D<><16>"<22>/<2F>/<2F>$<24>&<26>"<22> <0E>C<EFBFBD>"<22>$<24>.<2E>.<2E>1<><04><01><14>5<EFBFBD>5<EFBFBD><18>?<3F>c<EFBFBD>(<28>m<EFBFBD>3<><01><05><05>i<EFBFBD>8H<38>G<EFBFBD>8S<38>(+<2B>N<EFBFBD>N<EFBFBD>1<EFBFBD>%<25><19>2<>
<15><0E><0E>%<25>%<25>c<EFBFBD>*<2A><><18> B<01> <13> <1D> <1D>@<40> A<> B<01>s)<00>B&<00>AB&<00>!B&<00>8B&<00>B&<00>& C <03>C c<00>H<00>URnU=RS- slU$)Nr)r)r%<00>rids r&<00> _new_req_id<69>IBClient._new_req_id<69>s#<00><00><12><1F><1F><03> <0C><19><19>Q<EFBFBD><1E><19><12>
r6rV<00>exchange<67>currencyc<00>L<00>[5nXlSUlX$lX4lU$)N<>STK)rrV<00>secTyper{r|)r%rVr{r|<00>cs r&<00>_make_stock_contract<63>IBClient._make_stock_contract<63>s$<00><00> <14>J<EFBFBD><01><19><08><19><01> <09><1D>
<EFBFBD><1D>
<EFBFBD><10>r6c<00><><00>XR;agURR5(dD[R"SU5 UR
R U5 UR5 gUR5nXRU'URU5nURS5 URX#SSS/5 URR U5 [R"SX5 g![a [R"S5 gf=f![a!n[R"SX5 SnAgSnAff=f) zySubscribe to basic market data for `symbol` (in USD on SMART exchange).
Repeated calls for the same symbol are ignored.
Nz.Not connected yet; queuing subscription for %sz5Failed to start connection while queuing subscriptionr<00>Fz)Subscribed to market data for %s (req=%s)zFailed to subscribe to %s: %s)r!r<00>is_setr"r.r<00>addr4rrCryr r<><00>reqMarketDataType<70>
reqMktData)r%rV<00>req_idrd<00>es r&rB<00>IBClient.subscribe_market_data<74>s#<00><00>
<12>,<2C>,<2C> ,<2C> <12><13>$<24>$<24>+<2B>+<2B>-<2D>-<2D> <13>L<EFBFBD>L<EFBFBD>I<>6<EFBFBD> R<> <10> '<27> '<27> +<2B> +<2B>F<EFBFBD> 3<> [<01><14>&<26>&<26>(<28> <13><15>!<21>!<21>#<23><06> &<26> <0A> <0A>f<EFBFBD><1D><17>,<2C>,<2C>V<EFBFBD>4<><08> J<01> <10> "<22> "<22>1<EFBFBD> %<25> <10>O<EFBFBD>O<EFBFBD>F<EFBFBD>b<EFBFBD>%<25><15><02> C<> <10> #<23> #<23> '<27> '<27><06> /<2F> <13>L<EFBFBD>L<EFBFBD>D<>f<EFBFBD> U<><55><1D> [<01><17>!<21>!<21>"Y<>Z<> <12> [<01><><19> J<01> <13> <1D> <1D>=<3D>v<EFBFBD> I<> I<><49> J<01>s+<00>#C=<00>$AD#<00>= D <03>D <03>#
E<03>-E <03> Ec<00>v^<00>TRR5(d<>[R"S5 [ TR
[ 5(a[ TR[5(d-[R"STR
TR5 gTR5 U4Sjn[R"USS9R5 gTR!5 g![a [R"S5 N^f=f![a [R"S5 gf=f) zNAsk the IB API to send current positions (triggers updatePortfolio callbacks).zQNot connected yet; will request positions only if connection parameters are validz.Invalid connection parameters: host=%r port=%rNz0Failed to start connection for positions requestc<00><>><01>TRRS5(aTR5 gg![a [R
"S5 gf=f)N<>z)Failed to request positions after connect)r<00>wait<69> reqPositionsrr"rCr3s<00>r&<00>_delayed<65>,IBClient.request_positions.<locals>._delayed<65>sS<00><><00><17>(<28>(<28>-<2D>-<2D>a<EFBFBD>0<>0<>W<01><1C>)<29>)<29>+<2B>1<><31>%<25>W<01><1F>)<29>)<29>*U<>V<>W<01>s<00>5<00> A<03>ATr*zFailed to request positions)rr<>r"r.rr <00>strr rrIr4rrCrr0r2r<>)r%r<>s` r&<00>request_positions<6E>IBClient.request_positions<6E>s<><00><><00><13>$<24>$<24>+<2B>+<2B>-<2D>-<2D> <13>L<EFBFBD>L<EFBFBD>l<> m<><1D>d<EFBFBD>i<EFBFBD>i<EFBFBD><13>-<2D>-<2D>Z<EFBFBD><04> <09> <09>3<EFBFBD>5O<35>5O<35><17> <0A> <0A>N<>PT<50>PY<50>PY<50>[_<>[d<>[d<>e<><16> V<01><14>&<26>&<26>(<28> W<01> <16> <1C> <1C>H<EFBFBD>T<EFBFBD> :<3A> @<40> @<40> B<> <12> =<3D> <10> <1D> <1D> <1F><><1D> V<01><17>!<21>!<21>"T<>U<> V<01><><19> =<3D> <13> <1D> <1D>;<3B> <<3C> =<3D>s$<00>#C/<00>D<00>/ D<03>D<03> D8<03>7D8c<00><00>UR$r8)rr3s r&<00>
get_quotes<EFBFBD>IBClient.get_quotes<65>s <00><00><13>{<7B>{<7B>r6c<00><00>UR$r8)rr3s r&<00> get_positions<6E>IBClient.get_positions<6E>s <00><00><13>~<7E>~<7E>r6) rrrr r!rr r r rr)rrr)r(N)<02>SMART<52>USD)<1B>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__firstlineno__r<5F>rrr4r:r?rIrXr\rlrpr_ryrr<>rBr<>rr<>rr<><00>__static_attributes__<5F> __classcell__)rFs@r&r r s<><00><><00> 0<>S<EFBFBD> 0<>c<EFBFBD> 0<>S<EFBFBD> 0<>D!<21><11>V<01>3<EFBFBD>V<01>(V<01><1D><1C>'<27>$a<01>B<01>2<13>S<EFBFBD><13>
<11>3<EFBFBD><11>#<23><11>SV<53><11>ck<63><11>J<01>C<EFBFBD>J<01>D<EFBFBD>J<01><=<3D>6<1B>D<EFBFBD><13>d<EFBFBD><19>O<EFBFBD><1B><1E>t<EFBFBD>D<EFBFBD>z<EFBFBD><1E>r6r )<0E>__doc__r"r<00>time<6D>typingrr<00> ibapi.clientr<00>ibapi.contractr<00> ibapi.wrapperrr <00>r6r&<00><module>r<>s1<00><01> <04><0F><10> <0B><1D> <20>#<23>"<22>T<1E>x<EFBFBD><17>Tr6