
    \"jGY                    J   d dl 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 edz  Z eej                                                  Z ed	           G d
 d                      Zd$dZd%dZefddd&dZd'ddd(d Zd)d"Zed#k    r e e                      dS )*    )annotationsN)	dataclassreplace)Path)Any)	BotConfigPROJECT_ROOTzstrategy_presets.jsonT)frozenc                  F    e Zd ZU ded<   ded<   ded<   ded<   dZded	<   d
S )StrategyPresetstrstrategy_idlabelsourcedict[str, Any]
parameters ztuple[str, ...]tagsN)__name__
__module____qualname____annotations__r   r       G/home/agent/projects/CryptoTradingBot/Crypto_Agent/strategy_registry.pyr   r      sM         JJJKKKDr   r   rowr   returnc                ~   t          t          | d                   t          |                     d          p| d                   t          |                     d          pd          t          |                     d          pi           t	          d |                     dd          D                       	          S )
Nr   r   r   unknownr   c              3  4   K   | ]}t          |          V  d S N)r   ).0tags     r   	<genexpr>z_as_preset.<locals>.<genexpr>   s(      ;;3s88;;;;;;r   r   r   )r   r   r   r   r   )r   r   getdicttuple)r   s    r   
_as_presetr'      s    M*++#'''""8c-&8993778$$1	22--344;;swwvr':':;;;;;   r   list[StrategyPreset]c                 &   ddddddddd	d
dddddddddddddddddddddddd ddd!d"d#d$dddd%d&d'd(d)ddd*d+ddd,d-d.d/dddd0d1d2d d)d3d4d5d6ddd7d8d9d:ddd;d<d*d=dd>d?d@dAdBdddCdDdEdFddGddHd&dId3dJdKd)dLddddMdNdOdPdddd0d1d+d d)d3d@dQd6dddRdSdTdUddddd	dVddJdddAdWdddXdYdTdZddddd[d2d3d\ddd]dddd^d_d`dai dbddcdddd;dedfdgd@dhdidjdkdldmdndodpd<dqddrddsdtdud?dvdwdxd?dydJdzd(d*d{dd|d}d`d~i dbddcddddkdedfdgd@dhdidjdkdldmdndodpddqd*drdBdsdduddvddxd4dydwdd(d*d{dddddi dddbddcdddddedfdgddhdidjd;dlddndodpd%dqdddddBdddud?dvdwd?ddzd(d*ddddddi dddbddcdddddedfdgd@dhdidjdodldmdndodpddqd1ddddddduddvddd@dd(dddddddi dddbddcddddodedfdgd@dhdidjdkdlddndodpddqddddd>duddvdwdxddJd*d(dddddddi dddbddcdddddedfdgd@dhdidjdodldmdndodpddqd1dddd dd?dud?dvdwd?ddd(dddddddi dddbddcdddd;dedfdgd@dhdidjdodlddndodpd0dqddd(dddud(dvddxdd?dd+dddddddi dddbddcddddodedfdgdJdhdidjddlddndodpddqdddddGdddddudd)ddddBdddddddi ddēdbddcddddodedfdgddhdidjdkdlddndodpdœdqd[ddǓdrd+dsddddd d?ddwd?dd]d(dAdȜdg} dɄ | D             S )a  Hand-picked paper-only challengers derived from V59-V61 lessons.

    These are deliberately conservative: trade size is capped at current paper size,
    hard stops stay bounded, and every preset remains suitable for paper/backtest
    tournaments before any live-risk discussion.
    candidate_v62_anti_chop_contextzCandidate V62 Anti-Chop Contextzcandidate:context-filter)	candidatezcontext-awarez	anti-chop      g      I@i Z   g      @g?g?gffffff?g?   g      @)max_total_tradesdefault_leveragetrade_size_usdmin_volume_24hcooldown_minutesflash_crash_trigger_pctatr_sl_multiplierbreak_even_activation_pctv_shape_activation_pctv_shape_trail_dist_pctdead_fish_time_limit_minsmax_hard_stop_pct)r   r   r   r   r    candidate_v62_scalp_fast_reboundz Candidate V62 Scalp Fast Reboundzcandidate:fast-rebound)r+   scalpzfast-rebound   g      D@i -1-   gffffff@g333333?g      ?g?   g@candidate_v62_deep_capitulationzCandidate V62 Deep Capitulationzcandidate:deep-dip)r+   zstrict-triggerzdeep-dipi x   g      @g       @g333333?   g      @!candidate_v62_loose_trend_reboundz!Candidate V62 Loose Trend Reboundzcandidate:trend-rebound)r+   ztrend-upzlooser-stopi@x}<   g@g?g?#   g      @!candidate_v62_micro_size_explorerz!Candidate V62 Micro Size Explorerzcandidate:sample-builder)r+   zsample-builderz
micro-sizeg      4@i z g      @g333333?g      ?g      ?   g      @candidate_v62_quality_onlyzCandidate V62 Quality Onlyzcandidate:high-liquidity)r+   qualityzhigh-liquidity   ig      @g?g      ?   candidate_v63_loose_fast_decayzCandidate V63 Loose Fast Decayz$candidate:parameter-sweep:2026-05-29)r+   zsweep-winnerzloose-reboundz
fast-decay   %candidate_v64_squeeze_survival_strictz%Candidate V64 Squeeze Survival Strictz/candidate:pre-handover-lessons:squeeze-breakout)r+   
paper-onlypre-handover-lessonssqueeze-breakoutztight-survivalg333333@g@#candidate_v64_squeeze_survival_widez#Candidate V64 Squeeze Survival Wide)r+   rP   rQ   rR   survivalK   g?   )candidate_v65_signal_sampler_conservativez)Candidate V65 Signal Sampler Conservativez$candidate:research-sampler:near-miss)r+   rP   research-samplernot-championdata-collectionr0   r1   r2   wallet_equity_usdcg     @@risk_per_trade_pctposition_sizing_moderiskmax_position_margin_pctg      $@max_position_notional_pctg     F@min_order_notional_usdg      (@r3   r4   r5   crash_roe_trigger_pctg      "@r6   r7   gffffff?r8   r9   
   )r:   r;   max_scan_coins'candidate_v65_signal_sampler_aggressivez'Candidate V65 Signal Sampler Aggressive)r+   rP   rX   rY   rZ   zaggressive-sampleri[ g      @&candidate_v66_squeeze_breakout_samplerz&Candidate V66 Squeeze Breakout Samplerz-candidate:strategy-lab:grid_squeeze_w2p5_b1p2)r+   rP   rX   rY   rR   non-dropstrategy_familyvolatility_squeeze_breakoutg      .@g      ?g      N@squeeze_lookback_ticks   squeeze_max_band_width_pctsqueeze_breakout_pct)r8   r9   r:   r;   rd   %candidate_v67_trend_pullback_sma_vwapz%Candidate V67 Trend Pullback SMA/VWAPz,candidate:indicator-expansion:trend-pullback)r+   rP   rX   rY   	indicatorztrend-pullbacksmavwaptrend_pullback_sma_vwaptrend_pullback_min_rsig     A@trend_pullback_max_rsig     Q@trend_pullback_max_distance_pctg      ?*candidate_v68_bollinger_rsi_mean_reversionz*Candidate V68 Bollinger RSI Mean Reversionz,candidate:indicator-expansion:mean-reversion)r+   rP   rX   rY   ro   	bollingerrsizmean-reversionbollinger_rsi_mean_reversionmean_reversion_max_rsi!mean_reversion_band_tolerance_pctg?)r9   r:   r;   rd   (candidate_v69_squeeze_breakout_confirmedz(Candidate V69 Confirmed Squeeze Breakoutz/candidate:indicator-expansion:confirmed-squeeze)r+   rP   rX   rY   ro   rR   	confirmedrg   confirmed_squeeze_breakout(candidate_v73_multi_day_trend_investmentz(Candidate V73 Multi-Day Trend Investmentz-candidate:indicator-expansion:multi-day-trend)r+   rP   rX   rY   ro   z	multi-dayztrend-investmentmulti_day_trend_investment      multi_day_min_trend_pct#multi_day_max_pullback_distance_pcti  -candidate_v74_relative_strength_breadth_guardz-Candidate V74 Relative Strength Breadth Guardz(candidate:strategy-lab:grid_rs_l24_t4_m3)r+   rP   rX   rY   zrelative-strengthzbreadth-guardrg   relative_strength_rotationg       @g      >@    relative_strength_lookback_ticksrelative_strength_top_n"relative_strength_min_momentum_pct)relative_strength_min_positive_candidatesgffffff?)r7   r8   r9   r:   r;   rd   %candidate_v75_hybrid_survival_squeezez%Candidate V75 Hybrid Survival Squeezez%candidate:paper-learnings:v60-v66-v69)r+   rP   rX   rY   hybridrT   rR   zquality-whitelisthybrid_survival_squeezei  allowed_coins)WLDSUIENABTCETHLINKBCH)rm   r6   r7   r8   r9   r:   r;   rd   c                ,    g | ]}t          |          S r   r'   r!   r   s     r   
<listcomp>z+build_candidate_presets.<locals>.<listcomp>  s    ,,,JsOO,,,r   r   )rowss    r   build_candidate_presetsr   !   s    =60?$%$%"&",$&+.%(-1*-*.-/%( 	
 	
* >7.:$%$%"&",$&+.%(-1*-*.-.%( 	
 	
* =6*?$%$%"&",$'+.%(-0*-*--/%( 	
 	
* ?8/<$%$%"&",$&+.%(-0*-*--/%( 	
 	
* ?80A$%$%"&"+$&+.%(-0*-*--/%( 	
 	
* 810>$%$%"&",$'+.%(-0*.*--/%( 	
 	
* <5<P$%$%"&",$&+.%(-0*-*--/%( 	
 	
* C<Gm$%$%"&",$&+.%(-0*-*.-/%( 	
 	
* A:Gg$%$%"&",$&+.%(-1*-*.-/%( 	
 	
* G@<f"A"A !$ %e	
 %c ' *4 ,T )$ !) #B *3 ( $S ,T  )#!" )##$ .0%("$)  	
 	
: E><|"A"A !$ %e	
 %c ' *4 ,T )$ !) #B *3 ( $S ,T  )#!" )$#$ ./%("$)  	
 	
: D=Es!#@"A #A !$	
 %e %d ' *4 ,T )$ !* #B )" -c '  $S!" ,T#$ +.*.-/%("$-  	
 	
> C<D B!#<"A #A !$	
 %e %c ' *4 ,T )$ !* #B )$ )$ 23  $S!" ,T#$ +.*--/%("$-  	
 	
> HAD G!#A"A #A !$	
 %e %c ' *4 ,T )$ !* #B )$ 4S $S  ,T!" )##$ +.-/%("$+  	
 	
< F?G N!#?"A #A !$	
 %e %c ' *4 ,T )$ !* #B )" -c '  $S!" ,T#$ +.*.-/%("$-  	
 	
> F?E B!#?"A #A !$	
 %e %c ' *4 ,T )$ !* #C *3 6s $S  ,S!" )##$ +.-1%("#+  	
 	
< KD@ F!#?"A #A !$	
 %e %c ' *3 ,T )$ !* #C 3B *1 5c  <Q!" $S#$ .1*-*--0%("$/  	
 	
@ C<= S!#<"A #A !$	
 %e %d ' *4 ,T )$ !* #B  !S *3 (  )"!" -c#$ ),%(-1*-*.-/%("$3   	
  	
AADD -,t,,,,r   )include_candidatespath
str | Pathr   booldict[str, StrategyPreset]c                  t          |           }|                                r(t          j        |                    d                    ndg i}d |                    dg           D             }|r!|                    t                                 i }|D ],}|j        |v rt          d|j                   |||j        <   -|S )Nzutf-8)encodingpresetsc                ,    g | ]}t          |          S r   r   r   s     r   r   z)load_strategy_presets.<locals>.<listcomp>  s    AAA3z#AAAr   zDuplicate strategy_id: )
r   existsjsonloads	read_textr$   extendr   r   
ValueError)r   r   preset_pathrawr   by_idpresets          r   load_strategy_presetsr     s    t**KALASASAUAU
j$*[**G*<<
=
=
=\egi[jCAA#'')R*@*@AAAG 2.00111')E + +&&Kv7IKKLLL$*f !!Lr   )runtime_dirr   baseBotConfig | Noner   Path | Noner   c                   |pt          j                    }d | j                                        D             }|6t	          |                                                                          |d<   t          |fi |S )Nc                ,    i | ]\  }}|t           v ||S r   )CONFIG_FIELDS)r!   keyvalues      r   
<dictcomp>z$preset_to_config.<locals>.<dictcomp>  s)    ```
U3R_K_K_eK_K_K_r   r   )r   	from_filer   itemsr   
expanduserresolver   )r   r   r   cfg	overridess        r   preset_to_configr     s}    

')%''C``f.?.E.E.G.G```I#'#4#4#?#?#A#A#I#I#K#K	- 3$$)$$$r   intc                    t                      } t          dt          |                       |                                 D ]=}t          d|j         d|j         dd                    |j                   d           >dS )NzStrategy presets: z- z: z [z, ]r   )r   printlenvaluesr   r   joinr   )r   r   s     r   mainr     s    #%%G	
-s7||
-
-....."" T TR6%RRRR6;9O9ORRRSSSS1r   __main__)r   r   r   r   )r   r(   )r   r   r   r   r   r   r    )r   r   r   r   r   r   r   r   )r   r   )
__future__r   r   dataclassesr   r   pathlibr   typingr   configr   r	   PRESETS_FILEset__dataclass_fields__keysr   r   r'   r   r   r   r   r   
SystemExitr   r   r   <module>r      s   " " " " " "  * * * * * * * *             * * * * * * * *55I27799:: $          I- I- I- I-X .: Y]      %jn % % % % % %    z
*TTVV

 r   