
    !j                        d dl mZ 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 dd	Zdd
ZddZddZddZdS )    )annotationsN)Path)build_dashboard_snapshotrender_dashboard_htmltmp_pathr   returnNonec           
        | dz  }|dz  dz  }|dz  }|                     d           |dz                      dd	
           |dz                      dd	
           |dz                      t          j        ddd          dz   t          j        dddd          z   dz   d	
           |dz  }|                                  |dz                      dd	
           |dz                      t          j        dddddd          dz   d	
           t	          |          }|j        }d}||u }|st          j        d |fd!||f          d"t          j	                    v st          j
        |          rt          j        |          nd"t          j        |          t          j        |          d#z  }	d$d%|	iz  }
t          t          j        |
                    d x}x}}|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}}|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}}|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}}|j        d&         }|j        }|j        }d0}||k    }|st          j        d'|fd1||f          t          j        |          t          j        |          t          j        |          t          j        |          d2z  }d3d4|iz  }t          t          j        |                    d x}x}x}x}}|j        d&         }|j        }|j        }d.}||k    }|st          j        d'|fd5||f          t          j        |          t          j        |          t          j        |          t          j        |          d2z  }d3d4|iz  }t          t          j        |                    d x}x}x}x}}|j        d&         }|j        }|j        }d}||k    }|st          j        d'|fd6||f          t          j        |          t          j        |          t          j        |          t          j        |          d2z  }d3d4|iz  }t          t          j        |                    d x}x}x}x}}|j        d&         }|j        }d.}||k    }|st          j        d'|fd7||f          t          j        |          t          j        |          t          j        |          d)z  }d*d+|iz  }t          t          j        |                    d x}x}x}}|j        d&         }|j        }d&}||k    }|st          j        d'|fd8||f          t          j        |          t          j        |          t          j        |          d)z  }d*d+|iz  }t          t          j        |                    d x}x}x}}|j        d&         j        d&         d9         }d}||k    }|slt          j        d'|fd:||f          t          j        |          t          j        |          d;z  }d<d=|iz  }t          t          j        |                    d x}x}}|j        d&         j        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?}|j        }||v }|st          j        d@|fdA||f          t          j        |          d"t          j	                    v st          j
        |          rt          j        |          nd"t          j        |          dBz  }	d$d%|	iz  }
t          t          j        |
                    d x}x}}d S )CNstateexperimentscandidate_v63_loose_fast_decayTradeanalyseTparentsbot.pid999999utf-8encodingzbot.logzstarted
Scanne 6 Coins
ztrade_journal.jsonlentryWLD)eventcoin
exitgzG?)r   r   realized_pnl_usdreportszhistorical_replay_report.txtz)Historical Replay Tournament
1. candidateznear_miss.jsonlg	g?no_flash_crashg      @)r   drop_pctdistance_pctreasonrequired_drop_pctruntime_dirFis)z;%(py2)s
{%(py2)s = %(py0)s.live_orders_enabled
} is %(py5)ssnapshotpy0py2py5assert %(py7)spy7r   ==)z3%(py3)s
{%(py3)s = %(py1)s.strategy_id
} == %(py6)spy1py3py6assert %(py8)spy8   )z6%(py3)s
{%(py3)s = %(py1)s.journal_events
} == %(py6)s   )z5%(py3)s
{%(py3)s = %(py1)s.closed_trades
} == %(py6)sResearch)zM%(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py1)s.scorecard
}.status
} == %(py8)s)r1   r2   r+   r5   zassert %(py10)spy10)zR%(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py1)s.scorecard
}.sample_size
} == %(py8)s)zT%(py5)s
{%(py5)s = %(py3)s
{%(py3)s = %(py1)s.scorecard
}.total_pnl_usd
} == %(py8)s)z8%(py3)s
{%(py3)s = %(py1)s.near_miss_events
} == %(py6)s)z;%(py3)s
{%(py3)s = %(py1)s.open_position_count
} == %(py6)sr   z%(py1)s == %(py4)sr1   py4assert %(py6)sr3   r    historical_replay_reportin)z/%(py1)s in %(py5)s
{%(py5)s = %(py3)s.reports
})r1   r2   r+   )mkdir
write_textjsondumpsr   live_orders_enabled
@pytest_ar_call_reprcompare@py_builtinslocals_should_repr_global_name	_safereprAssertionError_format_explanation
paper_botsstrategy_idjournal_eventsclosed_trades	scorecardstatussample_sizetotal_pnl_usdnear_miss_eventsopen_position_countnear_missesr   )r   runtimeexpjournal_dirr   r'   @py_assert1@py_assert4@py_assert3@py_format6@py_format8@py_assert0@py_assert2@py_assert5@py_format7@py_format9@py_assert7@py_assert6@py_format11@py_format5s                       J/home/agent/projects/CryptoTradingBot/Crypto_Agent/tests/test_dashboard.py7test_dashboard_snapshot_reads_bots_journals_and_reportsrk   
   s    G
M
!$D
DC&Kd###9_  G <<<9_  !<w OOO((44
We4455<tzTZdi  @D  KE  KE  @F  @F  	F  IM  	M 5    	!GMMOOO--99:fqx9yyy$$00UX\nq  ~N  eh  =i  =i  2j  2j  mq  2q  |C0  D  D  D'G<<<H'050'50000000000'50000000000008000008000000'00005000000000000000000000000000q!Q!-Q1QQ-1QQQQQQQQQQQ-1QQQQQQ!QQQQ-QQQQ1QQQQQQQQQQQQQQQQQQQQQQQQQQQQQQq!5!05A50A55555555550A55555!555505555A55555555555555555555555555555q!4!/414/14444444444/144444!4444/4444144444444444444444444444444444q!@!+@+2@j@2j@@@@@@@@@@2j@@@@@!@@@@+@@@@2@@@@j@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@q!<!+<+7<1<71<<<<<<<<<<71<<<<<!<<<<+<<<<7<<<<1<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<q!A!+A+9ATA9TAAAAAAAAAA9TAAAAA!AAAA+AAAA9AAAATAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAq!7!27a72a77777777772a77777!777727777a77777777777777777777777777777q!:!5::5::::::::::5:::::!::::5:::::::::::::::::::::::::::::::::q!-a08AEA8EAAAAAAAAAA8EAAAAA8AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAq!-a0@GCG@CGGGGGGGGGG@CGGGGG@GGGGCGGGGGGGGGGGGGGGGGGGGGGGGGGG%9)99%)99999999999%)999999%9999999999999999999999)999999999999999999999999999999    c                T   | dz  }|dz  dz  }|dz                       d           |dz                      t          t          j                              d	           t          |
          }|j        d         }|j        }t          j        } |            }||k    }|st          j	        d|fd||f          t          j
        |          t          j
        |          dt          j                    v st          j        t                    rt          j
        t                    ndt          j
        |          t          j
        |          dz  }	dd|	iz  }
t          t          j        |
                    d x}x}x}x}}|j        d         }|j        }d}||u }|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}}d S )Nr   r   &candidate_v66_squeeze_breakout_samplerr   Tr   r   r   r   r#   r   r.   )z^%(py3)s
{%(py3)s = %(py1)s.pid
} == %(py9)s
{%(py9)s = %(py7)s
{%(py7)s = %(py5)s.getpid
}()
}os)r1   r2   r+   r-   py9zassert %(py11)spy11Fr%   )z/%(py3)s
{%(py3)s = %(py1)s.running
} is %(py6)sr0   r4   r5   )rA   rB   strro   getpidr   rN   pidrF   rG   rK   rH   rI   rJ   rL   rM   running)r   rY   rZ   r'   ra   rb   rg   @py_assert8r]   @py_format10@py_format12rc   rd   re   s                 rj   9test_dashboard_does_not_treat_reused_stale_pid_as_runningry   *   sh    G
M
!$L
LC>   ...9_  RY[[!1!1G DDD'G<<<Hq!4!%444%4444444444%44444!4444%444444444444444444444444444444444444444444444444444444444q!2!)2U2)U2222222222)U22222!2222)2222U2222222222222222222222222222222rl   c                (
   | dz  }|dz  dz  dz                       d           |dz  dz  dz                      dd	
           t          t          |                    }d}||v }|st	          j        d|fd||f          t	          j        |          dt          j                    v st	          j	        |          rt	          j        |          nddz  }dd|iz  }t          t	          j        |                    d x}}d}||v }|st	          j        d|fd||f          t	          j        |          dt          j                    v st	          j	        |          rt	          j        |          nddz  }dd|iz  }t          t	          j        |                    d x}}d}||v }|st	          j        d|fd||f          t	          j        |          dt          j                    v st	          j	        |          rt	          j        |          nddz  }dd|iz  }t          t	          j        |                    d x}}d}||v }|st	          j        d|fd||f          t	          j        |          dt          j                    v st	          j	        |          rt	          j        |          nddz  }dd|iz  }t          t	          j        |                    d x}}d}||v }|st	          j        d|fd||f          t	          j        |          dt          j                    v st	          j	        |          rt	          j        |          nddz  }dd|iz  }t          t	          j        |                    d x}}d}||v }|st	          j        d|fd||f          t	          j        |          dt          j                    v st	          j	        |          rt	          j        |          nddz  }dd|iz  }t          t	          j        |                    d x}}d}|j        } |            }||v}|st	          j        d|fd||f          t	          j        |          dt          j                    v st	          j	        |          rt	          j        |          ndt	          j        |          t	          j        |          dz  }	dd|	iz  }
t          t	          j        |
                    d x}x}x}}d S )Nr   r   s1r   Tr   r   r   r   r   r#   zCryptoTradingBot Dashboardr?   z%(py1)s in %(py3)shtmlr1   r2   assert %(py5)sr+   z	Read-onlyz	Near Missz!Live-readiness Strategy ScorecardStatuszplace order)not in)zH%(py1)s not in %(py7)s
{%(py7)s = %(py5)s
{%(py5)s = %(py3)s.lower
}()
})r1   r2   r+   r-   assert %(py9)srp   )rA   rB   r   r   rF   rG   rK   rH   rI   rJ   rL   rM   lower)r   rY   r}   ra   rb   @py_format4r_   r]   rg   r`   rw   s              rj   :test_dashboard_html_is_read_only_and_contains_key_sectionsr   7   s    G}t#n4;;D;III}t#i/;;Hw;WWW !9g!N!N!NOOD'/'4//////////'4/////'///////////4/////4///////////////////////////;$;$;$$44<44444;$;$;$$.6.$6666666666.$66666.66666666666$66666$6666666666666666666666666668t8t8tt,
,

,=,,,,,,,,,,=,,,,,=,,,,,,,,,,,,,,,,,,,,,,
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,rl   c           
        | dz  }|dz  dz  }|dz                       d           |dz                      dd	
           |dz                      t          j        ddddddiddig d          d	
           |                    dd            t          |          }t          |          }|j        d         }|j        }d}||k    }	|	st          j
        d|	fd||f          dt          j                    v st          j        |          rt          j        |          ndt          j        |          t          j        |          dz  }
dd|
iz  }t          t          j        |                    d x}x}	}|j        }d}||k    }	|	st          j
        d|	fd ||f          dt          j                    v st          j        |          rt          j        |          ndt          j        |          t          j        |          dz  }
dd|
iz  }t          t          j        |                    d x}x}	}|j        }|j        }	d}|	|k    }|st          j
        d|fd!|	|f          dt          j                    v st          j        |          rt          j        |          ndt          j        |          t          j        |	          t          j        |          d"z  }d#d$|iz  }t          t          j        |                    d x}x}	x}}|j        }|j        }	d}|	|k    }|st          j
        d|fd%|	|f          dt          j                    v st          j        |          rt          j        |          ndt          j        |          t          j        |	          t          j        |          d"z  }d#d$|iz  }t          t          j        |                    d x}x}	x}}|j        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}}	|j        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-}||v }|st          j
        d.|fd/||f          t          j        |          d0t          j                    v st          j        |          rt          j        |          nd0d1z  }d2d3|iz  }
t          t          j        |
                    d x}}d}||v }|st          j
        d.|fd/||f          t          j        |          d0t          j                    v st          j        |          rt          j        |          nd0d1z  }d2d3|iz  }
t          t          j        |
                    d x}}d4}||v }|st          j
        d.|fd/||f          t          j        |          d0t          j                    v st          j        |          rt          j        |          nd0d1z  }d2d3|iz  }
t          t          j        |
                    d x}}d S )5Nr   r   rn   r   Tr   r   r   r   r   zpaper_state.jsonr   g      Y@g333333?longzWLD/USDC:USDC)	contracts
entryPricesidesymbol   )	positionsleverageorderszdashboard._fetch_live_pricesc                 
    ddiS )Nr   gQ? r   rl   rj   <lambda>zLtest_dashboard_displays_open_positions_with_unrealized_pnl.<locals>.<lambda>S   s
     rl   r#   r   r7   r.   )z;%(py2)s
{%(py2)s = %(py0)s.open_position_count
} == %(py5)sbotr(   r,   r-   g      @)z?%(py2)s
{%(py2)s = %(py0)s.open_unrealized_pnl_usd
} == %(py5)s)zT%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.scorecard
}.total_pnl_usd
} == %(py7)s)r)   r*   r<   r-   r   rp   )zY%(py4)s
{%(py4)s = %(py2)s
{%(py2)s = %(py0)s.scorecard
}.unrealized_pnl_usd
} == %(py7)sr   r:   r;   r=   r3   notional_usdg     @@zOpen Positionsr?   r|   r}   r~   r   r+   z+3.0000)rA   rB   rC   rD   setattrr   r   rN   rW   rF   rG   rH   rI   rJ   rK   rL   rM   open_unrealized_pnl_usdrR   rU   unrealized_pnl_usdopen_positions)r   monkeypatchrY   rZ   r'   r}   r   r\   r]   r^   r_   r`   rg   rc   rw   ra   rb   ri   rd   r   s                       rj   :test_dashboard_displays_open_positions_with_unrealized_pnlr   G   sj    G
M
!$L
LC>   ...9_  G <<<))$*dFVeff
 %a(6 6 + +  *    68M8MNNN'G<<<H **D

a
 C"'a'"a''''''''''"a''''''''''''3'''''3''''''"''''a'''''''''''''''''''''''''''&-#-&#----------&#------------3-----3------&----#---------------------------=-=&-#-&#----------&#------------3-----3------=----&----#-----------------------------=2=+2s2+s2222222222+s2222222222223222223222222=2222+2222s22222222222222222222222222222a (1E1(E1111111111(E11111(1111E111111111111111111111111111a 08D80D88888888880D8888808888D888888888888888888888888888#t##########t################t#####t###########################5D=5D5DD999rl   c                   | dz  }|dz  dz  }|dz                       d           |dz                      dd	
           t          t          |                    }d}||v }|st	          j        d|fd||f          t	          j        |          dt          j                    v st	          j	        |          rt	          j        |          nddz  }dd|iz  }t          t	          j        |                    d x}}d}||v }|st	          j        d|fd||f          t	          j        |          dt          j                    v st	          j	        |          rt	          j        |          nddz  }dd|iz  }t          t	          j        |                    d x}}d}||v }|st	          j        d|fd||f          t	          j        |          dt          j                    v st	          j	        |          rt	          j        |          nddz  }dd|iz  }t          t	          j        |                    d x}}d S )Nr   r   'candidate_v65_signal_sampler_aggressiver   Tr   r   r   r   r   r#   r?   r|   r}   r~   r   r+   zResearch samplerznot a champion candidate)rA   rB   r   r   rF   rG   rK   rH   rI   rJ   rL   rM   )r   rY   rZ   r}   ra   rb   r   r_   s           rj   *test_dashboard_marks_research_sampler_botsr   d   s    G
M
!$M
MC>   ...9_  G <<< !9g!N!N!NOOD4<4<<<<<<<<<<4<<<<<4<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%-%----------%-----%---------------------------------------------rl   )r   r   r   r	   )
__future__r   builtinsrH   _pytest.assertion.rewrite	assertionrewriterF   rC   ro   pathlibr   	dashboardr   r   rk   ry   r   r   r   r   rl   rj   <module>r      s    " " " " " "               				       E E E E E E E E: : : :@
3 
3 
3 
3- - - -    :
. 
. 
. 
. 
. 
.rl   