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

94 lines
13 KiB
Plaintext
Raw Normal View History

2026-04-01 22:51:21 -05:00
<EFBFBD>
<00><><EFBFBD>i<EFBFBD>"<00><00><><00>SrSSKJrJrJrJr SSKrSSKrSSKJ r SSK
J r J r J r SSKJr SSKrS(Sjr\"5 \R$R'\R$R)\R$R+\5SS 55r\"\\S
S 9r\"\R4"5S 9r\R8R;S 5S:Xd \R8R;S 5(d\R=5 \RAS5S5r!\RAS5S5r"\RAS5S5r#\RAS5S5r$\RAS5S5r%\RAS5S5r&\RAS5S5r'\RASS/S9S 5r(\RAS!S/S9S"5r)\S#:Xa\RUS$S%S&S'9 gg!\a N<>f=f))aDFlask backend for IB dashboard.
Provides simple REST endpoints that the vanilla-JS frontend polls:
- GET /api/quotes -> latest market quotes
- GET /api/positions -> latest positions
- POST /api/subscribe { symbols: ["AAPL","MSFT"] } -> start subscribing
This app expects an IB Gateway or TWS running locally on port 7496.
<EFBFBD>)<04>Flask<73>jsonify<66>request<73>send_from_directoryN)<01>load_latest_flex_lots)<03>FlexQueryError<6F>fetch_flex_statement<6E>get_flex_status)<01>IBClientc<00><><00>[RR[RR[RR [
5SS55n[RR U5(dg[USSS9nUH<>nUR5nU(aURS5(dSU;aM8URSS5upEUR5nUR5RS 5RS
5nU(dM<>U[R;dM<>U[RU'M<> SSS5 g!,(df  g=f![a gf=f) N<>..z.env<6E>rzutf-8)<01>encoding<6E>#<23>=<3D><00>"<22>') <0A>os<6F>path<74>abspath<74>join<69>dirname<6D>__file__<5F>exists<74>open<65>strip<69>
startswith<EFBFBD>split<69>environ<6F> Exception)<06>env_path<74>handle<6C>raw_line<6E>line<6E>key<65>values <20>backend\app.py<70>load_dotenv_filer)s<00><00><11>w<EFBFBD>w<EFBFBD><EFBFBD><EFBFBD>r<EFBFBD>w<EFBFBD>w<EFBFBD>|<7C>|<7C>B<EFBFBD>G<EFBFBD>G<EFBFBD>O<EFBFBD>O<EFBFBD>H<EFBFBD>,E<>t<EFBFBD>V<EFBFBD>T<>U<>H<EFBFBD> <0A>7<EFBFBD>7<EFBFBD>><3E>><3E>(<28> #<23> #<23><0E>  <0A> <11>(<28>C<EFBFBD>'<27> 2<>f<EFBFBD>"<22><08><1F>~<7E>~<7E>'<27><04><1B>t<EFBFBD><EFBFBD><EFBFBD>s<EFBFBD>3<>3<>s<EFBFBD>$<24><EFBFBD><1C>!<21>Z<EFBFBD>Z<EFBFBD><03>Q<EFBFBD>/<2F>
<EFBFBD><03><19>i<EFBFBD>i<EFBFBD>k<EFBFBD><03><1D> <0B> <0B> <0A>+<2B>+<2B>C<EFBFBD>0<>6<>6<>s<EFBFBD>;<3B><05><16>3<EFBFBD>3<EFBFBD>b<EFBFBD>j<EFBFBD>j<EFBFBD>0<>&+<2B>B<EFBFBD>J<EFBFBD>J<EFBFBD>s<EFBFBD>O<EFBFBD>#<23>3<> 2<> 2<><32> <15> <0A> <0C> <0A>s=<00> E.<00>BE<03>'E<03>=E<03>E.<00>
E+<07>'E.<00>+E.<00>.
E;<03>:E;r <00>frontendz/static)<02> static_folder<65>static_url_path)<01> client_id<69>WERKZEUG_RUN_MAIN<49>true<75>/c<00>6<00>[[RS5$)Nz
index.html)r<00>appr+<00><00>r(<00>indexr5:s<00><00> <1E>s<EFBFBD>0<>0<>,<2C> ?<3F>?r4z /api/quotesc<00><<00>[[R55$<00>N)r<00>ib<69>
get_quotesr3r4r(<00>
api_quotesr:?s<00><00> <12>2<EFBFBD>=<3D>=<3D>?<3F> #<23>#r4z/api/positionsc<00><><00>[R5 [R"5S-n[R"5U:aW[R 5nU(a [ U5$[R "S5 [R"5U:aMW[ [R 55$![a N<>f=f)N<>@皙<><E79A99><EFBFBD><EFBFBD><EFBFBD>?)r8<00>request_positionsr!<00>time<6D> get_positionsr<00>sleep)<02>deadline<6E> positionss r(<00> api_positionsrDDs<><00><00> <0A>
<EFBFBD><1C><1C><1E><14>y<EFBFBD>y<EFBFBD>{<7B>S<EFBFBD> <20>H<EFBFBD>
<0E>)<29>)<29>+<2B><08>
<20><16>$<24>$<24>&<26> <09> <14><1A>9<EFBFBD>%<25> %<25> <0C>
<EFBFBD>
<EFBFBD>3<EFBFBD><0F> <0F>)<29>)<29>+<2B><08>
<20> <13>2<EFBFBD>#<23>#<23>%<25> &<26>&<26><> <15> <0A> <0C> <0A>s<00>B;<00>;
C<03>Cz /api/lotsc<00><> ^<0E>[5nURS5(a?URS5(a)[US5upU(aU(a [U5$[R 5 [R"5S-n[R"5U:aK[R5(aO1[R"S5 [R"5U:aMK[R5HJn[U[5(aURS5OSnU(dM4[RU5 ML [R5HJn[U[5(aURS5OSnU(dM4[RU5 ML [R"5S-n[R5Vs1sHCn[U[5(dMURS5(dM2URS5iME nn[R"5U:a`[R5m[U4SjU55(aO1[R"S5 [R"5U:aM`[R5H<>n[U[5(aURS5OSnU(dM4[R5RU05n U RS5bMlU RS 5bM<>U RS
5bM<>[R!U5 M<> [R"5S-n
[R"5U
:Ga/n [R5m[R5H<>n[U[5(aURS5OSnU(dM4TRU05n U RS5bMZU RS 5bMnU RS
5bM<>U[R";dM<>U R%U5 M<> U (dO2[R"S5 [R"5U
:aGM[R'S S 9 [R"5S -n [R"5U :aV[R)SS9n U (a [U 5$[R"S5 [R"5U :aMV[[R)SS95$![ a GN<>f=f![ a GM~f=f![ a GM.f=fs snf![ a GM<>f=f![ a N<>f=f)N<>
configured<EFBFBD>data_dirr<r=<00>account<6E>instrument_keyc3<00>,># <00>UH oT;v<00> M g7fr7r3)<03>.0rI<00>quotess <20>r(<00> <genexpr><3E>api_lots.<locals>.<genexpr><3E>s<00><><00><00>O<>>N<>N<EFBFBD><16>'<27>>N<>s<00><01>last<73>close<73>mark<72>20000101 00:00:00<30><01>
start_timeg@F)<01>include_position_fallback)r
<00>getrrr8r>r!r?r@rA<00>
isinstance<EFBFBD>dict<63>request_account_updates<65>subscribe_market_datar9<00>any<6E>request_historical_close<73>historical_closes<65>append<6E>request_executions<6E>compute_open_lots)<0F> flex_status<75> latest_file<6C> flex_lots<74>positions_deadline<6E>prHrI<00>quotes_deadline<6E>position_symbols<6C>quote<74>historical_deadline<6E>missingrB<00>lotsrLs @r(<00>api_lotsrlVsT<00><><00>!<21>#<23>K<EFBFBD><12><EFBFBD><EFBFBD>|<7C>$<24>$<24><1B><1F><1F><1A>)D<>)D<>!6<>{<7B>:<3A>7N<37>!O<><1E> <0B> <16>9<EFBFBD><1A>9<EFBFBD>%<25> %<25> <0A>
<EFBFBD><1C><1C><1E><1E><19><19><1B>s<EFBFBD>*<2A><16>
<0E>)<29>)<29>+<2B>*<2A>
*<2A> <0A> <1B> <1B> <1D> <1D> <11> <0C>
<EFBFBD>
<EFBFBD>3<EFBFBD><0F> <0F>)<29>)<29>+<2B>*<2A>
*<2A>
<10> <1D> <1D> <1F><01>&0<><11>D<EFBFBD>&9<>&9<>!<21>%<25>%<25> <09>"<22>t<EFBFBD><07> <12>7<EFBFBD> <15><12>*<2A>*<2A>7<EFBFBD>3<>  <20><10> <1D> <1D> <1F><01>4><3E>q<EFBFBD>$<24>4G<34>4G<34><11><15><15>/<2F>0<>T<EFBFBD><0E> <19>><3E> <15><12>(<28>(<28><11>+<2B>  <20><1B>i<EFBFBD>i<EFBFBD>k<EFBFBD>C<EFBFBD>'<27>O<EFBFBD><14>!<21>!<21>#<23><06>#<23>A<EFBFBD> <15>a<EFBFBD><14> <1E> <20>#$<24>5<EFBFBD>5<EFBFBD>)9<>#:<3A> <20><01><05><05><1E><1F>#<23><15><06>
<0F>)<29>)<29>+<2B><0F>
'<27><13><1D><1D><1F><06> <0E>O<>>N<>O<> O<> O<> <11> <0C>
<EFBFBD>
<EFBFBD>3<EFBFBD><0F> <0F>)<29>)<29>+<2B><0F>
'<27><10> <1D> <1D> <1F><01>4><3E>q<EFBFBD>$<24>4G<34>4G<34><11><15><15>/<2F>0<>T<EFBFBD><0E><1D> <14><12> <0A> <0A><0F>#<23>#<23>N<EFBFBD>B<EFBFBD>7<><05> <10>9<EFBFBD>9<EFBFBD>V<EFBFBD> <1C> $<24><15><19><19>7<EFBFBD>);<3B>)C<><05> <09> <09>RX<52>HY<48>Ha<48> <15><12>+<2B>+<2B>A<EFBFBD>.<2E> <20><1F>)<29>)<29>+<2B><03>+<2B><17>
<0E>)<29>)<29>+<2B>+<2B>
+<2B><14><07><13><1D><1D><1F><06><13>!<21>!<21>#<23>A<EFBFBD>8B<38>1<EFBFBD>d<EFBFBD>8K<38>8K<38>Q<EFBFBD>U<EFBFBD>U<EFBFBD>#3<>4<>QU<51>N<EFBFBD>!<21><18><1A>J<EFBFBD>J<EFBFBD>~<7E>r<EFBFBD>2<>E<EFBFBD><15> <09> <09>&<26>!<21>)<29><19>I<EFBFBD>I<EFBFBD>g<EFBFBD>&<26>.<2E><19>I<EFBFBD>I<EFBFBD>f<EFBFBD>%<25>-<2D>"<22>"<22>*><3E>*><3E>><3E><17><0E><0E>~<7E>.<2E>$<24><17> <11> <0C>
<EFBFBD>
<EFBFBD>3<EFBFBD><0F># <0F>)<29>)<29>+<2B>+<2B>
+<2B>( <0A>
<EFBFBD><1D><1D>)<<3C><1D>=<3D><14>y<EFBFBD>y<EFBFBD>{<7B>S<EFBFBD> <20>H<EFBFBD>
<0E>)<29>)<29>+<2B><08>
<20><11>#<23>#<23>e<EFBFBD>#<23>D<><04> <0F><1A>4<EFBFBD>=<3D> <20> <0C>
<EFBFBD>
<EFBFBD>3<EFBFBD><0F> <0F>)<29>)<29>+<2B><08>
<20>
<13>2<EFBFBD>'<27>'<27>%<25>'<27>H<> I<>I<><49>] <15> <0A> <0C> <0A><><1D> <15><14> <15><><1D> <15><14> <15><><06><>(<1D> <15><14> <15><>2 <15> <0A> <0C> <0A>sl<00>"U%<00>;U6<02>V<02>$V<04>V<04>V<04>V<02>/V1<00>%
U3<03>2U3<03>6
V<05>V<05>
V<05>V<05>
V.<05>-V.<05>1
V><03>=V>z/api/executions-debugc <00><><00>[RRSS5n[R US9 [ R "5S-n[ R "5U:a1[ R"S5 [ R "5U:aM1[[R5n0nUH<>nURS5=(d URS5=(d SnURUURS5URS5URS 5URS
5S SSS .5nUS ==S- ss'URS5nU(dM<>USbXvS:aXvS'USb
XvS:<3A>dM<>XvS'M<> [U[U5U[UR55S.5$![
a GN<>f=f)NrTrRrSg@r=rI<00>symbol<6F>UNKNOWN<57> security_type<70>display_symbolr)rIrnrprq<00>count<6E>
first_time<EFBFBD> last_timerrrr?rsrt)rT<00>execution_count<6E>
executions<EFBFBD>summary)r<00>argsrVr8r_r!r?rA<00>listrv<00>
setdefaultr<00>len<65>values)rTrBrvrw<00>er&<00>item<65>etimes r(<00>api_executions_debugr<67><00>s<><00><00><18><1C><1C>!<21>!<21>,<2C>0C<30>D<>J<EFBFBD> <0A>
<EFBFBD><1D><1D><1A><1D>4<><14>y<EFBFBD>y<EFBFBD>{<7B>S<EFBFBD> <20>H<EFBFBD>
<0E>)<29>)<29>+<2B><08>
<20> <0C>
<EFBFBD>
<EFBFBD>3<EFBFBD><0F> <0F>)<29>)<29>+<2B><08>
<20><15>b<EFBFBD>m<EFBFBD>m<EFBFBD>$<24>J<EFBFBD><10>G<EFBFBD> <17><01><0F>e<EFBFBD>e<EFBFBD>$<24>%<25>E<><11><15><15>x<EFBFBD><1F>E<>I<EFBFBD><03><16>!<21>!<21>#<23><1F>e<EFBFBD>e<EFBFBD>$4<>5<><17>e<EFBFBD>e<EFBFBD>H<EFBFBD>o<EFBFBD><1E>U<EFBFBD>U<EFBFBD>?<3F>3<><1F>e<EFBFBD>e<EFBFBD>$4<>5<><16><1E><1D>(
<EFBFBD> <0B><04> <0A>W<EFBFBD> <0A><11><1A> <0A><11><05><05>f<EFBFBD> <0A><05> <10>5<EFBFBD><13>L<EFBFBD>!<21>)<29>U<EFBFBD>,<2C>5G<35>-G<>%*<2A>\<5C>"<22><13>K<EFBFBD> <20>(<28>E<EFBFBD><1B>4E<34>,E<>$)<29>[<5B>!<21>#<18>$ <13> <20><1E>z<EFBFBD>?<3F> <20><17><07><0E><0E>(<28>)<29> <06> <07><07><>3 <15> <0A> <0C> <0A>s<00>G<00>
G<03> Gz/api/flex/statusc<00>(<00>[[55$r7)rr
r3r4r(<00>api_flex_statusr<73><00>s<00><00> <12>?<3F>$<24> %<25>%r4z/api/flex/lots-debugc<00><><00>[5nURS5(aURS5(d[S/SS.5$[US5up[SU[ U5US.5$)NrFrGF)rFrkrbT)rFrb<00> lot_countrk)r
rVrrr{)<03>statusrbrks r(<00>api_flex_lots_debugr<67><00>sm<00><00> <1C> <1E>F<EFBFBD> <11>:<3A>:<3A>l<EFBFBD> #<23> #<23>6<EFBFBD>:<3A>:<3A>j<EFBFBD>+A<>+A<><16>e<EFBFBD>R<EFBFBD><04>M<>N<>N<>-<2D>f<EFBFBD>Z<EFBFBD>.@<40>A<><15>K<EFBFBD> <12><1A>"<22><18><14>Y<EFBFBD><14> <06> <07>r4z/api/flex/sync<6E>POST)<01>methodsc<00><><00>[5n[SS0UE5$![a#n[S[U5S.5S4sSnA$SnAf[a#n[S[U5S.5S4sSnA$SnAff=f)N<>okTF)r<><00>error<6F><72>i<>)r rr<00>strr!)<02>result<6C>excs r(<00> api_flex_syncr<63><00>so<00><00>><3E>%<25>'<27><06><16><04>d<EFBFBD>-<2D>f<EFBFBD>-<2D>.<2E>.<2E><> <19>><3E><16>e<EFBFBD>c<EFBFBD>#<23>h<EFBFBD>7<>8<>#<23>=<3D>=<3D><> <14>><3E><16>e<EFBFBD>c<EFBFBD>#<23>h<EFBFBD>7<>8<>#<23>=<3D>=<3D><>><3E>s+<00><00>
A3<03>A<03>A3<03> A3<03>A.<03>(A3<03>.A3z/api/subscribec<00><00>[R"SS9n[U[5(aUR S/5O/n[U[
5(d[ SS05S4$UHn[RU5 M [ SU05$)NT)<01>force<63>symbolsr<73>zsymbols must be a listr<74><00>
subscribed) r<00>get_jsonrWrXrVryrr8rZ)<03>datar<61><00>ss r(<00> api_subscriber<65><00>s{<00><00> <12> <1B> <1B>$<24> '<27>D<EFBFBD>)3<>D<EFBFBD>$<24>)?<3F>)?<3F>d<EFBFBD>h<EFBFBD>h<EFBFBD>y<EFBFBD>"<22>%<25>R<EFBFBD>G<EFBFBD> <15>g<EFBFBD>t<EFBFBD> $<24> $<24><16><07>!9<>:<3A>;<3B>S<EFBFBD>@<40>@<40> <14><01>
<EFBFBD> <20> <20><11>#<23><15> <12>L<EFBFBD>'<27>*<2A> +<2B>+r4<00>__main__Ti@F)<03>debug<75>port<72> use_reloader)<02>returnN)+<2B>__doc__<5F>flaskrrrrr<00> threadingrcr<00>
flex_queryrr r
<00> ib_clientr r?r)rrrrr<00> STATIC_FOLDER<45>__name__r2<00>getpidr8r rV<00>connect_and_startr!<00>router5r:rDrlr<>r<>r<>r<>r<><00>runr3r4r(<00><module>r<>s<00><01><04>?<3F>><3E> <09><10>+<2B>L<>L<><1E> <0B> <0A>&<11><12><13><07><07><0F><0F><02><07><07> <0C> <0C>R<EFBFBD>W<EFBFBD>W<EFBFBD>_<EFBFBD>_<EFBFBD>X<EFBFBD>-F<><04>j<EFBFBD> Y<>Z<> <0A> <0B>H<EFBFBD>M<EFBFBD>9<EFBFBD>M<><03><0E><02> <09> <09> <0B>$<24><02><05>:<3A>:<3A>><3E>><3E>%<25>&<26>&<26>0<><02>
<EFBFBD>
<EFBFBD><0E><0E>GZ<47>8[<5B>8[<5B> <0A>
<EFBFBD><1C><1C><1E>
<05><19><19>3<EFBFBD><1E>@<01><10>@<01><05><19><19>=<3D><19>$<24><1A>$<24><05><19><19> <1B><1C>'<27><1D>'<27>"<05><19><19>;<3B><17>YJ<01><18>YJ<01>x<05><19><19> "<22>#<23>"<07>$<24>"<07>J<05><19><19> <1D><1E>&<26><1F>&<26><05><19><19> !<21>"<22>
<07>#<23>
<07><05><19><19> <1B>f<EFBFBD>X<EFBFBD><19>.<2E>><3E>/<2F>><3E><05><19><19> <1B>f<EFBFBD>X<EFBFBD><19>.<2E>,<2C>/<2F>,<2C> <0C>z<EFBFBD><19><07>G<EFBFBD>G<EFBFBD>$<24>T<EFBFBD><05>G<EFBFBD>6<><1A><>Y <15> <0A> <0C> <0A>s<00>)G!<00>!G*<03>)G*