Ë
    Cv±j#/  ã                  ó´  — d Z ddlmZ ddlZddlm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 e
e«      j%                  «       j&                  d   Zej*                  j-                  d ee«      «       ddlmZmZ ddlmZmZmZ dd	lm Z  dd
l!m"Z" dZ# e$ddddddddddd¬«      Z%g d¢Z&d d„Z'ddœd„Z(d„ Z)d„ Z*d„ Z+d„ Z,d„ Z-d„ Z.d„ Z/e0dk(  r e/«        yy)!zJExactly two frozen policies; retrospective evidence only, never promotion.é    )ÚannotationsN)Úreplace)ÚPathé   )ÚCOMMISSION_RATEÚnet_returns)ÚdigestÚfingerprintÚrequire_replay©Úentry_loss_signals)Ú_score_to_signalsÚ@91fa9223c87c489c24ec1d4711099c92fe331d189f660e7f080ee596c052763bg     €V@g     @j@g     @pÀg      4@FTg     @�À)Ú!i_long_entry_activation_thresholdÚ i_long_exit_activation_thresholdÚ-i_long_exit_activation_confirmation_thresholdÚi_trailing_stop_thresholdÚi_use_long_entry_confirmationÚi_use_long_exit_confirmationÚi_entry_score_windowÚi_exit_score_windowÚi_mvrv_suppress_bearÚi_regime_windowÚi_regime_entry_min_score)zstrategies/mlp_entry_loss.pyz&tools/run_mlp_entry_loss_experiment.pyztests/test_mlp_entry_loss.pyú*docs/mlp_entry_loss_protocol_2026_09_21.mdc                óè   — t         j                  j                  dt        dz  «      }t         j                  j	                  |«      }|j
                  j                  |«       | |_        |�||_        |S )zFLoad a private evaluator instance; never mutate shared module globals.Ú_entry_loss_private_sweepztools/run_mlp_deep_sweep.py)	Ú	importlibÚutilÚspec_from_file_locationÚREPOÚmodule_from_specÚloaderÚexec_moduleÚ_COMPARISONr   )ÚsnapshotÚsignalÚspecÚmodules       úN/Users/jameslopez/projects/TradingBot25/tools/run_mlp_entry_loss_experiment.pyÚ	evaluatorr+       s`   € ä�>‰>×1Ñ1Ð2MÌtÐVsÑOsÓt€DÜ�^‰^×,Ñ,¨TÓ2€FØ‡K�K×Ñ˜FÔ#Ø!€FÔØÐØ#)ˆÔ Ø€Mó    ©Ú	canonicalc               ó$  ‡— |rt         nˆfd„}t        | |«      }i }|j                  d||«      }t        t	        |j                  «       «      «      \  }}	}
} ||j                  «       t        ||j                  ¬«      |	|
|«      }t        |«      |d<   t        |j                  j                  dd¬«      j                  t        «      |j                  j                  t        «      z   z  |d<   |j                   j                  dd	¬«      |d
<   ||fS )Nc                 ó   •— t        | d‰iŽS )NÚloss_fractionr   )Úargsr1   s    €r*   Ú<lambda>z!evaluate_policy.<locals>.<lambda>,   s   ø€ Ô?QÐSWÐ?uÐgtÒ?ur,   Ú6H)Ú_pine_time_startÚ
net_returnr   F)Ú
fill_valueÚ
fee_returnr   Úheld_interval)r   r+   ÚevaluateÚnextÚiterÚvaluesÚcopyÚdictÚSCORE_STARTr   r   Úexecute_entryÚshiftÚastypeÚfloatÚexecute_exitÚposition)r&   Úparamsr1   r.   r'   r)   ÚcacheÚrowÚscoredÚstochÚcloseÚhighÚtraces     `          r*   Úevaluate_policyrO   +   s  ø€ Ù"+ÕÓ1u€FÜ�x Ó(€FØ€EØ
�/‰/˜$ ¨Ó
.€CÜ!%¤d¨5¯<©<«>Ó&:Ó!;Ñ€FˆE�5˜$Ù�6—;‘;“=¤$ vÀ×@RÑ@RÔ"SÐUZÐ\aÐcgÓh€EÜ% eÓ,€Eˆ,ÑÜ)¨U×-@Ñ-@×-FÑ-FÀqÐUZÐ-FÓ-[×-bÑ-bÔchÓ-iÐlq×l~Ñl~÷  mFñ  mFô  GLó  mMñ  .Mñ  N€Eˆ,ÑØ"Ÿ^™^×1Ñ1°!ÀÐ1ÓB€Eˆ/ÑØ�ˆ:Ðr,   c                óê   — | \  }}|\  }}t        j                  |d¬«      t        j                  |d¬«      k7  rt        d«      ‚dD ]*  }t        j                  j                  ||   ||   |¬«       Œ, y )NT)Ú	sort_keysz8Disabled control metrics differ from canonical evaluator)rF   rA   rE   r6   r8   r9   )Úerr_msg)ÚjsonÚdumpsÚAssertionErrorÚnpÚtestingÚassert_array_equal)r.   ÚdisabledÚleftÚaÚrightÚbÚkeys          r*   Úassert_controlr_   8   sj   € Ø�G€Dˆ!Ø�H€Eˆ1Ü‡z�z�$ $Ô'¬4¯:©:°eÀtÔ+LÒLÜÐWÓXÐXÛiˆÜ
�
‰
×%Ñ% a¨¡f¨a°©f¸cÐ%ÕBñ jr,   c                óÂ   — t        | |¬«      } t        t        |j                  | d   t        «       j                  D �ci c]  }|| |   “Œ
 c}|¬«      «      | d<   | S c c}w )N)ÚPolicyÚArtifact_SHA256)ÚcontextÚartifactrG   ÚpolicyÚEvaluation_Key)r?   r
   r+   Ú
PARAM_COLS)rI   r&   re   Úks       r*   Úidentifyri   A   si   € Ü
ˆs˜6Ô
"€CÜ'¬°X×5IÑ5IØÐ&Ñ'ÄIÃK×DZÒDZÓ0[ÑDZ¸q°°C¸±F±ÐDZÑ0[Ðdjô)ló m€CÐÑà€Jùò 1\s   ½Ac                óÂ  — t        j                  | j                  «      }t        j                  | j                  «      }g }|D �]&  }|||kD     }t	        |«      rt        |d   «      nt	        | «      dz
  }t        t	        |«      «      }|j                  t        t        |«      ||t        | j                  j                  |   «      t        | j                  j                  |   «      t        t        j                  d| j                  j                  |dz   |dz    z   «      dz
  dz  «      t        | j                  j                  |dz   |dz    j!                  «       «      ¬«      «       �Œ) g }	|D �]¸  }
|||
kD     }dD �ci c]  }|t        | |   j                  |
   «      “Œ  }}t        dt        |
«      t        | j                  j                  |
   «      dœ|¤t!        |j#                  «       «      t	        |«      rt        |d   «      ndt	        |«      rPt        | j                  j                  |d      | j                  j                  |
   z
  j%                  «       dz  «      ndt        t	        |«      «       |d	   r"t        | j&                  j                  |
   «      ndd
œ¤Ž}|d	   xr |d    xr |d    |d<   t        |j                  j                  |
   «      |d<   g |d<   |d   �r'dD �]!  \  }}t        |
|z   «      }| j                  |
t)        |dz   t	        | «      «       }t        |j                  j+                  «       j-                  «       t/        j0                  d¬«      k7  j3                  «       «      }|t	        | «      k\  rdn|rdnd}t        ||||¬«      }|�€V|j5                  t        | j6                  j                  |   | j6                  j                  |
   z  dz
  dz  «      t        |j6                  j9                  «       | j6                  j                  |
   z  dz
  dz  «      t        |j6                  | j:                  j                  |
   k\  j3                  «       «      t        t        j                  d| j                  j                  |
dz   |dz    z   «      dz
  dz  «      t        t        j                  d|j                  j                  |
dz   |dz    z   «      dz
  dz  «      ¬«       |d   j                  |«       �Œ$ |	j                  |«       �Œ» t        ||	t        | j                  j!                  «       «      t        | j                  j!                  «       «      t        | j                  j!                  «       «      dD �ci c],  }|t        | j                  | |   z  j!                  «       «      “Œ. c}¬«      S c c}w c c}w )zGKeep each event, censor missing horizons, and retain both actual paths.r   r   éd   )Ú	entry_barÚend_barÚ	completedÚ
entry_timeÚend_timeÚnet_pctÚfee_return_sum)Úscore_exit_flagÚtrailing_exit_flagÚentry_loss_flag)ÚbarÚtimeNi  ru   )Úsimultaneous_flagsÚreentry_barÚreentry_delay_hoursÚreentry_censoredÚovershoot_pctrs   rt   Úcandidate_specific_loss_exitÚbaseline_exit_same_barÚ
recoveries))r   é   )r€   é   )é   é   é   )ÚhoursÚend_of_dataÚgap)ÚdaysÚbarsÚcensoredr‡   )Úclose_return_pctÚmax_close_return_pctÚrecovered_entryÚcandidate_path_net_pctÚbaseline_path_net_pct)ÚtradesÚexit_eventsÚentriesÚexitsrr   Úflag_counts© )rV   ÚflatnonzerorA   rE   ÚlenÚintÚboolÚappendr?   Ústrrw   ÚilocrD   Úprodr6   r8   Úsumr=   Útotal_secondsÚentry_loss_overshoot_pctÚminÚdiffÚdropnaÚpdÚ	TimedeltaÚanyÚupdaterL   ÚmaxÚentry_signal_close)rN   Úbaseliner’   r“   r�   ÚentryÚ	followingÚendrn   ÚeventsÚiÚlaterr^   ÚflagsÚitemrˆ   r‰   Úhorizonr‡   ÚcensorÚrecs                        r*   Údiagnosticsr¶   H   s\  € ä�n‰n˜U×0Ñ0Ó1€GÜ�N‰N˜5×-Ñ-Ó.€EØ€FÜˆØ˜% %™-Ñ(ˆ	Ü#& y¤>Œc�)˜A‘,Ô´s¸5³zÀA±~ˆÜœ˜Y›Ó(ˆ	Ø�‰”d¤S¨£Z¸È	Ü˜5Ÿ:™:Ÿ?™?¨5Ñ1Ó2¼SÀÇÁÇÁÐQTÑAUÓ=VÜœ2Ÿ7™7 1 u×'7Ñ'7×'<Ñ'<¸UÀQ¹YÀsÈQÁwÐ'OÑ#OÓPÐSTÑTÐX[Ñ[Ó\Ü  ×!1Ñ!1×!6Ñ!6°u¸q±yÀÀqÁÐ!I×!MÑ!MÓ!OÓPôRö 	Sð	 ð €FÜˆØ˜ !™Ñ$ˆÙ:vÓwÑ:v°3�”d˜5 ™:Ÿ?™?¨1Ñ-Ó.Ñ.Ð:vˆÐwÜð oœ˜A›¤S¨¯©¯©¸Ñ);Ó%<ñ oÀð oÜ" 5§<¡<£>Ó2Ü),¨U¬œ˜E !™Hœ¸ÜpsÐtyÔpz¤ u§z¡z§¡°u¸Q±xÑ'@À5Ç:Á:Ç?Á?ÐSTÑCUÑ'U×&dÑ&dÓ&fÐgkÑ&kÔ lð  AEÜ!%¤c¨%£jÓ!1Ð1ØKPÐQbÒKcœ% × >Ñ >× CÑ CÀAÑ FÔGÐimóoˆð 05Ð5FÑ/Gò  0MÐPUÐVgÑPhÐLhò  0MÐqvð  xLñ  rMð  nMˆÐ+Ñ,Ü)-¨h×.CÑ.C×.HÑ.HÈÑ.KÓ)LˆÐ%Ñ&Øˆˆ\ÑØÐ.Ó/Ü8‘
��dÜ˜!˜d™(“m�ØŸ*™* Q¤s¨3°©7´C¸³JÓ'?Ð@�Ü˜GŸL™L×-Ñ-Ó/×6Ñ6Ó8¼B¿L¹LÈqÔ<QÑQ×VÑVÓXÓY�Ø*-´°U³Ò*;™É#ÁÐSW�Ü ¨4¸&ÀcÔJ�Ø‘>Ø—J‘J´°u·{±{×7GÑ7GÈÑ7LÈUÏ[É[×M]ÑM]Ð^_ÑM`Ñ7`ÐabÑ7bÐdgÑ6gÓ0hÜ-2°G·M±M×4EÑ4EÓ4GÈÏÉ×HXÑHXÐYZÑH[Ñ4[Ð\]Ñ4]Ð_bÑ3bÓ-cÜ(,¨g¯m©m¸u×?WÑ?W×?\Ñ?\Ð]^Ñ?_Ñ._×-dÑ-dÓ-fÓ(gÜ/4´b·g±g¸aÀ×@PÑ@P×@UÑ@UÐVWÐXYÑVYÐZ]Ð^_ÑZ_Ð@`Ñ>`Ó6aÐbcÑ6cÐehÑ5hÓ/iÜ.3´R·W±W¸Q¸x×?RÑ?R×?WÑ?WÐXYÐZ[ÑX[Ð\_Ð`aÑ\aÐ?bÑ=bÓ5cÐdeÑ5eÐgjÑ4jÓ.kð	 ô mð
 �\Ñ"×)Ñ)¨#Ö.ð 9ð 	�‰�dÖð9 ô: �v¨6¼3¸u×?RÑ?R×?VÑ?VÓ?XÓ;YÜ�%×$Ñ$×(Ñ(Ó*Ó+¼EÀ%×BRÑBR×BVÑBVÓBXÓ<Yñ SMó  Nñ  SMÈ3�Sœ#˜u×1Ñ1°E¸#±JÑ>×CÑCÓEÓFÑFð  SMñ  NôOð Oùò7 xùò: Ns   Æ#WÖ1Wc                ó¦  — |d   | j                   k\  xr& |d   | j                   k\  xr |d   | j                  k  }t        |d   dkD  |d   dk(  |d   dkD  |d   dkD  |d   dk(  |d	   |d	   k(  |d
   |d
   cxk(  xr dk(  nc |d   |d   k\  |d   |d   k\  t        |«      | xs |d   |d   | j                  z
  k\  | j                  ||«      ¬«      S )NzOOS_Total TradesÚOOS_Bear_PctzP&L/DD Ratior   zFragile_0.05ÚSub1_CalmarÚSub2_CalmarÚWFO_Neg_FoldsÚComparison_FingerprintÚEvaluation_StatusÚcompletezCalmar RatiozOOS_Sortino Ratio)Úpositive_eligible_pnl_ddÚ	fragilityÚpositive_sub1Úpositive_sub2ÚwfoÚcommon_contractr¾   Úincumbent_calmarÚincumbent_pnl_ddÚoos_sortino_gate_appliesÚoos_sortinoÚ	qualifies)ÚOOS_MIN_TRADESÚOOS_BEAR_PCT_SKIPr?   r™   ÚOOS_SORTINO_DELTAÚ
promotable)r)   rI   rª   Úconditionals       r*   Úgate_decisionsrÏ   x   sD  € ØÐ)Ñ*¨f×.CÑ.CÑCò  qÈÐQcÑHdÐhn×h}Ñh}ÑH}ò  qð  CFð  GUñ  CVð  Y_÷  Yqñ  Yqñ  Cq€KÜ¨¨^Ñ)<¸qÑ)@Ø�nÑ%¨Ñ*¸#¸mÑ:LÈqÑ:PØ˜-Ñ(¨1Ñ,°#°oÑ2FÈ!Ñ2KØÐ4Ñ5¸ÐBZÑ9[Ñ[ØÐ(Ñ)¨XÐ6IÑ-JÖXÈjÔXØ˜^Ñ,°¸Ñ0HÑHØ˜^Ñ,°¸Ñ0HÑHÜ!% kÓ!2Ø$�_Òz¨Ð,?Ñ(@ÀHÐM`ÑDaÐbh×bzÑbzÑDzÑ(zØ×#Ñ# C¨Ó2ô	4ð 	4r,   c                óÚ   — t        t        | «      «      D �ci c]I  }|j                  «       sŒt        |j	                  t
        «      «      t        |j                  «       «      “ŒK c}S c c}w ©N)ÚsortedÚsetÚis_filer›   Úrelative_tor!   r	   Ú
read_bytes)ÚpathsÚpaths     r*   ÚhashesrÙ   †   sU   € ÜOUÔVYÐZ_ÓV`ÔOaÓtÑOaÀtÐei×eqÑeqÕesŒC�× Ñ ¤Ó&Ó'¬°·±Ó0AÓ)BÑBÐOaÑtÐtùÒts
   —A(­8A(c                 ó|  — t        t        t        dz  j                  d«      «      t        t        dz  j                  d«      «      z   t        t        dz  j                  d«      «      z   t        t        dz  j                  d«      «      z   t        t        dz  j                  d«      «      z   t        dz  gz   «      S )	Nzstrategies/paramsÚ*zresults/winnersÚ
strategiesz*.pineÚ	librariesÚ
indicatorsz	config.py)rÙ   Úlistr!   Úrglobr•   r,   r*   Úprotected_hashesrá   Š   sµ   € Ü”$œÐ0Ñ0×7Ñ7¸Ó<Ó=Ü
”Ð&Ñ&×-Ñ-¨cÓ2Ó
3ñ4ä
”�\Ñ!×(Ñ(¨Ó2Ó
3ñ4ô ”�[Ñ ×'Ñ'¨Ó1Ó
2ñ3ô ”�\Ñ!×(Ñ(¨Ó2Ó
3ñ	4ô 8<¸KÑ7GÐ6Hñ	Ió Jð Jr,   c                 óô	  ‡— t        j                  t        ¬«      } | j                  dt        d¬«       | j                  «       }|j                  j                  «       }|j                  «       r$t        |j                  «       «      rt        d«      ‚t        «       }|j                  |j                  d«      «      Št        ˆfd„t        j!                  «       D «       «      rt        d«      ‚d	‰d
   vs,t#        t	        ‰d
   «      j%                  «       «      t&        k7  rt        d«      ‚t)        «       }i }dD ]’  }t+        j,                  t.        j0                  |gt2        dd¬«      }t5        |j6                  |j8                  |j:                  ¬«      ||<   |j6                  sŒlt=        d|› d|j8                  › d|j:                  › �«      ‚ |j?                  d‰d
   g«      }tA        jB                  |jD                  «      }	t2        dz  }
tA        jB                  |
j%                  «       «      }|	d   |d   k7  rt        d«      ‚|	d   |d   k7  rt        d«      ‚|	d   |d   k7  rt        d«      ‚t#        |
j%                  «       «      |	d<   |	d   jG                  tI        tJ        D �cg c]  }t2        |z  ‘Œ c}«      «       t5        ddgddd¬«      |	d   d<   tM        |tA        jN                  |	dd ¬!«      ¬"«      }d#‰d$<   tQ        |‰d d¬%«      }tQ        |‰d «      }tS        ||«       |\  }}tU        tW        |«      |d«      }tQ        |t5        ‰d¬&«      d«      \  }}tU        tW        |«      |d«      }tY        |||«      }|j[                  t2        «       |t)        «       k7  sMt#        |j]                  d«      j%                  «       «      |	d   k7  st#        |
j%                  «       «      |	d   k7  rt        d'«      ‚|j_                  dd¬(«       t5        |	||||g|t5        ta        ||«      ta        ||«      ¬)«      t5        ddd|d*   |d*   k7  d+d,d¬-«      ¬.«      }|j!                  «       D ]9  \  }}||› d/�z  jc                  tA        jN                  |d+td        ¬0«      dz   «       Œ; |jg                  |d1z  d2¬3«       |jg                  |d4z  d2¬3«       ti        tA        jN                  |d+¬5«      «       y c c}w )6N)Údescriptionz--outputT)ÚtypeÚrequiredzOutput must be new or emptyr4   c              3  ó4   •K  — | ]  \  }}‰|   |k7  –— Œ y ­wrÑ   r•   )Ú.0r^   ÚvaluerG   s      €r*   Ú	<genexpr>zmain.<locals>.<genexpr>›   s   øè ø€ Ð
A±.¡J C¨ˆ6�#‰;˜%Õ±.ùs   ƒz#Frozen incumbent parameters driftedÚbb50_seed4942Úmlp_weights_filezFrozen model drifted)ztools/sync_params.pyztools/check_pine.py)ÚcwdÚtextÚcapture_output)Ú
returncodeÚstdoutÚstderrzPreflight failed: Ú
zJresults/mlp_threshold_comparison_2026_09_21/final/comparison_manifest.jsonÚdata_sha256z0Data differs from completed threshold comparisonÚcontractz@Measurement contract differs from completed threshold comparisonÚsource_hashesz<Evaluator sources differ from completed threshold comparisonÚreference_manifest_sha256rª   Úentry_loss_10pctgš™™™™™¹?é   r   )Úpoliciesr1   Úoriginal_trail_pctÚprotocolÚentry_loss_experiment)Ú,Ú:)rQ   Ú
separators)Úmanifest_jsonÚcurrentÚsourcer-   )r  z Protected or input files drifted)ÚparentsÚexist_ok)rª   Ú	candidaterf   é   r   )Ú%control_actions_returns_metrics_equalÚprotected_unchangedÚsource_input_hashes_unchangedÚdistinct_evaluation_keysÚpolicies_evaluatedÚ
promotionsÚretrospective)Úcomparison_manifestrá   Ú
preflightsÚresultsÚgatesr¶   Úverificationz.json)ÚindentÚdefaultzbaseline_bars.csvF)Úindexzentry_loss_10pct_bars.csv)r  )5ÚargparseÚArgumentParserÚ__doc__Úadd_argumentr   Ú
parse_argsÚoutputÚresolveÚexistsr¦   ÚiterdirÚ
ValueErrorr+   Únormalise_paramÚload_winnerÚFROZENÚitemsr	   rÖ   Ú
MODEL_HASHrá   Ú
subprocessÚrunÚsysÚ
executabler!   r?   rï   rð   rñ   ÚRuntimeErrorÚcapture_comparisonrS   Úloadsr   r§   rÙ   ÚEXPERIMENT_SOURCESr   rT   rO   r_   ri   r   rÏ   Úvalidate_sourcesÚ	data_pathÚmkdirr¶   Ú
write_textr›   Úto_csvÚprint)Úparserr2   r  r)   Ú	protectedr  Úscriptr&  r&   ÚmanifestÚreference_pathÚ	referenceÚpr.   rY   rª   Ú
base_tracer  rN   r  ÚpayloadsÚnameÚpayloadrG   s                          @r*   Úmainr>  ’   s¢  ø€ Ü×$Ñ$´Ô9€FØ
×Ñ˜
¬¸ÐÔ=Ø×ÑÓ€DØ�[‰[× Ñ Ó"€FØ‡}�}„œ3˜vŸ~™~Ó/Ô0ÜÐ6Ó7Ð7Ü‹[€FØ×#Ñ# F×$6Ñ$6°tÓ$<Ó=€FÜ
Ó
A´&·,±,´.Ó
AÔAÜÐ>Ó?Ð?Ø˜fÐ%7Ñ8Ñ8¼FÄ4ÈÐOaÑHbÓCc×CnÑCnÓCpÓ<qÔuÒ<ÜÐ/Ó0Ð0Ü Ó"€IØ€JÛAˆÜ�n‰nœcŸn™n¨fÐ5¼4ÀdÐ[_Ô`ˆÜ!¨S¯^©^ÀCÇJÁJÐWZ×WaÑWaÔbˆ
�6ÑØ�>‹>ÜÐ!3°F°8¸2¸c¿j¹j¸\ÈÈCÏJÉJÈ<ÐXÓYÐYð	 Bð
 ×(Ñ(¨°Ð7IÑ0JÐ/KÓL€HÜ�z‰z˜(×0Ñ0Ó1€HÜÐfÑf€NÜ—
‘
˜>×4Ñ4Ó6Ó7€IØ�Ñ )¨MÑ":Ò:ÜÐKÓLÐLØ�
Ñ˜y¨Ñ4Ò4ÜÐ[Ó\Ð\Ø�Ñ  I¨oÑ$>Ò>ÜÐWÓXÐXÜ,2°>×3LÑ3LÓ3NÓ,O€HÐ(Ñ)Øˆ_Ñ×$Ñ$¤VÕ=OÓ,PÑ=O¸¬T°!«VÐ=OÑ,PÓ%QÔRÜ48À:ÐOaÐBbØ¨rÐ<hô5j€HˆZÑÐ0Ñ1ä�x¬t¯z©z¸(ÈdÐ_iÔ/jÔk€HØ €Fˆ8ÑÜ ¨&°$À$ÔG€IÜ˜x¨°Ó6€HÜ�9˜hÔ'Ø#Ñ€HˆjÜœ xÓ0°(¸JÓG€HÜ& x´°fÐEWÔ1XÐZ^Ó_Ñ€IˆuÜœ¨	Ó2°HÐ>PÓQ€IÜ˜6 9¨hÓ7€EØ×ÑœdÔ#ØÔ%Ó'Ò'Ü�f×&Ñ& tÓ,×7Ñ7Ó9Ó:¸hÀ}Ñ>UÒUÜ�n×/Ñ/Ó1Ó2°hÐ?ZÑ6[Ò[ÜÐ;Ó<Ð<Ø
‡L�L˜¨€LÔ-Ü¨À9ÐYcØ˜9Ð%¨UÜ¤+¨j¸*Ó"EÔQ\Ð]bÐdnÓQoÔpÜÀÐZ^Ø*.ÈÐRbÑIcÐgpð  rBñ  hCñ  JCØ ¨Q¸dôDôE€Hð "Ÿ™Ö)‰ˆˆgØ	�4�&˜�Ñ	×*Ñ*¬4¯:©:°gÀaÔQTÔ+UÐVZÑ+ZÕ[ð *à×Ñ�fÐ0Ñ0¸ÐÔ>Ø	‡L�L�Ð3Ñ3¸5€LÔAÜ	Œ$�*‰*�U 1Ô
%Õ&ùò; -Qs   Ê(S5Ú__main__)NN)1r  Ú
__future__r   r  Údataclassesr   Úimportlib.utilr   rS   Úpathlibr   r%  r'  ÚnumpyrV   Úpandasr¤   Ú__file__r  r  r!   rØ   Úinsertr›   Ústrategies.mlp_accountingr   r   Ústrategies.mlp_comparisonr	   r
   r   Ústrategies.mlp_entry_lossr   Ústrategies.strategy_mlp_scoresr   r$  r?   r"  r,  r+   rO   r_   ri   r¶   rÏ   rÙ   rá   r>  Ú__name__r•   r,   r*   Ú<module>rM     sê   ðÙ PÝ "ã Ý Û Û Ý Û Û 
ã Û áˆHƒ~×ÑÓ×'Ñ'¨Ñ*€Ø ‡�‡��‘3�t“9Ô ß Bß IÑ IÝ 8Ý <àO€
Ù	°ÐVZØ27ÐSVØ"'ÀdØ°ÈØ°ô	
8€ò
dÐ óð CHô 
òCòò-Oò`4òuòJò<'ð~ ˆzÒÙ…Fð r,   