in src/backend/domain/services/steps/calculate_trading.py [0:0]
def make_trade_stats(current_trades):
trade_stats = dict()
trade_stats["# Trades"] = current_trades.shape[0]
trade_stats["Winning Trades"] = current_trades["win"].sum()
trade_stats["Losing Trades"] = (~current_trades["win"]).sum()
trade_stats["Win Ratio"] = current_trades["win"].mean()
trade_stats["Avg. Trade"] = round(current_trades["net profit acct ccy"].mean(), 2)
if current_trades["win"].any():
trade_stats["Avg. Winning Trade"] = round(current_trades["net profit acct ccy"][current_trades["win"]].mean(), 2)
else:
trade_stats["Avg. Winning Trade"] = 0.0
if (~current_trades["win"]).any():
trade_stats["Avg. Losing Trade"] = round(current_trades["net profit acct ccy"][~current_trades["win"]].mean(), 2)
else:
trade_stats["Avg. Losing Trade"] = 0.0
if abs(trade_stats["Avg. Losing Trade"]) >= 1e-20:
trade_stats["Payoff Ratio"] = trade_stats["Avg. Winning Trade"] / abs(trade_stats["Avg. Losing Trade"])
else:
trade_stats["Payoff Ratio"] = float("nan")
if current_trades["size"].sum() >= 1e-20:
trade_stats["Profit Margin (Bps)"] = round(
current_trades["net profit acct ccy"].sum() / current_trades["size"].sum(), 2
)
else:
trade_stats["Profit Margin (Bps)"] = float("nan")
sum_entry_price_acct_ccy_mul_size = (current_trades["entry price acct ccy"] * current_trades["size"]).sum()
if abs(sum_entry_price_acct_ccy_mul_size) >= 1e-20:
trade_stats["Profit Margin (Bps)"] = round(
current_trades["net profit acct ccy"].sum() / sum_entry_price_acct_ccy_mul_size * 10000, 2
)
else:
trade_stats["Profit Margin (Bps)"] = float("nan")
trade_stats["Avg. Holding Days"] = round(current_trades["days in trade"].mean(), 2)
return trade_stats