# ๐Ÿ” ์ž๋™๋งค๋งค ์ ๊ฒ€ ๋ฆฌํฌํŠธ ## ๐Ÿ“‹ ์ฒดํฌ๋ฆฌ์ŠคํŠธ ### 1. โฐ ์žฅ ์šด์˜ ์‹œ๊ฐ„ **ํ˜„์žฌ ์ƒํ™ฉ:** - ์˜ค๋Š˜: 2026๋…„ 2์›” 5์ผ (์ˆ˜์š”์ผ) - ํ•œ๊ตญ ์ฃผ์‹์‹œ์žฅ ์ •๊ทœ ์žฅ์‹œ๊ฐ„: 09:00 ~ 15:30 - **๋ฌธ์ œ:** ํ˜„์žฌ ์‹œ๊ฐ์ด ์žฅ ๋งˆ๊ฐ ์ดํ›„๋ผ๋ฉด ์ž๋™๋งค๋งค๊ฐ€ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค **ํ™•์ธ ๋ฐฉ๋ฒ•:** ```python # ์ฝ”๋“œ์—์„œ ํ™•์ธ from app.core.market_schedule import is_market_open print(is_market_open()) # False์ด๋ฉด ์žฅ ๋งˆ๊ฐ ``` **ํ•ด๊ฒฐ์ฑ…:** - ์žฅ ์‹œ๊ฐ„(09:00~15:30) ๋‚ด์— ๋‹ค์‹œ ํ™•์ธ - ํ…Œ์ŠคํŠธ ๋ชฉ์ ์ด๋ผ๋ฉด `market_schedule.py`์—์„œ ์‹œ๊ฐ„ ์ฒดํฌ ์ž„์‹œ ๋น„ํ™œ์„ฑํ™” --- ### 2. โš™๏ธ AUTO_TRADE_ENABLED ์„ค์ • **ํ˜„์žฌ ์„ค์ •:** `config.py`์— `AUTO_TRADE_ENABLED = True`๋กœ ์„ค์ •๋˜์–ด ์žˆ์Œ **ํ™•์ธ ํ•„์š”:** - `.env` ํŒŒ์ผ์—์„œ `AUTO_TRADE_ENABLED=False`๋กœ ๋ฎ์–ด์“ฐ๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธ - ํ™˜๊ฒฝ ๋ณ€์ˆ˜๊ฐ€ ์ฝ”๋“œ ๊ธฐ๋ณธ๊ฐ’์„ ์˜ค๋ฒ„๋ผ์ด๋“œํ•  ์ˆ˜ ์žˆ์Œ **ํ™•์ธ ๋ฐฉ๋ฒ•:** ```bash docker exec autostock-backend env | grep AUTO_TRADE ``` **ํ•ด๊ฒฐ์ฑ…:** - `.env` ํŒŒ์ผ ํ™•์ธ ๋ฐ ์ˆ˜์ • - ๋˜๋Š” config.py์—์„œ ๋ช…์‹œ์ ์œผ๋กœ True ์„ค์ • --- ### 3. ๐Ÿ”‘ KIS API ์ธ์ฆ ์ •๋ณด **ํ•„์ˆ˜ ์„ค์ •:** - `KIS_APP_KEY` (์•ฑ ํ‚ค) - `KIS_APP_SECRET` (์•ฑ ์‹œํฌ๋ฆฟ) - `KIS_ACCOUNT_NO` (๊ณ„์ขŒ๋ฒˆํ˜ธ) **ํ™•์ธ ๋ฐฉ๋ฒ•:** ```bash docker exec autostock-backend env | grep KIS_ ``` **๋ฌธ์ œ:** - API ํ‚ค๊ฐ€ ์—†์œผ๋ฉด ์ฃผ๋ฌธ ์‹คํ–‰ ๋ถˆ๊ฐ€ - ๋ชจ์˜ํˆฌ์ž์™€ ์‹คํˆฌ์ž URL์ด ๋‹ค๋ฆ„ **ํ•ด๊ฒฐ์ฑ…:** - `.env` ํŒŒ์ผ์— ์˜ฌ๋ฐ”๋ฅธ KIS API ์ •๋ณด ์ž…๋ ฅ - ๋ชจ์˜ํˆฌ์ž: `https://openapivts.koreainvestment.com:29443` - ์‹คํˆฌ์ž: `https://openapi.koreainvestment.com:9443` --- ### 4. ๐Ÿ“Š ์ถ”์ฒœ ์ข…๋ชฉ ์กด์žฌ ์—ฌ๋ถ€ **์ž๋™๋งค๋งค ์‹คํ–‰ ์กฐ๊ฑด:** 1. ์žฅ์ด ์—ด๋ ค ์žˆ์–ด์•ผ ํ•จ 2. AUTO_TRADE_ENABLED = True 3. **์ถ”์ฒœ ์ข…๋ชฉ ๋ฆฌ์ŠคํŠธ์— ๋งค์ˆ˜ ์‹ ํ˜ธ๊ฐ€ ์žˆ์–ด์•ผ ํ•จ** **์ฝ”๋“œ ๋กœ์ง:** ```python rec = await get_rule_based_recommendations_realtime() if rec and rec.get("recommendations_by_rule"): # ์ž๋™๋งค๋งค ์‹คํ–‰ else: logger.info("โญ๏ธ Auto-trade skipped: no recommendations matched rules") ``` **ํ™•์ธ ๋ฐฉ๋ฒ•:** ```bash curl http://localhost:8090/api/v1/recommendations/rule-based ``` **๋ฌธ์ œ ๊ฐ€๋Šฅ์„ฑ:** - RSI, ์Šคํ† ์บ์Šคํ‹ฑ ๋“ฑ ๊ธฐ์ˆ ์  ์ง€ํ‘œ๊ฐ€ ๋งค์ˆ˜ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ข…๋ชฉ์ด ์—†์Œ - TREND_FILTER_ENABLED=True์ธ ๊ฒฝ์šฐ ์ƒ์Šน ์ถ”์„ธ ์ข…๋ชฉ๋งŒ ์„ ํƒ (ํ˜„์žฌ๋Š” False) --- ### 5. ๐Ÿ’พ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๊ฒฐ **ํ™•์ธ ํ•ญ๋ชฉ:** - PostgreSQL ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ ์ค‘ - ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์™„๋ฃŒ (portfolio, trade_history ๋“ฑ) **ํ™•์ธ ๋ฐฉ๋ฒ•:** ```bash docker ps | grep postgres docker exec autostock-postgres psql -U autostock -d autostock_db -c "SELECT COUNT(*) FROM portfolio;" ``` --- ### 6. ๐Ÿ”„ ์Šค์ผ€์ค„๋Ÿฌ ๋™์ž‘ ์—ฌ๋ถ€ **๋ฐฑ์—”๋“œ ๋กœ๊ทธ ํ™•์ธ:** ```bash docker logs autostock-backend 2>&1 | grep "Auto-trade scheduler" docker logs autostock-backend 2>&1 | grep "Market is closed" docker logs autostock-backend 2>&1 | grep "Starting real-time analysis" ``` **๊ธฐ๋Œ€ ๋กœ๊ทธ:** - ์žฅ ์ค‘: "โฑ๏ธ Auto-trade scheduler started (every 60s)" - ์žฅ ์ค‘: "๐Ÿ”„ Starting real-time analysis cycle..." - ์žฅ ๋งˆ๊ฐ: "๐Ÿ’ค Market is closed. Skipping auto-trade cycle. Next check in 30 minutes." --- ## ๐ŸŽฏ ๊ฐ€์žฅ ๊ฐ€๋Šฅ์„ฑ ๋†’์€ ์›์ธ ### 1์ˆœ์œ„: ์žฅ ๋งˆ๊ฐ ์‹œ๊ฐ„ - **์ฆ์ƒ:** 15:30 ์ดํ›„์—๋Š” ์ž๋™๋งค๋งค๊ฐ€ ์ค‘๋‹จ๋จ - **ํ•ด๊ฒฐ:** ๋‹ค์Œ ๊ฑฐ๋ž˜์ผ 09:00~15:30์— ๋‹ค์‹œ ํ™•์ธ ### 2์ˆœ์œ„: ๋งค์ˆ˜ ์กฐ๊ฑด ๋ฏธ์ถฉ์กฑ - **์ฆ์ƒ:** ์ถ”์ฒœ ์ข…๋ชฉ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋น„์–ด์žˆ์Œ - **์›์ธ:** - ํ˜„์žฌ ์‹œ์žฅ ์ƒํ™ฉ์—์„œ RSI < 40 ๋˜๋Š” Stochastic < 30 ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ข…๋ชฉ ์—†์Œ - ๋ชจ๋“  ์ข…๋ชฉ์ด ๊ณผ๋งค์ˆ˜ ์ƒํƒœ์ด๊ฑฐ๋‚˜ ์ค‘๋ฆฝ ๊ตฌ๊ฐ„ - **ํ•ด๊ฒฐ:** - ๋งค์ˆ˜ ์กฐ๊ฑด ์™„ํ™” (RSI < 50, Stochastic < 40 ๋“ฑ) - ๋˜๋Š” ์‹œ์žฅ์ด ์กฐ์ • ๋ฐ›์„ ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ ### 3์ˆœ์œ„: KIS API ์ธ์ฆ ๋ฌธ์ œ - **์ฆ์ƒ:** API ํ˜ธ์ถœ ์‹œ 401/403 ์—๋Ÿฌ - **ํ•ด๊ฒฐ:** .env ํŒŒ์ผ์— ์˜ฌ๋ฐ”๋ฅธ API ํ‚ค ์„ค์ • --- ## โœ… ์ฆ‰์‹œ ํ™•์ธํ•  ์‚ฌํ•ญ 1. **ํ˜„์žฌ ์‹œ๊ฐ ํ™•์ธ** ```bash TZ='Asia/Seoul' date '+%H:%M' ``` - 09:00 ~ 15:30 ๋ฒ”์œ„ ๋‚ด์ธ๊ฐ€? 2. **๋ฐฑ์—”๋“œ ์ปจํ…Œ์ด๋„ˆ ์ƒํƒœ** ```bash docker ps | grep backend ``` - "Up" ์ƒํƒœ์ธ๊ฐ€? 3. **์ตœ๊ทผ ๋กœ๊ทธ ํ™•์ธ** ```bash docker logs autostock-backend --tail 50 ``` - ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๊ฐ€ ์žˆ๋Š”๊ฐ€? - "Market is closed" ๋ฉ”์‹œ์ง€๊ฐ€ ์žˆ๋Š”๊ฐ€? 4. **์ถ”์ฒœ ์ข…๋ชฉ API ํ…Œ์ŠคํŠธ** ```bash curl http://localhost:8090/api/v1/recommendations/rule-based ``` - ์ข…๋ชฉ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋ฐ˜ํ™˜๋˜๋Š”๊ฐ€? --- ## ๐Ÿ”ง ์ž„์‹œ ํ…Œ์ŠคํŠธ ๋ฐฉ๋ฒ• (๊ฐœ๋ฐœ ํ™˜๊ฒฝ) ์žฅ ์‹œ๊ฐ„ ์ฒดํฌ๋ฅผ ์ž„์‹œ๋กœ ๋น„ํ™œ์„ฑํ™”ํ•˜์—ฌ ํ…Œ์ŠคํŠธ: ```python # backend/app/core/market_schedule.py ์ˆ˜์ • def is_market_open() -> bool: return True # ์ž„์‹œ๋กœ ํ•ญ์ƒ True ๋ฐ˜ํ™˜ (ํ…Œ์ŠคํŠธ์šฉ) ``` **์ฃผ์˜:** ์‹ค์ œ ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ์ ˆ๋Œ€ ์‚ฌ์šฉ ๊ธˆ์ง€!