dragon_shared.py 877 B

1234567891011121314151617181920212223242526272829303132333435
  1. from __future__ import annotations
  2. import pandas as pd
  3. START_DATE = "2016-01-01"
  4. END_DATE = "2025-12-31"
  5. def evaluation_years(start_date: str = START_DATE, end_date: str = END_DATE) -> float:
  6. return (pd.Timestamp(end_date) - pd.Timestamp(start_date)).days / 365.25
  7. def profit_factor(series: pd.Series) -> float:
  8. gross_profit = series[series > 0].sum()
  9. gross_loss = -series[series < 0].sum()
  10. if gross_loss == 0:
  11. return float("inf") if gross_profit > 0 else 0.0
  12. return float(gross_profit / gross_loss)
  13. def format_pct(value: float) -> str:
  14. if pd.isna(value):
  15. return "NA"
  16. if value == float("inf"):
  17. return "inf"
  18. return f"{value:.2%}"
  19. def format_num(value: float, digits: int = 2) -> str:
  20. if pd.isna(value):
  21. return "NA"
  22. if value == float("inf"):
  23. return "inf"
  24. return f"{value:.{digits}f}"