+
    ��õj 0  ã                   ó  € R t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
t^ RIt^ RIt^ RIHt ^ RIHtHtHt ^ RIHt ^ RItRtR tR t ! R R	]P6                  4      tRR
 ltR tR t] R8X  d
   ]! 4        R# R# )uw  
Replay real Binance USD-M futures trades through the SAME bot code, and report
what the strategy actually did â€” including how many bricks the 1hr chart runs
before returning to the line (your "it printed 50 or more" claim).

  python backtest.py --download 2026-11-06 2026-11-08   # fetch daily aggTrades
  python backtest.py --data data --both                 # fees off, then on
  python backtest.py --data data --both --fill market   # realistic fills

'line'  = the ideal case, the flip fills exactly on the line.
'market'= the flip fills at the trade price + 1 tick.
Funding, latency and order-book depth are not modelled.
N)ÚCounter)ÚdatetimeÚ	timedeltaÚtimezone)ÚDecimalzUhttps://data.binance.vision/data/futures/um/daily/aggTrades/{s}/{s}-aggTrades-{d}.zipc                 ó  € \         P                  ! VR R7       \        P                  ! V R4      P	                  4       p\        P                  ! VR4      P	                  4       pWE8:  Ed@   V RV R2p\         P
                  P                  W&4      p\         P
                  P                  V4      '       d*   \        P                  ! V4      '       d   \        RV4       M´VR,           p \        P                  P                  \        P                  W4R7      V4       \        P                  ! V4      '       g   \!        R4      h\         P"                  ! W‡4       \        R	V\         P
                  P%                  V4      R
,          R
,          R4       V\/        ^R7      ,          pEKF  R#   \        P&                  P(                   d"   p	\        RYiP*                  R4        Rp	?	LSRp	?	i\,         d   p	\        RYi4        Rp	?	LrRp	?	ii ; i)T)Úexist_okz%Y-%m-%dz-aggTrades-ú.zipÚhavez.part)ÚsÚdz(download is not a valid zip (truncated?)Ú
downloadedi   ÚMBÚmissingz(not published or wrong date)NÚfailed)Údays)ÚosÚmakedirsr   ÚstrptimeÚdateÚpathÚjoinÚexistsÚzipfileÚ
is_zipfileÚprintÚurllibÚrequestÚurlretrieveÚURLÚformatÚ
ValueErrorÚreplaceÚgetsizeÚerrorÚ	HTTPErrorÚcodeÚ	Exceptionr   )
ÚstartÚendÚfolderÚsymbolÚdayÚlastÚnamer   ÚtmpÚes
   &&&&      Úbacktest.pyÚdownloadr2   $   su  € Ü‡K‚K� Õ&Ü
×
Ò
˜E :Ó
.×
3Ñ
3Ó
5€CÜ×Ò˜S *Ó-×2Ñ2Ó4€DØ
�+Ø�˜ S E¨Ð.ˆÜ�w‰w�|‰|˜FÓ)ˆÜ�7‰7�>‰>˜$×Ò¤G×$6Ò$6°t×$<Ò$<Ü�&˜$Õà˜•.ˆCð	)Ü—‘×*Ñ*¬3¯:©:¸¨:Ó+FÈÔLÜ×)Ò)¨#×.Ò.Ü$Ð%OÓPÐPÜ—
’
˜3Ô%Ü�l D¬"¯'©'¯/©/¸$Ó*?À4Õ*GÈ4Õ*OÐQUÔVð
 	Œy˜aÔ Õ ‹ñ# øô —<‘<×)Ñ)ô PÜ�i §v¡vÐ/N×OÑOûÜô )Ü�h ×(Ñ(ûð)ús+   Ã)B*F+ Æ+H
Ç
G&Ç&H
Ç3H
Ç4HÈH
c              #  ó&  "  € V P                  R4      '       dT   \        P                  ! V 4      p\        P                  ! VP                  VP                  4       ^ ,          4      RR7      pM\        V RR7      pT;_uu_ 4        \        P                  ! V4       F<  p \        V^,          4      pTR8”  d
   TR,          p\        T^,          4      T3x € K>  	  RRR4       R#   \        \        3 d     K^  i ; i  + '       g   i     R# ; i5i)zJYield (price Decimal, timestamp ms) from a zipped or plain aggTrades file.r	   zutf-8)Úencodingéè  Nl    @ô Ìk )Úendswithr   ÚZipFileÚioÚTextIOWrapperÚopenÚnamelistÚcsvÚreaderÚintr!   Ú
IndexErrorÚD)r   ÚzfÚfÚrowÚtss   &    r1   Ú
iter_ticksrE   <   sÊ   é € à‡}�}�V×ÒÜ�_Š_˜TÓ"ˆÜ×Ò˜RŸW™W R§[¡[£]°1Õ%5Ó6ÀÔI‰ä� Ô(ˆß	
ŠÜ—:’:˜a–=ˆCðÜ˜˜Q�“[�ð �HŒ}Ø�t•�Ü�C˜•F“)˜R�-Ôñ !÷ 
‰øô ¤
Ð+ô Úðú÷	 
�ˆüsB   ‚BDÂC=ÂC%Â1*C=Ã
DÃ%C:	Ã6C=Ã9C:	Ã:C=Ã=D	Ä	Dc                   óš   a a€ ] tR t^Nt oRtV 3R ltR tR tRR ltV 3R lt	R t
R tV 3R	 ltV 3R
 ltV 3R ltV 3R ltR tRtVtV ;t# )ÚReplayz3The live bot fed from files instead of a websocket.c                ó  <€ \        \        V4      4      \        n        V\        n        \        \        V4      4      \        n        \        SV `  R 4       . V n        ^ V n	        R V n
        \        ^ ^ ^ ^ ^ ^ ^ \        ^ 4      \        ^ 4      \        ^ 4      \        ^ 4      RR7      V n        V P                  V n        \        ^ 4      V n        . V n        ^ V n        ^ V n        ^ V n        . V n        . V n        . V n        \        ^ 4      V n        R # )NF)ÚtradesÚwinÚlossÚneutralÚcyclesÚprofitÚlinesÚfeesÚfundingÚspreadÚnetÚ
liquidated)r@   ÚstrÚzÚ	TAKER_FEEÚFILLÚ
START_CASHÚsuperÚ__init__ÚrowsÚcur_tsÚ
prev_priceÚdictÚstÚcapitalÚpeakÚmax_ddÚrunsÚrunÚlast_dirÚheldÚprofit_bricksÚcycle_bricksÚflipsÚ_spread_seen)ÚselfÚfeeÚfillra   Ú	__class__s   &&&&€r1   r[   ÚReplay.__init__Q   s×   ø€ Üœ˜C›“kŒŒØŒŒÜœ˜W›“ŒŒÜ‰Ñ˜ÔØˆŒ	ØˆŒØˆŒÜ˜a Q¨Q¸À!ÈAØ¤Q q£T´1°Q³4ÄÀ!ÃÌ!ÈAË$Ø"'ô)ˆŒð —L‘LˆŒ	Ü˜“dˆŒØˆŒ	ØˆŒØˆŒØˆŒ	ØˆÔØˆÔØˆŒ
Ü˜a›DˆÖó    c                ó   € R # ©N© ©rl   s   &r1   ÚloadÚReplay.loadg   ó   € Ùrq   c                ó   € R # rs   rt   ru   s   &r1   ÚsaveÚReplay.savej   rx   rq   c           
     óþ  € \         P                  ! V P                  R ,          \        P                  4      P                  R4      pV P                  P                  WQW#VV P                  R V P                  R .4       V P                  pVP                  R4      '       d?   VR;;,          ^,          uu&   TRV9   d   RM
RV9   d   RMR;;,          ^,          uu&   R
# VR8X  d   VR	;;,          ^,          uu&   R
# R
# )r5   z%Y-%m-%d %H:%M:%Sz.6fz	3rd chartrI   rJ   rK   rL   zNEW LINErO   N)r   Úfromtimestampr]   r   ÚutcÚstrftimer\   Úappendra   Úsavingsr`   Ú
startswith)rl   ÚeventÚdetailÚpnlrP   Útr   s   &&&&&  r1   ÚlogÚ
Replay.logm   sÆ   € Ü×"Ò" 4§;¡;°Õ#5´x·|±|ÓD×MÑMÐNaÓbˆØ�	‰	×Ñ˜! F°Ø!Ÿ\™\¨#Ð.°D·L±LÀÐ3EðHô 	Ià�G‰GˆØ×Ñ˜K×(Ò(Øˆh�K˜1Õ‹KØ�u ”~‰e°V¸u´_©6È)×TÐXYÕYÕTØ�jÔ Øˆg�J˜!�O�Jñ !rq   c                ó�  <€ \         SV `  W4       V P                  '       d3   V P                  R ,          '       d   V ;P                  ^,          un        W P                  8X  d   V ;P
                  ^,          un        R# V P
                  '       d&   V P                  P                  V P
                  4       ^VuV n        V n        R# )ÚcarriedN)rZ   Úset_lineÚposrg   rf   re   rd   r€   )rl   ÚlineÚsidero   s   &&&€r1   r‹   ÚReplay.set_linex   sz   ø€ Ü‰Ñ˜Ô$Ø�8�8ˆ8˜Ÿ™ ×+Ô+Ø�IŠI˜�N�IØ—=‘=Ô Ø�HŠH˜�M�Hà�x�xˆxØ—	‘	× Ñ  §¡Ô*Ø&'¨Ð#ˆDŒH�d–mrq   c                óT  € V P                   R ;;,          V,          uu&   V P                  V P                  ,           p\        V P                  V4      V n        V P                  ^ 8”  d@   \        V P
                  V P                  V,
          V P                  ,          4      V n        R# R# )rS   N)r`   ra   r�   Úmaxrb   rc   )rl   rS   ÚbaseÚmoveÚequitys   &&&& r1   Úon_closeÚReplay.on_closeƒ   sl   € Ø�‰��˜#Õ‹Ø—‘ §¡Õ,ˆÜ˜Ÿ	™	 6Ó*ˆŒ	Ø�9‰9�qŒ=Ü˜dŸk™k¨D¯I©I¸Õ,>À$Ç)Á)Õ+KÓLˆDŽKñ rq   c                ó@  € V P                   pVR ;;,          ^,          uu&   VR;;,          V,          uu&   V^ 8”  d   VR;;,          ^,          uu&   V\        P                  ,          \        \	        \        P
                  4      4      ,          \        P                  ,          pV^ 8”  d+   V P                  P                  \        W,          4      4       V P                  P                  V P                  4       ^ V n        V P                  P                  V4       R# )rM   rP   rN   N)r`   rV   Ú
MARGIN_USEr@   rU   ÚLEVERAGEÚ
BOX_HOURLYri   r€   Úfloatrh   rg   rj   )rl   ÚtotalrP   Únr’   r   Úbricks   &&&&&  r1   Úon_bookÚReplay.on_bookŠ   s¸   € Ø�G‰GˆØ	ˆ(��qÕ‹Ø	ˆ&�	�TÕ‹	Ø�1Œ9Øˆh�K˜1Õ‹KØ”q—|‘|Õ#¤a¬¬A¯J©J«Ó&8Õ8¼1¿<¹<ÕGˆØ�1Œ9Ø×Ñ×$Ñ$¤U¨5­=Ó%9Ô:Ø×Ñ×!Ñ! $§)¡)Ô,ØˆŒ	Ø�
‰
×Ñ˜!Örq   c                óT   <€ \         SV `  V4      '       d   R V P                  R&   R # R# )TrT   F)rZ   rT   r`   )rl   Úpricero   s   &&€r1   rT   ÚReplay.liquidated—   s'   ø€ Ü‰7Ñ˜e×$Ò$Ø$(ˆD�G‰G�LÑ!ÙÙrq   c              ƒ  óp   <"  € W n         V P                  V n        \        SV `  W4      G R j  x€L
  R #  L5irs   )r]   Ú
last_pricer^   rZ   Úon_trade)rl   r¢   rD   ro   s   &&&€r1   r¦   ÚReplay.on_trade�   s)   øé € ØŒØŸ/™/ˆŒÜ‰gÑ˜uÓ)×)Ô)ùs   ƒ*6­4®6c                óD  <€ V P                   pV'       d{   \        P                  '       ge   V P                  R ;;,          VR,          VR,          ,          WR,          ,          ,           \        P                  ,          ^,          ,          uu&   \
        SV `  WV4       R# )rR   ÚentryÚqtyN)rŒ   rV   ÚMAKERr`   ÚSPREADrZ   Úclose)rl   ÚrawÚslipÚreasonÚpro   s   &&&& €r1   r­   ÚReplay.close¢   s`   ø€ Ø�H‰Hˆß”Q—W—W�WØ�G‰G�H× ! G¥*¨q°­xÕ"7¸#À%Å½.Õ"HÌAÏHÉHÕ!TÐWXÕ!XÕXÓÜ‰‰�c Ö(rq   c           	     ó  <€ V P                   P                  R \        ^ 4      4      p\        SV `  V4       V P
                  R ;;,          V P                   P                  R \        ^ 4      4      V,
          ,          uu&   R# )rQ   N)ÚcycleÚgetr@   rZ   Úaccrue_fundingr`   )rl   r¢   Úbeforero   s   && €r1   r¶   ÚReplay.accrue_funding¨   sT   ø€ Ø—‘—‘ 	¬1¨Q«4Ó0ˆÜ‰Ñ˜uÔ%Ø�‰�	×˜dŸj™jŸn™n¨Y¼¸!»Ó=ÀÕFÕFÕrq   c              ƒ  óÊ   "  € V P                   f   R # V P                  P                  V P                   4      pV F#  pV P                  V^ ,          V^,          4       K%  	  R # 5irs   )r^   Úr1hÚfeedr‹   )rl   ÚbricksÚbs   &  r1   Únew_hourÚReplay.new_hour­   sH   é € à�?‰?Ò"ÙØ—‘—‘˜tŸ™Ó/ˆÛˆAØ�M‰M˜!˜A�$  !¥Ö%ó ùs   ‚A!A#)rk   r]   ri   rj   rg   rf   rc   rb   r^   rh   r\   re   rd   r`   )Ú rÀ   rÀ   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r[   rv   rz   r‡   r‹   r•   rŸ   rT   r¦   r­   r¶   r¾   Ú__static_attributes__Ú__classdictcell__Ú__classcell__)ro   Ú__classdict__s   @@r1   rG   rG   N   sK   ù‡ € Ù=õ!ò,òô	õ	.òMòõõ*õ
)õG÷
&ò &rq   rG   c           	      ó@  a€ \        4       oV  FK  p\        V4       F$  pW#8¼  g   K  SV R 2;;,          ^,          uu&    K4  	  SR;;,          ^,          uu&   KM  	  RP                  V3R lR.\        V4       Uu. uF  q3 R 2NK	  	  up,            4       4      # u upi )Ú+z<1Ú c              3   ób   <"  € T F$  pSV,          '       g   K  V R SV,           2x € K&  	  R# 5i)Ú:Nrt   )Ú.0ÚkÚcs   & €r1   Ú	<genexpr>Úbucket.<locals>.<genexpr>¿   s/   øé € Ð_Ñ+V aÐZ[Ð\]×Z^ÑZ^”M�q�c˜˜1˜Q�4˜&•MÓ+Vùs   ƒ/™/)r   Úreversedr   )ÚvaluesÚedgesÚvr0   rÑ   s   &&  @r1   ÚbucketrØ   ¶   s„   ø€ Ü‹	€AÛˆÜ˜%–ˆAØŽvØ�Q�C�q�'—
˜a•“
Úñ !ð
 ˆd�G�q�L�Gñ ð �8‰8Ô_¨D¨6ÄhÈuÄoÓ4VÁoÀ°s¸!³WÁoÑ4VÖ+VÓ_Ó_Ð_ùÒ4Vs   Á<Bc                 óâ  a aaaa€ \        WV4      o^ oR;ooVV VVV3R lp\        \        P                  R4      ;_uu_ 4       p\        P
                  ! V4      ;_uu_ 4        \        P                  ! V! 4       4       RRR4       RRR4       RV RV R\        P                   R\        P                   R\        P                   2
pRV R	2p\        VRR
R7      ;_uu_ 4       p\        P                  ! V4      p	V	P                  . RPO4       V	P                  SP                   4       RRR4       SP"                  p
R pSP$                  SP&                  ,           p\)        R\+        V4      ^d,          R RV R24       \)        RV! S4       RV! S4       RSR 24       \)        RV
R,           RV
R,           RV
R,           R24       V
R,          '       df   \)        R\,        P.                  ! SP0                  4      R R\,        P2                  ! SP0                  4      R  R!\5        SP0                  4       24       V
R,          '       d   V
R",          V
R,          ,          M^ p\)        R#V
R",           R$VR R%V
R&,           R'V
R(,           R)V
R*,           2
4       \)        R+V
R,          R, R-V
R.,          R, R/V
R0,          R, R1V
R2,          R, R3V
R2,          V
R,          ,           V
R0,          ,           V
R.,          ,           R, 2
4       \)        R4V R5SP$                  R, R6SP&                  R, R7VR, R8SP6                  ^d,          R R924       V
R:,          '       d   \)        R;4       SP8                  SP                  '       d   SP                  .M. ,           pV'       dk   \)        R<\;        V4       R=\5        V4       R\,        P2                  ! V4      R  R>\,        P.                  ! V4      R? 24       \)        R@\=        V4       24       SP>                  '       dñ   SP>                  p\+        \A        \C        V4      4      \        PD                  ,          \        PF                  ,          \        PH                  ,          4      p\)        RA\K        V4       RB\,        P2                  ! V4      R  R>\,        P.                  ! V4      R? R!\5        V4       24       \)        RC\K        V4      V,          R? RDVR, RE\        PF                   RF24       SPL                  '       dƒ   SPL                  p\K        RG V 4       4      p\)        RH\,        P2                  ! V4      RI R>\,        P.                  ! V4      RI RJ\5        V4      RI RK\O        V4      RI RLV RM\;        V4       24       \)        RNV RO24       R#   + '       g   i     EL?; i  + '       g   i     ELK; i  + '       g   i     EL»; i)Qé    Nc               “   óŒ  <"  € S F¶  p \        V 4       FE  w  rSf   VoVoS^,          oSP                  W4      G R j  x€L
  SP                  '       g   KC    R # 	  \        P                  P                  R\        P                  P                  V 4       RSP                  SP                  ,           R R24       K¸  	  R #  Lƒ5i)Nz  z done | equity ú.4fÚ
)rE   r¦   ÚdeadÚsysÚ
__stdout__Úwriter   r   Úbasenamera   r�   )r   r¢   rD   ÚbotÚfilesÚfirstr-   Útickss      €€€€€r1   ÚgoÚrun.<locals>.goÇ   s¦   øé € ãˆDÜ'¨Ö-‘	�Ø’=Ø�EØ�Ø˜•
�Ø—l‘l 5Ó-×-Ð-Ø—8—8’8Ûñ .ô �N‰N× Ñ  2¤b§g¡g×&6Ñ&6°tÓ&<Ð%=¸_Ø$'§K¡K°#·+±+Õ$=¸cÐ#BÀ"ð"Fö Gó ñ .ùs   ƒ;C¾C¿CÁA,CÚwrm   Ú_Ú_tÚ_fuÚ
bt_events_z.csvrÀ   )ÚnewlinerP   c                 óx   € \         P                  ! V R ,          \        P                  4      P	                  R4      # )r5   z%Y-%m-%d %H:%M)r   r}   r   r~   r   )Úmss   &r1   Ú<lambda>Úrun.<locals>.<lambda>à   s%   € ”X×+Ò+¨B°­I´x·|±|ÓD×MÑMÐN^Ô_rq   z
=== RESULT | fee z.3fz% per order | fills: z ===zPeriod: z -> z UTC | ticks: Ú,z1hr lines: rO   z | cycles: rM   z (profitable rN   Ú)ztrades per cycle: avg z.1fz
 | median z.0fz | max rI   zchart-3 trades: z (avg z/cycle) | win rJ   z / loss rK   z / neutral rL   zfees paid: rÜ   z | spread paid: rR   z | funding paid: rQ   z (all inside net) | net: rS   z | gross before costs: zstart z	 -> cash z + savings z = z | max drawdown Ú%rT   zLIQUIDATED during this run.z1hr brick runs: n=z | longest z | mean z.2fz  run lengths   z51hr bricks printed while holding (the profit): total z | per cycle median z  = z0 USD of gross if every brick is kept (1 brick = z USD at zx)c              3   ó6   "  € T F  q^8¼  g   K  ^x € K  	  R# 5i)é   Nrt   )rÏ   Úxs   & r1   rÒ   Úrun.<locals>.<genexpr>  s   é € Ð+™b˜¨¡F—1’1›bùs   ‚�
z-bricks per booked cycle, NET of fees: median z+.2fz | best z	 | worst z | cycles >=1 brick: Ú/ztrade log: rÝ   )Útimerƒ   r„   r…   rP   ra   r�   )(rG   r:   r   ÚdevnullÚ
contextlibÚredirect_stdoutÚasynciore   rV   Ú	GATE_MODEÚTRAIL_BRICKSÚFUNDING_PER_HOURr<   ÚwriterÚwriterowÚ	writerowsr\   r`   ra   r�   r   r›   Ú
statisticsÚmeanrj   Úmedianr‘   rc   rd   ÚlenrØ   rh   r@   rU   r˜   r™   rš   Úsumri   Úmin)rä   rm   rn   ra   rç   ÚdnÚtagÚoutrB   ré   r   Úfmtr”   Úavgrd   ÚpbÚbrick_valueÚcbÚgoodrã   rå   r-   ræ   s   f&&&               @@@@r1   re   re   Â   s;  ü€ Ü
�˜GÓ
$€CØ€EØÐ€EˆD÷Gñ Gô 
Œb�j‰j˜#×	Ô	 "¤j×&@Ò&@À×&DÕ&DÜ�Š‘B“DÔ÷ 'E×	ð �ˆu�A�d�V˜1œQŸ[™[˜M¨¬A¯N©NÐ+;¸3¼q×?QÑ?QÐ>RÐ
S€CØ�s�e˜4Ð
 €CÜ	ˆc�3 ×	#Õ	# qÜ�JŠJ�q‹MˆØ	�
‰
ÒSÔTØ	�‰�C—H‘HÔ÷ 
$ð
 	�‰€AÙ
_€CØ�[‰[˜3Ÿ;™;Õ&€FÜ	Ð¤ c£
¨SÕ 0°Ð5Ð5JÈ4È&ÐPTÐ
UÔVÜ	ˆH‘S˜“Z�L ¡S¨£Y K¨~¸eÀA¸YÐ
GÔHÜ	ˆK˜˜'�
�| ;¨q°­{¨m¸=ÈÈ8ÍÈÐUVÐ
WÔXØˆ‡{„{ÜÐ&¤z§¢°s·y±yÓ'AÀ#Ð&Fð GÜ"×)Ò)¨#¯)©)Ó4°SÐ9¸ÄÀSÇYÁYÃÐ@PðRô 	Sà'(¨§{¤{ˆ!ˆH�+˜˜(�Ö
#¸€CÜ	Ð˜Q˜x�[˜M¨°°C¨yð 9Ø�5•�
˜( 1 V¥9 +¨[¸¸9½¸ðHô Iä	ˆK˜˜&�	 #�Ð&6°q¸µ{À3Ð6Gð HØ˜Y�<¨Ð,Ð,EÀaÈÅhÈsÀ^ð T!àˆu�X˜˜&�	Õ! A i¥LÕ0°1°Xµ;Õ>¸sÐCðEô Fô 
ˆF�7�)˜9 S§[¡[°Ð$5°[ÀÇÁÈSÐ@Qð RØ�cˆlÐ*¨3¯:©:¸Õ+;¸CÐ*@ÀðCô Dàˆ‡„ÜÐ+Ô,Ø�8‰8 C§G§G G˜Ÿ™‘y°Õ4€DßÜÐ"¤3 t£9 +¨[¼¸T»¸ð DÜ"×)Ò)¨$Ó/°Ð4°H¼Z¿_º_ÈTÓ=RÐSVÐ<WðYô 	ZäÐ ¤¨£ Ð/Ô0Ø
××ÐØ×ÑˆÜœAœc '›l›O¬a¯l©lÕ:¼Q¿Z¹ZÕGÌ!Ï,É,ÕVÓWˆÜÐEÄcÈ"ÃgÀYð O"Ü",×"3Ò"3°BÓ"7¸Ð!<¸HÄZÇ_Â_ÐUWÓEXÐY\ÐD]Ð]dÔehÐikÓelÐdmðoô 	pä�”S˜“W˜{Õ*¨3Ð/ð 0Ø'¨Ð,¨H´Q·Z±Z°LÀðDô 	Eà
××ÐØ×ÑˆÜÑ+™bÓ+Ó+ˆÜð Ü"×)Ò)¨"Ó-¨dÐ3°8¼J¿OºOÈBÓ<OÐPTÐ;Uð VÜ˜"“g˜d�^ 9¬S°«W°T¨NÐ:OÐPTÈvÐUVÔWZÐ[]ÓW^ÐV_ðaô 	bô 
ˆK˜�u˜BÐ
Ö ÷a 'E×&DÐ&Dú×	×	Ð	ú÷
 
$×	#Ð	#ús1   ÁW	Á#V5	Á?W	Ã&AWÖ5W× 	W	×	W	×W.	c                  ó˜  € \         P                  ! 4       p V P                  R ^R,R7       V P                  RRR7       V P                  RRR7       V P                  R\        RR	7       V P                  R
RR.RR7       V P                  R\        ^R	7       V P                  R\        ^KR	7       V P                  R. R-ORR7       V P                  R\        ^ RR7       V P                  RRRR7       V P                  R\        RRR7       V P                  R\        RRR7       V P                  RRR R7       V P                  4       pVP                  '       dG   \        VP                  ^ ,          VP                  ^,          VP                  VP                  4       R!# \        \        VP                  4      4      \        n        \        VP                  4      \        n        \        \        VP"                  4      4      \        n        \	        VP&                  4      \        n        VP*                  \        n        \	        VP.                  4      \        n        \3        R"VP&                   R#VP*                   R$VP4                   R%VP.                   R&VP6                   2
4       \9        \:        P:                  ! \<        P>                  PA                  VP                  R'4      4      \:        P:                  ! \<        P>                  PA                  VP                  R(4      4      ,           4      pV'       g%   \B        PD                  ! R)VP                   R*24       \3        \G        V4       R+24       VPH                  '       d   ^ VPJ                  .MVPJ                  . F$  p\M        W#VP4                  VP6                  4       K&  	  R!# ).z
--download)ÚnargsÚmetavarz--dataÚdata)Údefaultz--symbolÚZECUSDTz--feegü©ñÒMb@?)Útyper  z--fillr�   Úmarket)Úchoicesr  z	--capitalz
--leveragez--gateÚtouch3z--trailz-bricks the exit trails behind the newest line)r  r  Úhelpz--makerÚ
store_truezBrest limit orders at the line: no spread cost (assumes every fill))Úactionr  z--spreadg€Ÿqá@H?z;bid-ask spread as a fraction of price (0.000085 = 0.0085%%)z	--fundinggTäqs*é>z6funding per hour of open notional (default 0.0012%%/h)z--bothzrun with fees off, then onNz	leverage z	x | gate z | fill z	 | trail z | capital z*.zipz*.csvzNo .zip/.csv files in 'z'. Run --download first.z files)ÚSTARTÚEND)r  Úchart1Úband)'ÚargparseÚArgumentParserÚadd_argumentr›   r>   Ú
parse_argsr2   r  r+   r@   rU   rR   rV   r¬   ÚboolÚmakerr«   rQ   r  Úleverager™   Úgater   Útrailr  r   rn   ra   ÚsortedÚglobr   r   r   rß   Úexitr	  Úbothrm   re   )ÚapÚarä   rm   s       r1   Úmainr5    s®  € Ü	×	 Ò	 Ó	"€BØ‡O�O�L¨Ð3C€OÔDØ‡O�O�H f€OÔ-Ø‡O�O�J¨	€OÔ2Ø‡O�O�G¤%°€OÔ8Ø‡O�O�H v¨xÐ&8À&€OÔIØ‡O�O�K¤e°Q€OÔ7Ø‡O�O�L¤u°b€OÔ9Ø‡O�O�HÒ&BÈH€OÔUØ‡O�O�I¤C°Ð9h€OÔiØ‡O�O�I lØ]ð ô _à‡O�O�J¤U°HØVð ô Xà‡O�O�K¤e°XØQð ô Sà‡O�O�H \Ð8T€OÔUØ
�‰‹€Aà‡z‡z€zÜ�—‘˜A• §
¡
¨1¥¨q¯v©v°q·x±xÔ@ÙÜ”�Q—X‘X“Ó„A„HÜ�1—7‘7‹m„A„GÜœ3˜qŸy™y›>Ó*„AÔÜ�Q—Z‘Z“„A„JØ—&‘&„A„KÜ˜Ÿ™“\„A„NÜ	ˆI�a—j‘j�\ ¨1¯6©6¨(°(¸1¿6¹6¸(À)ÈAÏGÉGÈ9ÐT_Ð`a×`iÑ`iÐ_jÐ
kÔlÜ”4—9’9œRŸW™WŸ\™\¨!¯&©&°'Ó:Ó;Ü—9’9œRŸW™WŸ\™\¨!¯&©&°'Ó:Ó;õ<ó =€EçÜ�ŠÐ*¨1¯6©6¨(Ð2JÐKÔLÜ	ŒS�‹ZˆL˜Ð
Ô ØŸfŸf˜f��A—E‘E‘
¨1¯5©5¨'Ò1ˆÜˆE˜Ÿ™ §	¡	Ö*ó 2rq   Ú__main__))r÷   é   é   é   é
   é   é2   )!rÅ   r&  rÿ   rý   r<   r0  r8   r   r  rß   Úurllib.errorr   Úurllib.requestr   Úcollectionsr   r   r   r   Údecimalr   r@   Úzec_renko_botrV   r   r2   rE   ÚBotrG   rØ   re   r5  rÁ   rt   rq   r1   Ú<module>rC     sŠ   ðñó Û Û Û 
Û Û 	Û 	Û Û 
Û Û Û Ý ß 2Ñ 2Ý  ã ð#€ò!ò0 ô$e&ˆQ�U‰Uô e&ôP	`òC!òL$+ðN ˆzÔÙ†Fñ rq   