diff --git a/src/config.py b/src/config.py new file mode 100644 index 0000000..77bf5e6 --- /dev/null +++ b/src/config.py @@ -0,0 +1,29 @@ +import os +from dataclasses import dataclass +from dotenv import load_dotenv + +load_dotenv() + + +@dataclass +class Config: + api_key: str = "" + api_secret: str = "" + symbol: str = "XRPUSDT" + leverage: int = 10 + risk_per_trade: float = 0.02 + max_positions: int = 3 + stop_loss_pct: float = 0.015 # 1.5% + take_profit_pct: float = 0.045 # 4.5% (3:1 RR) + trailing_stop_pct: float = 0.01 # 1% + notion_token: str = "" + notion_database_id: str = "" + + def __post_init__(self): + self.api_key = os.getenv("BINANCE_API_KEY", "") + self.api_secret = os.getenv("BINANCE_API_SECRET", "") + self.symbol = os.getenv("SYMBOL", "XRPUSDT") + self.leverage = int(os.getenv("LEVERAGE", "10")) + self.risk_per_trade = float(os.getenv("RISK_PER_TRADE", "0.02")) + self.notion_token = os.getenv("NOTION_TOKEN", "") + self.notion_database_id = os.getenv("NOTION_DATABASE_ID", "") diff --git a/tests/test_config.py b/tests/test_config.py new file mode 100644 index 0000000..159e1ad --- /dev/null +++ b/tests/test_config.py @@ -0,0 +1,21 @@ +import os +import pytest +from src.config import Config + + +def test_config_loads_symbol(): + os.environ["SYMBOL"] = "XRPUSDT" + os.environ["LEVERAGE"] = "10" + os.environ["RISK_PER_TRADE"] = "0.02" + cfg = Config() + assert cfg.symbol == "XRPUSDT" + assert cfg.leverage == 10 + assert cfg.risk_per_trade == 0.02 + + +def test_config_notion_keys(): + os.environ["NOTION_TOKEN"] = "secret_test" + os.environ["NOTION_DATABASE_ID"] = "db_test_id" + cfg = Config() + assert cfg.notion_token == "secret_test" + assert cfg.notion_database_id == "db_test_id"