mirror of
https://github.com/ada-dmitry/etf-gyro.git
synced 2026-09-23 23:20:15 +00:00
39 lines
1.4 KiB
Python
39 lines
1.4 KiB
Python
import yaml
|
|
from decimal import Decimal
|
|
from typing import Dict, Any
|
|
|
|
|
|
def load_config(config_path: str = "config/target.yaml") -> Dict[str, Any]:
|
|
with open(config_path, "r", encoding="utf-8") as f:
|
|
data = yaml.safe_load(f)
|
|
|
|
# Результирующий словарь для портфеля
|
|
portfolio = {}
|
|
corridor = Decimal(str(data.get("corridor", 0)))
|
|
|
|
# Проходим по всем инструментам в блоке portfolio
|
|
for ticker, info in data.get("portfolio", {}).items():
|
|
# Важно: переводим weight в Decimal сразу при чтении
|
|
portfolio[ticker] = {
|
|
"name": info.get("name"),
|
|
"figi": info.get("figi"),
|
|
"uid": info.get("uid"),
|
|
"weight": Decimal(str(info.get("weight", 0))),
|
|
}
|
|
|
|
# Проверка суммы весов
|
|
total_weight = sum(item["weight"] for item in portfolio.values())
|
|
if abs(total_weight - Decimal("1.0")) > Decimal("0.0001"):
|
|
print(
|
|
f"⚠️ ВНИМАНИЕ: Сумма весов в конфиге = {total_weight}. Проверьте коэффициенты!"
|
|
)
|
|
|
|
return portfolio, corridor # type: ignore
|
|
|
|
|
|
if __name__ == "__main__":
|
|
config, corridor = load_config()
|
|
for ticker, info in config.items(): # type: ignore
|
|
print(f"{ticker}: {info}")
|
|
print(f"Corridor: {corridor}")
|