+
    /i%Y                     B   R t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	H
t
 ^ RIHtHt ^ RIHt ^ RIHt  ^ RItRt]
! 4        ]P*                  ! R4      t]P*                  ! R	4      tR
tRtRtRtRt^xtRt^t^
t ^t!Rt"Rt#Rt$Rt%Rt&RRRRRR/t'RRRRRR/t(. t)]PT                  ! 4       t+. t,. t-].! 4       t/R t0R t1R t2R t3R t4R t5R t6R t7R  t8R! t9R" t:R# t;R$ t<R.R% lt=R& t>R/R' lt?R( t@R0R) ltAR* tBR+ tCR, tD]ER-8X  d
   ]D! 4        R# R#   ] d    Rt Li ; i)1z
LIVE TRADING BOT - BTC 15-Min Kalshi Markets
Smart tiered bet sizing. 2:1 reward/risk ratio.
Live dashboard: open C:\kalshibot\dashboard.html in Chrome
N)load_dotenv)serializationhashes)padding)default_backendTFKALSHI_API_KEY_IDKALSHI_PRIVATE_KEY_PATHz https://api.elections.kalshi.comg?g?gffffff?g333333?g~jtX?g      ?      ?       @g      @g      @binancecoinbasekrakenc                     \        V R 4      ;_uu_ 4       p\        P                  ! VP                  4       R\	        4       R7      uuRRR4       #   + '       g   i     R# ; i)rbN)passwordbackend)openr   load_pem_private_keyreadr   )pathfs   & btc_scanner.pyload_private_keyr   2   s<    	dD		Q11!&&(TSbSde 
			s   /AA 	c           	      ~   W,           V,           P                  R 4      pV P                  V\        P                  ! \        P                  ! \
        P                  ! 4       4      \        P                  P                  R7      \
        P                  ! 4       4      p\        P                  ! V4      P                  R 4      # )zutf-8)mgfsalt_length)encodesignr   PSSMGF1r   SHA256DIGEST_LENGTHbase64	b64encodedecode)pktsmethodr   msgsigs   &&&&  r   sign_requestr*   6   sx    ;
%
%g
.C
''#w{{w||FMMO'DRYR]R]RkRklntn{n{n}
~CC ''00    c                     \        \        \        P                  P                  4       P	                  4       R ,          4      4      p\        \        4      pR\        RVR\        W2W4      RR/# )i  zKALSHI-ACCESS-KEYzKALSHI-ACCESS-TIMESTAMPzKALSHI-ACCESS-SIGNATUREzContent-Typezapplication/json)	strintdatetimenow	timestampr   KEY_PATHKEY_IDr*   )r'   r   r&   r%   s   &&  r   get_headersr4   ;   so    	S""&&(224t;<	=B	(	#B)BBHacoprx~  dF  HV  Xj  k  kr+   c                  ~    \         '       g   R # R p R p\        P                  ! RWR7      pVP                  4        R # )Nc                     \         P                  ! V4      p\        VP                  R 4      ;'       g    VP                  R4      ;'       g    ^ 4      pV^ 8  dW   \        P                  ! 4       p\
        ;_uu_ 4        V\        R&   V\        R&   \        P                  WC34       RRR4       R# R#   + '       g   i     R# ; i    R# ; i)pcr   N)
jsonloadsfloatgettime
price_lockpricesprice_timesprice_historyappend)wsr(   datapricer0   s   &&   r   on_msgbinance_ws.<locals>.on_msgB   s    		::c?D$((3-==488C===A>EqyiikZ(-F9%-0K	*!((#6  Z ZZ 	s4   2C C 1C ?)B4(C 4C	?C C Cc                 F    \         P                  ! ^4       \        4        R# )   N)r=   sleep
binance_ws)rC   argss   &*r   on_closebinance_ws.<locals>.on_closeM   s    

1r+   z.wss://stream.binance.com:9443/ws/btcusdt@trade)
on_messagerM   )WS_AVAILABLE	websocketWebSocketApprun_forever)rF   rM   rC   s      r   rK   rK   @   s3    <
 
		 P]c	wBNNr+   c                       \         P                  ! R^R7      p V P                  ^8X  dc   \        ;_uu_ 4        \	        V P                  4       R,          R,          4      \        R&   \        P                  ! 4       \        R&   RRR4       M \        P                  ! ^4       K    + '       g   i     L(; i    L/; i)Tz/https://api.coinbase.com/v2/prices/BTC-USD/spottimeoutrD   amountr   N)
requestsr<   status_coder>   r;   r9   r?   r=   r@   rJ   )rs    r   poll_coinbaser[   S   s    
	NXYZA}}#Z).qvvx/?/I)JF:&.2iikK
+  Z $
 	

1	  Z 	s)   7B: AB'B: 'B7	2B: 7B: :B>c                       \         P                  ! R^R7      p V P                  ^8X  d   V P                  4       P                  R/ 4      p\	        VP                  R/ 4      P                  R^ .4      ^ ,          4      pV^ 8  d=   \
        ;_uu_ 4        V\        R&   \        P                  ! 4       \        R&   RRR4       \        P                  ! ^4       K    + '       g   i     L(; i    L/; i)Tz2https://api.kraken.com/0/public/Ticker?pair=XBTUSDrU   resultXXBTZUSDr8   r   N)
rX   r<   rY   r9   r;   r>   r?   r=   r@   rJ   )rZ   r]   rE   s      r   poll_krakenr_   ^   s    
		Q[\]A}}#h3fjjR8<<S1#FqIJ19#+0x(04		H- $ 	

1	 $ 	s*   BC- &C:C- C*	%C- *C- -C1c                       \         P                  ! R^R7      p V P                  ^8X  dv   \        V P	                  4       R,          4      p\
        P
                  ! 4       p\        ;_uu_ 4        V\        R&   V\        R&   \        P                  W!34       RRR4       M \
        P                  ! ^
4       K    + '       g   i     L(; i    L/; i)Tz:https://api.binance.com/api/v3/ticker/price?symbol=BTCUSDTrU   rE   r   N)rX   r<   rY   r;   r9   r=   r>   r?   r@   rA   rB   rJ   )rZ   rE   r0   s      r   poll_binance_restra   l   s    
		YcdeA}}#affhw/0iikZ(-F9%-0K	*!((#6  Z $ 	

2  Z 	s*   A,C /)B:C :C
	C 
C Cc                     \         ;_uu_ 4        \        \        4      p \        \        4      pR R R 4       \        P                  ! 4       pX  Uu. uFD  q0V,          '       g   K  XV,          '       g   K$  W!V,          ,
          ^8  g   K:  W0V,          3NKF  	  ppV'       g   R
# V R,          ;'       g    V^ ,          ^,          pRP                  R V 4       4      pR pV R,          V R,          V R,          rpV'       dM   V	'       dE   V
'       d=   W,           ^,          pW,
          V,          p\        V4      R8  d   RV^d,          R R	2pWVV3#   + '       g   i     EL-; iu upi )Nr   +c              3   *   "   T F	  w  rVx  K  	  R # 5iN ).0s_s   &  r   	<genexpr>!get_best_price.<locals>.<genexpr>   s     (%$!A%s   r   r   gMb@?zEDGE +.3fz% Binance vs othersNNN)r>   dictr?   r@   r=   joinabs)snap_psnap_tr0   srcvalidrE   srcsedgebr8   kavgdivs                r   get_best_pricer{   z   s   	fk" 
 ))+C+1n6CC[[VC[[VYcf\gVgkmUmc#;6En))9,,q!E88(%((DDY
!3VH5E!AQ1ukw#os8f3s74.(;<D 
 os#   EE&$E&5E&E&E#	c            	      @   \         P                   ! 4       p V \        ,
          p\        ;_uu_ 4        \         UUu. uF  w  r#W!8  g   K  W#3NK  	  ppp\         UUu. uF  w  r#W R ,
          8  g   K  W#3NK  	  upp\        R&   RRR4       \	        X4      ^8  d   R# V^ ,          ^,          pVR	,          ^,          pWe,
          V,          pV^d,          R R2pV\
        8  d   VRV3# V\
        ) 8:  d   VRV3# VRV3# u uppi u uppi   + '       g   i     L; i)
iX  :NNNNrl   %UPDOWNFLATrm   )r=   MOMENTUM_SECONDSr>   rA   lenMOMENTUM_THRESHOLD)	r0   cutofftr7   recentoldestnewestmompcts	            r   get_momentumr      s    
))+C##F	%2B]TQak&1&]B/<O}tq3YFQF}Oa 
 6{Q//AYq\FBZ]F?f
$CWTN!
C
  dC"7	##	#C,<%< CO 
s4   
D
D

D
DD
3D
:DDD	c                 X   V f	   \         R3# \        V 4      \        ,          pVR8  d	   \        RrTM%VR8  d	   \         RrTMVR8  d	   \        RrTM\
        RrTV'       d(   VR8  d!   \        VR,           \        4      pVR	,           p\        V\        VR
,          4      p\        V^4      V3# )NBASEr
   WEAKg      @g      @MEDIUMSTRONGr	   z+EDGEg?)	BET_BASErp   r   BET_WEAK
BET_MEDIUM
BET_STRONGminBET_MAXround)momentumrv   balancestrengthbettiers   &&&   r   get_bet_sizer      s    & 008}11H#~Xd	CXd	CZd%/dC#*g&g~
c7GdN
+Ca=$r+   c                      R p \        RV 4      p\        P                  ! \        V ,           VR7      pVP                  ^8X  d(   VP                  4       P                  R^ 4      ^d,          # R# )z/trade-api/v2/portfolio/balanceGETheadersr   N)r4   rX   r<   BASE_URLrY   r9   )r   r   rZ   s      r   get_balancer      sR    ,D%&GX_g6A}}vvx||Iq)C//r+   c                  l   R p Rp\        RV 4      p\        P                  ! \        V ,           V,           VR7      pVP                  ^8w  d   R# \
        P
                  P                  \
        P                  P                  4      pVP                  4       P                  R. 4       EF  p \
        P
                  P                  VR,          P                  RR4      4      p\
        P
                  P                  VR	,          P                  RR4      4      pYdu;8:  d	   V8:  Ed   M K  Wt,
          P                  4       pR
VR
,          R\        VP                  R4      ;'       g    ^ 4      R\        VP                  R4      ;'       g    ^ 4      R\        VP                  R4      ;'       g    ^ 4      R\        VP                  R4      ;'       g    ^ 4      R\        VP                  R4      ;'       g    ^ 4      RTR\        VP                  R4      ;'       g    ^ 4      /u # EK  	  R#     EK  ; i)z/trade-api/v2/marketsz,?status=open&limit=10&series_ticker=KXBTC15Mr   r   Nmarkets	open_timeZz+00:00
close_timetickeryes_askyes_ask_dollarsyes_bidyes_bid_dollarsno_askno_ask_dollarsno_bidno_bid_dollarsfloorfloor_strike	secs_leftvolumevolume_24h_fp)r4   rX   r<   r   rY   r/   r0   timezoneutcr9   fromisoformatreplacetotal_secondsr;   )	r   paramsr   rZ   r0   mopen_tclose_tsecss	            r   get_15m_marketr      s   "D;F%&GX_v-w?A}}D




 1 1 5 5
6CVVX\\)R(	''55an6L6LSRZ6[\F''55ao6M6McS[6\]G'''446 !H+y%FW@X@]@]\]:^`ikpqrqvqv  xI  rJ  rO  rO  NO  lP  RZ  \a  bc  bg  bg  hx  by  b~  b~  }~  \  AI  KP  QR  QV  QV  Wg  Qh  Qm  Qm  lm  Kn  pw  y~  @  D  D  ES  T  Y  Y  XY  yZ  \g  im  ow  y~  @  D  D  ET  U  Z  Z  YZ  y[  \  \ (	 )  	s7   *A=H-)<H-&#H-
#H-.#H-#H-6%H-H--H3c                    R V  2p\        RV4      p\        P                  ! \        V,           VR7      pVP                  ^8X  d   VP                  4       P                  R/ 4      p\        VP                  R4      ;'       g    ^ 4      \        VP                  R4      ;'       g    ^ 4      \        VP                  R4      ;'       g    ^ 4      \        VP                  R4      ;'       g    ^ 4      3# R# )	z/trade-api/v2/markets/r   r   marketr   r   r   r   )NNNN)r4   rX   r<   r   rY   r9   r;   )r   r   r   rZ   r   s   &    r   get_live_pricer      s    #F8,D%&GX_g6A}}FFHLL2&QUU,-223U155AR;S;X;XWX5Y[`abafafgwaxa}a}|}[~  AF  GH  GL  GL  M]  G^  Gc  Gc  bc  Ad  d  	d!!r+   c                    R p\        RV4      p\        \        V^d,          4      4      pRT R\        \        P
                  ! 4       4      RRRTRTRTR	VR
8X  d   TM^dV,
          /p\        P                  ! \        V,           WhR7      p	V	P                  R9   d#   RV	P                  4       P                  R/ 4      3# RV	P                  3# )z/trade-api/v2/portfolio/ordersPOSTr   client_order_idtypelimitactionsidecount	yes_priceyes)r   r9   TorderF)      )r4   r.   r   r-   uuiduuid4rX   postr   rY   r9   r<   text)
r   r   r   price_dollarsr   r   r   price_centsbodyrZ   s
   &&&&&     r   place_orderr      s    +D&$'GeMC/01Kf/TZZ\1BFGU]_egmosu|  D  FQ  bf  jo  bo  S^  vy  |G  vG  IDhowBA}}
"4gr1J+J$J!&&=r+   c                    a \         ;_uu_ 4        \        RR  U Uu. uF  w  rVNK	  	  pp pRRR4       \        X4      ^
8  d   R# \        V4      \        V4      ,          o\        V3R lV 4       4      \        V4      ,          p\	        VR,          S,          ^d,          ^4      # u upp i   + '       g   i     L; i)<   Ng        c              3   B   <"   T F  qS,
          ^,          x  K  	  R# 5i)   Nrf   )rg   r7   means   & r   rj   %get_btc_volatility.<locals>.<genexpr>   s     3FqH??Fs         ?i)r>   rA   r   sumr   )ri   r7   r   variancer   s       @r   get_btc_volatilityr      s    	 -cd 34 3! 34 

6{Rv;V$D3F33c&kAH(c/T)C/33	 5 
s   B.B(
B.(B..B>	c                   \         P                   P                  4       p/ RVbRV R,          bR\        P                  ! 4       bRVP                  R4      bRVP                  bRVP                  4       bRV R,          bR	R
bRV P                  RR4      bRV R,          bR\        \        V P                  R^ 4      4      ^d,          ^4      bR\        \        V P                  R^ 4      4      \        ,          ^4      bR\        4       bRV P                  R^ 4      bR\        V P                  R^ 4      V P                  R^ 4      ,
          ^4      bRV P                  R^ 4      bRV P                  R^ 4      bRR/CpVR8X  d   Ve   TP                  RTR\        V^4      R\        W R,          ,
          V R,          ,          ^d,          ^4      RT;'       g    ^ ^ 8  d   R MR!R"VR#\        \        P                  ! 4       V P                  R$\        P                  ! 4       4      ,
          4      /4       R%p  \        V4      ;_uu_ 4       p\        P                  ! V4      p	RRR4       X	P!                  T4       \        TR&4      ;_uu_ 4       p\        P"                  ! Y^\$        R'7       RRR4       R#   + '       g   i     L]; i   . p	 Lf; i  + '       g   i     R# ; i    R# ; i)(u>   Shared with paper bot — feeds the same trade_analytics.json.eventr   r1   time_str%H:%M:%Shourday_of_week	directionsignal_typeMOMENTUMr   ?entry_pricemomentum_pctmomentum_rawmomentum_strengthbtc_volatilitymarket_yes_askmarket_spreadmarket_yes_bidr   	btc_price	entry_btcsourceLIVEexitN
exit_pricepnlpnl_pctoutcomeWINLOSSexit_reason	hold_secs
entry_timez!C:\kalshibot\trade_analytics.jsonwindentdefault)r/   r0   r=   strftimer   weekdayr<   r   rp   r   r   updater.   r   r9   loadrB   dumpr-   )
posr   r   r   r  r0   recordanalytics_pathr   rD   s
   &&&&&     r   log_analyticsr     s   





!CUS] 	TYY[ 	S\\*5	
 	SXX 	S[[] 	S- 	Z 	SWWVS1 	S/ 	U3sww~q'A#BS#H!L 	U3sww~q'A#BEW#WYZ[ 	/1 	SWW%5q9 	U377+;Q#?#''JZ\]B^#^`ab  	SWW[!4!" 	SWW[!4#$ 	V%F( :1:5a=5*=/A"ASEW!WZ]!]_`aSXXAN5;3tyy{SWW\499;-OOP
 	 ;N	n%%499Q<D%F.#&&!TYYtqRU-V&& &%r&&&Ds`   3K J2K %%K" 
K(K" 2K	=K K" K K	K" K	K" K" "K'c            	           \        R R4      ;_uu_ 4       p \        P                  ! \        V ^\        R7       RRR4       R#   + '       g   i     R# ; i    R# ; i)zC:\kalshibot\trade_log.jsonr  r  N)r   r9   r  	trade_logr-   )r   s    r   save_logr    s>    13771IIi1c: 8777Ds'   A #AA A	A A Ac
                    \          U
u. uF  qP                  R 4      R8X  g   K  V
NK  	  pp
T;'       g    T;'       g    ^ p\        VR,          ^4      p. p\         EF  pVP                  RVR,          4      p\        VVR,          ,
          VR,          ,          ^4      pVR,          '       d0   \        VVR,          ,
          VR,          ,          ^d,          ^4      M^ p\	        \
        P
                  ! 4       VP                  R\
        P
                  ! 4       4      ,
          4      pVP                  / RVR,          bRVR,          bR	VR	,          bR
RbRVP                  RR4      bRVR,          bRVbRVR,          bRVR,          bRVR,          bRVR,          bRVbRVbRVR,          bRVbR\        P                  P                  VP                  R\
        P
                  ! 4       4      4      P                  R4      b4       EK  	  / RRbR\
        P
                  ! 4       bRV bRVbRT;'       g    RbRV'       d   \        V^4      M^ bRT;'       g    ^ bR \        V^4      bR!VbR"T;'       g    ^ bR	T;'       g    R#bR$VbR%V	bR&VbR'VbR(Vbp \        R)R*4      ;_uu_ 4       p\        P                  ! VV\        R+7       R,R,R,4       R,# u up
i   + '       g   i     R,# ; i    R,# ; i)-r   r   g?current_pricer   r   r  r   r   r   r   r   r   r   targetstopcostpnl_absr   r   	held_secsentry_time_strr   modelivelast_updater   
btc_sourcerv    r   starting_balancehigh_water_mark
stop_levelr   r   bet_tiersession_haltedr   open_positionscompleted_tradeszC:\kalshibot\bot_state.jsonr  )r  N)r  r<   r   r'  r.   r=   rB   r/   fromtimestampr	  r   r9   r  r-   )btcsourcesrv   r   r   r   r   r%  r#  r&  r   exitshwmr$  pos_datar7   currentr  r   r  stater   s   &&&&&&&&&&            r   
save_stater1  
  sI   !>	1UU7^v%=QQ	E>

)
)W
)
)CsTz1%JH^%%=)9:1]#33qzA1EUVWdUeUe%1]#33q7GG#MqQkl		aeeL$))+&FFG	 
ak
ai
 an
 j	

 aeeFC0
 a.
 g
 ak
 ai
 aj
 ai
 g
 g
 aj
 i
  h//==lDIIK022:(:2F#
 	 0

%tyy{
S
&
17
 	5!$Q
 	GLLq	

 	5a=
 	j
 	HMM
 $/	0C0CV
 	H
 /
 	&
 +H
 7I%
E13771IIeQ, 87Q ?P 877Ds4   KKK0 /KK0 K-	'K0 -K0 0K5c           	         VR 8X  d   RMRpVR8X  d
   V R,          MV R,          p\         Tu;8:  d   \        8:  g   R?#  R?# \        W4V4      w  r\        ^\	        W,          4      4      p
\        Wz,          ^4      p\        V^\        ,           ,          ^4      p\        V^\        ,
          ,          ^4      p\        W,
          V
,          ^4      p\        W},
          V
,          ^4      pV^ 8  d   \        W,          ^4      M^ p\	        V R,          ^<,          4      p\	        V R,          ^<,          4      p\        RR@ 24       \        RVR8X  d   R	MR
 RV	 R24       \        RVR RV R,          R 24       \        RT	 R\        T;'       g    ^ 4      \        ,          R R24       \        RVR RV
 RVR 24       \        RVR RVR RV R24       \        RVR RVR R 24       \        R!V R"V R#24       \        R$R@ 24       \        V R%,          WjVR&4      w  ppV'       Ed-   VP                  R'R(4      p/ R%V R%,          bR'VbR)VbR*VbR+VbR,V
bR-VbR.VbR/VbR0\        P                  ! 4       bR1VbR2VbRV R,          bR3V	bR4T;'       g    ^ bR5V R,          bR6V R7,          bRV R,          /Cp\        P                  V4       \         P#                  V R%,          4       \$        P                  / VCR8R9R:\&        P&                  P)                  4       P+                  R;4      /C4       \-        VR94       \/        4        \        R<V 24       R=V	3# \        R>V 24       RV	3# )Ar~   r   nor   r   Fr   z
  z  LIVE TRADE  --  zYES  BTC UPzNO   BTC DOWN  []z  BTC       : $,.2fz  |  Floor: $r   z  Bet tier  :   (.1fzx threshold)z  Entry     : $.3fz  xz  =  $.2fz  Max gain  : +$z	  (exit $z)  [z:1 R:R]z  Max loss  : -$z	  (stop $)z  Expires   : zm rh     r   buyorder_idr!  r   r   r  r   r  r  r  r  r   r   r   r   r   r   r   r   entryr   r   z  ORDER PLACED  ID: Tz  ORDER FAILED: )FSKIPz>==============================================================)MIN_ENTRY_PRICEMAX_ENTRY_PRICEr   maxr.   r   PROFIT_TARGET	STOP_LOSSprintrp   r   r   r<   r=   r'  rB   traded_tickersaddr  r/   r0   r	  r  r  )r   r   r   r   rv   r   r   r   r   r   r   r  r  r  max_gainmax_lossrrminsr   okr]   r>  r  s   &&&&&&                 r   enter_traderN  7  s   $,%$D'+u}&#&:JK{=o=}@T=}@TXW5ICAs3,-.Ek)1-DkQ%67;FkQ]3Q7Dv+u4a8H{)U2A6H19Ah)1-1BF;'2-.DF;'",-D	D/	e}QQTUYTZZ[
\]	OId+=8N
OP	N4&CA$67I$I##Nl
[\	OK,CwfT#J
GH	XcN)F3<tB4w
OP	XcN)D:Q
?@	N4&4&
*+	Bvh-VH-tKOJB	r::j"-1x) 1:x 1 1k1+:K11%t1-5v1?Et1 TYY[1 +6y1 I	1 (/w	1 BH	1
 x}}11  	!21  	!21 F;/1 	c"6(+,lCl':x?P?P?T?T?V?_?_`j?klmc7#
$XJ/0Tz )*d{r+   c                  "   . p \          EF  p\        VR ,          4      w  r#rEVf   K  VR,          R8X  d   TMTpWaR&   VR,          pWg,
          V,          p\        Wg,
          VR,          ,          ^4      p	Rp
WaR,          8  d   RV^d,          R	 R
2p
MRWaR,          8:  d   RV^d,          R	 R
2p
M6\        P                  ! 4       VR,          ,
          R8  d   RV^d,          R R
2p
V
'       d   \	        VR ,          VR,          VR,          VR4      w  rV'       d   \        RV
 RV	R 24       \        P                  / VCRRRVRV	RV
R\        P                  P                  4       P                  R4      /C4       \        VRWiV
R7       \        4        V P                  V4       EK  \        RV 24       EK  \        RVR,          R8X  d   RMR  R!VR" R#VR" R$V^d,          R R%2	4       EK  	  V  F  p\         P                  V4       K  	  R# )&r   Nr   r   r  r   r   r  zTARGET HIT +r8  r}   r  z	STOP HIT r  i  z
TIME EXIT z+.1fsellz
  EXIT -- z  P&L: $+.2fr   r   r   r   reasonr   r   )r   r   r  z  SELL FAILED: z  HOLD  YESNOz  $r9  z->$r7  z%))r'  r   r   r=   r   rF  r  rB   r/   r0   r	  r  r  remove)to_closer  ybyanbnar/  r?  r   r  rR  rM  ress                r   monitor_positionsr\  h  s0   H~'H6:xV-22&O}%Ou,'/S\91=(m#,ws{3>Oq0QvF#)GCK;LA0NvYY[3|,,s2z'RU+VZI[[\=]F!#h-Vc'lGU[\GBVHHWTNCD    "mC  "m&,QVX_aikqs}  @H  @Q  @Q  @U  @U  @W  @`  @`  ak  @l  "m  nc6gX^_
$u-.Hc&k5&8UdC3uSkQTU\]`Taadelmpepqudvvxyz/ 0 c" r+   c                  B   \        RK4       \        R4       \        R4       \        RJ4       \        R4       \        R\        ^d,          R R\        ^d,          R R\        \        ,          R R	24       \        R
4       \        RJ4       \        4       p V e   \        RV R 24       V R8  pMRp^ p T p. p. pRp\        P
                  P                  V4      '       d    \        V4      ;_uu_ 4       p\        P                  ! V4      pRRR4       XP                  R. 4      pVP                  R. 4      p\        RVP                  RR4       R24       VP                  R. 4       F  p\        RV 24       K  	  V'       d   \        R4       M\        R4       \        RJ4       \        '       d7   \        P                  ! \        RR7      P!                  4        \        R4       M*\        P                  ! \"        RR7      P!                  4        \        P                  ! \$        RR7      P!                  4        \        P                  ! \&        RR7      P!                  4        \        R4       \)        ^4       F  p
\*        P,                  ! ^4       \.        ;_uu_ 4        \0        ;QJ d.    R \2        P5                  4        4       F  '       g   K   RM#	  R M! R \2        P5                  4        4       4      pRRR4       X'       g   K  \.        ;_uu_ 4        \2        R!,          ;'       g#    \2        R",          ;'       g    \2        R#,          pRRR4       \        R$XR% 24        M	  \        R&4       \        R'4       ^ pRpR(pT p  \*        P,                  ! \6        4       \*        P*                  ! 4       p\9        4       w  pppV'       g=   \        R)\:        P:                  P=                  4       P?                  R*4       R+24       K  \A        V4      R,,          \6        8  d%   \        4       pVe   Tp T;'       g    TpW8  d   T p\C        4       w  ppp\E        4       p\G        \H        4      ^8  pV'       d,   VR-,          V8w  d   \J        PM                  4        VR-,          pV'       g   Ve   \O        VVV 4      w  rV'       d   R.MVR/8X  d   R/M
VR08X  d   R0MR1 R2V R3V R42pV'       g   R5MJ\A        VR6,          ^<,          4       R7\A        VR6,          ^<,          4       R8VR9,          R R:VR;,          R 2p\        R)\:        P:                  P=                  4       P?                  R*4       R<VR% R=V R>V R?V R R)\G        \P        4       R@\R         R424       V'       d   \        R=V 24       \P        '       d   \U        4        \W        VVVVVVWVRA7	       \:        P:                  P=                  4       PX                  pR pV'       g   V'       g   V'       d   VRL9   d   \G        \P        4      \R        8  dt   VV,
          ^x8  dc   VR6,          \Z        8  dN   VR-,          \J        9  d9   V R8  d/   V'       g$   \]        VVVVVV 4      w  pp V'       d   TpEK  EK  EK  EK  EK"  EK%  EK(  EK+  EK.  EK1  EK4  EK7    + '       g   i     EL; i  \         d   p	\        RT	 24        Rp	?	EL{Rp	?	ii ; i  + '       g   i     EL; i  + '       g   i     EL; i  \^         d    \`         U!u. uF  p!T!P                  RB4      RC8X  g   K  T!NK  	  Mu up!i p"p!T"'       dk   \c        RD T" 4       4      p#\G        T" U!u. uF  p!T!P                  RE^ 4      ^ 8  g   K  T!NK   	  Mu up!i up!4      p$\        RFT$ R@\G        T"4       RGT#RH 24       \e        4         R# \         d1   p	\        RIT	 24       \*        P,                  ! ^
4        Rp	?	EK  Rp	?	ii ; i)M
z'  LIVE TRADING BOT  --  Kalshi KXBTC15Mz   Binance WS + Coinbase + KrakenzX  Bet tiers     : WEAK $0.75  |  BASE $1.00  |  MED $2.00  |  STRONG $3.50  |  MAX $5.00z  Profit target : +z.0fz%  |  Stop: -z%  |  R:R = r8  z:1z-  Dashboard     : C:\kalshibot\dashboard.htmlNz  Kalshi balance: $r:  r   TzC:\kalshibot\auto_params.json
good_hoursavoid_hoursu     ✅ Auto-params loaded (trades_analyzedr   z trades analyzed)notesz     u(     ⚠  Could not load auto_params.json: z1  SIGNAL ONLY MODE  --  fund Kalshi to trade livez  LIVE TRADING ENABLED)r  daemonz!  Binance WebSocket connecting...z  Waiting for price feeds...c              3   8   "   T F  q'       g   K  Vx  K  	  R # 5ire   rf   )rg   r7   s   & r   rj   run.<locals>.<genexpr>  s     6AAaas   	
Fr   r   r   z  Connected  BTC $r6  z  Slow, continuing anywayz  Running  |  Ctrl+C to stop
r   r4  r   z] No price datai,  r   z
warming upr~   r   r    z [r5  z
waiting...r   r   zs Y:r   z N:r   z]  BTC $r<  z  |  z  |  $/)r#  r   r   c              3   D   "   T F  qP                  R ^ 4      x  K  	  R# 5i)r   N)r<   )rg   r   s   & r   rj   re    s     :EqEE%NNEs    r   z
  Session: z wins  P&L: $rQ  z	  Error: zA=================================================================zB
=================================================================)r~   r   )3rF  rD  rE  r   osr   existsr   r9   r  r<   	ExceptionrP   	threadingThreadrK   startra   r[   r_   ranger=   rJ   r>   anyr?   valuesSCAN_INTERVALr{   r/   r0   r	  r.   r   r   r   rA   rG  clearr   r'  MAX_POSITIONSr\  r1  r   MIN_SECS_LEFTrN  KeyboardInterruptr  r   r  )%r   signal_onlyr#  r_  r`  auto_params_pathr   apnoteeri   hasr7   
last_entrylast_market_tickercurrent_tierstarting_balr0   r*  r+  rv   balr   r   r   r   warmupmom_strmkt_strcurrent_hourhour_blockedenteredr   r   r,  totalwinss%                                        r   runr    s;   	-	
34	
,-	&M	df	c 1#6mIcMRUCVVbcpqzcz{~b  @B  C  D	;=	&MmG#GC=12nO J2[8	ww~~&''	B&''1499Q<b'&&r2J&&3K.rvv6G/L.MM^_`w+UU4&>-B+ AC&(	&M|
48>>@12 1$?EEGM$7==?K5;;=	
()2Y

1Z#66###666C 39%OO
);OOvh?O &qh/0  	)*	*,JLL
F	JJ}%))+C!/!1C$H--113<<ZHIYZ 3x#~-!m?!G#/#6#63L0*1'3~$Hi#%F'!+F &*.@@$$&%+H%5"h2".xw"G&,lY_T\egm\mRXsy4zz{|  |A  AC  DP  CQ  QR  3SG*0lVK=PRT=T9U8VVWX[\bcn\opr\rXsWttxy  AJ  zK  LO  yP  PS  TZ  [c  Td  eh  Si  7jGC))--/88DEXcRVZWYZaYbbghogppvw~  @C  wD  DG  HK  LZ  H[  G\  \]  ^k  ]l  lm  n  oURv;'~!#sGT8Y'68 $,,00277L L"!]2N+m;j(3.{+m;x(>4( +FIsHdT[ \!$J  ) ( ? < / < 3  #  q (''
  	B<QC@AA	B( ZZ V ! 	 )F	1QUU7^v-EQQ	FEF:E::D1uQ!1CQQDEdV1SZLeD\RSJ 	IaS/"JJrNN	s    [ 3[
A2[ #/[?'[?)\\A?\' 3\' A/\' 4\' &\' 6C\' A\' \' #A\' \' [		[ [<#[77[<?\\$'`:]]+`^-
&^-
,5`$`-`.$``__main__)r=  rm   )r   NF)F__doc__ri  r"   r/   r=   r   r9   rl  rX   dotenvr   cryptography.hazmat.primitivesr   r   )cryptography.hazmat.primitives.asymmetricr   cryptography.hazmat.backendsr   rQ   rP   ImportErrorgetenvr3   r2   r   rD  rE  rB  rA  r   r   rt  rr  ru  r   r   r   r   r   r?   r@   rA   Lockr>   r'  r  setrG  r   r*   r4   rK   r[   r_   ra   r{   r   r   r   r   r   r   r   r  r  r1  rN  r\  r  __name__rf   r+   r   <module>r     s  
 C B B B  @ = 8L 99()99./- 	   

 D*dHdCD*dHdC 
	f1
k
&	$""4'R+Z/b#:JX zE E  Ls   D 	DD