
     j!S                       d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
mZ d dlmZmZmZ d dlZd dlmZmZ d dlmZ d d	lmZ d d
lmZmZmZ d dlmZmZmZ  ed           G d d                      Z  ed           G d d                      Z! ed           G d d                      Z" ed           G d d                      Z# ed           G d d                      Z$ ed           G d d                      Z% ed           G d d                      Z& ed           G d d                      Z'dud!Z(dvd&Z)dwd)Z*dwd*Z+dxd-Z,dyd4Z-dzd7Z.d{d8Z/d|d<Z0d=d>d}dBZ1d~dDZ2dEdEd=dFddJZ3ddOZ4d=d>ddTZ5dUdVdWdd\Z6dVd]dd_Z7dVd]ddaZ8dej9        ej:        dbddcddddpZ;dddsZ<e=dtk    r e> e<                      dS )    )annotationsN)	dataclass)Path)mean)AnyMappingSequence)	BotConfigRuntimePaths)select_scan_coins)calculate_position_size)PositionStateexit_long_positionshould_enter_by_strategy_family)StrategyPresetload_strategy_presetspreset_to_configT)frozenc                  P    e Zd ZU ded<   ded<   ded<   ded<   ded<   dZded	<   d
S )Candlezint | floattsfloatopenhighlowclose        volumeN)__name__
__module____qualname____annotations__r        G/home/agent/projects/CryptoTradingBot/Crypto_Agent/historical_replay.pyr   r      sP         OOOKKKKKKJJJLLLFr$   r   c                  t    e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   ded	<   ded
<   ded<   ded<   dS )ReplayTradestrstrategy_idcoinr   entry_tsexit_tsentry_price
exit_pricesizepnl_usdexit_reasonintminutes_in_tradeNr   r    r!   r"   r#   r$   r%   r'   r'      s{         IIIOOONNNKKKNNNr$   r'   c                  j    e Zd ZU ded<   ded<   ded<   ded<   ded<   ded	<   ded
<   ded<   ded<   dS )ReplayResultr(   r)   r2   closed_tradesr   win_rateavg_pnl_usdtotal_pnl_usdmax_drawdown_usdprofit_factorscorezlist[ReplayTrade]tradesNr4   r#   r$   r%   r6   r6   -   sx         OOOLLLr$   r6   c                  8    e Zd ZU ded<   ded<   ded<   ded<   dS )BreakdownStatsr2   r7   r   r8   r9   r:   Nr4   r#   r$   r%   r@   r@   :   s?         OOOr$   r@   c                  $    e Zd ZU ded<   ded<   dS )TradeBreakdownszdict[str, BreakdownStats]by_coinby_exit_reasonNr4   r#   r$   r%   rB   rB   B   s*         &&&&------r$   rB   c                  V    e Zd ZU ded<   ded<   ded<   ded<   ded	<   d
ed<   ded<   dS )WalkForwardResultr(   r)   r6   	aggregatelist[ReplayResult]segmentsr2   winning_segmentslosing_segmentsr   stability_scorerB   
breakdownsNr4   r#   r$   r%   rF   rF   H   sf             r$   rF   c                  .    e Zd ZU ded<   ded<   ded<   dS )CoinSliceReportztuple[str, ...]excluded_coinsincluded_coinslist[WalkForwardResult]resultsNr4   r#   r$   r%   rO   rO   S   s6         ########$$$$$$r$   rO   c                  .    e Zd ZU ded<   ded<   ded<   dS )ParameterSweepResultr(   r)   z#dict[str, int | float | str | bool]
parametersrF   resultNr4   r#   r$   r%   rU   rU   Z   s6         3333r$   rU   rowMapping[str, Any]returnc                R   t          t          |                     dd                    dz  t          | d                   t          | d                   t          | d                   t          | d                   t          |                     dd	          pd	          
          S )Ntr   g     @@ohlcvr   )r   r   r   r   r   r   )r   r   get)rX   s    r%   candle_from_hlrc   a   s    a!!F*3s8__3s8__#c(OOCHooSWWS#&&-#..   r$   candlesSequence[Candle]fallback_pricer   c                x   t          |           dk     r|dz  S g }t          | | dd                    D ]j\  }}|                    t          |j        |j        z
  t          |j        |j        z
            t          |j        |j        z
                                 k|s|dz  S t          |dd                    S )N   g{Gz?   i)	lenzipappendmaxr   r   absr   r   )rd   rf   rangesprevcurs        r%   _atrrr   l   s    
7||a$$F'!""+.. f f	cc#(SW,c#(TZ2G.H.H#cgX\XbNbJcJcddeeee %$$sttr$   pnlsSequence[float]c                    d}d}d}| D ]*}||z  }t          ||          }t          |||z
            }+t          |d          S )Nr      )rm   minround)rs   equitypeakmax_ddpnls        r%   _max_drawdownr}   w   s]    FDF , ,#4  VVd]++r$   c                    t          d | D                       }t          t          d | D                                 }|dk    r|rt          |d          ndS t          ||z  d          S )Nc              3  &   K   | ]}|d k    |V  dS r   Nr#   .0ps     r%   	<genexpr>z!_profit_factor.<locals>.<genexpr>   s&      ))a1q555555))r$   c              3  &   K   | ]}|d k     |V  dS r   r#   r   s     r%   r   z!_profit_factor.<locals>.<genexpr>   s&      ..1AQ..r$   r   rv   r   )sumrn   rx   )rs   gainslossess      r%   _profit_factorr      sv    ))4)))))E.......//F{{"'0uUAS0###r$   closedr2   c                0   | sdS t          |           }t          d | D                       |z  }t          t          |           d          }t	          t          |                     dz  }|dk     rdnd}t          ||dz  z   |d	z  z   |z
  |z
  d
          S )Ng       c              3  &   K   | ]}|d k    dV  dS r   ri   Nr#   r   s     r%   r   z_score.<locals>.<genexpr>   s&      ,,a!ee1eeee,,r$   g      @gffffff?   g      ?r   g      ?g?rv   )r   r   rw   r   rn   r}   rx   )rs   r   avg_pnlr8   pf
dd_penaltysample_penaltys          r%   _scorer      s     t4jjG,,d,,,,,v5H	^D!!3	'	'B]4(())D0J"QJJSSCN8c>)BH4zANRTUVVVr$   presetr   candles_by_coinMapping[str, Sequence[Candle]]volumesMapping[str, float]c               &  " t          | t          j                              }t          t	          ||                    }i }g }i }g }|                                D ]g\  }	}
t          |
          }t          |          D ]C\  }}|                    t          |j
                  |	                                |||f           Dh|                    d            i }|D ]\  }}	}}}|	|vr|                    |	g                               ||j        f           |j        dv r+||	         t!          d|j        dz              d          ||	<   nA|j        dv r||	         dd          ||	<   n$||j        dz  z
  ""fd	||	         D             ||	<   |	|v r||	         \  }}}}t'          ||j        ||||
          }|j        r|j        |z
  |z  }|                    t)          | j        |	|j        |||j        |t/          |d          |j        t3          ||j        z
  dz            
  
                   |||	<   |                    |	d            ut7          |          |j        k    st7          ||	                   dk     r|r|t!          d|dz
                     j        nd}t=          |	||	         |j        |                    |	d          |t          |          ||||
  
        }|j         rtC          |t!          d|dz
            |dz            |j                  }t          |j"                  }|j        dk    r|j#        |z  |j        z  dz  n|j$        }t!          dtK          |j$        |                    }tM          |	|j        |||          }|j'        }|j        ||tQ          ||j        |j        |j#        |z  z
            f||	<   d |                                D             }t          |                                          D ]\  }	\  }}}}|                    |	          }|s"|j        |z
  |z  }|                    t)          | j        |	|j        t          |j
                  ||j        |t/          |d          dt3          t          |j
                  |j        z
  dz            
  
                   d |D             } t7          |          }!tS          | j        |!|!r*t/          tU          d | D                       |!z  d          nd| rt/          tW          |           d          ndt/          tU          |           d          tY          |           t[          |           t]          | |!          |	  	        S )Nc                    | d         S )Nr   r#   items    r%   <lambda>z'run_replay_for_preset.<locals>.<lambda>   s
    47 r$   )key>   confirmed_squeeze_breakoutvolatility_squeeze_breakoutrh   ri   >   trend_pullback_sma_vwapmulti_day_trend_investmentrelative_strength_rotationbollinger_rsi_mean_reversioniP<   c                ,    g | ]}|d          k    |S )r   r#   )r   rX   cutoffs     r%   
<listcomp>z)run_replay_for_preset.<locals>.<listcomp>   s(    "Z"Z"Z3QSYIYIY3IYIYIYr$   )entry_px
current_pxleveragestatenow_tscfgrv   )
r)   r*   r+   r,   r-   r.   r/   r0   r1   r3   r   r   r   )
r*   historycurrent_price
volume_24hbaseline_priceopen_positions	cooldownsr   r   market_histories   g      Y@g{Gz?)r*   r   r   stop_distance_pctr   )r+   high_px	atr_sl_pxc                h    i | ]/\  }}||                                 t          |          d          0S ))upperlist)r   r*   rd   s      r%   
<dictcomp>z)run_replay_for_preset.<locals>.<dictcomp>   s7    lllgdklDJJLL$w--"3lllr$   end_of_replayc                    g | ]	}|j         
S r#   r0   r   trades     r%   r   z)run_replay_for_preset.<locals>.<listcomp>       ...eEM...r$   c              3  &   K   | ]}|d k    dV  dS r   r#   r   s     r%   r   z(run_replay_for_preset.<locals>.<genexpr>   &      44a!ee1eeee44r$      )	r)   r7   r8   r9   r:   r;   r<   r=   r>   )/r   r
   	from_filesetr   itemsr   	enumeraterl   r   r   r   sort
setdefaultr   strategy_familyrm   squeeze_lookback_tickscrash_window_minutesr   r'   r)   r+   rx   reasonr2   poprj   max_total_tradesr   r   rb   enterrr   default_leverageatr_sl_multipliermax_hard_stop_pctrw   r   r/   r   r6   r   r   r}   r   r   )#r   r   r   r   
scan_coinsr   r>   r   timeliner*   rd   
normalizedidxcandleprice_historyr   coin_candlesr-   r/   r   r   decisionr|   baselineentryatratr_stop_pctr   sizinglast_by_coin	_leveragelastrs   r   r   s#                                     @r%   run_replay_for_presetr      sJ   
69#6#8#8
9
9C&w4455JKMN "F"$IGIH(..00 W Wg']]
$Z00 	W 	WKCOOU69--tzz||VZQTUVVVV	WMM**M+++:<M/7 B B+D&,z!!  r**112v|2DEEE"___"/"5s1c>X[\>\7]7]6]6^6^"_M$   %\  \  \"/"5eff"=M$#2R77F"Z"Z"Z"Z-2E"Z"Z"ZM$>!!1?1E.Kx);6<bjrw  AC  IL  M  M  MH~ /|k1T9k & 2"^ +%|!#qMM (%("u~*=")D%E%E      #%	$""4...~#"666#mD>Q:R:RUV:V:V9EN<AsQw0553/!$' ,{{4--#~..*
 
 
 ; 	|C38$4$4cAg$=>MMCS122HSYS_bcScScC1C7&,F%OOili~L #D#c.C\*R*R S S,$l!"3  F ;Dr6<6<Z]ZoruZuKuvvv	$N4  mlI^I^I`I`lllL7;N<P<P<R<R7S7S  33{D)U%% 	zK'4/k*^$'NN#z#qMM' %..5>"Ab!HII
 
 
 	 	 	 	 /.v...D[[F&EKTs44d44444v=qAAAQT,09E$t**a(((cCIIq))&t,,$T**T6""
 
 
 
r$   r>   Sequence[ReplayTrade]c           
     *   d | D             }t          |          }t          ||r*t          t          d |D                       |z  d          nd|rt          t	          |          d          ndt          t          |          d                    S )Nc                    g | ]	}|j         
S r#   r   r   s     r%   r   z%_stats_for_trades.<locals>.<listcomp>  r   r$   c              3  &   K   | ]}|d k    dV  dS r   r#   r   s     r%   r   z$_stats_for_trades.<locals>.<genexpr>  r   r$   r   r   rv   )r7   r8   r9   r:   )rj   r@   rx   r   r   )r>   rs   r   s      r%   _stats_for_tradesr   
  s    ..v...DYYFEKTs44d44444v=qAAAQT,09E$t**a(((cCIIq))	   r$   c                   i }i }| D ]^}|                     |j        g                               |           |                     |j        g                               |           _t	          d t          |                                          D             d t          |                                          D                       S )Nc                4    i | ]\  }}|t          |          S r#   r   )r   r*   rowss      r%   r   z.aggregate_trade_breakdowns.<locals>.<dictcomp>  s'    ]]]:4(..]]]r$   c                4    i | ]\  }}|t          |          S r#   r   )r   r   r   s      r%   r   z.aggregate_trade_breakdowns.<locals>.<dictcomp>  s'    hhhLFD 1$ 7 7hhhr$   )rC   rD   )r   r*   rl   r1   rB   sortedr   )r>   by_coin_rawby_exit_rawr   s       r%   aggregate_trade_breakdownsr     s    02K02K D Duz2..55e<<<u0"55<<UCCCC]]HYHYH[H[A\A\]]]hhFS^SdSdSfSfLgLghhh   r$   segment_indexrI   dict[str, list[Candle]]c                    i }|                                  D ]U\  }}t          |          }|st          |          |z  |z  }t          |          |dz   z  |z  }|||         }	|	r|	||<   V|S Nri   )r   r   rj   )
r   r   rI   slicedr*   r   r   startendparts
             r%   _slice_candles_by_segmentr   !  s    &(F%++--    
d$ZZ
 	J-/8;*oo!23x?%)$ 	 F4LMr$      )rI   presetsSequence[StrategyPreset]rR   c                 
 t          d          g }| D ]Ȋ
t          
          }
fdt                    D             }t          d |D                       }t          d |D                       }|r t	          |t          |          z  d          nd}	|                    t          
j        |||||	t          |j
                                       t          |d	 d
          S )Nri   r   c           
     R    g | ]#}t          t          |                     $S r  )r   r   )r   indexr   r   rI   r   s     r%   r   z/run_walk_forward_tournament.<locals>.<listcomp>4  sH     
 
 
 "&*COUZ\d*e*eovwww
 
 
r$   c              3  0   K   | ]}|j         d k    dV  dS r   r:   r   r   s     r%   r   z.run_walk_forward_tournament.<locals>.<genexpr>8  s/      NNDt7IA7M7Ma7M7M7M7MNNr$   c              3  0   K   | ]}|j         d k     dV  dS r   r	  r
  s     r%   r   z.run_walk_forward_tournament.<locals>.<genexpr>9  s/      MM4d6H16L6LQ6L6L6L6LMMr$   r   r   )r)   rG   rI   rJ   rK   rL   rM   c                >    | j         j        | j        | j         j        fS N)rG   r=   rL   r:   rs    r%   r   z-run_walk_forward_tournament.<locals>.<lambda>D  s    !+*;Q=NPQP[Pi)j r$   Tr   reverse)rm   r   ranger   rx   rj   rl   rF   r)   r   r>   r   )r  r   r   rI   rS   rG   segment_resultswinninglosing	stabilityr   s    ```      @r%   run_walk_forward_tournamentr  /  sG   1hH')G  )&/7SSS	
 
 
 
 
 
 
x
 
 
 NNONNNNNMM?MMMMM@OXE'C$8$88!<<<UX	(*$$"%1)2BCC
 
 
 	 	 	 	 'jjtxyyyyr$   rH   c               J    fd| D             }t          |d d          S )Nc                4    g | ]}t          |           S r  )r   )r   r   r   r   s     r%   r   z)run_replay_tournament.<locals>.<listcomp>H  s*    eeeSY$V_gNNNeeer$   c                *    | j         | j        | j        fS r  )r=   r:   r7   r  s    r%   r   z'run_replay_tournament.<locals>.<lambda>I  s    !'1?AO)T r$   Tr  )r   )r  r   r   rS   s    `` r%   run_replay_tournamentr  G  s;    eeeee]deeeG'TT^bccccr$   r#   )exclude_coinsinclude_coinsrI   r  Sequence[str]r  c          
        t          t          d |D                                 }d |D             }i }|                                D ]*\  }	}
|	                                }||v r|r||vr%|
||<   +fd|D             }t	          |t          t          |                    t          | |||                    S )Nc                6    h | ]}|                                 S r#   r   r   r*   s     r%   	<setcomp>z(run_coin_slice_replay.<locals>.<setcomp>M  s     DDDdTZZ\\DDDr$   c                6    h | ]}|                                 S r#   r!  r"  s     r%   r#  z(run_coin_slice_replay.<locals>.<setcomp>N  s     666tzz||666r$   c                >    i | ]}|                     |d           S )r   )rb   )r   r*   r   s     r%   r   z)run_coin_slice_replay.<locals>.<dictcomp>W  s)    FFFtdGKKc22FFFr$   r   rI   )rP   rQ   rS   )tupler   r   r   rO   r  )r  r   r   r  r  rI   excludedallowedr   r*   r   symbolsliced_volumess     `          r%   run_coin_slice_replayr,  L  s    VDDmDDDEEFFH66666G*,F%++--  
dX 	vW,,vFFFFvFFFNVF^^,,+GV^^fggg   r$   base_idr(   params&Mapping[str, int | float | str | bool]c                ,   g }t          |                                          D ]V\  }}t          |                              dd                              dd          }|                    | d|            W| dz   d                    |          z   S )N.r   -m___)r   r   r(   replacerl   join)r-  r.  bitsr   value
safe_values         r%   _sweep_strategy_idr;  _  s    DV\\^^,, + +
UZZ''S1199#sCC
s))Z))****T>DIIdOO++r$   base_presetgrid0Mapping[str, Sequence[int | float | str | bool]]list[ParameterSweepResult]c                  t                    }g }t          j        fd|D              D ]}t          t	          ||                    }i | j        |}	t          | j        |          }
t          |
| j	         dd|	          }t          |g|||          d         }|                    t          |
||                     t          |d d	
          S )Nc              3  (   K   | ]}|         V  d S r  r#   )r   r   r=  s     r%   r   z&run_parameter_sweep.<locals>.<genexpr>j  s'      %@%@Cd3i%@%@%@%@%@%@r$   z sweepparameter_sweep)r)   labelsourcerV   r&  r   )r)   rV   rW   c                \    | j         j        j        | j         j        | j         j        j        fS r  )rW   rG   r=   rL   r:   r   s    r%   r   z%run_parameter_sweep.<locals>.<lambda>q  s+    dk.C.I4;Kfhlhsh}  iL  .M r$   Tr  )r   	itertoolsproductdictrk   rV   r;  r)   r   rC  r  rl   rU   r   )r<  r   r   r=  rI   keysvariantsvaluesr.  mergedr)   r   rW   s      `         r%   run_parameter_sweeprM  g  s$   ::D+-H#%@%@%@%@4%@%@%@A i ic$''((5K*5f5()@&IIK+BS?[?[?[du  CI  J  J  J,fXPWbjkkklmn,QW`fggghhhh(  !M  !M  W[  \  \  \  \r$   
   r   )top_nmin_samplesrS   Sequence[ParameterSweepResult]rO  rP  c               ~   dg}t          | d |         d          D ]\  }}|j        j        }|j        |k     rdnd}|                    | d|j         d|j        dd	|j        j        d
d|j         d|j        d
d|j	        dd|j
        dd|j        d
d|j         |            d                    |          S )NzParameter Sweepri   r    observation-only . : score=+.4f, stability=.2f, n=, win=, total=	, max_dd=, pf=z	, params=
)r   rW   rG   r7   rl   r)   r=   rL   r8   r:   r;   r<   rV   r7  )rS   rO  rP  linesr   r   rG   warnings           r%   render_parameter_sweep_reportrc  t  sP   Ewvva888 
 
	TK)	)2)@;)N)N%%TV } }d& } }	u } }RVR]Rmu } }(} }090Bp} }PYPgp} }0|} }<E<S|} }bfbq}sz} }	
 	
 	
 	

 99Ur$   rP  Sequence[WalkForwardResult]c               <   ddg}t          | d          D ]\  }}|j        }|j        |k     rdnd}d                    d |j        D                       }|                    | d	|j         d
|j        dd|j        dd|j         d|j	        dd|j
        dd|j        dd|j        dd|j        dd| d|            |j        j        rg }t!          |j        j                                        d d          d d         D ]6\  }	}
|                    |	 d|
j         d|
j        dd|
j	        d           7|                    dd                    |          z              |j        j        rg }t!          |j        j                                        d  d          d d!         D ]-\  }}
|                    | d|
j         d|
j        d           .|                    d"d                    |          z              d#                    |          S )$NHistorical Replay TournamentzMode: walk-forwardri   rS  rT  rU  z, c              3  (   K   | ]}|j         d V  dS )+.2fNr	  )r   segs     r%   r   z-render_walk_forward_report.<locals>.<genexpr>  s+      "Z"Z3c&7#>#>"Z"Z"Z"Z"Z"Zr$   rV  rW  rX  rY  rZ  r[  r\  , avg=r]  r^  r_  z, segments=[]c                    | d         j         S r   r	  r   s    r%   r   z,render_walk_forward_report.<locals>.<lambda>  s    Z^_`ZaZo r$   Tr  r   z:n=z,total=ri  z,win=z
   coins: z; c                    | d         j         S r   )r7   r   s    r%   r   z,render_walk_forward_report.<locals>.<lambda>  s    cghicjcx r$   r   z
   exits: r`  )r   rG   r7   r7  rI   rl   r)   r=   rL   r8   r9   r:   r;   r<   rM   rC   r   r   rD   )rS   rP  ra  r   rW   rG   rb  segment_totals	coin_bitsr*   statsreason_bitsr   s                r%   render_walk_forward_reportrs    s(   +-ABE 222 @ @V$	)2)@;)N)N%%TV"Z"Z&/"Z"Z"ZZZ V Vf( V V)/r V VTZTjr V V(V V090BlV VNWNclV V,_V V<E<V_V V )UV V <JV V MTV V	
 	
 	
 $ 	>I%f&7&?&E&E&G&GMoMoy}~~~  @B  AB  @B   C ~ ~e  D!|!|U-@!|!|I\!|!|!|hmhv!|!|!|}}}}LL		)(<(<<===+ 	@K!'(9(H(N(N(P(PVxVx  CG  "H  "H  "H  IK  JK  IK  "L i i""f#g#g1D#g#gUM`#g#g#ghhhhLL		+(>(>>???99Ur$   Sequence[ReplayResult]c               <   dg}t          | d          D ]s\  }}|j        |k     rdnd}|                    | d|j         d|j        dd	|j         d
|j        dd|j        dd|j        dd|j        dd|j	        d|            td
                    |          S )Nrg  ri   rS  rT  rU  rV  rW  rX  r[  r\  rZ  rk  r]  r^  r_  r`  )r   r7   rl   r)   r=   r8   r9   r:   r;   r<   r7  )rS   rP  ra  r   rW   rb  s         r%   render_replay_reportrv    s'   +,E 222 
 
V)/)=)K)K%%QS ] ]f( ] ]&,a ] ]I] ] ]?l] ].4.@l] ]OUOcl] ]-\] ]9?9M\]SZ] ]	
 	
 	
 	

 99Ur$   r   i  )
tls_verifyrequest_postsleep_fnmax_attemptsallow_stale_cachefresh_cache_ttl_secondsr*   interval
hours_back	cache_dirr   rw  boolrz  r{  r|  list[Candle]c       	   	        |                     dd           ||  d| d| dz  }
|
                                ret          j                    |
                                j        z
  |	k     r4t          j        |
                    d                    }d |D             S t          t          j                    dz            }||d	z  dz  z
  }d
| |||dd}d }t          dt          d|          dz             D ]}	  |d||d          }|                                 |                                }|
                    t          j        |          d           d |D             c S # t          $ r>}|}|t          d|          k     r |t          d|dz
  z                       Y d }~d }~ww xY w|rH|
                                r4t          j        |
                    d                    }d |D             S ||g S )NTparentsexist_okr4  zh.jsonutf-8encodingc                ,    g | ]}t          |          S r#   rc   r   rX   s     r%   r   z-fetch_hyperliquid_candles.<locals>.<listcomp>       333s##333r$   i  i  candleSnapshot)r*   r}  	startTimeendTime)typereqri   z https://api.hyperliquid.xyz/info   )jsonverifytimeoutc                ,    g | ]}t          |          S r#   r  r  s     r%   r   z-fetch_hyperliquid_candles.<locals>.<listcomp>  s     777CN3''777r$   rh   c                ,    g | ]}t          |          S r#   r  r  s     r%   r   z-fetch_hyperliquid_candles.<locals>.<listcomp>  r  r$   )mkdirexiststimestatst_mtimer  loads	read_textr2   r  rm   raise_for_status
write_textdumps	Exceptionr   )r*   r}  r~  r  rw  rx  ry  rz  r{  r|  
cache_filerawend_msstart_mspayloadlast_excattemptresponseexcs                      r%   fetch_hyperliquid_candlesr    sV    OOD4O000DDxDD*DDDDJ 4ty{{Z__->->-GGJaaaj--w-??@@33s3333t#$$F
T)D00H'8bjw}0~0~G!%HC<001455 
4 
4		4#|$FW]gqstttH%%'''--//C!!$*S//G!DDD773777777 	4 	4 	4HQ----qWq[122333	4
  4Z..00 4j--w-??@@33s3333Is   =A+E++
F354F..F3argvlist[str] | Nonec           	     ,   t          j                    }t          j        |          }t	          j        d          }|                    ddt          |j        d d                   pg d           |                    ddg d	           |                    d
t          d           |                    dd           |                    dt          d           |                    dt          dd           |
                    |           }|j        dz  }i }i }|j        D ]}	 t          |                                |j        |j        ||j                  }	n,# t$          $ r}
t'          d| d|
            Y d }
~
]d }
~
ww xY w|	rX|	||                                <   t)          t+          d |	D                       |j                  ||                                <   t/                      fd|j        D             }t3          ||||j                  }t7          ||j                  }|j        dz  }|j                            dd            |                     |d!"           t'          |           t'          d#|            d$S )%NzJRun side-effect-free historical replay tournament across strategy presets.)descriptionz--coins*rv   )BTCETHSOLHYPE)nargsdefaultz--strategies)v61_tight_survivalv60_survivalv59_1_frequency_boostcandidate_v62_anti_chop_context candidate_v62_scalp_fast_reboundcandidate_v62_deep_capitulationz--hours-back0   )r  r  z
--interval15m)r  z--min-samplesr   z
--segmentsr   z;Walk-forward segment count; use 1 for aggregate-only style.)r  r  helpcandle_cache)r}  r~  r  rw  zWARN z: candles unavailable: c              3  $   K   | ]}|j         V  d S r  )r   )r   r`   s     r%   r   zmain.<locals>.<genexpr>  s$      +C+CAH+C+C+C+C+C+Cr$   c                (    g | ]}|v |         S r#   r#   )r   sidpresets_by_ids     r%   r   zmain.<locals>.<listcomp>  s(    UUUc}@T@T}S!@T@T@Tr$   r&  rd  zhistorical_replay_report.txtTr  r  r  zReport: r   )!r
   r   r   from_configargparseArgumentParseradd_argumentr   allowed_coinsr2   
parse_argsruntime_dircoinsr  r   r}  r~  rw  r  printrm   r   min_volume_24hr   
strategiesr  rI   rs  rP  reports_dirparentr  r  )r  r   pathsparserargsr  rd   r   r*   r   r  r  rS   reportreport_pathr  s                  @r%   mainr    s   



C$S))E$1}~~~F
	d3;LRaR;P6Q6Q6rUrUrUrsss
c  <e  <e  <e  f  f  f
S"===
e444
c1===
3@}~~~T""D!N2I')G "G
 Y Y	,TZZ\\DM^b^m  zC  PS  P^  _  _  _DD 	 	 	<$<<s<<===HHHH	  	Y$(GDJJLL!$'+C+Cd+C+C+C(C(CSEW$X$XGDJJLL!)++MUUUUT_UUUG)'7GVZVcdddG'T=MNNNF#&DDKTD9996G444	&MMM	
"[
"
"###1s   *5E  
F	*FF	__main__)rX   rY   rZ   r   )rd   re   rf   r   rZ   r   )rs   rt   rZ   r   )rs   rt   r   r2   rZ   r   )r   r   r   r   r   r   rZ   r6   )r>   r   rZ   r@   )r>   r   rZ   rB   )r   r   r   r2   rI   r2   rZ   r   )
r  r  r   r   r   r   rI   r2   rZ   rR   )r  r  r   r   r   r   rZ   rH   )r  r  r   r   r   r   r  r  r  r  rI   r2   rZ   rO   )r-  r(   r.  r/  rZ   r(   )r<  r   r   r   r   r   r=  r>  rI   r2   rZ   r?  )rS   rQ  rO  r2   rP  r2   rZ   r(   )rS   re  rP  r2   rZ   r(   )rS   rt  rP  r2   rZ   r(   )r*   r(   r}  r(   r~  r2   r  r   rw  r  rz  r2   r{  r  r|  r2   rZ   r  r  )r  r  rZ   r2   )?
__future__r   r  rF  r  r  dataclassesr   pathlibr   
statisticsr   typingr   r   r	   requestsconfigr
   r   market_universer   position_sizingr   strategyr   r   r   strategy_registryr   r   r   r   r'   r6   r@   rB   rF   rO   rU   rc   rr   r}   r   r   r   r   r   r   r  r  r,  r;  rM  rc  rs  rv  postsleepr  r  r   
SystemExitr#   r$   r%   <module>r     s   " " " " " "        ! ! ! ! ! !             ) ) ) ) ) ) ) ) ) )  * * * * * * * * - - - - - - 3 3 3 3 3 3 W W W W W W W W W W U U U U U U U U U U $        $
 
 
 
 
 
 
 
 $	 	 	 	 	 	 	 	 $        $. . . . . . . .
 $                $% % % % % % % % $                $ $ $ $W W W Wr r r rj   	 	 	 	    fg z z z z z z0d d d d
 oq  RT  fg      &, , , , PQ 
\ 
\ 
\ 
\ 
\ 
\ \^rs 
 
 
 
 
 
 \]      2 QR 	 	 	 	 	 	$ Z"#'( ( ( ( ( (V" " " " "J z
*TTVV

 r$   