File size: 1,315 Bytes
fe31096
 
375614c
e63adc7
 
 
 
 
 
 
 
 
 
934f13b
e63adc7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import re
import requests

#Извлечение UUID из строки
def extract_portfolio_id(text: str) -> str | None:
    match = re.search(
        r"[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}",
        text
    )
    return match.group(0) if match else None

def fetch_metrics(portfolio_id: str) -> dict | None:
    try:
        url = f"https://api.tradelink.pro/portfolio/get?portfolioId={portfolio_id}&extended=1"
        response = requests.get(url)
        response.raise_for_status()
        extended = response.json().get("data", {}).get("extended", {})
        keys = [
            # 🔹 Доходность и риск
            "alphaRatio", "betaRatio", "cagr", "sharpe", "sortino", "volatility",
            "kSortino", "kCalmar", "kSharpe",

            # 🔹 Просадки
            "maxDD", "mddDuration", "maxBalance",

            # 🔹 Поведение стратегии
            "losingDays", "winningDays", "selfProfitRate",

            # 🔹 Актуальные показатели доходности
            "lastWeekNetProfit", "lastMonthNetProfit", "lastQuarterGrowth", "lastYearNetGrowth"
        ]

        return {k: extended[k] for k in keys if isinstance(extended.get(k), (int, float))}
    except:
        return None