
    O"j                       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 d dlmZmZ i 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)i d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPZ edQR           G dS dT                      Zdnd[Zd\d]dodcZdpdgZdqdiZdrdsdlZedmk    r e e                      dS )t    )annotationsN)	dataclass)Path)Sequence)	BotConfigRuntimePaths)StrategyPresetload_strategy_presetsmax_total_tradesCTB_MAX_TOTAL_TRADESdefault_leverageCTB_DEFAULT_LEVERAGEcrash_roe_trigger_pctCTB_CRASH_ROE_TRIGGER_PCTtrade_size_usdCTB_TRADE_SIZE_USDwallet_equity_usdcCTB_WALLET_EQUITY_USDCrisk_per_trade_pctCTB_RISK_PER_TRADE_PCTposition_sizing_modeCTB_POSITION_SIZING_MODEmax_position_margin_pctCTB_MAX_POSITION_MARGIN_PCTmax_position_notional_pctCTB_MAX_POSITION_NOTIONAL_PCTmin_order_notional_usdCTB_MIN_ORDER_NOTIONAL_USDcrash_window_minutesCTB_CRASH_WINDOW_MINUTESflash_crash_trigger_pctCTB_FLASH_CRASH_TRIGGER_PCTatr_sl_multiplierCTB_ATR_SL_MULTIPLIERbreak_even_activation_pctCTB_BREAK_EVEN_ACTIVATION_PCTv_shape_activation_pctCTB_V_SHAPE_ACTIVATION_PCTv_shape_trail_dist_pctCTB_V_SHAPE_TRAIL_DIST_PCTdead_fish_time_limit_minsCTB_DEAD_FISH_TIME_LIMIT_MINSmax_hard_stop_pctCTB_MAX_HARD_STOP_PCTmin_volume_24hCTB_MIN_VOLUME_24Hcooldown_minutesCTB_COOLDOWN_MINUTESmax_daily_tradesCTB_MAX_DAILY_TRADESmax_daily_loss_usdCTB_MAX_DAILY_LOSS_USDstrategy_familyCTB_STRATEGY_FAMILYsqueeze_lookback_ticksCTB_SQUEEZE_LOOKBACK_TICKSsqueeze_max_band_width_pctCTB_SQUEEZE_MAX_BAND_WIDTH_PCTsqueeze_breakout_pctCTB_SQUEEZE_BREAKOUT_PCTtrend_pullback_min_rsiCTB_TREND_PULLBACK_MIN_RSItrend_pullback_max_rsiCTB_TREND_PULLBACK_MAX_RSItrend_pullback_max_distance_pct#CTB_TREND_PULLBACK_MAX_DISTANCE_PCTmean_reversion_max_rsiCTB_MEAN_REVERSION_MAX_RSI!mean_reversion_band_tolerance_pct%CTB_MEAN_REVERSION_BAND_TOLERANCE_PCTmulti_day_min_trend_pctCTB_MULTI_DAY_MIN_TREND_PCT#multi_day_max_pullback_distance_pct'CTB_MULTI_DAY_MAX_PULLBACK_DISTANCE_PCT relative_strength_lookback_ticks$CTB_RELATIVE_STRENGTH_LOOKBACK_TICKSCTB_RELATIVE_STRENGTH_TOP_N&CTB_RELATIVE_STRENGTH_MIN_MOMENTUM_PCT-CTB_RELATIVE_STRENGTH_MIN_POSITIVE_CANDIDATESCTB_ALLOWED_COINS)relative_strength_top_n"relative_strength_min_momentum_pct)relative_strength_min_positive_candidatesallowed_coinsT)frozenc                  B    e Zd ZU ded<   ded<   ded<   ded<   ded	<   d
S )StrategyCommandPlanstrstrategy_idz	list[str]commanddict[str, str]envr   log_pathpid_pathN)__name__
__module____qualname____annotations__     M/home/agent/projects/CryptoTradingBot/Crypto_Agent/multi_strategy_launcher.pyrY   rY   8   sF         NNNNNNNNrf   rY   presetr	   runtime_dir
str | Pathreturnr]   c                   t          |                                          dz  | j        z  }| j        t          |          ddddd}| j                                        D ]r\  }}t                              |          }|rQt          |t          t          f          r#d                    d |D                       ||<   `t          |          ||<   s|S )Nexperimentstruefalse1)CTB_STRATEGY_IDCTB_RUNTIME_DIRCTB_PAPER_TRADINGCTB_DRY_RUNCTB_TLS_VERIFYPYTHONUNBUFFERED,c              3  4   K   | ]}t          |          V  d S N)rZ   ).0items     rg   	<genexpr>z%build_strategy_env.<locals>.<genexpr>O   s(      (E(EtT(E(E(E(E(E(Erf   )r   
expanduserr[   rZ   
parametersitems	PARAM_ENVget
isinstancelisttuplejoin)rh   ri   experiment_rootr^   keyvalueenv_names          rg   build_strategy_envr   A   s    ;''2244}DvGYYO!-//#  C '--// + +
U==%% 	+%$// + #(E(Eu(E(E(E E EH #E

HJrf      max_parallelpresetsSequence[StrategyPreset]r   intlist[StrategyCommandPlan]c               2   t          |           d |         }g }|D ]z}t          |                                          dz  |j        z  }|                    t          |j        t          j        dgt          ||          |dz  |dz                       {|S )Nrm   zAutoTrader.pyzbot.logzbot.pid)r[   r\   r^   r_   r`   )	r   r   r}   r[   appendrY   sys
executabler   )r   ri   r   selectedplansrh   r   s          rg   build_strategy_command_planr   U   s    G}}]l]+H')E  {++6688=H6K]](*^_5"6;77$y0$y0
 
 
 	 	 	 	 Lrf   r   Sequence[StrategyCommandPlan]rZ   c           	         dg}| D ]B}|                     d|j         dd                    |j                   d|j                    Cd                    |          S )Nz!Multi-Strategy Paper Command Planz- z:  z | log=
)r   r[   r   r\   r_   )r   linesplans      rg   render_command_planr   d   sn    01E ^ ^\$*\\chht|.D.D\\T]\\]]]]99Urf   list[subprocess.Popen]c                   g }| D ]}|j         j                            dd           |j                             dd          }i t          j        |j        }t          j        |j	        ||t          j
                  }|j                            t          |j                  d           |                    |           |S )NT)parentsexist_okazutf-8)encoding)r^   stdoutstderr)r_   parentmkdiropenosenvironr^   
subprocessPopenr\   STDOUTr`   
write_textrZ   pidr   )r   	processesr   log_filer^   processs         rg   launch_plansr   k   s    I " """4$"???=%%cG%<<((tx("4<SR\Rcddd  W[!1!1G DDD!!!!rf   argvlist[str] | Nonec                :  	 t          j                    }t          j        |          }t	          j        d          }|                    dt          |j                             |                    dt          dd           |                    d	d
d            |                    ddd           |
                    |           }t                      	|j        p t          	                                          }	fd|D             }t          ||j        |j                  }t#          t%          |                     |j        r?t)          |          }t#          dd                    d |D                       z              nt#          d           dS )NzKPlan or launch isolated paper AutoTrader processes for selected strategies.)descriptionz--runtime-dir)defaultz--max-parallelr   zASafety cap; do not launch every preset at once against live APIs.)typer   helpz--strategies*)nargsr   z--launch
store_truez>Actually launch paper processes. Default only prints the plan.)actionr   c                (    g | ]}|v |         S re   re   )rz   sidall_presetss     rg   
<listcomp>zmain.<locals>.<listcomp>   s(    NNNC3+;M;M{3;M;M;Mrf   r   zLaunched PIDs: z, c              3  >   K   | ]}t          |j                  V  d S ry   )rZ   r   )rz   ps     rg   r|   zmain.<locals>.<genexpr>   s*      +J+J1CJJ+J+J+J+J+J+Jrf   z=Dry plan only. Re-run with --launch to start paper processes.r   )r   	from_filer   from_configargparseArgumentParseradd_argumentrZ   ri   r   
parse_argsr
   
strategiesr   keysr   r   printr   launchr   r   )
r   cfgruntime_pathsparserargsstrategy_idsr   r   r   r   s
            @rg   mainr   w   s   



C ,S11M$1~F
]5N1O1OPPP
(sA  EH  I  I  I
c4@@@

<>~T""D'))K?>d;+;+;+=+=&>&>LNNNN<NNNG'1APTPabbbE	
e
$
$%%%{ O ''	$))+J+J	+J+J+J"J"JJKKKKMNNN1rf   __main__)rh   r	   ri   rj   rk   r]   )r   r   ri   rj   r   r   rk   r   )r   r   rk   rZ   )r   r   rk   r   ry   )r   r   rk   r   )
__future__r   r   r   r   r   dataclassesr   pathlibr   typingr   configr   r   strategy_registryr	   r
   r   rY   r   r   r   r   r   ra   
SystemExitre   rf   rg   <module>r      sx   " " " " " "  				     



 ! ! ! ! ! !             * * * * * * * * C C C C C C C C'.'.' 8' *	'
 2' 2' 6' <'  !@' :' 6' <' 0'  !@' :'  :!'"  !@#' '$ 0%'& *''( .)'* .+', 2-'. ,/'0 :1'2 !"B3'4 65'6 :7'8 :9': &'L;'< :='> ()P?'@ <A'B *+TC'D '(NE' 'F  =*R1`(M' ' '	T $          ( tu         	 	 	 	    . z
*TTVV

 rf   