From 81b7a7f7149b628d3e8d1fe51d8dac7b1208067b Mon Sep 17 00:00:00 2001 From: 21in7 Date: Sun, 1 Mar 2026 12:48:34 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20Config=20=EB=AA=A8=EB=93=88=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20(Notion=20=EC=97=B0=EB=8F=99=20=ED=8F=AC=ED=95=A8)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Made-with: Cursor --- src/config.py | 29 +++++++++++++++++++++++++++++ tests/test_config.py | 21 +++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 src/config.py create mode 100644 tests/test_config.py 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"