Ë
    KT±jÑF  ã                  óD  — d Z 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	Z	ddl
Z
ddlZddlZddlZ ee«      j#                  «       j$                  d   Ze	j(                  j+                  d ee«      «       ddlmZmZmZmZ ddlmZmZ ddlm Z m!Z!m"Z" dd	l#m$Z$m%Z%m&Z& ed
z  Z'd„ Z(d„ Z)d„ Z*d„ Z+d„ Z,d„ Z-e'fd„Z.e/dk(  r` ej`                  e ¬«      Z1e1je                  dee'¬«       e1jg                  «       Z4 e5 e.e4jl                  «      jo                  d¬«      «       yy)zKNon-promoting, deterministic incumbent accounting and archived-model audit.é    )ÚannotationsN)ÚPathé   )Ú	OOS_STARTÚSCORE_STARTÚ	TRAIN_ENDÚ	WFO_FOLDS)Únet_returnsÚwindow_metrics)ÚFEATURE_COLSÚgenerate_signalsÚ_score_to_signals)Ú
_data_pathÚ_load_winnerÚ_winner_pathz2results/mlp_measurement_audit_2026_09_21/baselinesc                óv   — t        j                  t        | «      j                  «       «      j	                  «       S )N)ÚhashlibÚsha256r   Ú
read_bytesÚ	hexdigest)Úpaths    úH/Users/jameslopez/projects/TradingBot25/tools/run_mlp_incumbent_audit.pyÚdigestr      s'   € Ü�>‰>œ$˜t›*×/Ñ/Ó1Ó2×<Ñ<Ó>Ð>ó    c                óÚ  — | ddg   j                  «       }|j                  t        j                  t        «      k\  }|dk(  r"t        j
                  d|j                  ¬«      }nË|dk(  r|}nÃ|dk(  r³|j                  d«      j                  j                  d«      j                  «       }||j                  d	d
¬«      j                  «       kD  j                  dd¬«      }||j                  j                  j                  «       j!                  |«      j#                  d«      z  }nt%        |«      ‚|j                  dd¬«      }|j'                  t(        «      |d<   || z  |d<   | |z  |d<   |S )zFDecide at close; first economic exposure and entry fee occur next bar.ÚtimeÚcloseÚcashF©ÚindexÚbuy_holdÚtrend_200_calendar_daysÚDÚ200DéÈ   ©Úmin_periodsr   ©Ú
fill_valueÚpositionÚexecute_entryÚexecute_exit)Úcopyr   ÚpdÚ	Timestampr   ÚSeriesr    Ú	set_indexr   ÚresampleÚlastÚrollingÚmeanÚshiftÚdtÚ	normalizeÚmapÚfillnaÚ
ValueErrorÚastypeÚint)ÚframeÚkindÚresultÚeligibler*   ÚpriceÚdecisionÚpreviouss           r   Ú	benchmarkrE      sF  € à�F˜GÐ$Ñ%×*Ñ*Ó,€FØ�{‰{œbŸl™l¬;Ó7Ñ7€HØˆv‚~Ü—9‘9˜U¨&¯,©,Ô7‰Ø	�Ò	Ø‰Ø	Ð*Ò	*Ø× Ñ  Ó(×.Ñ.×7Ñ7¸Ó<×AÑAÓCˆØ˜EŸM™M¨&¸c˜MÓB×GÑGÓIÑI×PÑPÐQRÐ_dÐPÓeˆØ˜fŸk™kŸn™n×6Ñ6Ó8×<Ñ<¸XÓF×MÑMÈeÓTÑT‰ä˜ÓÐØ�~‰~˜a¨Eˆ~Ó2€HØ!Ÿ™¬Ó-€Fˆ:ÑØ&¨(¨Ñ2€Fˆ?ÑØ&˜Y¨Ñ1€Fˆ>ÑØ€Mr   c                ó¨  — t        | «      j                  «       }t        j                  dt        j                  d|z   «      dd f   }g }d}t        t        | «      «      D ]n  }t        | j                  j                  |   «      r|�|j                  ||df«       d}t        | j                  j                  |   «      sŒ`|�t        d«      ‚|}Œp |� |j                  |t        | «      dz
  df«       g }t        |d«      D ]»  \  }\  }}	}
|dz   }t        t        j                  d|||	dz    z   «      dz
  «      }|t        | «      k  rt        ||   |z  «      nd}|j                  ||||	t!        | j"                  j                  |   «      t!        | j"                  j                  |	   «      |
||	kD  |d	z  |d
œ
«       Œ½ t%        j&                  |«      S )z?Attribute disjoint paid return intervals to their entry signal.ç      ð?r   NéÿÿÿÿFzOverlapping entriesTç        éd   )
ÚtradeÚentry_indexÚfirst_return_indexÚlast_return_indexÚ
entry_timeÚend_timeÚopenÚunfilled_terminal_entryÚnet_return_pctÚinitial_equity_pnl)r
   Úto_numpyÚnpÚr_ÚcumprodÚrangeÚlenÚboolr,   ÚilocÚappendr+   r;   Ú	enumerateÚfloatÚprodÚstrr   r.   Ú	DataFrame)ÚsignalsÚreturnsÚequity_beforeÚrowsÚactiveÚiÚoutputÚnumberÚentryÚendÚopenedÚfirstÚvalueÚcontributions                 r   Úledgerrq   3   sÅ  € ä˜'Ó"×+Ñ+Ó-€GÜ—E‘E˜"œbŸj™j¨¨W©Ó5°c°rÐ:Ð:Ñ;€MØ€DØ€FÜ”3�w“<Ö ˆÜ�×$Ñ$×)Ñ)¨!Ñ,Ô-°&Ð2DØ�K‰K˜  EÐ*Ô+ØˆFÜ�×%Ñ%×*Ñ*¨1Ñ-Õ.ØÐ!Ü Ð!6Ó7Ð7Ø‰Fð !ð ÐØ�‰�VœS ›\¨!™^¨TÐ2Ô3Ø€FÜ(1°$¸Ö(:Ñ$ˆÑ$�˜˜VØ˜‘	ˆÜ”b—g‘g˜a '¨%°°A±Ð"6Ñ6Ó7¸!Ñ;Ó<ˆØ>CÄcÈ'ÃlÒ>R”u˜]¨5Ñ1°EÑ9Ô:ÐXZˆØ�‰ °uÐTYØ,/¼sÀ7Ç<Á<×CTÑCTÐUZÑC[Ó?\Ü#& w§|¡|×'8Ñ'8¸Ñ'=Ó#>ÈØ27¸#±+Ø).¨s©È,ñ	Xõ 	Yð	 );ô �<‰<˜ÓÐr   c                óØ  — | dg   j                  «       }t        j                  dt        j                  |«      z   «      |d<   d|d<   d|d<   d|d<   |j                  dg   j                  «       }|dxx   | j
                  j                  «       j                  «       z  cc<   d	|d<   t        j                  ||gd
¬«      }t        |||«      }t        | ||«      }dD ]
  }	||	   ||	<   Œ |S )z?Measure a diagnostic return path without changing its calendar.r   r   r   r*   Fr+   r,   r   rG   T)Úignore_index)ÚentriesÚexitsÚexposure_pctÚcarry_inÚopen_at_end)r-   rV   rX   Úasarrayr\   r   ÚdiffÚmedianr.   Úconcatr   )
rc   ÚvaluesÚstartrl   Ú	syntheticrn   Úcombinedr@   ÚactualÚkeys
             r   Úoverridden_metricsrƒ   P   sê   € à˜˜Ñ!×&Ñ&Ó(€IÜŸ™ A¬¯
©
°6Ó(:Ñ$:Ó;€IˆgÑØ€IˆjÑØ!&€IˆoÑØ %€IˆnÑà�N‰N˜A˜3Ñ×$Ñ$Ó&€EØ	ˆ&ƒM�W—\‘\×&Ñ&Ó(×/Ñ/Ó1Ñ1ƒMØ€Eˆ'�NÜ�y‰y˜% Ð+¸$Ô?€HÜ˜H e¨SÓ1€FÜ˜G U¨CÓ0€FÛNˆØ˜S‘kˆˆsŠð Oà€Mr   c              #  ó®  K  — | j                   j                  d   }dt        t        f–— dt        |f–— dt        |f–— d||f–— t        t        j                  t        «      j                  |j                  dz   «      D ]{  }d|› �t        t        j                  t        «      t        j                  |dd«      «      t        |t        j                  |dz   dd«      t        j                  d¬«      z
  «      f–— Œ} t        j                  t        |d	¬
«      D ]µ  }|t        j                  d¬«      z   t        j                  d¬«      z
  }||kD  rŒ9dD ]x  }|j                  «       t        j                  d¬«      z   t        j                  |¬«      z
  }|t        j                  t        «      k\  sŒ^d|› d|j                  «       › �||f–— Œz Œ· y ­w)NrH   ÚISÚfullÚOOS_previously_inspectedÚsince_creationr   Úannual_)ÚnanosecondsÚME)Úfreq©Údays)é   é   )ÚmonthsÚrolling_Úm_)r   r\   r   r   r   rY   r.   r/   ÚyearÚmaxÚminÚ	TimedeltaÚ
date_ranger8   Ú
DateOffsetÚdate)rc   Úcreatedr3   r”   rl   r‘   r~   s          r   Úwindowsrœ   c   s¥  è ø€ Ø�<‰<×Ñ˜RÑ €DØ
”œYÐ
&Ò&Ø
”+˜tÐ
#Ò#Ø
$¤i°Ð
5Ò5Ø
˜G TÐ
)Ò)Ü”b—l‘l¤;Ó/×4Ñ4°d·i±iÀ±kÖBˆØ˜�vÐ¤¤B§L¡L´Ó$=¼r¿|¹|ÈDÐRSÐUVÓ?WÓ XÔZ]Ð^bÔdf×dpÑdpÐquÐvwÑqwÐyzÐ|}Ód~ô  @B÷  @Lñ  @Lð  YZô  @[ñ  e[ó  [\ð  \ó  	\ð Cä�}‰}œ[¨$°T×:ˆØ”B—L‘L aÔ(Ñ(¬¯©À!Ô)DÑDˆØ�Š:ØÛˆFØ—]‘]“_¤R§\¡\°qÔ%9Ñ9¼2¿=¹=ÐPVÔ;WÑWˆEØœŸ™¤[Ó1Ó1Ø   ¨¨3¯8©8«:¨,Ð7¸ÀÐCÓCñ ñ	 ;ùs   ‚F2GÆ5 Gc                óØ  — | j                   t        j                  |«      k\  t        |t        «      s"| j                   t        j                  |«      k  n8| j                   t        j                  |«      t        j
                  d¬«      z   k  z  }|t	        |«      t	        |«      t        |j                  «       «      dœ}|j                  «       si |¥ddi¥S i |¥ddi¥t        | ||«      ¥S )Nr   r�   )Úwindowr~   rl   Úobserved_barsÚstatusÚno_coverageÚobserved)
r   r.   r/   Ú
isinstancera   r—   r=   ÚsumÚanyr   )rc   Únamer~   rl   ÚmaskÚbases         r   Úmeasurer©   u   s  € Ø�L‰LœBŸL™L¨Ó/Ñ/Ô]gÐhkÔmpÔ]q°G·L±LÄBÇLÁLÐQTÓDUÒ4UÐw~÷  xDñ  xDô  GI÷  GSñ  GSð  TWó  GXô  Y[÷  Yeñ  Yeð  klô  Ymñ  Gmñ  xmñ  n€DØ¤S¨£Z¼¸C»ÔSVÐW[×W_ÑW_ÓWaÓSbÑc€DØ�8‰8Œ:Ø0�$Ð0˜ -Ñ0Ð0ØPˆdÐP�H˜jÑP¬N¸7ÀEÈ3Ó,OÐPÐPr   c                ó†%  — t        j                  «       }t        | «      } | j                  «       r$t	        | j                  «       «      rt        d«      ‚| j                  dd¬«       dD ��cg c]%  }dD ]  }t        t        dz  d|› d|› d	�z  «      ‘Œ  Œ' }}}|t        d
dddddddœ	}d|d<   ddt        t        gddg d¢ddddœ	|d<   | dz  j                  t        j                  |d¬ «      d!z   «       g g g g g g g g f\  }}}}	}
}}}d"D �]ú  }t        d#|«      }t!        j"                  |«      }|j$                  j                  j'                  «       j                  j)                  «       |_        t!        j*                  |j                   t         j,                  j.                  j1                  |j                   «      rd$nd d¬%«      j2                  j5                  d «      |_         |j6                  d d& j9                  «       j;                  d¬'«      }|j                   j=                  «       j	                  «       s>|j                   j>                  r(|j                   jA                  «       j	                  «       rt        d(«      ‚tC        d#|«      }t        |d)<   t        jD                  t        |d*   «      jG                  «       «      }|d+   }|tH        k7  s!tK        |«      tK        |j$                  «      z
  rt        d,«      ‚tM        jN                  |d-d.g   «      jQ                  «       jQ                  «       st        d/«      ‚|d-d.g   d0k  j	                  «       j	                  «       rt        d1«      ‚tK        |«      D ]z  }||   jS                  tT        ¬2«      }tM        jN                  |«      }|j	                  «       r*|tM        jV                  |«      d0   d  jQ                  «       rŒkt        d3|› d4|› �«      ‚ t!        jX                  |d5   d6   «      j[                  d «      }t]        |fi |¤Ž}|j_                  |t        |«      ta        |«      ta        tc        d#|«      «      |d*   ta        |d*   «      t        |«      |d5   |te        tf        ji                  |«      «         j=                  «       jk                  «       jm                  «       to        jp                  |«      js                  «       D ��ci c]  \  }}|d7kD  sŒ||“Œ c}}t        |j                   j6                  d0   «      t        |j                   j6                  d&   «      d7d8œ«       d9|fgd:D �cg c]  }|tu        ||«      f‘Œ c}z   D ]<  \  }}tw        ||«      D ](  \  }}}|j_                  ||d;œty        ||||«      ¥«       Œ* Œ> t{        |«      } tM        j|                  | j~                  jk                  «       tM        j€                  d7tƒ        |«      z   «      d7z
  d<d<¬=«      st…        d>«      ‚|j‡                  | j‰                  |¬?«      jm                  d@«      «       | jŠ                  | j~                  d0kD     j�                  dAdB¬C«      }!dDD ]ü  }"tƒ        |«      j9                  «       }|!j�                  |"«      j‘                  «       D ](  }#dE|j6                  |#j’                  |#j”                  d7z    Œ* |j_                  ||"t—        |!«      rMtU        |!j�                  |"«      j~                  jk                  «       |!j~                  jk                  «       z  «      nd dFdGœt™        ||t        |j                   j6                  d&   «      ¥«       Œþ |j›                  dH«      jœ                  jŸ                  dId7¬J«      j¡                  «       jS                  «       }$t!        j¢                  tM        j¤                  |jœ                  |$kD  dKdL«      «      j§                  d7«      j©                  dM«      }%dM|%jŠ                  |j                   |j                   j6                  d0   t!        jª                  dN¬O«      z   k  <   dPD �]û  }&|%j­                  |&«      |j                   t!        jX                  t        «      k\  z  }'tƒ        |«      j¥                  |'dE«      }|j                   j¯                  «       j2                  j±                  «       j©                  |j                   j¯                  «       j2                  j±                  «       j³                  «       «      }(tU        |(jŠ                  |'   jk                  «       «      })|)rWtU        |j´                  j§                  d7d0¬Q«      jŠ                  |'   |(jŠ                  |'   z  jk                  «       |)z  dRz  «      nd }*|	j_                  ||&t·        |'jk                  «       «      t·        |j¸                  |'z  jk                  «       «      t·        |jº                  |'z  jk                  «       «      |)dSz  |*dTdUœt™        ||t        |j                   j6                  d&   «      ¥«       �Œþ t        dVz  dW|j'                  «       › dX�z  }+t!        j"                  |+«      },|,|,j¼                  j                  j¿                  dY«         }-ty        |dZt        t        «      }.|j_                  ||d[   |d\   |d]   |.d^   |.d_   |.d`   t        |+«      ta        |+«      |-j6                  d&   da   t—        |-«      |-j6                  d&   db   dcddœ«       |dek(  s�
Œ>|d*   g|z   D �]°  }/|j9                  «       }0t        jD                  t        |/«      jG                  «       «      }1|1d+   |k7  rt        df«      ‚|/|v r|0jÁ                  |1d5   dg   «       |/|0d*<   t]        |fi |0¤Ž}2dZt        t        fdhtÂ        |j                   j6                  d&   fgtÅ        tÆ        «      D �3�4�5�6cg c]  \  }3\  }4}5}6di|3› �|5|6f‘Œ c}6}5}4}3z   D ]�  \  }}}|
j_                  djt        |/«      jÈ                  ta        |/«      t        j                  |0js                  «       D ��ci c]  \  }}|j¿                  dk«      sŒ||“Œ c}}d¬l«      dmœty        |2|||«      ¥«       Œ‘ tL        jÊ                  jÍ                  d«      }7|2jŠ                  |2j                   t!        jX                  t        «      k\  |2j                   t!        jX                  t        «      t!        jª                  d7¬O«      z   k  z  dnf   }8g }9tÏ        d«      D �]÷  }:t        j                  «       |z
  dkD  rtÑ        do«      ‚|0j9                  «       };tÓ        g dp¢|7jÕ                  dqdrds«      «      D ]"  \  }<}=tU        |8j×                  |=«      «      |;|<<   Œ$ t·        |7jÙ                  g d¢«      «      |;dt<   tÛ        |7jÝ                  d«      «      |;du<   tÛ        |7jÝ                  d«      «      |;dv<   tß        |2j9                  «       |;|2jà                  jS                  «       |2jœ                  jS                  «       |2jâ                  jS                  «       «      }>tå        |>t        t        «      }?|?d`   dwk\  }@|?dx   �|?dx   ntU        dy«       }A|9j_                  @|A|: |;f«       |j_                  t        |/«      jÈ                  |:|@t        j                  |;js                  «       D ��ci c]  \  }}|j¿                  dk«      sŒ||“Œ c}}d¬l«      dzœ|?¥«       �Œú tç        |9d{„ ¬|«      \  }@}4}:};| d}t        |/«      jè                  › d	�z  j                  t        j                  |/|@|: |;d~œd¬ «      d!z   «       tß        |2j9                  «       |;|2jà                  jS                  «       |2jœ                  jS                  «       |2jâ                  jS                  «       «      }BdZt        t        fdhtÂ        |j                   j6                  d&   fgtÅ        tÆ        «      D �3�4�5�6cg c]  \  }3\  }4}5}6di|3› �|5|6f‘Œ c}6}5}4}3z   D ]†  \  }}}|
j_                  dt        |/«      jÈ                  @t        j                  |;js                  «       D ��ci c]  \  }}|j¿                  dk«      sŒ||“Œ c}}d¬l«      d€œty        B|||«      ¥«       Œˆ �Œ³ �Œý d�|fd‚|fdƒ|fd„|	fd…|
fd†|fd‡|ffD ]1  \  }}Ct!        jê                  |C«      jí                  | |› dX�z  dB¬ˆ«       Œ3 tî        jð                  d‰z  }D|||Dj                  «       rt        D«      ta        |D«      dŠœnd tò        jô                  tL        jö                  t         jö                  tù        jø                  «       d‹œdŒD �Eci c]  }E|Eta        t        |Ez  «      “Œ c}Etû        | j                  «       «      D �Eci c])  }E|Ejý                  «       sŒEjÈ                  ta        |E«      “Œ+ c}Ed�œ}F| dŽz  j                  t        j                  |Fdt        ¬�«      d!z   «       t!        jê                  |«      S c c}}w c c}}w c c}w c c}6}5}4}3w c c}}w c c}}w c c}6}5}4}3w c c}}w c c}Ew c c}Ew )�NzAUse a new empty output directory; completed evidence is immutableT)ÚparentsÚexist_ok)Ú
grouped_v1Úrandom_sparse_v1Úhybrid_grouped_v1)i‚#  iç#  iL$  zstrategies/params/mlpÚmlp_weights_COINBASE_BTCUSD_6H_Ú_seedz.jsong{®Gázt?z#marked to market, no synthetic exitz0drop exactly final export row on every timeframez,continuous signals; carry-in return retainedzWclose > trailing 200-calendar-day SMA; 200-day warmup; close decision, next-bar returnszhprior close vs prior trailing200D SMA; masked noncontiguous attribution, not standalone tradable returnsz†nine saved candidates plus incumbent; saved-threshold replay and equal additional128trial tuning; historical selection budgets unequal)	Úarchived_candidates_predeclaredÚ
entry_gateÚfees_per_sideÚterminalÚtail_policyrœ   rE   ÚregimeÚarchive_limitz]previous completed daily close vs200-calendar-day daily SMA,200 daily observations; same feesrE   é€   i9(5zScalendar Calmar with20entries; if none eligible retain highest with ineligible flagzbsame seeded quantiles of each model IS scores; entry/exit/confirmation uniform quantiles0.05..0.95)r   é   é
   é   é   zboth booleans samplediX  zkequal additional budget cannot equalize historical fitting or selection; later windows previously inspected)	Úcount_per_modelÚseedÚselection_windowÚrankÚ
thresholdsÚtrail_choicesÚconfirmationÚruntime_cap_secondsÚ
limitationÚequal_additional_tuningzprotocol.jsoné   )ÚindentÚ
)Ú4HÚ6HÚ8HÚ12HÚ1DÚCOINBASE_BTCUSDÚs)ÚunitÚutcrH   )ÚdropzInvalid timesÚ_pine_time_startÚmlp_weights_fileÚfeature_colszUnexpected feature schema/orderr   ÚhighzInvalid pricesr   zNonpositive prices)Údtypez#Interior missing/nonfinite feature Ú/Útrainingr›   r   )ÚtfÚdataÚdata_sha256Úwinner_sha256ÚweightsÚweights_sha256r›   rÛ   Ú(missing_counts_preserved_and_zero_filledÚduplicate_featuresrn   r3   Úexcluded_tail_rowsÚ	incumbent)r   r!   r"   )rÜ   Úmodelg»½×Ùß|Û=)ÚrtolÚatolz5Trade contribution ledger does not reconstruct equity)rÜ   ÚrecordsrT   F)Ú	ascending)r   é   rI   z�largest absolute initial-equity P&L contributions; zero entire winning-trade net return intervals; no reentry; original counts/exposure retained)rÜ   Úremoved_winnersÚshare_of_positive_equity_pnlÚ
diagnosticr   r$   r&   Ú	above_smaÚ	below_smaÚwarmupr%   r�   )rï   rð   rñ   r(   rJ   g    ~~AzGnoncontiguous masked contribution on full calendar; not regime strategy)rÜ   r·   Úattributed_barsÚentry_events_in_regimeÚexits_in_regimeÚattributed_yearsÚexposure_within_regime_pctÚinterpretationzdata/mlpz%MLPScores_COINBASE_BTCUSD_2026-06-25_z.csvÚExitr…   zTotal P&L %zMax Drawdown %zTotal TradesÚpnl_pctÚdd_pctrt   zCumulative PnL %zDate and timezunverified; old June25 export)rÜ   Úsaved_pnl_pctÚsaved_dd_pctÚsaved_tradesÚrecomputed_pnl_pctÚrecomputed_dd_pctÚrecomputed_entriesÚtv_fileÚ	tv_sha256Útv_final_cumulative_pctÚtv_exit_rowsÚtv_last_exitÚtv_matching_current_staterÌ   zArchive schema mismatchÚrecommended_thresholdsr‡   Úhistorical_fold_Úsaved_thresholdsÚi_)Ú	sort_keys)ÚvariantÚ	candidaterá   rÂ   Úactivation_scorezJPredeclared600second runtime limit reached; partial output is not complete)Ú!i_long_entry_activation_thresholdÚ i_long_exit_activation_thresholdÚ-i_long_exit_activation_confirmation_thresholdgš™™™™™©?gffffffî?rë   Úi_trailing_stop_thresholdÚi_use_long_entry_confirmationÚi_use_long_exit_confirmationr¼   ÚcalmarÚinf)r  ÚtrialrA   Úparamsc                ó   — | d d S )Nrë   © )Úxs    r   Ú<lambda>zrun.<locals>.<lambda>ù   s
   € À1ÀRÀaÁ5r   )r‚   Ú
selection_)r  rA   r  r  Úequal_extra_tuning)r  r  Úeligible_selectionrÂ   ÚmetricsÚtrade_ledgerÚconcentration_diagnosticsÚregime_attributionÚarchived_candidatesÚarchive_tuning_trialsÚreconciliationr   zlegacy_replay_variants.csv)r   r   )ÚpythonÚnumpyÚpandasÚplatform)z tools/run_mlp_incumbent_audit.pyzstrategies/mlp_accounting.pyz!strategies/strategy_mlp_scores.pyz(strategies/strategy_activation_scores.pyz	config.py)ÚcontractÚinputsÚlegacy_variantsÚenvironmentÚsource_sha256Úoutputs_sha256zmanifest.json)rÉ   Údefault)r   Ú	monotonicr   Úexistsr¥   Úiterdirr;   Úmkdirra   ÚREPOr   r   Ú
write_textÚjsonÚdumpsr   r.   Úread_csvÚcolumnsÚlowerÚstripÚto_datetimeÚapiÚtypesÚis_numeric_dtyper7   Útz_localizer\   r-   Úreset_indexÚisnaÚis_monotonic_increasingÚ
duplicatedr   ÚloadsÚ	read_textr   ÚsetrV   ÚisfiniteÚallrU   r_   Úflatnonzeror/   Ú
tz_convertr   r]   r   r   ÚlistÚdictÚfromkeysr¤   Úto_dictÚcollectionsÚCounterÚitemsrE   rœ   r©   rq   ÚiscloserT   r`   r
   ÚAssertionErrorÚextendÚassignÚlocÚsort_valuesÚheadÚ
itertuplesrM   rN   rZ   rƒ   r1   r   r4   r5   r0   Úwherer6   r:   r—   Úeqrz   Útotal_secondsr{   r*   r=   r+   r,   ÚTypeÚ
startswithÚupdater   r^   r	   r¦   ÚrandomÚdefault_rngrY   ÚRuntimeErrorÚzipÚuniformÚquantileÚchoicer[   Úintegersr   Ústoch_peak_normrØ   r   r•   Ústemrb   Úto_csvÚDEFAULT_OUTPUTÚparentÚsysÚversionÚ__version__r*  ÚsortedÚis_file)Gri   ÚstartedÚfamilyr¿   Ú	shortlistr+  r   ÚtradesÚconcentrationÚregimesÚarchivedÚ	reconciler,  ÚtuningrÜ   r   rÝ   r  ÚartifactÚcolsÚcolr}   Úfiniter›   rc   ÚkÚvr?   Úseriesr¦   r~   rl   ÚledÚwinningÚcountÚrowÚaverageÚlabelsÚlabelr§   Ú	durationsÚsecondsÚexposureÚtvpathÚtvru   Úrecr  Úcandidate_paramsræ   Úreplayrh   Ú_rÑ   ÚeÚrngÚscoresÚchoicesr  Úselectedr‚   ÚqÚtrial_signalsr@   rA   rÁ   Útunedrf   ÚlegacyÚpÚmanifestsG                                                                          r   Úrunr   }   sw  € Ü�n‰nÓ€GÜ�&‹\€FØ‡}�}„œ3˜vŸ~™~Ó/Ô0ÜÐ\Ó]Ð]Ø
‡L�L˜¨€LÔ-áVôwÙV�VÓcuÐ[_ô ”TÐ1Ñ1Ð4SÐTZÐS[Ð[`ÐaeÐ`fÐfkÐ2lÑlÕmØcuð nØVð ñ wà3<ÌKØ!%Ð3XØQØIØvð Eð "jñk€Hð |€Hˆ[ÑØ=@ÈÔepÔqzÐd{ØdØyÚ&Ð6MÐdgð Cñ	+D€HÐ&Ñ'ð
 ˆOÑ×'Ñ'¬¯
©
°8ÀAÔ(FÀtÑ(KÔLØSUÐWYÐ[]Ð_aÐceÐgiÐkmÐoqÐSqÑP€GˆV�] G¨X°yÀ&È&Ü-ˆÜÐ+¨RÓ0ˆÜ�{‰{˜4Ó ˆØ—|‘|×'Ñ'×-Ñ-Ó/×3Ñ3×9Ñ9Ó;ˆŒÜ—N‘N 4§9¡9¼"¿&¹&¿,¹,×:WÑ:WÐX\×XaÑXaÔ:b±3ÐhlÐrvÔw×zÑz÷  Gñ  Gð  HLó  MˆŒ	Ø�y‰y˜˜"ˆ~×"Ñ"Ó$×0Ñ0°dÐ0Ó;ˆØ�9‰9�>‰>Ó×ÑÔ!¨¯©×)JÒ)JÈdÏiÉi×NbÑNbÓNd×NhÑNhÔNjÜ˜_Ó-Ð-ÜÐ/°Ó4ˆÜ%0ˆÐ!Ñ"Ü—:‘:œd 6Ð*<Ñ#=Ó>×HÑHÓJÓKˆØ˜Ñ'ˆØ”<Ò¤3 t£9¬S°·±Ó->Ò#>ÜÐ>Ó?Ð?Ü�{‰{˜4 ¨Ð 0Ñ1Ó2×6Ñ6Ó8×<Ñ<Ô>ÜÐ-Ó.Ð.Ø�'˜&Ð!Ñ" AÑ%×*Ñ*Ó,×0Ñ0Ô2ÜÐ1Ó2Ð2Ü�t–9ˆCØ˜‘9×%Ñ%¬EÐ%Ó2ˆFÜ—;‘;˜vÓ&ˆFØ—:‘:”< v¬b¯n©n¸VÓ.DÀQÑ.GÐ.HÐ'I×'MÑ'MÕ'OÜ Ð#FÀrÀdÈ!ÈCÈ5Ð!QÓRÐRð	 ô
 —,‘,˜x¨
Ñ3°IÑ>Ó?×JÑJÈ4ÓPˆÜ" 4Ñ2¨6Ñ2ˆØ�‰˜R¬¨T«Ä6È$Ã<Ü(.¬|Ð<MÈrÓ/RÓ(SØ"(Ð);Ñ"<ÔPVÐW]Ð^pÑWqÓPrÜ"% g£,¸HÀZÑ<PØCGÌÌTÏ]É]Ð[_ÓM`ÓHaÑCb×CgÑCgÓCi×CmÑCmÓCo×CwÑCwÓCyÜ=H×=PÑ=PÐQUÓ=V×=\Ñ=\Ô=^Ô-fÑ=^±c°a¸ÐbcÐdeÓbe¨a°©cÐ=^Ò-fÜ # D§I¡I§N¡N°1Ñ$5Ó 6ÄÀDÇIÁIÇNÁNÐSUÑDVÓ@WÐnoñqô 	rð *¨'Ð2Ð3ñ  UBó  5Cñ  UBÈq°a¼	À$ÀqÓ8IÒ5Jð  UBñ  5Cô  C‰LˆD�&Ü")¨'°'Ö":‘��U˜3Ø—‘ R°ÑV´w¸vÀdÈ5ÐQTÓ7UÐVÕWñ #;ð Cô �W‹oˆÜ�z‰z˜#×0Ñ0×4Ñ4Ó6´r·w±w¸qÄÈWÓAUÑ?UÓ7VÐWXÑ7XÐ^cÐinÕoÜ Ð!XÓYÐYØ�‰�c—j‘j B�jÓ'×/Ñ/°	Ó:Ô;Ø—'‘'˜#×0Ñ0°Ñ2Ñ3×?Ñ?Ð@TÐ_dÐ?ÓeˆÛˆEÜ  Ó)×.Ñ.Ó0ˆFØ—|‘| EÓ*×5Ñ5Ö7�ØNP�—‘˜C×2Ñ2°3×3HÑ3HÈÑ3JÑKð 8à× Ñ  r¸Eô  z}ð  ~Eô  zFÔafÐgn×gsÑgsÐtyÓgz÷  hNñ  hN÷  hRñ  hRó  hTð  U\÷  Uoñ  Uo÷  Usñ  Usó  Uuñ  huô  bvð  LPð 0Bñ"jä$6°w¸vÄkÐRY×R^ÑR^×RcÑRcÐdfÑRgÓ$hð"jõ kð	 ð —.‘. Ó(×.Ñ.×6Ñ6°vÈ!Ð6ÓL×QÑQÓS×\Ñ\Ó^ˆÜ—‘œ2Ÿ8™8 D§J¡J¨wÑ$6°{À;ÓOÓP×VÑVÐWXÓY×`Ñ`ÐaiÓjˆØGOˆ�
‰
�4—9‘9˜TŸY™YŸ^™^¨AÑ.¬r¯|©|ÀÔ/EÑEÑEÑFÜ7ˆEØ—9‘9˜UÓ# T§Y¡Y´·±¼[Ó0IÑ%IÑJˆDÜ  Ó)×/Ñ/°°RÓ8ˆFØ—i‘i—n‘nÓ&×)Ñ)×7Ñ7Ó9×@Ñ@ÀÇÁÇÁÓAQ×ATÑAT×AbÑAbÓAd×AkÑAkÓAmÓnˆIÜ˜)Ÿ-™-¨Ñ-×1Ñ1Ó3Ó4ˆGÙx”U˜G×,Ñ,×2Ñ2°1ÀÐ2ÓB×FÑFÀtÑLÈYÏ]É]Ð[_ÑM`Ñ`×eÑeÓgÐhoÑoÐpsÑsÔtð  FJˆHØ�N‰N ¨UÄSÈÏÉËÃ_Ü58¸'×:OÑ:OÐPTÑ:T×9YÑ9YÓ9[Ó5\Ü.1°7×3GÑ3GÈÑ3L×2QÑ2QÓ2SÓ.TØ/6¸Ñ/EÐckØ-vñ	dô
 1°¸ÄÈGÏLÉL×L]ÑL]Ð^`ÑLaÓbðdö eð 8ô �J‰Ð!FÀrÇxÁxÃzÀlÐRVÐWÑWˆÜ�;‰;�vÓˆØ�—‘—‘×'Ñ'¨Ó/Ñ0ˆÜ�G˜D¤¬YÓ7ˆØ×Ñ˜r°&¸Ñ2GÐW]Ð^nÑWoØ)/°Ñ)?ÐUXÐYbÑUcÐx{ð  }Eñ  yFØ/2°9©~ÌÈFËÔ`fÐgmÓ`nØ49·J±J¸r±NÐCUÑ4VÔfiÐjoÓfpØ).¯©°B©¸Ñ)Hð  fEñ	Fô 	Gð
 ˆtŒ8Ø$Ð%7Ñ8Ð9¸)ÕC�	Ø!'§¡£Ð Ü—j‘j¤ i£×!:Ñ!:Ó!<Ó=�Ø˜Ñ(¨$Ò.Ü$Ð%>Ó?Ð?Ø 	Ñ)Ø$×+Ñ+¨E°*Ñ,=Ð>VÑ,WÔXØ5>Ð Ð!3Ñ4Ü'¨Ñ@Ð/?Ñ@�Ø(,¬[¼Ð'CÐE_Ô`iÐjn×jsÑjs×jxÑjxÐy{Ñj|ÐD}Ð&~ô  oxô  yBô  oCö  @Dñ  oCñ  bkð  bcñ  dkð  efð  ghð  ijð  DTð  UVð  TWð  BXð  YZð  [\ò  A]ð  oCô  @Dô  'D‘N�D˜˜sØ—O‘OÐ/AÌdÐS\Ëo×NbÑNbÔtzð  |Eó  uFô  TX÷  T^ñ  T^ð  o÷  oEñ  oEô  oGô  _^ñ  oGñ  hkð  hið  jkð  KL÷  KWñ  KWð  X\õ  K]ð  `að  bcñ  `cð  oGò  _^ð  imô  Tnñ  %Pô  qxð  yð  @Dð  EJð  KNó  qOð  %Põ  Qð 'Dä—I‘I×)Ñ)¨(Ó3�Ø—z‘z 6§;¡;´·±¼[Ó0IÑ#IÈFÏKÉKÔXZ×XdÑXdÔenÓXoÔpr×p|Ñp|ð  CDô  qEñ  YEñ  MEñ  #Fð  GYð  #Yñ  Z�Ø�Ü" 3ŸZ�EÜ—~‘~Ó'¨Ñ/°Ò3Ü*Ð+wÓxÐxØ-×2Ñ2Ó4�HÜ!$ò  &^ð  _b÷  _jñ  _jð  knð  orð  stó  _uö  "v™˜˜AÜ&+¨F¯O©O¸AÓ,>Ó&?˜ šð "vä:=¸c¿j¹jÊÓ>XÓ:Y�HÐ8Ñ9Ü>BÀ3Ç<Á<ÐPQÃ?Ó>S�HÐ<Ñ=Ü=AÀ#Ç,Á,ÈqÃ/Ó=R�HÐ;Ñ<Ü"3°F·K±K³MÀ(È6×KaÑKa×KjÑKjÓKlÐms×myÑmy÷  nCñ  nCó  nEð  FL÷  FQñ  FQ÷  FZñ  FZó  F\ó  #]�MÜ)¨-¼ÄIÓN�FØ# IÑ.°Ñ2�HØ-3°HÑ-=Ð-I˜ Ò)ÔPUÐV[ÓP\È}�DØ—N‘N H¨T°5°&¸Ð#BÔCØ—M‘M¬t°I«×/CÑ/CÈEÐ]eÔos×oyÑoyð  KS÷  KYñ  KYô  K[ô  {rñ  K[ñ  DGð  DEð  FGð  _`÷  _kñ  _kð  lpõ  _qÐ{|Ð}~Ñ{~ð  K[ò  {rð  }Aô  pBñ  #Lð  EKð  #Lö  Mð (ô +.¨g¹.Ô*IÑ)�˜˜5 Ø˜*¤T¨)£_×%9Ñ%9Ð$:¸%Ð@Ñ@×LÑLÌTÏZÉZÐenð  {Cð  MRð  LRð  \dñ  Yeð  mnô  Noð  ptñ  Ntô  uÜ'¨¯©«°h¸v×?UÑ?U×?^Ñ?^Ó?`Ðag×amÑam×avÑavÓaxÐy÷  zEñ  zE÷  zNñ  zNó  zPó  Q�Ø(,¬[¼Ð'CÐE_Ô`iÐjn×jsÑjs×jxÑjxÐy{Ñj|ÐD}Ð&~ô  oxô  yBô  oCö  @Dñ  oCñ  bkð  bcñ  dkð  efð  ghð  ijð  DTð  UVð  TWð  BXð  YZð  [\ò  A]ð  oCô  @Dô  'D‘N�D˜˜sØ—O‘OÐ/CÔPTÐU^ÓP_×PdÑPdð  {Cô  QU÷  Q[ñ  Q[ð  lt÷  lzñ  lzô  l|ô  \Sñ  l|ñ  ehð  efð  ghð  @A÷  @Lñ  @Lð  MQõ  @Rð  ]^ð  _`ñ  ]`ð  l|ò  \Sð  ^bô  Qcñ  %Dô  fmð  nsð  txð  y~ð  Bó  fCð  %Dõ  Eò 'DòA DðQ .ðT ! Ð)¨>¸&Ð*AÐC^Ð_lÐBmð  pDð  ELð  oMð  Odð  emð  Nnð  pGð  HNð  oOð  Qað  bkð  Pló  m‰	ˆˆTÜ
�‰�TÓ×!Ñ! &¨D¨6°¨Ñ"6¸UÐ!ÕCð mä× Ñ Ð!=Ñ=€FØ!¨6Ðtz÷  uBñ  uBô  uDÌCÐPVËKÔagÐhnÓaoÒDpð  JNÜ&)§k¡k¼"¿.¹.ÔRT×R`ÑR`Ôlt×l}Ñl}Ólñ  Añ :Xó  Yñ  :X°A˜q¤¬¨Q©£Ñ/ð  :Xñ  YÜ:@ÀÇÁÓAQÔ:RÓbÑ:R°QÐVW×V_ÑV_ÕVa §¡¤v¨a£yÑ 0Ð:RÑbñd€Hð ˆOÑ×'Ñ'¬¯
©
°8À1ÌSÔ(QÐRVÑ(VÔWÜ�<‰<˜	Ó"Ð"ùóGwùó^ .gùò 5Cùõb @Dùó _^ùó$ {rùõ @Dùó \Sùò YùÚbso   Á,*AJÓ4AJÔAJÕAJðAJòAJòAJü&AJ%ý AJ%ÁAAJ+ÁCAJ3ÁCAJ3ÁGAJ9ÁHAJ>ÁH#AJ>Ú__main__)Údescriptionz--output)Útyper1  Fr   )8Ú__doc__Ú
__future__r   ÚargparserR  r   r8  Úpathlibr   rp  r   r*  r(  rV   r)  r.   Ú__file__Úresolver«   r6  r   Úinsertra   Úconfigr   r   r   r	   Ústrategies.mlp_accountingr
   r   Ústrategies.strategy_mlp_scoresr   r   r   Ú(tools.run_mlp_score_structure_experimentr   r   r   rn  r   rE   rq   rƒ   rœ   r©   r   Ú__name__ÚArgumentParserÚparserÚadd_argumentÚ
parse_argsÚargsÚprintri   Ú	to_stringr  r   r   Ú<module>r·     s  ðÙ QÝ "ã Û Û Û Ý Û 
Û Û ã Û áˆHƒ~×ÑÓ×'Ñ'¨Ñ*€Ø ‡�‡��‘3�t“9Ô ß ?Ó ?ß Aß \Ñ \ß [Ñ [àÐLÑL€ò?òò* ò:ò&Dò$Qð ó I#ðX ˆZÒØ"ˆ8×"Ñ"¨wÔ7€FØ
×Ñ˜
¨°^ÐÔDØ	×	Ñ	Ó	€DÙ	‰#ˆd�k‰kÓ
×
$Ñ
$¨5Ð
$Ó
1Õ2ð	 r   