Skip to content

Commit

Permalink
upd
Browse files Browse the repository at this point in the history
  • Loading branch information
m5l14i11 committed Sep 19, 2024
1 parent a42363b commit 92bfb07
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 81 deletions.
2 changes: 1 addition & 1 deletion core/events/portfolio.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from dataclasses import dataclass, field

from core.models.portfolio import Performance
from core.models.entity.portfolio import Performance
from core.models.strategy import Strategy
from core.models.symbol import Symbol
from core.models.timeframe import Timeframe
Expand Down
4 changes: 3 additions & 1 deletion core/models/entity/_base.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import json
from dataclasses import dataclass, fields
from enum import Enum
from functools import cached_property
from typing import Any, Dict, List


Expand All @@ -12,7 +13,8 @@ def to_dict(self) -> Dict[str, Any]:
property_dict = {
k: getattr(self, k)
for k in dir(self)
if isinstance(getattr(self.__class__, k, None), property)
if isinstance(getattr(self.__class__, k, None), (property, cached_property))
and hasattr(self, k)
}

result = {**field_dict, **property_dict}
Expand Down
82 changes: 4 additions & 78 deletions core/models/portfolio.py → core/models/entity/portfolio.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,17 @@
from dataclasses import dataclass, field, replace
from dataclasses import field, replace
from datetime import datetime
from functools import cached_property

import numpy as np
from scipy.stats import kurtosis, norm, skew

from ._base import Entity

TOTAL_TRADES_THRESHOLD = 3
GAMMA = 0.57721566


@dataclass(frozen=True)
@Entity
class Performance:
_account_size: float
_risk_per_trade: float
Expand Down Expand Up @@ -533,79 +535,3 @@ def _penalty(pnl) -> float:
corr = [((num - x) / num) * coef**x for x in range(1, num)]

return np.sqrt(1 + 2 * np.sum(corr))

def to_dict(self):
return {
"account_size": self._account_size,
"total_trades": self.total_trades,
"total_pnl": self.total_pnl,
"total_fee": self.total_fee,
"average_pnl": self.average_pnl,
"average_profit": self.average_profit,
"average_loss": self.average_loss,
"profit": self.profit,
"loss": self.loss,
"total_profit": self.total_profit,
"total_loss": self.total_loss,
"equity": self.equity,
"runup": self.runup,
"max_runup": self.max_runup,
"drawdown": self.drawdown,
"max_drawdown": self.max_drawdown,
"sharpe_ratio": self.sharpe_ratio,
"smart_sharpe_ratio": self.smart_sharpe_ratio,
"deflated_sharpe_ratio": self.deflated_sharpe_ratio,
"sortino_ratio": self.sortino_ratio,
"smart_sortino_ratio": self.smart_sortino_ratio,
"calmar_ratio": self.calmar_ratio,
"payoff_ratio": self.payoff_ratio,
"cagr": self.cagr,
"kelly": self.kelly,
"expected_return": self.expected_return,
"time_weighted_return": self.time_weighted_return,
"geometric_holding_period_return": self.geometric_holding_period_return,
"annualized_volatility": self.ann_volatility,
"annualized_sharpe_ratio": self.ann_sharpe_ratio,
"recovery_factor": self.recovery_factor,
"profit_factor": self.profit_factor,
"risk_of_ruin": self.risk_of_ruin,
"skew": self.skew,
"kurtosis": self.kurtosis,
"var": self.var,
"cvar": self.cvar,
"ulcer_index": self.ulcer_index,
"upi": self.upi,
"lake_ratio": self.lake_ratio,
"burke_ratio": self.burke_ratio,
"rachev_ratio": self.rachev_ratio,
"sterling_ratio": self.sterling_ratio,
"tail_ratio": self.tail_ratio,
"omega_ratio": self.omega_ratio,
"martin_ratio": self.martin_ratio,
"kappa_three_ratio": self.kappa_three_ratio,
"max_consecutive_wins": self.max_consecutive_wins,
"max_consecutive_losses": self.max_consecutive_losses,
"hit_ratio": self.hit_ratio,
"cpc_ratio": self.cpc_ratio,
"common_sense_ratio": self.common_sense_ratio,
}

def __str__(self):
return (
f"total_trades={self.total_trades}, hit_ratio={self.hit_ratio}, profit_factor={self.profit_factor}, profit={self.profit}, loss={self.loss}, "
f"total_profit={self.total_profit}, total_loss={self.total_loss}, total_pnl={self.total_pnl}, average_pnl={self.average_pnl}, average_profit={self.average_profit}, average_loss={self.average_loss}, "
f"total_fee={self.total_fee}, max_consecutive_wins={self.max_consecutive_wins}, max_consecutive_losses={self.max_consecutive_losses}, "
f"equity={self.equity}, max_runup={self.max_runup}, max_drawdown={self.max_drawdown}, "
f"sharpe_ratio={self.sharpe_ratio}, smart_sharpe_ratio={self.smart_sharpe_ratio}, deflated_sharpe_ratio={self.deflated_sharpe_ratio}, sortino_ratio={self.sortino_ratio}, smart_sortino_ratio={self.smart_sortino_ratio}, calmar_ratio={self.calmar_ratio}, "
f"expected_return={self.expected_return}, cagr={self.cagr}, time_weighted_return={self.time_weighted_return}, geometric_holding_period_return={self.geometric_holding_period_return}, "
f"annualized_volatility={self.ann_volatility}, annualized_sharpe_ratio={self.ann_sharpe_ratio}, "
f"recovery_factor={self.recovery_factor}, risk_of_ruin={self.risk_of_ruin}, "
f"skew={self.skew}, kurtosis={self.kurtosis}, var={self.var}, cvar={self.cvar}, "
f"ulcer_index={self.ulcer_index}, upi={self.upi}, "
f"kelly={self.kelly}, lake_ratio={self.lake_ratio}, burke_ratio={self.burke_ratio}, rachev_ratio={self.rachev_ratio}, kappa_three_ratio={self.kappa_three_ratio}, "
f"payoff_ratio={self.payoff_ratio}, sterling_ratio={self.sterling_ratio}, tail_ratio={self.tail_ratio}, omega_ratio={self.omega_ratio}, "
f"cpc_ratio={self.cpc_ratio}, common_sense_ratio={self.common_sense_ratio}"
)

def __repr__(self):
return f"Performance({self})"
2 changes: 1 addition & 1 deletion portfolio/_portfolio.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
from contextlib import asynccontextmanager
from typing import Dict, Tuple

from core.models.portfolio import Performance
from core.models.entity.portfolio import Performance
from core.models.position import Position
from core.models.strategy import Strategy
from core.models.symbol import Symbol
Expand Down

0 comments on commit 92bfb07

Please sign in to comment.