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

137 lines
34 KiB
Plaintext
Raw Normal View History

<EFBFBD>
2026-04-01 21:44:21 -05:00
2<><32>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`.
2026-04-01 21:44:21 -05:00
<EFBFBD>N)<02>Dict<63>List)<01>EClient)<01>Contract)<01>EWrapperc <00><>^<00>\rSrSrS.S\S\S\4SjjrSrS\4SjrS\ 4S jr
S
\ S\4S jr S
\ S\ 4S jr S
\ S\4S jrS/SjrS/SjrS\4U4SjjrSrSrSrSrSrSrSrSrS\4SjrS0S\S\S\S\4SjjrS/S jrS/S!jrS"\SS4S#jrS1S$\S-SS4S%jjr S&r!S'r"S/S(jr#S)r$S*r%S2S+\&4S,jjr'S-r(U=r)$)3<>IBClient<6E><00>host<73>port<72> client_idc<00>:<00>[R"X5 U(dSn[U[5(d [U5nXlX lX0lSUlSUl [R"5Ul 0Ul 0Ul/Ul/Ul[#5Ul0Ul0Ul0Ul[#5Ul[#5Ul[#5Ul[2R4"[2R6S9 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>_pending_subscriptions<6E>quotes<65> positions<6E>
executions<EFBFBD>set<65>_execution_ids<64>historical_closes<65>_req_map<61>_historical_req_map<61>_requested_symbols<6C>_requested_accounts<74>_requested_historical<61>logging<6E> basicConfig<69>INFO)<04>selfr r r s <20>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>8:<3A><04>#<23>(*<2A><04> <0B>%'<27><04><0E>&(<28><04><0F>!<21>e<EFBFBD><04><1B>35<33><04><1E>)+<2B><04> <0A>35<33><04> <20>"%<25>%<25><04><1F>#&<26>5<EFBFBD><04> <20>%(<28>U<EFBFBD><04>"<22> <10><1B><1B>'<27>,<2C>,<2C>/<2F><>?<1D> <1C><1B><04> <1C>s<00> D <00> D<03>Dc<00><00>[U=(d S5R5n[U5S:Xa(UR5(aUSSSUSSSUSS3$[U5S:Xa"UR5(a USSSUSS3$U$)N<><00>r<00><00>-<2D>)<04>str<74>strip<69>len<65>isdigit)r+<00>expirys r,<00>_normalize_expiry<72>IBClient._normalize_expiry?s<><00><00><14>V<EFBFBD>\<5C>r<EFBFBD>"<22>(<28>(<28>*<2A><06> <0E>v<EFBFBD>;<3B>!<21> <1B><06><0E><0E> 0<> 0<><1C>Q<EFBFBD>q<EFBFBD>k<EFBFBD>]<5D>!<21>F<EFBFBD>1<EFBFBD>Q<EFBFBD>K<EFBFBD>=<3D><01>&<26><11>1<EFBFBD>+<2B><1D>?<3F> ?<3F> <0E>v<EFBFBD>;<3B>!<21> <1B><06><0E><0E> 0<> 0<><1C>Q<EFBFBD>q<EFBFBD>k<EFBFBD>]<5D>!<21>F<EFBFBD>1<EFBFBD>Q<EFBFBD>K<EFBFBD>=<3D>1<> 1<><15> <0A><00>returnc
<00><><00>U(dg[USS5nU(aSU3$[USS5=(d SR5n[USS5=(d SnUS:XafUR[USS55n[USS5n[US S5=(d Sn[US
S5=(d SnS US US US US U3
$U=(d S S U3$)Nr/<00>conIdzCONID:<3A>secType<70>symbol<6F>OPT<50>lastTradeDateOrContractMonth<74>strike<6B>right<68>
multiplierzOPT:<3A>:<3A>STK)<03>getattr<74>upperr9) r+<00>contract<63>con_id<69>sec_typer@r8rCrDrEs r,<00> _contract_key<65>IBClient._contract_keyGs<><00><00><17><15><18><18>7<EFBFBD>D<EFBFBD>1<><06> <11><1B>F<EFBFBD>8<EFBFBD>$<24> $<24><1B>H<EFBFBD>i<EFBFBD><14>6<><<3C>"<22>C<>C<>E<><08><18><18>8<EFBFBD>T<EFBFBD>2<>8<>b<EFBFBD><06> <13>u<EFBFBD> <1C><19>+<2B>+<2B>G<EFBFBD>H<EFBFBD>>\<5C>^b<>,c<>d<>F<EFBFBD><1C>X<EFBFBD>x<EFBFBD><14>6<>F<EFBFBD><1B>H<EFBFBD>g<EFBFBD>t<EFBFBD>4<>:<3A><02>E<EFBFBD> <20><18><<3C><14>><3E>D<>"<22>J<EFBFBD><19>&<26><18><11>6<EFBFBD>(<28>!<21>F<EFBFBD>8<EFBFBD>1<EFBFBD>U<EFBFBD>G<EFBFBD>1<EFBFBD>Z<EFBFBD>L<EFBFBD>I<> I<><1A>#<23>e<EFBFBD>$<24>A<EFBFBD>f<EFBFBD>X<EFBFBD>.<2E>.r;c<00>"<00>U(d0$[USS5=(d SR5n[USS5=(d SnUS:Xa[UR[USS55n[USS5n[USS5=(d SR5n[US S5nOSnSnSnSn[US
S5nURU5[US S5=(d SUUUU=(d SUS ;a [ U5OSU=(d SUS ;a [ U5OSU=(d S[US S5=(d S[USS5=(d S[USS5=(d S[USS5=(d SS.n UR U 5U S'U $)Nr?rGr@r/rArBrCrDrE<00> localSymbolr>)Nr/<00>exchange<67>primaryExchange<67>currency<63> tradingClass)<0E>instrument_keyrKr@<00> security_type<70>underlying_symbolr8rC<00> option_typerE<00> local_symbolrQ<00>primary_exchangerS<00> trading_class<73>display_symbol)rHrIr9rM<00>floatr4<00>_format_display_symbol)
r+rJrLr@r8rCrDrErY<00>recs
r,<00>_contract_to_record<72>IBClient._contract_to_recordWs}<00><00><17><15>I<EFBFBD><1B>H<EFBFBD>i<EFBFBD><14>6<>?<3F>%<25>F<>F<>H<><08><18><18>8<EFBFBD>T<EFBFBD>2<>8<>b<EFBFBD><06> <13>u<EFBFBD> <1C><19>+<2B>+<2B>G<EFBFBD>H<EFBFBD>>\<5C>^b<>,c<>d<>F<EFBFBD><1C>X<EFBFBD>x<EFBFBD><14>6<>F<EFBFBD><1C>X<EFBFBD>w<EFBFBD><04>5<>;<3B><12>B<>B<>D<>E<EFBFBD> <20><18><<3C><14>><3E>J<EFBFBD><19>F<EFBFBD><19>F<EFBFBD><18>E<EFBFBD><1D>J<EFBFBD><1E>x<EFBFBD><1D><04>=<3D> <0C>"<22>0<>0<><18>:<3A><1D>h<EFBFBD><07><14>6<>><3E>$<24><1C>%<25>!'<27><1C>n<EFBFBD><04>'-<2D>Z<EFBFBD>'?<3F>e<EFBFBD>F<EFBFBD>m<EFBFBD>T<EFBFBD> <20>=<3D>D<EFBFBD>-7<>z<EFBFBD>-I<>#<23>j<EFBFBD>/<2F>t<EFBFBD>(<28>0<>D<EFBFBD><1F><08>*<2A>d<EFBFBD>;<3B>C<>t<EFBFBD> '<27><08>2C<32>T<EFBFBD> J<> R<>d<EFBFBD><1F><08>*<2A>d<EFBFBD>;<3B>C<>t<EFBFBD>$<24>X<EFBFBD>~<7E>t<EFBFBD>D<>L<><04>
<EFBFBD><03> !%<25> ;<3B> ;<3B>C<EFBFBD> @<40><03> <1C><1D><12>
r;r_c<00><00>URS5=(d SR5nURS5=(d URS5=(d SnUS:Xa<>URS5=(d SnURS 5n[U[5(a*UR 5(a[ [ U55nOUb [ U5OSnURS
5=(d SnUS US US U3$U$) NrVrGrWr@r/rAr8<00>?rCrX<00> )<07>getrIrr]<00>
is_integerr4r)r+r_rLr@r8rC<00>
strike_strrXs r,r^<00>IBClient._format_display_symbolzs<><00><00><17>G<EFBFBD>G<EFBFBD>O<EFBFBD>,<2C>5<><05><<3C><<3C>><3E><08><14><17><17>,<2C>-<2D>H<><13><17><17><18>1B<31>H<>b<EFBFBD><06> <13>u<EFBFBD> <1C><18>W<EFBFBD>W<EFBFBD>X<EFBFBD>&<26>-<2D>#<23>F<EFBFBD><18>W<EFBFBD>W<EFBFBD>X<EFBFBD>&<26>F<EFBFBD><19>&<26>%<25>(<28>(<28>V<EFBFBD>-><3E>-><3E>-@<40>-@<40> <20><13>V<EFBFBD><1B>-<2D>
<EFBFBD>,2<>,><3E>S<EFBFBD><16>[<5B>C<EFBFBD>
<EFBFBD><1D>'<27>'<27>-<2D>0<>7<>C<EFBFBD>K<EFBFBD><1C>X<EFBFBD>Q<EFBFBD>v<EFBFBD>h<EFBFBD>a<EFBFBD>
<EFBFBD>|<7C>1<EFBFBD>[<5B>M<EFBFBD>B<> B<><15> r;c<00><><00>URS5=(d SR5nUS:wagURS5nUS;a [U5$S$![a gf=f)NrVrGrA<00><00>?rE)Nr/r<00>0<>Y@)rerIr]r)r+r_rLrEs r,<00>_price_multiplier<65>IBClient._price_multiplier<65>sg<00><00><17>G<EFBFBD>G<EFBFBD>O<EFBFBD>,<2C>5<><05><<3C><<3C>><3E><08> <13>u<EFBFBD> <1C><16><18>W<EFBFBD>W<EFBFBD>\<5C>*<2A>
<EFBFBD> <19>(2<>:L<>(L<>5<EFBFBD><1A>$<24> W<>RW<52> W<><57><18> <19><18> <19>s<00>A<00>A<00>
A"<03>!A"c<00><00>URS5=(d SR5nURS5nU(a_[5n[U5UlX$lURS5=(d SUlURS5nU(aXTlU$US:XGat[5nURS5=(d URS 5UlSUlURS5=(d SUlURS5=(d S
UlURS 5=(d S nURS S 5Ul
URS5nUb[U5Ul URS5nU(aX<>l URS5n U (a[U 5UlURS5n
U
(aX<>lURS5n U (aX<>lURS5n U (aX<>lU$UR'URS 5=(d URS5URS5=(d SURS5=(d S
S9$)NrVrGrKrQ<00>SMARTrSrArWr@<00>USDr8r/r2rCrXrErYrZr[)rQrS)rerIrrr>r?rQrSr@<00>replacerBr]rCrDr4rErPrRrT<00>_make_stock_contract) r+r_rLrK<00>crSr8rCrXrErYrZr[s r,<00>_make_contract_from_record<72>#IBClient._make_contract_from_record<72>s<><00><00><17>G<EFBFBD>G<EFBFBD>O<EFBFBD>,<2C>5<><05><<3C><<3C>><3E><08><14><17><17><18>"<22><06> <11><18>
<EFBFBD>A<EFBFBD><19>&<26>k<EFBFBD>A<EFBFBD>G<EFBFBD> <20>I<EFBFBD><1C><17><17><1A>,<2C>7<><07>A<EFBFBD>J<EFBFBD><1A>w<EFBFBD>w<EFBFBD>z<EFBFBD>*<2A>H<EFBFBD><17>%<25>
<EFBFBD><14>H<EFBFBD> <13>u<EFBFBD> <1C><18>
<EFBFBD>A<EFBFBD><1A>w<EFBFBD>w<EFBFBD>2<>3<>H<>s<EFBFBD>w<EFBFBD>w<EFBFBD>x<EFBFBD>7H<37>A<EFBFBD>H<EFBFBD><1D>A<EFBFBD>I<EFBFBD><1C><17><17><1A>,<2C>7<><07>A<EFBFBD>J<EFBFBD><1C><17><17><1A>,<2C>5<><05>A<EFBFBD>J<EFBFBD><18>W<EFBFBD>W<EFBFBD>X<EFBFBD>&<26>,<2C>"<22>F<EFBFBD>-3<>^<5E>^<5E>C<EFBFBD><12>-D<>A<EFBFBD> *<2A><18>W<EFBFBD>W<EFBFBD>X<EFBFBD>&<26>F<EFBFBD><15>!<21> <20><16>=<3D><01><08><1D>'<27>'<27>-<2D>0<>K<EFBFBD><1A>%<25><07><1C><17><17><1C>.<2E>J<EFBFBD><19>"<22>:<3A><EFBFBD><01> <0C><1E>7<EFBFBD>7<EFBFBD>><3E>2<>L<EFBFBD><1B> ,<2C> <0A>"<22>w<EFBFBD>w<EFBFBD>'9<>:<3A> <1C><1F>$4<>!<21><1F>G<EFBFBD>G<EFBFBD>O<EFBFBD>4<>M<EFBFBD><1C>!.<2E><0E><14>H<EFBFBD><13>(<28>(<28> <0F>G<EFBFBD>G<EFBFBD>H<EFBFBD> <1D> =<3D><13><17><17>)<<3C>!=<3D><18>W<EFBFBD>W<EFBFBD>Z<EFBFBD>(<28>3<>G<EFBFBD><18>W<EFBFBD>W<EFBFBD>Z<EFBFBD>(<28>1<>E<EFBFBD>)<29>
<EFBFBD>
r;Nc<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_start<72>ss<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> "r;c<00>r<00>UR5(aUR5 gg![a gf=f<01>N)r{<00>
disconnectrr<>s r,<00>disconnect_and_stop<6F>IBClient.disconnect_and_stop<6F>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 (aY[UR R55nUR R5 UHnURU5 M gg![
a Nwf=f![
a [R"SU5 MOf=f)Nz)Failed to process pending subscription %s) <0A>super<65> nextValidIdrrr rr<00>list<73>values<65>clear<61>subscribe_market_datar(<00> exception)r+r<><00>pending<6E>s<> __class__s <20>r,r<><00>IBClient.nextValidId<49>s<><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<>=<3D>=<3D>?<3F>@<40>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>B3<00>C<02>3
C<03>?C<03>!C(<05>'C(c<00>4<00>[R"SXU5 g)NzIB error (req=%s code=%s): %s)r(<00>error)r+<00>reqId<49> errorCode<64> errorStrings r,r<><00>IBClient.error<6F>s<00><00><0F> <0A> <0A>5<>u<EFBFBD><1B>Ur;c<00><00>UbUS:XagURRU5nU(dgURRU05nUS;aX6S'gUS;aX6S'gUS;aX6S'gUS;aX6S 'gUS
:XaX6S 'gg) N<><4E><EFBFBD><EFBFBD><EFBFBD>)r1<00>D<00>last)<02> <00>K<00>close)r<00>B<00>bid)<02><00>C<00>ask<73>%<00>mark<72>r#rer<00>
setdefault)r+r<><00>tickType<70>price<63>attribrU<00>datas r,<00> tickPrice<63>IBClient.tickPrice<63>s<><00><00> <10>=<3D>E<EFBFBD>R<EFBFBD>K<EFBFBD> <12><1D><1D><1D>*<2A>*<2A>5<EFBFBD>1<><0E><1D> <12><13>{<7B>{<7B>%<25>%<25>n<EFBFBD>b<EFBFBD>9<><04> <13>w<EFBFBD> <1E> <20><16>L<EFBFBD> <15><17> <20>!<21><17>M<EFBFBD> <15><17> <20><1F><15>K<EFBFBD> <15><17> <20><1F><15>K<EFBFBD> <15><12>^<5E> <20><16>L<EFBFBD>r;c<00><><00>URRU5nU(dgURRU05nX5S'g)N<>sizer<65>)r+r<>r<>r<>rUr<>s r,<00>tickSize<7A>IBClient.tickSize<7A>s9<00><00><1D><1D><1D>*<2A>*<2A>5<EFBFBD>1<><0E><1D> <12><13>{<7B>{<7B>%<25>%<25>n<EFBFBD>b<EFBFBD>9<><04><1B>V<EFBFBD> r;c <00>`<00>U(aUR(dgURU5n 0U EUUUUUS.En
[UR5HDup<>U R S5U
S:XdMU R S5U:XdM6X<>RU ' g URR U
5 g)N)<05>position<6F> marketPrice<63> marketValue<75> averageCost<73>accountrUr<>)r@r`<00> enumeraterre<00>append) r+rJr<>r<>r<>r<><00> unrealizedPNL<4E> realizedPNL<4E> accountName<6D> contract_rec<65>pos<6F>i<>ps r,<00>updatePortfolio<69>IBClient.updatePortfolios<><00><00><17>x<EFBFBD><EFBFBD><EFBFBD> <12><1B>/<2F>/<2F><08>9<> <0C>
<EFBFBD><1A>
<EFBFBD> <20>&<26>&<26>&<26>"<22> 
<EFBFBD><03><1E>d<EFBFBD>n<EFBFBD>n<EFBFBD>-<2D>D<EFBFBD>A<EFBFBD><10>u<EFBFBD>u<EFBFBD>%<25>&<26>#<23>.><3E>*?<3F>?<3F>A<EFBFBD>E<EFBFBD>E<EFBFBD>)<29>DT<44>Xc<58>Dc<44>$'<27><0E><0E>q<EFBFBD>!<21><15>.<2E>
<11>N<EFBFBD>N<EFBFBD> !<21> !<21>#<23> &r;c<00>X<00>[R"S[UR55 g)Nz3Position update batch complete. %d positions stored)r(r|r6rr<>s r,<00> positionEnd<6E>IBClient.positionEnds<00><00><0F> <0C> <0C>J<>C<EFBFBD>PT<50>P^<5E>P^<5E>L_<4C>`r;c<00><><00>U(a[USS5(dgURU5n0UEUUUS.En[UR5HDupxUR S5US:XdMUR S5U:XdM6X`RU' g URR U5 g![ a [R"S5 gf=f)z~Handle positions returned by `reqPositions()`.
Signature from EWrapper: position(self, account, contract, position, avgCost)
2026-04-01 21:44:21 -05:00
r@N)r<>r<>r<>rUr<>z Error handling position callback) rHr`r<>rrer<>rr(r<>) r+r<>rJr<><00>avgCostr<74>r<>r<>r<>s r,r<><00>IBClient.positions<><00><00>
 B<01><1B>7<EFBFBD>8<EFBFBD>X<EFBFBD>t<EFBFBD>#D<>#D<><16><1F>3<>3<>H<EFBFBD>=<3D>L<EFBFBD><0E><1E><0E>$<24>&<26>"<22> <0E>C<EFBFBD>"<22>$<24>.<2E>.<2E>1<><04><01><14>5<EFBFBD>5<EFBFBD>)<29>*<2A>c<EFBFBD>2B<32>.C<>C<><01><05><05>i<EFBFBD>HX<48>\c<>Hc<48>(+<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>B0<00>A B0<00>+B0<00>B0<00>B0<00>0 C<03>Cc
<00>,<00>[USS5nU(dgURU5nS[USS50UE[[USS55[[USS55[USS 5[US
S5[US S5S .EnURS5nU(aXpR;agU(aURR U5 UR RU5 g![a [R"S 5 gf=f)z<>Capture execution details for building lots.
`execution` is an `Execution` object from ibapi which contains
.shares, .price, .side, .execId, .time (may be empty)
r@N<>execId<49>sharesrr<><00><00>sider/<00>time<6D>permId)r<>r<>r<>r<>r<>z!Failed to record execution detail) rHr`r]rer!<00>addrr<>rr(r<>)r+r<>rJ<00> executionr@r<><00>entry<72>exec_ids r,<00> execDetails<6C>IBClient.execDetails2s<00><00>  C<01><1C>X<EFBFBD>x<EFBFBD><14>6<>F<EFBFBD><19><16><1F>3<>3<>H<EFBFBD>=<3D>L<EFBFBD><18>'<27>)<29>X<EFBFBD>t<EFBFBD><<3C><0E><1E><0E> <20><07> <09>8<EFBFBD>Q<EFBFBD> ?<3F>@<40><1E>w<EFBFBD>y<EFBFBD>'<27>3<EFBFBD>?<3F>@<40><1F> <09>6<EFBFBD>2<EFBFBD>6<><1F> <09>6<EFBFBD>4<EFBFBD>8<>!<21>)<29>X<EFBFBD>t<EFBFBD><<3C><0E>E<EFBFBD><1C>i<EFBFBD>i<EFBFBD><08>)<29>G<EFBFBD><16>7<EFBFBD>&9<>&9<>9<><16><16><14>#<23>#<23>'<27>'<27><07>0<> <10>O<EFBFBD>O<EFBFBD> "<22> "<22>5<EFBFBD> )<29><><18> C<01> <13> <1D> <1D>A<> B<> C<01>s<00>C0<00>BC0<00>2=C0<00>0 D<03>Dc<00>Z<00>[R"SU[UR55 g)Nz6Finished receiving executions (req=%s). %d execs total)r(r|r6r)r+r<>s r,<00>execDetailsEnd<6E>IBClient.execDetailsEndOs <00><00><0F> <0C> <0C>M<>u<EFBFBD>VY<56>Z^<5E>Zi<5A>Zi<5A>Vj<56>kr;c<00>H<00>URnU=RS- slU$)Nr)r)r+<00>rids r,<00> _new_req_id<69>IBClient._new_req_idSs#<00><00><12><1F><1F><03> <0C><19><19>Q<EFBFBD><1E><19><12>
r;r@rQrSc<00>L<00>[5nXlSUlX$lX4lU$)NrG)rr@r?rQrS)r+r@rQrSrts r,rs<00>IBClient._make_stock_contractXs$<00><00> <14>J<EFBFBD><01><19><08><19><01> <09><1D>
<EFBFBD><1D>
2026-04-01 21:44:21 -05:00
<EFBFBD><10>r;c<00>:<00>[U[5(a(URU5nUSS.nURU5nO-UR U5n[ U5nURU5nX@R ;agURR5(d7[R"SU5 X0RU'UR5 gUR5nX@R U'UR#S5 UR%XRSSS/5 UR R'U5 [R"S XE5 g![a [R"S5 gf=f![a!n[R"S
XF5 SnAgSnAff=f) zxSubscribe to basic market data for a contract or simple symbol string.
Repeated calls for the same symbol are ignored.
2026-04-01 21:44:21 -05:00
rG)r@rVNz.Not connected yet; queuing subscription for %sz5Failed to start connection while queuing subscription<6F>r/Fz)Subscribed to market data for %s (req=%s)zFailed to subscribe to %s: %s)rr4rsrMru<00>dictr%r<00>is_setr(r|rr<>rr<>r<>r#<00>reqMarketDataType<70>
reqMktDatar<EFBFBD>)r+<00>contract_or_recordrJ<00> queued_recordrU<00>req_id<69>es r,r<><00>IBClient.subscribe_market_data`sr<00><00>
<16>(<28>#<23> .<2E> .<2E><1B>0<>0<>1C<31>D<>H<EFBFBD>'9<>E<EFBFBD>R<>M<EFBFBD>!<21>/<2F>/<2F><08>9<>N<EFBFBD><1B>6<>6<>7I<37>J<>H<EFBFBD> <20>!3<>4<>M<EFBFBD>!<21>/<2F>/<2F><08>9<>N<EFBFBD> <19>4<>4<> 4<> <12><13>$<24>$<24>+<2B>+<2B>-<2D>-<2D> <13>L<EFBFBD>L<EFBFBD>I<>><3E> Z<>:G<> '<27> '<27><0E> 7<> [<01><14>&<26>&<26>(<28> <13><15>!<21>!<21>#<23><06> .<2E> <0A> <0A>f<EFBFBD><1D> R<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><0E> 7<> <13>L<EFBFBD>L<EFBFBD>D<>n<EFBFBD> ]<5D><><1D> [<01><17>!<21>!<21>"Y<>Z<> <12> [<01><><19> R<01> <13> <1D> <1D>=<3D>~<7E> Q<> Q<><51> R<01>s+<00>E <00>0AE/<00> E,<03>+E,<03>/
F<03>9F<03>Fc<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
2026-04-01 21:44:21 -05:00
"S5 gf=f)N<>z)Failed to request positions after connect)r<00>wait<69> reqPositionsrr(r<>r<>s<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>ATrxzFailed to request positions)rr<>r(r|rr r4r rr<>r<>rr<>rr~r<>r<>)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>7D8r<>c<00><><00>U(aXR;agURR5(dUR5 gURSU5 URRU5 g![a [
R "S5 gf=f![a [
R "SU5 gf=f)z>Subscribe to portfolio/account updates for a specific account.Nz.Failed to start connection for account updatesTz(Failed to request account updates for %s) r&rr<>r<>rr(r<><00>reqAccountUpdatesr<73>)r+r<>s r,<00>request_account_updates<65> IBClient.request_account_updates<65>s<><00><00><16>'<27>%=<3D>%=<3D>=<3D> <12><13>$<24>$<24>+<2B>+<2B>-<2D>-<2D> T<01><14>&<26>&<26>(<28> <13> S<01> <10> "<22> "<22>4<EFBFBD><17> 1<> <10> $<24> $<24> (<28> (<28><17> 1<><31> <1D> T<01><17>!<21>!<21>"R<>S<> <12> T<01><> <19> S<01> <13> <1D> <1D>H<>'<27> R<> S<01>s#<00>A8<00>
-B<00>8 B<03>B<03>!C<03>C<03>
start_timec<00><><00>SSKJn U"5nU(aXlUR5nUR XC5 g![
a [ R"S5 gf=f)z<>Request executions from IB (will trigger execDetails callbacks).
Uses an empty ExecutionFilter to fetch recent executions. The results
arrive via `execDetails` callbacks.
r)<01>ExecutionFilterzFailed to request executionsN)<08>ibapi.executionr<6E>r<>r<><00> reqExecutionsrr(r<>)r+r<>r<><00>filtr<74>s r,<00>request_executions<6E>IBClient.request_executions<6E>sT<00><00> ><3E> 7<>"<22>$<24>D<EFBFBD><19>&<26> <09><16>"<22>"<22>$<24>C<EFBFBD> <10> <1E> <1E>s<EFBFBD> )<29><><18> ><3E> <13> <1D> <1D><<3C> =<3D> ><3E>s<00>;><00> A!<03> A!c<00><><00>URRU5nU(dg[USS5nUS;a[U5URU'gg![
a [ R"S5 gf=f)Nr<4E>)Nr<4E>z!Failed to process historical data)r$rerHr]r"rr(r<>)r+r<><00>barrUr<>s r,<00>historicalData<74>IBClient.historicalData<74>ss<00><00> C<01>!<21>5<>5<>9<>9<>%<25>@<40>N<EFBFBD>!<21><16><1B>C<EFBFBD><17>$<24>/<2F>E<EFBFBD><14>J<EFBFBD>&<26>9><3E>u<EFBFBD><1C><04>&<26>&<26>~<7E>6<>'<27><><18> C<01> <13> <1D> <1D>A<> B<> C<01>s<00>"A<00>+A<00> A5<03>4A5c<00><<00>URRUS5 gr<>)r$<00>pop)r+r<>r<><00>ends r,<00>historicalDataEnd<6E>IBClient.historicalDataEnd<6E>s<00><00> <0C> <20> <20>$<24>$<24>U<EFBFBD>D<EFBFBD>1r;c <00>f<00>[U[5(aURU5nOURU5nUR U5nU(aX0R
;agUR R5(dUR5 gUR5nX0RU'UR
RU5 URXBSSSSSSS/5
g![a [R"S5 gf=f![a [R"S U5 gf=f)
Nz/Failed to start connection for historical closer/z2 Dz1 day<61>TRADESrrFz)Failed to request historical close for %s)rr4rsrurMr'rr<>r<>rr(r<>r<>r$r<><00>reqHistoricalData)r+r<>rJrUr<>s r,<00>request_historical_close<73>!IBClient.request_historical_close<73>s<00><00> <15>(<28>#<23> .<2E> .<2E><1B>0<>0<>1C<31>D<>H<EFBFBD><1B>6<>6<>7I<37>J<>H<EFBFBD><1D>+<2B>+<2B>H<EFBFBD>5<><0E><1D><1E>3M<33>3M<33>!M<> <12><13>$<24>$<24>+<2B>+<2B>-<2D>-<2D> U<01><14>&<26>&<26>(<28> <13> [<01><19>%<25>%<25>'<27>F<EFBFBD>/=<3D> $<24> $<24>V<EFBFBD> ,<2C> <10> &<26> &<26> *<2A> *<2A>><3E> :<3A> <10> "<22> "<22>6<EFBFBD>R<EFBFBD><15><07><18>ST<53>VW<56>Y^<5E>`b<> c<><63><1D> U<01><17>!<21>!<21>"S<>T<> <12> U<01><><19> [<01> <13> <1D> <1D>I<>><3E> Z<> [<01>s%<00>C&<00>AD <00>& D <03>D <03> !D0<03>/D0c<00>,<00>[UR5$r<>)r<>rr<>s r,<00>
get_quotes<EFBFBD>IBClient.get_quotes<65>s<00><00><13>D<EFBFBD>K<EFBFBD>K<EFBFBD> <20> r;c<00>,<00>[UR5$r<>)r<>rr<>s r,<00> get_positions<6E>IBClient.get_positions<6E>s<00><00><13>D<EFBFBD>N<EFBFBD>N<EFBFBD>#<23>#r;<00>include_position_fallbackc
<00>.^4<>SSKJn SSKJm4 U"[5nURHnX4SR U5 M [ 5n0nURH9nURS5nU(dMURU5 X<>;dM5XvU'M; /n [ UR55U-n
U
GHnURU/5n URU5=(d 0n U (aU SOU n U44SjnU (a [X<>S9O/n/n/nUGH<>nURS5=(d SR5n[[URS S5=(d S55n[URS
S 5=(d S 5nURS 5nUS :XdUS:Xa<>UnUS:<3A>ahU(aaUSn[U[US55nUS==U- ss'UU-n[US5S:aUR!S5 US:<3A>a U(aMaUS:<3A>aUR UUUS.5 GM(GM+UnUS:<3A>aVU(aOUSn[UUS5nUS==U-ss'UU-nUSS:aUR!S5 US:<3A>a U(aMOUS:<3A>dGM<>UR U*UUS.5 GM<> X<>R";aUR%U 5 SnUR"RU5nU(a9URS5nUcURS5nUcURS5nUcUR(RU5nUcU RS5n[U RS5=(d S 5nU RS5b[U RS55OSnUnU(aUSRS 5OSn UR+U =(d U 5n!U(Ga UU-n"U"GH<>n[US5n#[US
5U!-n$U#U$-n%UcSOUU!-n&U&cSOU#U&-n'U'cUbU(aUU#U- -n'UbU'bUU'-nU'cSOU'U%-
n(Sn)Sn*[U%5n+U+(a U'b U(U+- S-n)URS 5n,U,(a<>U'b<>U+S:<3A>a<>SHn-T4R-U,U-5n. O W.cT4R/[U,55n.U.bM[1T4R35U.-
R4S- S5n/U+U(-n0U0S:<3A>aU0U+- SU/- -S-
n1U1S-n*OSn*OU R 0SU RS5_S U RS 5=(d UR7U 5_S!U RS!5_S"U RS"5_S#U RS#5_S$U RS$5_S%U RS%5_SU_SU#_S&U$_S'U%_S(U&_S)U'_S*U(_S+U)_S,U*_S-U,_5 GM<> GMVU(dGM`URGH<>nURS5U:waMURS5=(d Sn#URS.5=(d URS/5=(d S n$[U#5n2[U$5n3U2U3-n%UcSOUUR+U5-n&U&bU2U&-n'OUn'U'cSOU'U%-
n(Sn)[U%5n+U+(a U'b U(U+- S-n)U R 0SURS5_S URS 5=(d UR7U5_S!URS!5_S"URS"5_S#URS#5_S$URS$5_S%URS%5_SU_SU2_S&U3_S'U%_S(U&_S)U'_S*U(_S+U)_S,S_S-U _5 GM<> GM U $![&a GN<>f=f![&a S nGNRf=f![&a SnGN6f=f![&a Sn)GNyf=f![&a Sn.GMif=f![&a Sn.GNDf=f![&a Sn*GNf=f![&a Sn*GNf=f![&a S n2GN<>f=f![&a S n3GN<>f=f![&a Sn)GN<>f=f)0z<30>Compute open lots using FIFO matching from recorded executions.
Returns a list of lots with: symbol, qty, cost_basis, avg_price, market_price,
market_value, gain_dollars, gain_percent, cagr_percent, buy_time
r)<01> defaultdict)<01>datetimerUc<00><>><01>URS5nU(dgSH#nTRX5R5s $ [ U5$![a M@f=f![a gf=f)Nr<4E>r<00>z%Y%m%d %H:%M:%Sz%Y%m%d %H:%M:%Sz%Y%m%d-%H:%M:%S)re<00>strptime<6D> timestamprr])<04>x<>t<>fmtrs <20>r,<00> _time_key<65>-IBClient.compute_open_lots.<locals>._time_key su<00><><00><15>E<EFBFBD>E<EFBFBD>&<26>M<EFBFBD><01><18><1C>U<>C<EFBFBD>!<21>'<27>0<>0<><11>8<>B<>B<>D<>D<>V<01>
<1D> <20><11>8<EFBFBD>O<EFBFBD><4F>%<25>!<21> <20>!<21><>!<21><1D><1C><1D>s#<00>A<02>
A!<00>
A<05>A<05>!
A.<03>-A.)<01>keyr<79>r/r<>r<>r<>r<><00>BOT<4F>BUY<55>qtyg<79><67>&<26> .>)r'r<>r<>Nr<4E>r<>r<>r<>r<>r<><00>drg<00>v@g<><67><EFBFBD><EFBFBD><EFBFBD>ư>rjrlr@r\rVrWr8rCrX<00> avg_price<63>
cost_basis<EFBFBD> market_price<63> market_value<75> gain_dollars<72> gain_percent<6E> cagr_percent<6E>buy_timer<65><00> average_cost)<1C> collectionsrrr<>rr<>r rrer<><00>keys<79>sortedrI<00>absr]<00>minrrr<>rr"rmr<00> fromtimestamp<6D>max<61>utcnow<6F>daysr^)5r+rr<00> by_symbolr<6C><00>position_symbols<6C>position_by_symbolr<6C>rU<00>lots<74> all_symbols<6C>execsr<73><00>metar"<00> execs_sorted<65>
open_longs<EFBFBD> open_shortsr<73>r<>r<><00>time_str<74>
qty_to_buyr<EFBFBD><00>matched<65> qty_to_sell<6C>br+<00>q<> position_qty<74>position_market_value<75>known_market_value_remaining<6E>first_exec_time<6D>price_multiplier<65> open_lotsr'r)r*<00>effective_market_pricer,r-r.r/<00> base_costr0r!<00>dt<64>years<72> ending_value<75>cagr<67>qtyf<79>
avg_pricefrs5 @r,<00>compute_open_lots<74>IBClient.compute_open_lots<74>s<> <00><><00> ,<2C>%<25><1F><04>%<25> <09><15><1F><1F>A<EFBFBD> <15>(<28>)<29> *<2A> 1<> 1<>!<21> 4<>!<21><1F>5<EFBFBD><18><1F><1A><15><1E><1E>A<EFBFBD><1E>U<EFBFBD>U<EFBFBD>#3<>4<>N<EFBFBD>!<21><18> <1C> <20> <20><1E> 0<><1D>7<>56<35>><3E>2<>  <20><12><04><19>)<29>.<2E>.<2E>*<2A>+<2B>.><3E>><3E> <0B>)<29>N<EFBFBD><1D>M<EFBFBD>M<EFBFBD>.<2E>"<22>5<>E<EFBFBD>)<29>-<2D>-<2D>n<EFBFBD>=<3D>C<><12>H<EFBFBD>$<24>5<EFBFBD><11>8<EFBFBD>(<28>D<EFBFBD> <1D><A<01>6<EFBFBD>%<25>7<>b<EFBFBD>L<EFBFBD><1B>J<EFBFBD><1C>K<EFBFBD>!<21><01><19><05><05>f<EFBFBD> <0A>+<2B><12>2<>2<>4<><04><1C>U<EFBFBD>1<EFBFBD>5<EFBFBD>5<EFBFBD><18>1<EFBFBD>#5<>#:<3A><11>;<3B><<3C><06><1D>a<EFBFBD>e<EFBFBD>e<EFBFBD>G<EFBFBD>S<EFBFBD>1<>8<>S<EFBFBD>9<><05><1C>5<EFBFBD>5<EFBFBD><16>=<3D><08><17>5<EFBFBD>=<3D>D<EFBFBD>E<EFBFBD>M<EFBFBD>!'<27>J<EFBFBD>$<24>q<EFBFBD>.<2E>[<5B>'<27><01>N<EFBFBD><01>"%<25>j<EFBFBD>#<23>a<EFBFBD><05>h<EFBFBD>-<2D>"@<40><07><19>%<25><08>G<EFBFBD>+<2B><08>"<22>g<EFBFBD>-<2D>
<EFBFBD><1E>q<EFBFBD><15>x<EFBFBD>=<3D>4<EFBFBD>/<2F>'<27>O<EFBFBD>O<EFBFBD>A<EFBFBD>.<2E> %<25>q<EFBFBD>.<2E>[<5B>[<5B>"<22>A<EFBFBD>~<7E>"<22>)<29>)<29>*<2A>u<EFBFBD>V^<5E>*_<>`<60>&<26>#)<29>K<EFBFBD>%<25><01>/<2F>j<EFBFBD>&<26>q<EFBFBD>M<EFBFBD><01>"%<25>k<EFBFBD>1<EFBFBD>U<EFBFBD>8<EFBFBD>"<<3C><07><19>%<25><08>G<EFBFBD>+<2B><08>#<23>w<EFBFBD>.<2E> <0B><1C>U<EFBFBD>8<EFBFBD>d<EFBFBD>?<3F>&<26>N<EFBFBD>N<EFBFBD>1<EFBFBD>-<2D> &<26><01>/<2F>j<EFBFBD>j<EFBFBD>#<23>Q<EFBFBD><EFBFBD>#<23>*<2A>*<2A>K<EFBFBD><<3C>%<25>Ya<59>+b<>c<>5"<22><<1E>[<5B>[<5B>0<><19><18>.<2E>.<2E>t<EFBFBD>4<> <20>L<EFBFBD><14> <0B> <0B><0F><0F><0E>/<2F>A<EFBFBD><10> <20>u<EFBFBD>u<EFBFBD>V<EFBFBD>}<7D> <0C><1F>'<27>#$<24>5<EFBFBD>5<EFBFBD><17>><3E>L<EFBFBD><1F>'<27>#$<24>5<EFBFBD>5<EFBFBD><16>=<3D>L<EFBFBD><1B>#<23>#<23>5<>5<>9<>9<>.<2E>I<> <0C><1B>#<23>'<27>|<7C>|<7C>M<EFBFBD>:<3A> <0C> #<23>$<24>X<EFBFBD>\<5C>\<5C>*<2A>%=<3D>%D<><13>E<> <0C> -<2D>NV<4E>l<EFBFBD>l<EFBFBD>[h<>Ni<4E>Nu<4E><05>h<EFBFBD>l<EFBFBD>l<EFBFBD>=<3D>.I<>(J<>{<>%<25>,A<01> (<28>=I<>l<EFBFBD>1<EFBFBD>o<EFBFBD>1<>1<>&<26>9<>t<EFBFBD>O<EFBFBD>#<23>5<>5<>d<EFBFBD>6F<36>h<EFBFBD>G<> <1C><1B>&<26><1B>4<> <09>"<22>A<EFBFBD><1F><01>%<25><08>/<2F>C<EFBFBD> %<25>a<EFBFBD><07>j<EFBFBD> 1<>4D<34> D<>I<EFBFBD>!$<24>y<EFBFBD><1F>J<EFBFBD>5A<35>5I<35>T<EFBFBD>|<7C>^n<>On<4F>*<2A>+A<>+I<>4<EFBFBD>s<EFBFBD>Uk<55>Ok<4F>L<EFBFBD>#<23>+<2B>0L<30>0X<30>]i<>'C<>s<EFBFBD>\<5C>GY<47>'Z<> <0C>3<>?<3F>L<EFBFBD>D\<5C>4<> <0C>D<>4<>+7<>+?<3F>4<EFBFBD>\<5C>T^<5E>E^<5E>L<EFBFBD>#'<27>L<EFBFBD>#'<27>L<EFBFBD> #<23>J<EFBFBD><0F>I<EFBFBD> <20>\<5C>%=<3D>0<>,8<>9<EFBFBD>,D<><03>+K<>L<EFBFBD> !<21>u<EFBFBD>u<EFBFBD>V<EFBFBD>}<7D>H<EFBFBD><1F>L<EFBFBD>$<<3C><19>Q<EFBFBD><1D>0<>'a<><03>!.<2E>)1<>):<3A>):<3A>8<EFBFBD>S<EFBFBD>)I<>B<EFBFBD>$)<29>(b<01> "<22>z<EFBFBD>!.<2E>)1<>)?<3F>)?<3F><05>h<EFBFBD><0F>)P<>B<EFBFBD> "<22>~<7E>(+<2B>X<EFBFBD>_<EFBFBD>_<EFBFBD>-><3E><12>-C<>,I<>,I<>E<EFBFBD>,Q<>SW<53>(X<><05>!8<>3<<3C>|<7C>3K<33>L<EFBFBD>'3<>a<EFBFBD>'7<>0<<3C>y<EFBFBD>0H<30>c<EFBFBD>TY<54>k<EFBFBD>/Z<>]`<60>/`<60><04>7;<3B>e<EFBFBD>|<7C> <0C>7;<3B> <0C> .<2E><19>K<EFBFBD>K<EFBFBD>!<16> <20>$<24>(<28>(<28>8<EFBFBD>"4<>!<16>(<28>$<24>(<28>(<28>3C<33>*D<>*i<><04>Hc<48>Hc<48>dh<64>Hi<48>!<16>(<28><14><18><18>/<2F>)B<>!<16>,<2C>T<EFBFBD>X<EFBFBD>X<EFBFBD>6I<36>-J<> !<16>
!<21>$<24>(<28>(<28>8<EFBFBD>"4<> !<16> !<21>$<24>(<28>(<28>8<EFBFBD>"4<> !<16>&<26>t<EFBFBD>x<EFBFBD>x<EFBFBD> <0A>'><3E>!<16>)<29>.<2E>!<16><1E>s<EFBFBD>!<16>$<24>Y<EFBFBD>!<16>%<25>j<EFBFBD>!<16>'<27>(><3E>!<16>'<27> <0C>!<16>'<27> <0C>!<16>'<27> <0C>!<16> '<27> <0C>!!<16>"#<23>H<EFBFBD>#!<16><17>e#<23>J+<2B>*<2A><1D><1E><1E>A<EFBFBD><18>u<EFBFBD>u<EFBFBD>-<2D>.<2E>.<2E>@<40> <20><1B>%<25>%<25>
<EFBFBD>+<2B>0<>q<EFBFBD>C<EFBFBD> !<21><05><05>m<EFBFBD> 4<> T<><01><05><05>n<EFBFBD>8M<38> T<>QT<51>I<EFBFBD>#<23>$<24>S<EFBFBD>z<EFBFBD><04>)<29>%*<2A>9<EFBFBD>%5<>
<EFBFBD>"&<26>
<EFBFBD>!2<>J<EFBFBD>5A<35>5I<35>T<EFBFBD>|<7C>^b<>^t<>^t<>uv<75>^w<>Ow<4F>*<2A>-<2D>9<>'+<2B>.D<>'D<> <0C>'<<3C> <0C>+7<>+?<3F>4<EFBFBD>\<5C>T^<5E>E^<5E>L<EFBFBD>#'<27>L<EFBFBD> #<23>J<EFBFBD><0F>I<EFBFBD> <20>\<5C>%=<3D>0<>,8<>9<EFBFBD>,D<><03>+K<>L<EFBFBD><19>K<EFBFBD>K<EFBFBD>!<16> <20>!<21>%<25>%<25><08>/<2F>!<16>(<28>!<21>%<25>%<25>0@<40>*A<>*c<>T<EFBFBD>E`<60>E`<60>ab<61>Ec<45>!<16>(<28><11><15><15><EFBFBD>)?<3F>!<16>,<2C>Q<EFBFBD>U<EFBFBD>U<EFBFBD>3F<33>-G<> !<16>
!<21>!<21>%<25>%<25><08>/<2F> !<16> !<21>!<21>%<25>%<25><08>/<2F> !<16>&<26>q<EFBFBD>u<EFBFBD>u<EFBFBD>]<5D>';<3B>!<16>)<29>.<2E>!<16><1E>t<EFBFBD>!<16>$<24>Z<EFBFBD>!<16>%<25>j<EFBFBD>!<16>'<27>(><3E>!<16>'<27> <0C>!<16>'<27> <0C>!<16>'<27> <0C>!<16> '<27><04>!!<16>"#<23>O<EFBFBD>#!<16><17>7(<28>}*<2A>Z<14> <0B><>i!<21><19><18><19><>"<1D> #<23>"<22> <0C> #<23><><1D> -<2D>(,<2C>%<25> -<2D><>4 )<29>0<>+/<2F>L<EFBFBD>0<><30>(1<>!.<2E>)-<2D>B<EFBFBD>!.<2E><> (1<>!.<2E>)-<2D>B<EFBFBD>!.<2E><>(1<>!8<>37<33>L<EFBFBD>!8<><38>(<28>0<>+/<2F>L<EFBFBD>0<><30>>%<25>#<23>"<22><04>#<23><>%<25>)<29>%(<28>
<EFBFBD>)<29><> )<29>0<>+/<2F>L<EFBFBD>0<>s<EFBFBD><00>_<02>2#_<02>._+<02> _><04>6a <04><`<06>a <04>`%<04>0-a <04>`8<04>=`8<04> a<04> a1<04>.b<04>
_<05>_<05> _(<05>'_(<05>+ _;<05>:_;<05>> `<07> `<07> `" <09>a <04>!`" <09>"a <04>% `5<07>1a <04>4`5<07>5a <04>8 a<07>a <04>a<07>a <04> a<07>a<07> a.<07>-a.<07>1 b<07>b<07> b<07>b)rr!r$rrr#r&r'r%rr rr"r r rr)rrr)r<N)rprqr<>)F)*<2A>__name__<5F>
__module__<EFBFBD> __qualname__<5F>__firstlineno__r4rrr9rMrr`r^r]rmrrur<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>r<>rsr<>r<>r<>rrr
rrr<00>boolrY<00>__static_attributes__<5F> __classcell__)r<>s@r,r r sR<00><><00>'0<>S<EFBFBD>'0<>c<EFBFBD>'0<>S<EFBFBD>'0<>R<16>/<2F><13>/<2F> !<13>t<EFBFBD>!<13>F <16>$<24> <16>3<EFBFBD> <16><19>T<EFBFBD><19>e<EFBFBD><19>+
<EFBFBD>d<EFBFBD>+
<EFBFBD>x<EFBFBD>+
<EFBFBD>Z!<21><11>V<01>3<EFBFBD>V<01>(V<01>!<21>&<1C>'<27>*a<01>B<01>2C<01>:l<01><13>S<EFBFBD><13>
<11>3<EFBFBD><11>#<23><11>SV<53><11>ck<63><11>#R<01>J=<3D>6S<01>s<EFBFBD>S<01>t<EFBFBD>S<01> ><3E>S<EFBFBD>4<EFBFBD>Z<EFBFBD>><3E>4<EFBFBD>><3E>" C<01>2<>[<01>,!<21>$<24>h<14>4<EFBFBD>h<14>hr;r )<0E>__doc__r(rr<><00>typingrr<00> ibapi.clientr<00>ibapi.contractr<00> ibapi.wrapperrr <00>r;r,<00><module>rhs1<00><01> <04><0F><10> <0B><1D> <20>#<23>"<22>~
<14>x<EFBFBD><17>~
r;