Ë
    ~S±jW  ã                   ó`   — d dl Zd dlmc mZ d dlZd dlZ	d dl
mZ d dlmZmZmZ d„ Zd„ Zd„ Zy)é    N)Únet_returns)Ú	benchmarkÚledgerÚoverridden_metricsc                  óÔ
  — t        j                  t        j                  dd¬«      g d¢g d¢g d¢g d¢dœ«      } t        | «      }d	}t        j
                  }|j                  d
   }|j                  }d}||z  } |||«      }|�sddt        j                  «       v st        j                  t        «      rt        j                  t        «      ndt        j                  |«      t        j                  |«      t        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |«      t        j                  |«      dœz  }	t        t        j                  |	«      «      ‚d x}x}x}x}x}}t        j
                  }|j                  }
|
j                   } |«       }t        j"                  }d}t%        | «      }||z   } ||«      }d}||z
  } |||«      }|�sIddt        j                  «       v st        j                  t        «      rt        j                  t        «      ndt        j                  |«      dt        j                  «       v st        j                  |«      rt        j                  |«      ndt        j                  |
«      t        j                  |«      t        j                  |«      dt        j                  «       v st        j                  t        «      rt        j                  t        «      ndt        j                  |«      t        j                  |«      dt        j                  «       v st        j                  t$        «      rt        j                  t$        «      nddt        j                  «       v st        j                  | «      rt        j                  | «      ndt        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      dœz  }t        t        j                  |«      «      ‚d x}x}
x}x}x}x}x}x}x}x}x}}|j                  d   d   }|s8ddt        j                  |«      iz  }t        t        j                  |«      «      ‚d }|j                  d   }|j&                  }d}||k(  }
|
s€t        j(                  d|
fd||f«      t        j                  |«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}x}
}y ) Nú
2020-01-01é   ©Úperiods)ç      Y@g     €[@g      ^@r   g     @Z@)é   r   r   r   r   )TFFTF)FFTFF©ÚtimeÚcloseÚpositionÚexecute_entryÚexecute_exitg€Ïtíu3È?r   éd   z„assert %(py12)s
{%(py12)s = %(py2)s
{%(py2)s = %(py0)s.isclose
}(%(py6)s
{%(py6)s = %(py4)s.net_return_pct
}, (%(py7)s * %(py9)s))
}ÚnpÚexpected)Úpy0Úpy2Úpy4Úpy6Úpy7Úpy9Úpy12r   a%  assert %(py26)s
{%(py26)s = %(py2)s
{%(py2)s = %(py0)s.isclose
}(%(py9)s
{%(py9)s = %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py3)s.initial_equity_pnl
}.sum
}()
}, (%(py21)s
{%(py21)s = %(py12)s
{%(py12)s = %(py10)s.prod
}((%(py14)s + %(py18)s
{%(py18)s = %(py15)s(%(py16)s)
}))
} - %(py23)s))
}Úresultr   Úframe)r   r   Úpy3Úpy5r   r   Úpy10r   Úpy14Úpy15Úpy16Úpy18Úpy21Úpy23Úpy26éÿÿÿÿÚopenzassert %(py1)sÚpy1é   ©ú==)z:%(py3)s
{%(py3)s = %(py1)s.first_return_index
} == %(py6)s)r,   r    r   zassert %(py8)sÚpy8)ÚpdÚ	DataFrameÚ
date_ranger   r   ÚiscloseÚilocÚnet_return_pctÚ@py_builtinsÚlocalsÚ
@pytest_arÚ_should_repr_global_nameÚ	_safereprÚAssertionErrorÚ_format_explanationÚinitial_equity_pnlÚsumÚprodr   Úfirst_return_indexÚ_call_reprcompare)r   r   r   Ú@py_assert1Ú@py_assert3Ú@py_assert5Ú@py_assert8Ú@py_assert10Ú@py_assert11Ú@py_format13Ú@py_assert4Ú@py_assert6Ú@py_assert13Ú@py_assert17Ú@py_assert19Ú@py_assert20Ú@py_assert22Ú@py_assert24Ú@py_assert25Ú@py_format27Ú@py_assert0Ú@py_format2Ú@py_assert2Ú@py_format7Ú@py_format9s                            úI/Users/jameslopez/projects/TradingBot25/tests/test_mlp_incumbent_audit.pyÚ6test_ledger_reconstructs_equity_and_includes_both_feesrZ      sE  € Ü
�,‰,œrŸ}™}¨\À!ÔDÒMgÚ#.Ò?\Ú'EñGó H€Eô �%‹=€FØ-€HÜ�:‰:ÐA�f—k‘k !‘nÐA�n×3Ñ3ÐA¸SÐA°H¸S±LÐA‰:Ð3°LÓAÐAÒA×A×A×A×AÕAŒ2×A×AÓAŒ2×A×AÔAˆ:×A×AÒA�n×A×AÒAÐ3×A×A×A×A×AÐA°H×A×AÓA°H×A×AÔA¸S×A×AÒAÐA×A×A×A×A×A×AÒAÜ�:‰:ÐV�f×/Ñ/ÐVÐ/×3Ñ3ÐVÑ3Ó5ÐV´b·g±gÐV¸aÐVÄÈEÓ@RÐV¸aÐ@RÑ>RÐV±gÐ>RÓ6SÐVÐTUÐVÐ6SÐTUÑ6UÐV‰:Ð5Ð6UÓVÐVÒV×V×V×V×VÕVŒ2×V×VÓVŒ2×V×VÔVˆ:×V×V×V×V×VÐV�f×V×VÓV�f×V×VÔVÐ/×V×VÒVÐ3×V×VÒVÐ5×V×V×V×V×VÐV´b×V×VÓV´b×V×VÔV°g×V×VÒV¸a×V×V×V×V×VÐVÄ×V×VÓVÄ×V×V×V×V×VÒVÈE×V×VÓVÈE×V×VÔVÐ@R×V×VÒVÐ6S×V×VÒVÐTU×V×VÒVÐV×V×V×V×V×V×V×VÖVØ�;‰;�r‰?˜6Ñ"Ð"Ñ"×"×"Ð"Ð"×"×"×"×"×"Ø�;‰;�r‰?Ð0ˆ?×-Ñ-Ð0¨qÐ0Ð-¨qÑ0×0×0Õ0Ð-¨q×0×0Ó0ˆ?×0×0Ò0Ð-×0×0Ò0¨q×0×0×0×0×0×0Ö0ó    c                  óÄ  — t        j                  t        j                  dd¬«      t        j                  ddd«      dœ«      } t        | d«      }t        | j                  d d d«      }t         j                  j                  |j                  d d |«       t        | d	«      }t        j                  |j                  «      d
   }t        |«      j                  |   }d
}||k(  }|slt        j                  d|fd||f«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }	t        t        j                   |	«      «      ‚d x}x}}t        j"                  }
t        |«      j                  |dz      }| j$                  j                  |dz      }| j$                  j                  |   }||z  }d}||z
  }d}||z
  } |
||«      }|sùddt'        j(                  «       v st        j*                  t        «      rt        j                  t        «      ndt        j                  |
«      t        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      t        j                  |«      dœz  }t        t        j                   |«      «      ‚d x}
x}x}x}x}x}x}x}x}}y )Nz
2017-01-01iX  r
   r   éÈ   )r   r   Útrend_200_calendar_daysiÂ  Úbuy_holdr   r.   ©z%(py1)s == %(py4)s©r,   r   úassert %(py6)sr   r   g{®Gázt?zzassert %(py17)s
{%(py17)s = %(py2)s
{%(py2)s = %(py0)s.isclose
}(%(py4)s, (((%(py6)s / %(py8)s) - %(py11)s) - %(py14)s))
}r   )r   r   r   r   r0   Úpy11r#   Úpy17)r1   r2   r3   r   Úlinspacer   r5   ÚtestingÚassert_frame_equalÚflatnonzeror   r   r9   rB   r;   r<   r=   r4   r   r7   r8   r:   )r   ÚwholeÚprefixÚbuyÚentryrT   rD   rV   Ú@py_format5rW   rC   rE   Ú@py_assert7Ú@py_assert9rG   Ú@py_assert12rL   Ú@py_assert15Ú@py_assert16Ú@py_format18s                       rY   Ú+test_benchmark_causal_and_entry_fee_delayedrt      s  € Ü
�,‰,œrŸ}™}¨\À#ÔFÌrÏ{É{Ð[^Ð_bÐcfÓOgÑhÓ
i€EÜ
�EÐ3Ó
4€EÜ�U—Z‘Z  Ð%Ð&?Ó@€FÜ‡J�J×!Ñ! %§*¡*¨T¨cÐ"2°6Ô:Ü�%˜
Ó#€CÜ
�.‰.˜×*Ñ*Ó
+¨AÑ
.€EÜ�sÓ× Ñ  Ñ'Ð*¨Ð*Ð'¨Ñ*×*×*Õ*Ð'¨×*×*Ó*Ð'×*×*Ò*¨×*×*×*×*×*×*Ó*Ü�:‰:Ðn”k #Ó&×+Ñ+¨E°!©GÑ4Ðn°U·[±[×5EÑ5EÀeÈAÁgÑ5NÐnÈuÏ{É{×O_ÑO_Ð`eÑOfÐnÐ5NÐOfÑ5fÐnÐghÐnÐ5fÐghÑ5hÐnÐimÐnÐ5hÐimÑ5mÐn‰:Ð4Ð5mÓnÐnÑn×n×n×n×nÕnŒ2×n×nÓnŒ2×n×nÔnˆ:×n×nÒnÐ4×n×nÒnÐ5N×n×nÒnÐOf×n×nÒnÐgh×n×nÒnÐim×n×nÒnÐn×n×n×n×n×n×n×nÓnr[   c            	      óÆ  — t        j                  t        j                  dd¬«      g d¢g d¢g d¢dgdz  dœ«      } t        | t	        j
                  d«      dd	«      }|d
   }d}||k(  }|slt        j                  d|fd||f«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}}|d   }d}||k(  }|slt        j                  d|fd||f«      t        j                  |«      t        j                  |«      dœz  }dd|iz  }t        t        j                  |«      «      ‚d x}x}}t        j                  }|d   }d}d}	||	z  }
 |||
«      }|sÑddt        j                  «       v st        j                  t        «      rt        j                  t        «      ndt        j                  |«      t        j                  |«      t        j                  |«      t        j                  |	«      t        j                  |«      dœz  }t        t        j                  |«      «      ‚d x}x}x}x}	x}
}y )Nr   r	   r
   )r   éZ   éP   rv   r   )r   r   r   r   r   )TFFFFFr   z
2020-01-05Úpnl_pctr   r.   r`   ra   rb   r   Úentriesr   Úyearsg     Ôv@z`assert %(py11)s
{%(py11)s = %(py2)s
{%(py2)s = %(py0)s.isclose
}(%(py4)s, (%(py6)s / %(py8)s))
}r   )r   r   r   r   r0   rc   )r1   r2   r3   r   r   Úzerosr9   rB   r;   r<   r=   r4   r7   r8   r:   )r   r   rT   rD   rV   rm   rW   rC   rE   rn   ro   rG   Ú@py_format12s                rY   Ú5test_zero_return_diagnostic_keeps_calendar_and_countsr}      s�  € Ü
�,‰,œrŸ}™}¨\À!ÔDÒM_Ú#.Ò?]Ø(- w¨q¡yñ2ó 3€Eô ˜e¤B§H¡H¨Q£K°¸\ÓJ€FØ�)ÑÐ˜aÐÐ˜aÑ××ÕÐ˜a××ÓÐ××Ò˜a××××××ÓØ�)ÑÐ˜aÐÐ˜aÑ××ÕÐ˜a××ÓÐ××Ò˜a××××××ÓÜ�:‰:Ð/�f˜W‘oÐ/ aÐ/¨Ð/ a¨¡hÐ/‰:�o hÓ/Ð/Ñ/×/×/×/×/Õ/Œ2×/×/Ó/Œ2×/×/Ô/ˆ:×/×/Ò/�o×/×/Ò/ a×/×/Ò/¨×/×/Ò/Ð/×/×/×/×/×/×/Ó/r[   )Úbuiltinsr7   Ú_pytest.assertion.rewriteÚ	assertionÚrewriter9   Únumpyr   Úpandasr1   Ústrategies.mlp_accountingr   Útools.run_mlp_incumbent_auditr   r   r   rZ   rt   r}   © r[   rY   Ú<module>r‡      s)   ðß  „ Ó Û å 1ß OÑ Oò	1òoó0r[   