
    i                     6   S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKJ	r	  Sr
SrSrSrSrS	rS
rSrSrSr0 SS_SS_SS_SS_SS_SS_SS_SS_SS_S S!_S"S#_S$S!_S%S&_S'S(_S)S*_S+S,_S-S._S/S00Er\" \R-                  5       5      r0 SS1_SS2_SS3_SS4_SS3_SS5_SS6_SS7_S S8_SS9_S"S:_S$S;_S/S<_S+S=_S%S>_S'S?_S)S@_SAS@SBSBSCSD.Er/ SES-SF0SG4PSHS+SI0SJ4PSKSFSISL.SM4PSNSOSASP.SQ4PSRSSSTSU.SV4PSWSSX0SY4PSZSS[0S\4PS]SS^0S_4PS`SSa0Sb4PScSSd0Se4PSfSgShSi.Sj4PSkS>SlS>SOSm.Sn4PSoSpS4S3SpSm.Sq4PSrSsStS5SuSm.Sv4PSwStSxSsSySm.Sz4PS{S|S}S~S|Sm.S4PSSS9S.S4PSSSaS.S4PSS7S6S.S4PSSSS.S4PSSCSBS.S4PSSCSCS.S4PSSCSCS7SS.S4PSSBSBS.S4PSSSSS.S4PSSSSSOS.S4PSS^SSSOS.S4PSSSSS.S4PSSSS>S.S4PSSSS.S4PSS9S8S.S4PSSSS.S4PSS^SS.S4PSSS8S.S4PSSSS.S4PSS%S0S4PSS%S0S4PSS%S0S4PSSSS.S4PSSSSaS.S4PSSSSS4S.S4PSSCSBSCS.S4PSSCSCSCS^S.S4PSSSFSS.S4PSS/S0S4PSS/S<0S4PSS/S0S4PSS=S3S.S4PSSSS.S4PrS rS rS rS rS rS rS r S r!S r"S r#S r$S r%S r&S r'S r(S r)\*S:X  a  \)" 5         gg)uG  
KALSHIBOT ITERATION ENGINE v5 — LEARNS AND BUILDS
====================================================
Each 30-minute run is a controlled experiment. Results are recorded.
The engine builds toward an optimal config by combining everything proven to work.

HOW IT LEARNS:
  1. Run a strategy with specific params
  2. Measure "recent_wr" (last 10 trades) = how this run performed
  3. Compare to previous run's recent_wr
  4. If it improved → mark those changes as "proven winners"
  5. If it hurt → mark as "losers", avoid/revert
  6. Next run: start from CHAMPION config + add proven winners + test ONE new thing
  7. Every 6th iteration: wild experiment to discover new things

ALSO TRACKS: Expected Value (EV) per trade = WR * avg_win + (1-WR) * avg_loss
  If EV < 0, risk/reward experiments are prioritized to fix losses-too-big issue.
  Breakeven WR = |avg_loss| / (avg_win + |avg_loss|)

GOAL: Combine all proven winners into one dominant config.
The bot can change ANYTHING — bets $0.01–$500, positions 1–100,
signal modes (EXP-only, MOM-only, LAG-only, all-three, any-two).
    N)defaultdictzC:\kalshibot\Automated\trackerz%C:\kalshibot\Automated\paper_trade.pyz+C:\kalshibot\Automated\trade_analytics.jsonz%C:\kalshibot\Automated\bot_state.jsonz5C:\kalshibot\Automated\tracker\iteration_history.jsonz,C:\kalshibot\Automated\tracker\learning.jsonz1C:\kalshibot\Automated\tracker\EXPERIMENT_LOG.txtz.C:\kalshibot\Automated\tracker\CHANGES_LOG.txtzC:\kalshibot\Automated\bot.pidzpC:\Users\ennis\AppData\Roaming\Claude\Claude Extensions\ant.dir.cursortouch.windows-mcp\.venv\Scripts\python.exe
SCORE_HIGH)   F   SCORE_MEDIUM)   <   BET_HIGH_MIN){Gz?g     @o@BET_HIGH_MAX)r   g     @@BET_MED_MIN)r   g     b@BET_MED_MAX)r        r@MAX_POSITIONS)   d   ENTRY_COOLDOWN)r   i  MOMENTUM_SECONDS)   ,  MOMENTUM_THRESHOLD)g-C6
?{Gz?LAG_WINDOW_SECS)r   x   LAG_MIN_BTC_MOVEMIN_MISPRICING)gMb`?gQ?MAX_ENTRY_PRICE)      ?gGz?MIN_ENTRY_PRICE)r   333333?PROFIT_TARGET)皙??TRAILING_STOP_PCT)gQ?r    	STOP_LOSS)皙?r#      &   r   g      @       @   
   gMb@?r	      ga2U0*C?g?gffffff?r   g)\(?gQ?g?FT)r!   r$   BLOCK_EARLY	BLOCK_MID
BLOCK_LATErr_tight_stopg{Gz?u;   R/R: Tight trailing stop (8%) — cut per-trade losses fastrr_high_profitg      ?uD   R/R: High profit target (75%) — let individual winners run furtherrr_combined_rr)r$   r!   u1   R/R: Combined — tight stop + high profit targetrr_cheap_entryr"   )r   r   uB   R/R: Only cheap contracts (≤0.55) — more upside room per traderr_selective   r   )r   r   u8   R/R: Higher bar for entry — only trade cleaner signalsscore_med_6   u+   Very low score bar — maximum trade volumescore_med_8r   u    Low score bar — high frequencyscore_med_15r   zMedium score barscore_med_20   u"   Raised score bar — quality focusscore_med_28   u!   High score bar — very selectivescore_high_45-   (   )r   r   z*Need all 3 signals (40+ needs EXP+LAG+MOM)bet_tinyr&   )r
   r   r   r   u'   Penny bets — pure data gathering mode	bet_smallg      ?u    Small bets — low risk learning
bet_mediumg      @g      .@g      @u#   Medium bets — moderate commitment	bet_large      I@g      4@u   Large bets — high conviction	bet_whaleg      T@r   g      9@u(   Whale bets — max conviction, max stakepositions_1r   )r   r   u'   Single position — total concentrationpositions_3   u%   3 positions max — near-concentratedpositions_10u    10 positions — moderate spreadpositions_502   u   50 positions — maximum spreadblock_early)r-   r.   zBlock early phase (>8 min left)block_early_midz"Only near+late phase (<4 min left)	late_only)r-   r.   r   r   u4   Late phase only — final minutes, highest certainty
all_phasesu$   All phases open — test no blockingexp_onlygQ?g~jt?)r   r   r   u%   EXP-only mode — disable MOM and LAGmom_only-C6*?#   )r   r   r   r   u%   MOM-only mode — disable EXP and LAGlag_only)r   r   r   r   u%   LAG-only mode — disable EXP and MOMexp_lagg-C6:?u!   EXP+LAG mode — disable MOM onlyexp_momga2U0*3?)r   r   r   u!   EXP+MOM mode — disable LAG onlymom_fast   )r   r   zFast momentum (25s window)
mom_mediumzMedium momentum (60s window)mom_slowr   g-C6J?zSlow momentum (120s window)	lag_tight)r   r   zTight LAG window (15s)
lag_mediumzMedium LAG window (35s)lag_wider   zWide LAG window (70s)misprice_low{Gzt?u-   Very low mispricing bar — catch small edgesmisprice_medzMedium mispricing barmisprice_highg?u&   High mispricing bar — only big edgesrequire_two_signals   *   )r   r   z2Force 2+ signals -- EXP alone = late junk (14% WR)exp_mom_focused)r   r   r   z/Lean into EXP+MOM combo -- data: 78% WR +57 PnLexp_mom_big_betsg       @)r   r   r   r   z7EXP+MOM + bigger bets -- high conviction on best signalmid_near_only)r-   r.   r/   z:Only mid+near phase (2-8 min) -- skip noisy early AND late	near_only)r-   r.   r/   r   z5Near phase only (2-4 min) -- highest certainty windowtight_entry_windowr    )r   r   r   z6Narrow entry price band -- avoid extremes with bad R/R
stop_tightg      ?z#Tight stop (25%) -- cut losses faststop_mediumz5Medium stop (40%) -- data baseline, breakeven WR ~53%
stop_loosez'Loose stop (60%) -- more breathing roomstop_plus_target)r%   r!   z535% stop + 50% target = 1.43:1 R/R, breakeven WR ~41%ideal_rrg333333?z230% stop + 60% target = 2:1 R/R, breakeven WR ~33%c                      [        U SS9 n[        R                  " U5      sS S S 5        $ ! , (       d  f       g = f!   Us $ = f)Nutf-8encoding)openjsonload)pathdefaultfs      )C:\kalshibot\Automated\tracker\iterate.pyrv   rv      s5    $)Q99Q< *))s   
= ,	= 
:= = Ac                     [        U SSS9 n[        R                  " XS[        S9  S S S 5        g ! , (       d  f       g = f)Nwrq   rr      )indentrx   )rt   ru   dumpstr)rw   datary   s      rz   saver      s,    	dC'	*a		$!S1 
+	*	*s   0
>c                 H   [         R                   R                  5       R                  S5      nSU SU  3n[        USS9   [	        [
        R                  R                  [        S5      SSS	9 nUR                  US
-   5        S S S 5        g ! , (       d  f       g = f!    g = f)N%Y-%m-%d %H:%M:%S[] Tflushziterate_run.logarq   rr   
)
datetimenowstrftimeprintrt   osrw   joinTRACKER_DIRwrite)msgtslinery   s       rz   logr      s    						 	)	)*=	>Brd"SE?D	$d"'',,{,=>gVZ[GGD4K  WVVs*   -B .BB 
BB B B!c                 4    US:  a  [        X-  S-  S5      $ S$ )Nr   r   r           )round)nds     rz   pctr      s    q1ueAECK+=#=    c                 ,    [        U[        X 5      5      $ )N)maxmin)vallohis      rz   clampr      s    s2s2|44r   c                     [         R                  " S[         R                  " U5       S3U [         R                  5      nU(       a  [	        UR                  S5      5      $ U$ )N^z\s*=\s*([0-9.]+)r   )researchescape	MULTILINEfloatgroup)contentnamerx   ms       rz   
read_paramr      sE    
		Qryy''78'2<<PA !5.w.r   c            	          [        [        SS9 n U R                  5       nS S S 5        [         Vs0 s H  o"[	        WUS5      _M     nnSW;   US'   SU;   US'   SU;   US	'   U$ ! , (       d  f       NI= fs  snf )
Nrq   rr   r   z&if   mins_left > 8.0: time_conf = 0.00r-   z&elif mins_left > 4.0: time_conf = 0.00r.   z&else:                 time_conf = 0.00r/   )rt   
BOT_SCRIPTreadSIMPLE_PARAMSr   )ry   r   pparamss       rz   get_current_paramsr      s{    	j7	+q&&( 
,4ABMqGQ**MFBDOF=DOF;DOF<M 
,	+Bs   A#A4#
A1c                  N
   [        [        / 5      n U  Vs/ s H  oR                  S5      S:X  d  M  UPM     nn[        U5      SSSSSSSSSSS0 0 0 S.nU(       d  U$ U Vs/ s H  oR                  S5      S:X  d  M  UPM     nnU Vs/ s H  oR                  S5      S	:X  d  M  UPM     nnU Vs/ s H  oR                  S
S5      PM     nn[        U5      US'   [        U5      US'   [	        [        U5      [        U5      5      US'   [        [        U5      S5      US'   U(       a!  [        [        U5      [        U5      -  S5      OSUS'   U(       a(  [        [        S U 5       5      [        U5      -  S5      OSUS'   U(       a(  [        [        S U 5       5      [        U5      -  S5      OSUS'   US   S-  nUS   nUS   n	[        Xx-  SU-
  U	-  -   S5      US'   US:  a1  U	S:  a+  [        [        U	5      U[        U	5      -   -  S-  S5      US'   OSUS'   USS  n
[        U
5      US'   [	        [        S U
 5       5      [        U
5      5      US'   [        S 5      nU H  nUR                  S S5      S:  a  S!/O/ UR                  S"S5      S:  a  S#/O/ -   UR                  S$S5      S:  a  S%/O/ -   nS&R                  U5      =(       d    S'nX   S(==   S-  ss'   X   S
==   UR                  S
S5      -  ss'   UR                  S5      S:X  d  M  X   S)==   S-  ss'   M     UR                  5        VVs0 s H  u  pU[        U5      _M     snnUS*'   [        S+ 5      nU H  nUR                  S,S-5      nUS.:  a  S/OUS0:  a  S1O	US2:  a  S3OS4nUU   S(==   S-  ss'   UU   S
==   UR                  S
S5      -  ss'   UR                  S5      S:X  d  Mv  UU   S)==   S-  ss'   M     UR                  5        VVs0 s H  u  pU[        U5      _M     snnUS5'   [        S6 5      nU H  nUR                  S7S5      nUS8:  a  S9OUS::  a  S;OUS<:  a  S=O	US>:  a  S?OS@nUU   S(==   S-  ss'   UU   S
==   UR                  S
S5      -  ss'   UR                  S5      S:X  d  M~  UU   S)==   S-  ss'   M     UR                  5        VVs0 s H  u  pU[        U5      _M     snnUSA'   U$ s  snf s  snf s  snf s  snf s  snnf s  snnf s  snnf )BNeventexitr   r   rE   )total_exits
total_winstotal_losseswin_rate	total_pnlavg_pnlavg_win_pnlavg_loss_pnlev_per_tradebreakeven_wr	recent_wrrecent_ncombosphasesscoresoutcomeWINLOSSpnlr   r   r   r   r   r   c              3   D   #    U  H  oR                  S S5      v   M     g7fr   r   Nget.0ts     rz   	<genexpr>analyze.<locals>.<genexpr>   s     !?$Q%%a..$    r   c              3   D   #    U  H  oR                  S S5      v   M     g7fr   r   r   s     rz   r   r      s     !A&Q%%a..&r   r   g      Y@g      ?r   r   r   r   ir   c              3   R   #    U  H  oR                  S 5      S:X  d  M  Sv   M     g7f)r   r   r   Nr   r   s     rz   r   r     s      L1%%	2Be2KQQs   '	'r   c                      SSSS.$ Nr   r   winstotalr    r   r   rz   <lambda>analyze.<locals>.<lambda>      Q3$Gr   	exp_scoreEXP	lag_scoreLAG	mom_scoreMOM+NONEr   r   r   c                      SSSS.$ r   r   r   r   rz   r   r     r   r   	secs_leftr   i  early   midZ   nearlater   c                      SSSS.$ r   r   r   r   rz   r   r   #  r   r   confidence_score7   z55+r@   z40-54rY   z25-39r'   z18-24zunder-18r   )rv   ANALYTICS_PATHr   lenr   r   sumabsr   r   itemsdict)	analyticsr   exitsrr   lossespnlswr_fracavg_wavg_lrecent	combo_mappartscombokv	phase_mapsecsphase	score_mapscbs                         rz   analyzer     s   ^R(I!>	1UU7^v%=Q	E>E
!QssSdqr	3A <A%%	"2e";aD<=A%%	"2f"<aF=',-u!eeE1ouD-D	AlOFAnCIs5z2AjMc$i+AkN9=c$iD	1151AiLQUc!?$!??D	I1M[\AmU[c!A&!AA#f+MqQabAn
 }u$GE Egow%0GGKAnqyUQY!#e*E
0B"Cc"I1M. .34[F[AjMLLLcRXkZAkNGHIEE+a02%EE+a02%<EE+a02%< )6!Q&!QUU5!_455u$i&6v&>!&C&>  +4//*;<*;$!1d1g:*;<AhKGHIk3'8$s($r'W]%!Q&!%QUU5!_455u$i&6v&>!&C&>  +4//*;<*;$!1d1g:*;<AhKGHIUU%q)"fURV'BF[]_a[aPWgq!W"!Uua055u$il6&:a&?&:  +4//*;<*;$!1d1g:*;<AhKHK ? ==-F = = =s:   TT!T=T	T%T1TTT T!c                  8    [        [        5      SSS/ / / SSSSS.$ )Nr        8r   )champion_paramschampion_wrchampion_recent_wrchampion_evproven_winnersproven_loserstested_labelslast_recent_wrlast_evlast_n_tradesiterations_no_improvement)r   BASELINE_CONFIGr   r   rz   init_learningr  /  s2    !/2 !# #%& r   c           
        ^ US   nUS   nUS   nU R                  SS5      nU R                  SS5      nU R                  SS5      nXX-
  n	X6-
  n
US:  a  XG-
  OS	n[        S
U SU SU
S S35        [        SUS SUS SUS SU	 35        U	S:  a8  X0S   :  a0  X0S'   US   U S'   X@S'   [        5       U S'   [        SU SUS S35        UR                  S5      mT(       Gaj  U	S:  Gac  U
n[        U4S jU S    5       S 5      n[        U4S! jU S"    5       S 5      nUS#:  a  U(       a-  US$==   S%-  ss'   US&==   U-  ss'   US&   US$   -  US''   XS('   OC[        U4S) j[         5       S 5      nU(       a"  U S   R                  TUS%   US*   S%UUUS+.5        [        S,T S-US. S/US S035        OvUS1::  a]  U(       a)  US$==   S%-  ss'   US&==   U-  ss'   US&   US$   -  US''   OU S"   R                  TS%UUS2.5        [        S3T S4US. S535        O[        S6T S4US S735        US8:  a  SU S9'   OU R                  S9S5      S%-   U S9'   U S   R                  S: S;9  X0S'   X@S'   XPS'   U $ )<z
After a run completes, evaluate its results and update what we know.
Primary signal: recent_wr (last 10 trades, reflects THIS run's performance).
Secondary signal: ev_per_trade (ensures we're not winning more but losing bigger).
r   r   r   r  r   r  r  r  r   zLearning update: recent_wr=z% (prev=z
%), delta=z+.1f%  EV/trade=$+.4fz (prev=$z), ev_delta=z, new_trades=r*   r  r   r  r  r  zNEW CHAMPION: recent_wr=z% EV=$u    — params savedhypothesis_labelc              3   <   >#    U  H  oS    T:X  d  M  Uv   M     g7flabelNr   )r   r|   
last_labels     rz   r   "update_learning.<locals>.<genexpr>`  s     _(B1jT^F^QQ(B   	r  Nc              3   <   >#    U  H  oS    T:X  d  M  Uv   M     g7fr&  r   )r   lr(  s     rz   r   r)  a  s     _(A1jT^F^QQ(Ar*  r  g      @runsr   total_delta	avg_deltalast_ev_deltac              3   <   >#    U  H  oS    T:X  d  M  Uv   M     g7fr   Nr   )r   hr(  s     rz   r   r)  k  s     N'7!Q4:;MAA'7r*  r}   )r'  r   descr-  r.  r/  r0  zWINNER confirmed: z (+.1fz% WR, EV_delta=)g      )r'  r-  r.  r/  zLOSER confirmed:  (z% WR delta)z	NEUTRAL: u   % delta — not enough to call)r)   r  c                     U S   * $ )Nr/  r   )r|   s    rz   r   !update_learning.<locals>.<lambda>  s
    1[>/r   key)r   r   r   nextHYPOTHESIS_QUEUEappendsort)learning	last_itercurrent_analysiscurrent_recent
current_ev	current_nlast_recentr  last_n
new_tradeswr_deltaev_deltadeltawinner_entryloser_entryhypr(  s                   @rz   update_learningrO  >  s@    &k2N%n5J%m4I\\"2A6K\\)V4G\\/15F#J-H)06)9%sH
%n%5Xk]*U]^bTccdef,z$'x~\(SWXefpeqrs Q>5I,JJ)7%&)9*)E)3);)="#&~&6fZ<MM^_` 12JjAo _1A(B_aef_(A_aefC<V$)$]+u4+/;M/J\Z`Ma/a[)08_-N'7NPTU-.55(2(+A(+A()(-(-)17  $ZLE#;ohW[_\]^_d]F#q(#M*e3*.9-.H;W]K^.^K()00#-#$#(#(	2  #J<r%KHI)J<r%5TUV C<45H014<LLA\^_4`cd4dH01 ##(A#B "0!+Y!*_Or   c                   ^ US   nUS   nUS   nUS   nU S   nU S    Vs/ s H  oS   PM	     n	n[        U S   5      n
U R                  S	S
5      nUS:  a  SSSSSSSSSSSSSSS.S4$ / SQnUS
:  af  US:  a`  U HZ  mTU
;  d  M  TU	;  d  M  [        U4S j[         5       S5      nU(       d  M6  [	        SUS SU S T 35        S!TUS   S"US#    34s  $    [        U5      S#:  a  US$-  S
:X  a  0 n/ nU H+  nUR                  US%   5        UR                  US   5        M-     S&S'R                  USS( 5      -   nS)[        U5       S*S+R                  USS$ 5       3n[	        S,[        U5       S-35        S.UUU4$ [         H/  u  nnnUU
;  d  M  UU	;  d  M  [	        S/U S035        S1UUS2U 34s  $    U(       a  US
   nUSS  H}  nS3US    S'US    3nUU
;  d  M  0 nUR                  US%   5        UR                  US%   5        S4US    S5US6   S7 S8US    S5US6   S7 S93	n[	        S4US    S:US    35        S;UUU4s  $    US(:  a  S<SS=S>S?S@SA.SB4SCS>SSSDS$SA.SE4SFSGSGSHSISJS(SK.SL4SMSSS>S(SNSO.SP4/nU VVVs/ s H  u  nnnX;  d  M  UUU4PM     nnnnU(       a,  UU[        U5      -     u  nnn[	        SQU SRU 35        SSUUU4$ STSU0 SV4$ s  snf s  snnnf )Wze
Decide what to test next.
Returns (experiment_type, hypothesis_label, param_overrides, description)
r   r   r   r   r  r  r'  r  r  r   r   DATA_GATHERrA   r7   r   r&   r"   rL   r   rS   r`   F)r   r
   r   r   r   r   r   r   r   r   r-   r.   u7   Gathering market data with penny bets — need baseline)r0   r1   r2   r3   r4   r;   c              3   <   >#    U  H  oS    T:X  d  M  Uv   M     g7fr2  r   )r   r3  lbls     rz   r   "pick_experiment.<locals>.<genexpr>  s     G'7!Q43;AA'7r*  NEV=$z.4fz (negative, breakeven=u   %) — testing R/R fix: RR_FIXz	R/R FIX: r}   r   r   combine_r   rI   zCOMBINE: Testing all z proven winners together: , zCOMBINE run: merging z winnersCOMBINEz&EXPLORE: Testing untested hypothesis ''SINGLE_TESTzEXPERIMENT: combo_z
COMBINE2: z (avg+r/  r5  z%) + z%)z + COMBINE2
wild_whaler   r   i  rT   )r   r   r
   r   r   u'   WILD: Whale mode — one bet up to $500
wild_floodr   u.   WILD: Flood mode — 100 positions, penny betswild_late_bigTr,         )r-   r.   r
   r   r   r   zWILD: Late-only + big betswild_allthreer+   )r   r
   r   r   r   z2WILD: Require all 3 signals (score 50+) + big betszWILD: Stuck u    iters — trying WILDBASELINEbaseline_checkz8Running champion config unchanged to confirm baseline WR)	setr   r<  r=  r   r   updater>  r   )r@  analysisiteration_numr   r   ev	bkeven_wrwinnersr,  loserstestedstuck_iters	RR_LABELSrN  combinedlabelsr|   r'  r4  r   
top_winnerw2combo_labelwild_optionsr   r   untried_wildrS  s                              @rz   pick_experimentry    sT   
 =)A;'I>*B>*I+,G'/'@A'@!W:'@FAh/0F,,:A>K 	1uz!"D$ $T"$'-%+EPU	W
 JK 	K hI	Av!r'C& S%6G'7GN3$r#h&<YKG_`c_def$c3q6Ys1vh3GHH  7|q]Q.!3AOOAhK(MM!G*%  SXXfRaj11'G~5OPTPYPYZ`acbcZdPeOfg#CL>:;5(D11  0vt5#68qAB!5&L2GHH  0 QZ
!"+B":g#6"7qGFK&(
8 458-#Jw$7#8z+?VWZ>[[`acdkal`mmstv  xC  uD  EH  tI  IK  LjG!4 5SGFG"K4@@  a qC.13.023\^ sa.2D./13ce d/13/1QH ;< r2WZ01RIRT
 .:M\EAaQ_1Q\M".}s<?P/P"QE64,{m+=eWEFE6400 (".hiik B\ Ns   KK	Kc                     [        US   5      n[        U5      nU S;   a1  US    H(  nUR                  US   5        [        SUS    35        M*     UR                  U5        U$ )z
Start from champion config (best known), apply overrides, return final params.
This ensures every experiment builds ON TOP of what's already working.
r  )r[  r]  rd  rV  r  r   z  [proven] Applied winner: r'  )r   rh  r   )experiment_type	overridesr@  basefinalr|   s         rz   build_param_setr    so    
 (,-.D$ZE GG*+ALL8%-aj\:; ,
 
LLLr   c           
         [        [        SS9 nUR                  5       nS S S 5        / nU R                  5        GH  u  pgU[        ;   Ga  [
        U   u  p[        U[        5      (       a  [        U5      nUS;   n
U
(       a(  [        [        [        [        U5      X5      5      5      nO([        [        [        [        U5      X5      S5      5      nS[        R                  " U5       S3n[        R                  " USU S3W[        R                   S	9u  pUS
:  a(  UnUR#                  Xk45        [%        SU SU 35        GM  [%        SU S35        GM  US:X  a  SnU(       a  SOSnS[        R                  " U5       S3n[        R                  " USU 3W5      u  pUS
:  a8  UnUR#                  SU(       a  SOS45        [%        SU(       a  SOS 35        GM  GM  US:X  a  SnU(       a  SOSnS[        R                  " U5       S3n[        R                  " USU 3W5      u  pUS
:  a8  UnUR#                  SU(       a  SOS45        [%        SU(       a  SOS 35        GM0  GM3  US:X  d  GM<  SnU(       a  SOS nS[        R                  " U5       S3n[        R                  " USU 3W5      u  pUS
:  d  GM  UnUR#                  SU(       a  SOS45        [%        S!U(       a  SOS 35        GM     [        [        S"SS9 nUR'                  W5        S S S 5        U$ ! , (       d  f       GN= f! , (       d  f       U$ = f)#Nrq   rr   )r   r   r   r   r   r   r7   z^(z\s*=\s*)[0-9.]+(.*)$z\g<1>z\2)flagsr   z  SET  = z  WARN: z
 not foundr-   z!if   mins_left > 8.0: time_conf =z0.00z0.55(z\s*)([0-9.]+)YESNOz  EARLY phase: BLOCKEDOPENr.   z!elif mins_left > 4.0: time_conf =z0.80z  MID phase: r/   z!else:                 time_conf =z1.00z  LATE phase: r|   )rt   r   r   r   r   PARAM_RANGES
isinstanceboolr   r   intr   r   r   r   subnr   r>  r   r   )final_paramsrj  experiment_labelry   r   appliedparamvaluer   r   is_intval_strpatternnew_contentr   prefixnew_vals                    rz   apply_paramsr    s   	j7	+q&&( 
, G$**,M!!%(FB%&&e O OFc%eb"=>?eE%,$?CDBIIe,--ABGWWWwir.BGSUS_S_`NK1u%/0fUG3wi01hugZ01m#8F %f6G299V,-];GWWWwi.@'JNK1u%u4HIo5if%EFG 
 k!8F %f6G299V,-];GWWWwi.@'JNK1u%eUFGmIF#CDE 
 l"8F %f6G299V,-];GWWWwi.@'JNK1u%ue$GHn%YV$DEFc -f 
j#	0A	 
1 Nw 
,	+p 
1	0 Ns   L(L:(
L7:
M	c            	         [        S5        [        R                  R                  [        5      (       a   [        [        5       n [        U R                  5       R                  5       5      nS S S 5        [        R                  " SSS[        W5      /SSS9n[        SU S	UR                   35        [        R                  " [        5         [        R                  " / SQSSS9  [        R                   " S5        [        S5        Sn [        R"                  " SSU/[        R$                  SS9  [        S5        [        R                   " S5        ['        [(        0 5      nUR+                  SS5      S:  a%  [        SUS    S UR+                  S!S5       35        g[        S"5        g! , (       d  f       GNC= f! [         a  n[        S
U 35         S nAGN&S nAff = f!    GN= f! [        R                  " [        5        f !    f = f= f! [         a  n[        SU 35         S nAGNGS nAff = f! [         aA  n[        SU S35        Sn[        R                  " SSSU/SSS9  [        S5         S nAGN?S nAff = f)#NzKilling existing bot...taskkillz/Fz/PIDTr+   )capture_outputtimeoutzKilled python PID z: exit=zPID kill failed: )
powershell-NonInteractive-CommandzGet-WmiObject Win32_Process | Where-Object { $_.CommandLine -like '*Automated*paper_trade*' } | ForEach-Object { Stop-Process -Id $_.ProcessId -Force -ErrorAction SilentlyContinue }rb  zWMI cleanup note: r}   zStarting new bot...zRtitle Kalshibot-Automated && cd /d C:\kalshibot\Automated && python paper_trade.pycmdz/k)creationflags	close_fdszBot window launched via PopenzPopen failed (u#   ) — falling back to Start-ProcesszStart-Process cmd -ArgumentList '/k title Kalshibot-Automated && cd /d C:\kalshibot\Automated && python paper_trade.py' -WindowStyle Normalr  r  r  r   z+Bot window launched via PowerShell fallback	btc_pricer   u   Bot OK — BTC=$z  Balance=$balanceu.   Bot starting up (state not flushed yet — OK))r   r   rw   existsPID_FILErt   r  r   strip
subprocessrunr   
returncode	ExceptionremovetimesleepPopenCREATE_NEW_CONSOLErv   BOT_STATE_PATHr   )pfold_pidresultebot_cmdps_cmdstates          rz   restart_botr  O  s4   !"	ww~~h
	h2bggioo/0  ^^Zvs7|$L48"FF$WIWV5F5F4GHI 8$&F	- 	JJqM
  
;D'"$77	

 	+, 	JJrN$Eyya 1$u[12+eii	RS>T=UVW  	<=o  
  	)#A3'((	) D 8$D  & $%%&(  
;nQCBCD: 	
 	&7VL&*B	89::
;s   F: (F(,AF: 2G  H 	2H4 (
F72F: :
GGG( GG(  G%(H)HHHH
H1H,,H14
I?>6I::I?c                 P   [         R                   R                  5       R                  S5      nUS   nUS   n	US   n
US   nUS   nUS   nUS   nS	S
 3SU  SU 3SU SU 3SU 3S
 SU SU	 SU
 SUS 3SUS SU S3S[        U5       SSR	                  S US S  5       5       3SS/
nU H  u  nnUR                  SU S U 35        M     UR                  S5        [        [        S!S"S#9 nUR                  S	R	                  U5      S	-   5        S S S 5        US$:  a  S%OS&U S'3nS(U  SU S)U S*U S+U S,U S-U	 S.U S/U
 S0US S1US2   S S3US4   S S5US S6U S73n[        US8   R                  5       S9 S:9 H2  u  nnUSUS; SUS<   S= S>[        US?   US<   5      S@ SAUSB   SC S	3	-  nM4     USD-  nSE HS  nUSF   R                  US$S$SGSH.5      nUS<   S$:  d  M'  USUSI SJUS<   S= S>[        US?   US<   5      S@ SAUSB   SC S	3	-  nMU     USK-  nU H  nUSUSL   SM SNUSO   SP SQUSR    S	3-  nM     USS-  nU H  u  nnUSU S U S	3-  nM     US	-  n[        [        S!S"S#9 nUR                  U5        S S S 5        g ! , (       d  f       GNx= f! , (       d  f       g = f)TNr   r   r   r   r   r   r   r  r   zH========================================================================zITERATION #z  |  z  Type: z  |  Label:   
  Trades: z	  |  WR: z%  |  Recent(10): z%  |  P&L: $r#  z  EV/trade: $z  |  Breakeven WR needed: r!  z  Proven winners so far: u    — rX  c              3   *   #    U  H	  oS    v   M     g7fr&  r   r   r|   s     rz   r   write_logs.<locals>.<genexpr>  s     @aU`PQ7U`   r*    z  PARAMS SET THIS RUN:z    r  r   rq   rr   r   
PROFITABLEzNEEDS z% WR TO BREAK EVENz]
================================================================================
ITERATION #z
TYPE: z  |  LABEL: z
DESC: zk
================================================================================

DATA:
  Total trades  : z
  Win rate      : z%  (breakeven needs z%)
  Recent(10) WR : z%
  Total P&L     : $z
  Avg win       : $r   z
  Avg loss      : $r   z
  EV / trade    : $z  [z]

SIGNAL COMBOS:
r   c                     U S   S   * $ )Nr   r   r   )xs    rz   r   write_logs.<locals>.<lambda>  s    ad7m^r   r:  z<20r   z>3z trades  WR:r   z>5z%  P&L:$r   z+.2fz	
PHASES:
)r   r   r   r   r   r   r   z<10 z
CURRENT PROVEN WINNERS:
r'  z<25z  avg_delta=+r/  r5  z%  runs=r-  z
PARAMS SET:
)r   r   r   r   r   r>  rt   CHANGES_LOGr   sortedr   r   r   EXP_LOG_PATH)rj  r{  r'  r4  ri  r  r@  r   r   wrrecr   rk  bk_wrrm  linesr   r	  ry   	ev_statusblockr  r   phr|   s                            rz   
write_logsr    s   ##%../BCB}%Az"B{#C{#C~&B~&E'(G VH
m_E".
?#<w7
TF(
QCy$6se<DzR
4y :5'C
#CL>tyy@aU\]_^_U`@a7a6bc
 E 1tA3c!%& 	LL	k3	1Q			% 4'( 
2 !#QfUG;M,NI?%t $|E7 +f  # $*5' 2% : ]+D1 2^,T2 3t9C	{ +E$ 8H-335;STq2eC[1W:b/c!F)AgJ>WXZ=[[cdefkdlmqcrrtuu U	]E+X""2q'EFW:>r"S1W:b/c!F)AgJ>WXZ=[[cdefkdlmqcrrtuuE , 
**E2aj%]1[>#2FhqQWykY[\\ 	E12aSA3b!! 	TME	lC'	2a	 
3	2M 
2	1L 
3	2s   0$J*J
J
J%c                     [        S5        [        S5        [        S5        [        [        / 5      n [        [        S 5      =(       d
    [	        5       nSU;  a  SUS'   SU;  a  SUS'   [        U 5      S-   n[        SU SUS	   S
 S[        US   5       35        [        5       nUS   nUS   nUS   nUS   nUS   n[        SU SU SU SUS   S 35        [        SUS SU SXX:  a  SOS S35        U (       a  [        XS   U5      n[        XU5      u  pp[        SU	 S U
 35        [        S!U 35        XS"   ;  a  US"   R                  U
5        [        XU5      n[        XU
5      n[        S#[        U5       S$35        [        X)XX>U5        U R                  U[        [        R                  R                  5       5      U	U
UUUUUUUS   U[        US   5      S%.5        [!        [        U 5        [!        [        U5        [        S&5        [#        5         [        SU S'35        [        S5        US   nS(US S)US*:  a  S+OS,U S-3 S3n[%        S.S 3S/S09  [%        S1U S2U	 S U
 3S/S09  [%        S!US S3  3S/S09  [%        S4U S5U S6U S7U 3S/S09  [%        S8US   S S9[        U5       3S/S09  [%        S:[        U5       S;S<R'                  S= US S>  5       5       3S/S09  [%        S S.3S/S09  g )?Nz<============================================================u1   KALSHIBOT ITERATION ENGINE v5 — LEARN AND BUILDr  r  r  r   zIteration #z | Champion WR=r  r5  z% | Winners=r  r   r   r   r   r   zData: z trades | overall=z% | recent=z	% | P&L=$r   r#  r"  z | Breakeven needs z% WR (OKzLOSING MONEYr6  zExperiment: [r   r  r  zApplied z parameter changes)	iteration	timestampr{  r$  descriptiontrades_seenr   r   r   r   r   applied_paramsn_winners_knownz!Restarting bot with new params...z
 complete.rU  r7  r   r  zneeds z% WRr   Tr   z  ITERATION #z | [A   r  z | WR: z% | Recent: z% | z  P&L: $z | Params changed: z  Proven winners (z): rX  c              3   *   #    U  H	  oS    v   M     g7fr&  r   r  s     rz   r   main.<locals>.<genexpr>&  s     9ZkG*kr  r*   )r   rv   ITER_LOG_PATHLEARNING_PATHr  r   r  rO  ry  r>  r  r  r  r   r   r   r   r  r   r   )historyr@  rj  ri  r   r  r  rk  bkexp_typer'  r|  r4  r  r  rm  ev_lines                    rz   mainr    s   M;<M]B'G]D)<]_H H$"( $L1$M+m_OH=Q4RSV3WWcdghp  rB  iC  eD  dE  	F  G yH
=
!A
:
B
;
C
>
"B
>
"B&%bTSE8KCXY]B^_`,r$i22$fRXTSa<bbcde "8R[(C (7x='Y$HY-zE7+,"TF _--!((/ #8AL <>G(3w<. 234 }XQ NN* !2!2!6!6!89%"! %k2$ *:!;<  	 ! +,M+m_J/0M '(GRIR1F2$d:KLANG	Bvh-t$	M-XJb
@M	BtCRyk
$'	JqcLT'
C4P	HXk*400CCL>
RZ^_	s7|nC		9ZgVXWXk9Z0Z/[
\dhi	VHB-t$r   __main__)+__doc__ru   r   r   r  sysr  r   collectionsr   r   r   r   r  r  r  r  r  r  
PYTHON_EXEr  rg  keysr   r  r=  rv   r   r   r   r   r   r   r  r  rO  ry  r  r  r  r  r  __name__r   r   rz   <module>r     s  . 5 4 4 4 # 39
?9I@EB2 A
:: = =	
 = = ; < ; + ; + + ? ?  ?!" ?#$ ?%( L%%'(
B$bD($ 4 ' Q	 )"	
 &
 #5b r .v  ' e / t /3uD"g -t4VX	g /40_ag tdKLNg TdK]_g "FSUg  *0]^!g" *0RS#g$ +0BC%g& +0TU'g( +0ST)g* b"=?kl+g0 dSWhlm@B1g4 dSWhlm9;5g8 eTXimn<>9g< uUYjop79=g@ vV[lqrACAgH bAEnoIgJ bAElmKgL qAEghMgN qAEfgOgT DuEGhiUgV DtDGklWgX DtUWklmRTYg\ EFHno]gb ebgh>@cgf f",1UL>@ggl 26.3uN>@mgr echi:<sgv Echi:<wg~ BfMOklg@ BfMOmnAgB CvNPmnCgH 26JLdeIgJ 26JLefKgL 26JLcdMgR (%02abSgT (%02IJUgV (%02Z[Wg\ RrBPR]g` ffhiMOagd f-0FUWegj DuTXYXZkgn DtSWiklSUogr afgTVsgz +t,>@{g~ +t,PRgB +t,BDCgF tdCPRGgJ tdCMOKg T2 > 4/GTYx_jD(<~<~AHU%n zF r   