FIN_ASSISTANT / fetch.py
QAway-to
model change
24ae9d3
raw
history blame
2.02 kB
import re
import requests
import httpx
#Извлечение 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
async def fetch_metrics_async(portfolio_id: str) -> dict | None:
url = f"https://api.tradelink.pro/portfolio/get?portfolioId={portfolio_id}&extended=1"
try:
async with httpx.AsyncClient(timeout=10) as client:
resp = await client.get(url)
extended = resp.json().get("data", {}).get("extended", {})
result = {}
for k, v in extended.items():
if not isinstance(v, (int, float)):
continue
if k in {"cagr", "alphaRatio", "volatility", "maxDD"}:
result[k] = v * 100 # преобразуем в %
else:
result[k] = v # без изменений
return result
except Exception as e:
# логирование ошибки опционально
return None
# print(f"[API ошибка]: {e}")
# return None
#
# 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