diff --git a/main.py b/main.py new file mode 100644 index 0000000..8055649 --- /dev/null +++ b/main.py @@ -0,0 +1,18 @@ +import asyncio +from dotenv import load_dotenv +from src.config import Config +from src.bot import TradingBot +from src.logger_setup import setup_logger + +load_dotenv() + + +async def main(): + setup_logger(log_level="INFO") + config = Config() + bot = TradingBot(config) + await bot.run() + + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/src/logger_setup.py b/src/logger_setup.py new file mode 100644 index 0000000..b513c31 --- /dev/null +++ b/src/logger_setup.py @@ -0,0 +1,24 @@ +import sys +from loguru import logger + + +def setup_logger(log_level: str = "INFO"): + logger.remove() + logger.add( + sys.stdout, + format=( + "{time:YYYY-MM-DD HH:mm:ss} | " + "{level: <8} | " + "{name}:{line} - " + "{message}" + ), + level=log_level, + colorize=True, + ) + logger.add( + "logs/bot_{time:YYYY-MM-DD}.log", + rotation="00:00", + retention="30 days", + level="DEBUG", + encoding="utf-8", + ) diff --git a/tests/test_exchange.py b/tests/test_exchange.py index 7c8c9bc..c57a3e2 100644 --- a/tests/test_exchange.py +++ b/tests/test_exchange.py @@ -19,19 +19,20 @@ def config(): @pytest.mark.asyncio async def test_set_leverage(config): - client = BinanceFuturesClient(config) - with patch.object( - client.client, - "futures_change_leverage", - return_value={"leverage": 10}, - ): + with patch("src.exchange.Client") as MockClient: + mock_binance = MagicMock() + MockClient.return_value = mock_binance + mock_binance.futures_change_leverage.return_value = {"leverage": 10} + client = BinanceFuturesClient(config) result = await client.set_leverage(10) assert result is not None def test_calculate_quantity(config): - client = BinanceFuturesClient(config) - # 잔고 1000 USDT, 리스크 2%, 레버리지 10, 가격 0.5 - qty = client.calculate_quantity(balance=1000.0, price=0.5, leverage=10) - # 1000 * 0.02 * 10 / 0.5 = 400 - assert qty == pytest.approx(400.0, rel=0.01) + with patch("src.exchange.Client") as MockClient: + MockClient.return_value = MagicMock() + client = BinanceFuturesClient(config) + # 잔고 1000 USDT, 리스크 2%, 레버리지 10, 가격 0.5 + qty = client.calculate_quantity(balance=1000.0, price=0.5, leverage=10) + # 1000 * 0.02 * 10 / 0.5 = 400 + assert qty == pytest.approx(400.0, rel=0.01)