Ë
    `�£j  ã                   óT   — d dl mZ ddlmZmZ ddedededee   ded	ed
edede	fd„Z
y)é    )Ú	dataclassé   )ÚCandleÚgenerateÚ	symbol_idÚsymbolÚhorizonÚcandlesÚ
spread_bpsÚslippage_bpsÚfee_bpsÚfunding_bpsÚreturnc                 óâ  ‡!— g }dx}	x}
}i }g }t        dt        |«      dz
  «      D �]¢  }t        | |||d | «      }|j                  dk(  rŒ%|j                  |j                  dk(  rd||z   dz  z   n
d||z   dz  z
  z  }||t        t        |«      |dz   «       }|d   j                  }d	}|D �]c  }dt        d|j                  «      z  }|j                  dk(  r|j                  |d|z
  z  k  s$|j                  d
k(  r:|j                  |d|z   z  k\  r%||j                  dk(  rd|z
  nd|z   z  }d}|dz  } nÝ|j                  dk(  r'|j                  |j                  k  r|j                  } n§|j                  d
k(  r'|j                  |j                  k\  r|j                  } nq|j                  dk(  r'|j                  |j                  k\  r|j                  } n;|j                  d
k(  s�Œ=|j                  |j                  k  s�ŒX|j                  } n ||z
  |z  |j                  dk(  rdndz  ||z   dz  z
  }|j                  |«       |	|dkD  z  }	|
|dk  z  }
|j                  |j                  ddddœ«      }|dxx   dz  cc<   |dxx   |dkD  z  cc<   |dxx   |z  cc<   |j                  |j                   dz  |dkD  rdndf«       �Œ¥ d}d}d}|D ](  }|d|z   z  }t        ||«      }t        |||z
  |z  «      }Œ* |rt#        |«      t        |«      z  ndŠ!|r t#        ˆ!fd„|D «       «      t        |«      z  nd}|j%                  «       D ��ci c]!  \  }}||d   |d   |d   z  |d   |d   z  dœ“Œ# }}}|rt#        d„ |D «       «      t        |«      z  nd} | ||dt        |«      |r|	t        |«      z  nd‰!||r‰!|dz  z  nd| t        |«      |r|t        |«      z  |dœS d|dœS c c}}w )Nr   éÒ   r   ÚNO_TRADEÚLONGi'  é   éÿÿÿÿFÚSHORTT)ÚtradesÚwinsr   r   r   r   éd   c              3   ó.   •K  — | ]  }|‰z
  d z  –— Œ y­w)é   N© )Ú.0ÚxÚavgs     €útrading-ai/app/backtest.pyú	<genexpr>zwalk_forward.<locals>.<genexpr>   s   øè ø€ Ò- �!�C‘%˜!•Ñ-ùs   ƒ)r   Úwin_rateÚ
expectancyc              3   ó>   K  — | ]  \  }}t        ||z
  «      –— Œ y ­w)N)Úabs)r   Ú	predictedÚactuals      r    r!   zwalk_forward.<locals>.<genexpr>   s   è ø€ ÒTÑ4D°I¸fœ#˜i¨Ñ.×/ÑTùs   ‚zrules-v1g      à?)r   r   r	   Úengine_versionr   r"   r#   Úmax_drawdownÚrisk_adjusted_returnÚcalibration_errorÚturnoverÚliquidation_rateÚ	by_regime)ÚrangeÚlenr   Ú	directionÚentryÚminÚcloseÚmaxÚrecommended_leverageÚlowÚhighÚ	stop_lossÚtake_profitÚappendÚ
setdefaultÚregimeÚ
confidenceÚsumÚitems)"r   r   r	   r
   r   r   r   r   Úreturnsr   ÚlossesÚliquidationsÚregimesÚcalibrationÚendÚsignalr2   ÚfutureÚ
exit_priceÚ
liquidatedÚbarÚliquidation_moveÚretÚbucketÚequityÚpeakÚmax_ddÚvalueÚvarianceÚnamer   Úregime_metricsr+   r   s"                                    @r    Úwalk_forwardrV      s³  ø€ Ø€G¨Ð*�Ð*�V˜L°B¨GÀB¸Ü�Sœ˜W› a™Ó(ó FˆÜ˜	 &¨°¸¸#°Ó?ˆØ×Ñ˜ZÒ'¨Ø�l‰lÀ×AQÑAQÐSYÒAY˜A˜z¨,Ñ6¸Ñ=Ò=Ð_`ÐblÐmyÑbyð  |Añ  bAñ  `Añ  BˆØ�sœ3œs 7›|¨C°©FÓ3Ð4ˆÀÈÁ×AQÑAQ°jÐ^cÐS]Øó 	nˆCØœs 1 V×%@Ñ%@ÓAÑAÐØ× Ñ  &Ò(¨S¯W©W°e¸QÐ?OÑ=OÑ6PÒ-PÐV\×VfÑVfÐhoÒVoÐtw×t|Ñt|ð  Dð  FGð  HXñ  FXñ  Yò  uYØ ¸×8HÑ8HÈ&Ò8P !Ð$4Ò"4ÐVWÐXhÑVhÑi�
ÐuyÐjtð  {Gð  IJñ  {Jð  {Gñ  KPØ×Ñ Ò'¨C¯G©G°V×5EÑ5EÒ,EÐRX×RbÑRbÀzÑchØ×Ñ Ò(¨S¯X©X°v×7GÑ7GÒ-GÐTZ×TdÑTdÈÑejØ×Ñ Ò'¨C¯H©H°f×6HÑ6HÒ,HÐU[×UgÑUgÈ*ÑhmØ×Ñ Ô(¨S¯W©W°f×6HÑ6HÔ-HÐU[×UgÑUgÈ*Ñhmð	nð ˜Ñ Ñ%¨V×-=Ñ-=¸vÒ-E©È2ÑNÐPWÐXcÑPcÐejÑOjÑjˆÐkr×kyÑkyÐz}Ôk~ð  @Dð  FIð  JKñ  FKñ  @Kð  @Dð  LRð  TWð  YZñ  TZñ  LZð  LRØ×!Ñ! &§-¡-¸!À1ÈaÑ0PÓQˆÐRXÐYaÓRbÐdeÑReÓRbÐflÐmsÓftÐvyÐz{Ñv{Ñf{Óftð  }Cð  DLó  }Mð  ORñ  }Ró  }MØ×Ñ˜F×-Ñ-¨cÑ1°s¸1²u±!À!ÐDÖEðFð  €F�!ˆT˜1�FØÒeˆ˜& ! E¡'™/˜&¬s°4¸Ó/?¨$ÄsÈ6ÐSWÐX^ÑS^Ð`dÑRdÓGeÁÐeÙ%,ŒˆG‹”S˜“\Ò!°!€CÙ>EŒSÓ- WÔ-Ó-¬c°'«lÒ:È1€Hð EL÷  ERñ  ERó  ET÷  Uñ  {AÐz~ð  @A�D 1 X¡;¸!¸F¹)ÀAÀhÁKÑ:OÐ]^Ð_gÑ]hÐijÐksÑitÑ]tÑuÑuð  U€Nñ  UÙit”cÑTÈÔTÓTÔUXÐYdÓUeÒeÐz{ÐØ!¨6¸GÐU_ÔilÐmtÓiuñ  W^ð  BFô  GJð  KRó  GSò  BSð  deð  svð  FLñ  zBð  dgð  iqð  suñ  iuò  dvð  HIð  ^oô  {~ð  Fó  {Gñ  xð  [gô  hkð  lsó  htñ  [tð  Sañ  bð  bð  EFð  Sañ  bð  bùó Us   Í&O+N)r   r   r   r   )Údataclassesr   Úenginer   r   ÚintÚstrÚlistÚfloatÚdictrV   r   ó    r    ú<module>r_      sn   ðÝ !ß #ñb˜3ð b cð b°#ð b¸dÀ6¹lð bÐV[ð bÐkpð bð  |Að bð  PUð bð  Z^ô br^   