✅ ํด๋ฆฝ๋ณด๋์ ๋ณต์ฌ๋์์ต๋๋ค!
๐ฐ AI ์ฝ๋ฉ ํฌํผ v2.0
์ฃผ์ ์๋๋งค๋งค
AI ํ๋กฌํํธ ํฌํผ
opํฌ์์ฆ๊ถ Open API ๊ธฐ๋ฐ
๋ ํผ๋ฐ์ค 1์๊ธ ์๋๋งค๋งค๋ฅผ AI์ ํจ๊ป ์์ฑํ์ธ์
๐ฏ
๋ง์คํฐ ํ๋กฌํํธ (์ ์ฒด ๋ณต์ฌ)
ํ์ด์ฌ์ผ๋ก opํ Open API(eFriend Expert)๋ฅผ ์ฌ์ฉํ ์ฃผ์ ์๋๋งค๋งค ํ๋ก๊ทธ๋จ์ ์์ ํ ์ฝ๋๋ก ์์ฑํด์ค.
# ์ ๋ต ๋ชฉํ
๋ ํผ๋ฐ์ค 1์ ์์ค์ผ๋ก:
- ๋ณ๋์ฑ ๋ํ ์ ๋ต(์ ์ผ ๊ณ ์ ๋ฒ์ 0.5๋ฐฐ ๋ํ ๋งค์)
- RSI(14, 30/70 ๊ธฐ์ค)
- ๋ณผ๋ฆฐ์ ๋ฐด๋(20,2) ๊ฒฐํฉ
- ์ค์๊ฐ ๋ฐ์ดํฐ ์ฐ๋ + ๋ฐฑํ
์คํ
ํฌํจ
- ๋ฆฌ์คํฌ 2% ์ด๋ด ๊ด๋ฆฌ
# ํ๊ฒฝ
Windows / Python 3.11 / requests + websocket-client
# ๊ตฌํ ๋จ๊ณ
1) API ์ธ์ฆ (OAuth ํ ํฐ ์๋ ๊ฐฑ์ )
2) ์ค์๊ฐ ์์ธ ์กฐํ (WebSocket)
3) ๋งค๋งค ์ ํธ ์์ฑ (3์ค ์งํ ๊ฒฐํฉ)
4) ์ฃผ๋ฌธ ์คํ (IOC/FOK, ํธ๊ฐ·์๋ ์ต์ ํ)
5) ์์ -5% / ์ต์ +10% ์๋ ๋ก์ง
6) ๋ก๊ทธ + SQLite DB ์ ์ฅ
7) ๋ฐฑํ
์คํ
(1๋
๋ฐ์ดํฐ, ์คํ๋ ์ด์ผ 2.0 ์ด์)
# ์์ต ์ต์ ํ
- ์์๋ฃ 0.015% + ์ธ๊ธ 0.20% + ์ฌ๋ฆฌํผ์ง 0.1% ๋ฐ์
- 24์๊ฐ ๋ฌด์ธ ์ด์ (schedule ๋ผ์ด๋ธ๋ฌ๋ฆฌ)
- ์๋ฌ ํธ๋ค๋ง ์๋ฒฝ / ์ฝ๋ ๋ชจ๋ํ / ์ฃผ์ ์์ธ
- ์คํ๋ ์ด์ผ 2.0+ / ์ฐ๋ณต๋ฆฌ 30%+ / MDD 10% ๋ฏธ๋ง ๋ชฉํ
๐
ํ๊ฒฝ ์ค์ ํ๋กฌํํธ
ํํฌ์ฆ๊ถ API ์ฑ ๋ฑ๋ก ํ ๋ค์์ ํ์ด์ฌ์ผ๋ก ๊ตฌํํด์ค:
1. config.py - APPKEY, APPSECRET ํ๊ฒฝ๋ณ์(.env) ๋ก๋
- ACCESS_TOKEN ๋ฐ๊ธ ๋ฐ ๋ง๋ฃ ์ ์๋ ๊ฐฑ์
- ์ฌ์๋ ๋ก์ง (์ต๋ 3ํ, ์ง์ ๋ฐฑ์คํ)
2. api_client.py
- ๋ชจ๋ REST API ํธ์ถ wrapping
- Rate limit ์ฒ๋ฆฌ (์ด๋น 20๊ฑด ์ ํ)
- ์๋ต ์๋ฌ ์ฝ๋๋ณ ์ฒ๋ฆฌ (401/429/500)
์ถ๋ ฅ: ์คํ ์ฆ์ ํ ํฐ ์ํ ์ถ๋ ฅ, ๋ก๊ทธ ํ์ผ ์ ์ฅ
๐
7๋จ๊ณ ์์๋๋ก ์งํํ์ธ์
๊ฐ ๋จ๊ณ ํด๋ฆญ → ํ๋กฌํํธ ํ์ธ → ๋ณต์ฌ → AI์ ๋ถ์ฌ๋ฃ๊ธฐ
์ด์ ๋จ๊ณ ์ฝ๋๋ฅผ ๋ค์ ์ง๋ฌธ๊ณผ ํจ๊ป ๋ถ์ฌ๋ฃ์ด์ผ ํฉ๋๋ค!
01
๐ API ์ธ์ฆ & ํ ํฐ ๊ด๋ฆฌ
OAuth ํ ํฐ ๋ฐ๊ธ, ์๋ ๊ฐฑ์ , ์ฌ์๋ 3ํ
ํํฌ์ฆ๊ถ API OAuth ํ ํฐ ๋ฐ๊ธ ํ์ด์ฌ ์ฝ๋ ์์ฑํด์ค.
- appkey/appsecret .env ํ์ผ์์ ๋ก๋ (python-dotenv)
- access_token ๋ฐ๊ธ ํจ์: get_token()
- ๋ง๋ฃ 30๋ถ ์ ์๋ ๊ฐฑ์ : refresh_token()
- ์๋ฌ ์ ์ง์ ๋ฐฑ์คํ ์ฌ์๋ 3ํ
- ํ ํฐ ํ์ผ ์บ์ฑ (token_cache.json)
- ๋ก๊ทธ ์ถ๋ ฅ: ๋ฐ๊ธ ์๊ฐ, ๋ง๋ฃ ์๊ฐ, ์ํ
OAuth 2.0
์๋๊ฐฑ์
์บ์ฑ
›
02
๐ ์ค์๊ฐ ๋ฐ์ดํฐ ์์ง
WebSocket ํฑ ์คํธ๋ฆฌ๋ฐ, pandas DataFrame ์ ์ฅ
ํํฌ์ฆ๊ถ API๋ก ์ค์๊ฐ ์ฃผ๊ฐ ๋ฐ์ดํฐ ์์ง ์ฝ๋ ์์ฑํด์ค.
- ์ข
๋ชฉ: ์ผ์ฑ์ ์(005930), ๋์ ์ผ๋ก ๋ณ๊ฒฝ ๊ฐ๋ฅ
- WebSocket์ผ๋ก ํฑ/๋ถ๋ด ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐ
- pandas DataFrame์ผ๋ก OHLCV ์ ์ฅ
- ์ผ๋ด REST API ์กฐํ (์ต๊ทผ 250์ผ)
- ๋ฐ์ดํฐ CSV ์๋ ์ ์ฅ (data/{์ข
๋ชฉ์ฝ๋}_daily.csv)
- ์ฐ๊ฒฐ ๋๊น ์ ์๋ ์ฌ์ ์ (์ต๋ 5ํ)
WebSocket
์ค์๊ฐ
OHLCV
›
03
⚡ ์ ๋ต ๋ก์ง (์์ต ํต์ฌ)
๋ณ๋์ฑ ๋ํ + RSI + ๋ณผ๋ฆฐ์ ๋ฐด๋ 3์ค ๊ฒฐํฉ
3์ค ๋งค๋งค ์ ๋ต ์ ํธ ์์ฑ ์ฝ๋ ์์ฑํด์ค:
[์ ๋ต1] ๋ณ๋์ฑ ๋ํ:
- ๋งค์๊ฐ = ์ ์ผ ์ข
๊ฐ + (์ ์ผ ๊ณ ๊ฐ-์ ๊ฐ) × 0.5
- ๋น์ผ ์๊ฐ ๊ธฐ์ค ๋ํ ํ์ธ
[์ ๋ต2] RSI(14):
- 30 ์ดํ: ๊ณผ๋งค๋ → ๋งค์ ์ ํธ
- 70 ์ด์: ๊ณผ๋งค์ → ๋งค๋ ์ ํธ
[์ ๋ต3] ๋ณผ๋ฆฐ์ ๋ฐด๋(20, 2):
- ํ๋จ ํฐ์น → ๋งค์ ์ ํธ
- ์๋จ ํฐ์น → ๋งค๋ ์ ํธ
[๊ฒฐํฉ]:
- ๋งค์: 3๊ฐ ์ค 2๊ฐ ์ด์ ๋งค์ ์ ํธ
- ๋งค๋: 1๊ฐ๋ผ๋ ๊ฐํ ๋งค๋ ์ ํธ
๋ฐฑํ
์คํ
:
- ๊ธฐ๊ฐ: 2023-01-01 ~ 2024-12-31
- ์์๋ฃ 0.015% + ์ธ๊ธ 0.20% + ์ฌ๋ฆฌํผ์ง 0.1% ๋ฐ์
- ์ถ๋ ฅ: ์ด์์ต๋ฅ , ์คํ๋ ์ด์ผ, MDD, ์น๋ฅ , ๊ฑฐ๋ํ์
๋ณ๋์ฑ๋ํ
RSI 14
๋ณผ๋ฆฐ์ ๋ฐด๋
๋ฐฑํ
์คํ
›
04
๐ ์ฃผ๋ฌธ ์คํ & ํฌ์ง์
๊ด๋ฆฌ
IOC/FOK ์ฃผ๋ฌธ, ์์ -5% / ์ต์ +10%
ํํฌ์ฆ๊ถ API๋ก ์ฃผ๋ฌธ ์คํ ์ฝ๋ ์์ฑํด์ค:
[์ฃผ๋ฌธ ์ ํ]:
- ์์ฅ๊ฐ ์ฃผ๋ฌธ (์ฆ์ ์ฒด๊ฒฐ)
- ์ง์ ๊ฐ ์ฃผ๋ฌธ IOC (๋ฏธ์ฒด๊ฒฐ ์ฆ์ ์ทจ์)
- ๋ถํ ๋งค์ (๋ชฉํ๊ฐ ±0.5% ๋ฒ์ 3ํ)
[ํฌ์ง์
์ฌ์ด์ง]:
- ๊ณ์ข ์๊ณ ์ 2% ๋ฆฌ์คํฌ ๊ธฐ์ค
- ์์ ๊ฐ: ๋งค์๊ฐ × 0.95
- ์๋ = (์๊ณ × 2%) ÷ (๋งค์๊ฐ - ์์ ๊ฐ)
[์๋ ์ฒญ์ฐ]:
- ์์ : ๋งค์๊ฐ ๋๋น -5%
- ์ต์ : ๋งค์๊ฐ ๋๋น +10%
- ํธ๋ ์ผ๋ง ์คํ: ์ต๊ณ ๊ฐ ๋๋น -3%
[ํฌํธํด๋ฆฌ์ค]:
- ๋์ ์ต๋ 5์ข
๋ชฉ / ์ข
๋ชฉ๋น ์ต๋ 20%
IOC/FOK
2% ๋ฆฌ์คํฌ
์์ /์ต์
›
05
๐ฒ ๋ชฌํ
์นด๋ฅผ๋ก ๋ฆฌ์คํฌ ๊ฒ์ฆ
์๋ฎฌ๋ ์ด์
1000ํ, ํ์ฐ ํ๋ฅ ๊ณ์ฐ
Monte Carlo ์๋ฎฌ๋ ์ด์
๋ฆฌ์คํฌ ๊ฒ์ฆ ์ฝ๋ ์ถ๊ฐํด์ค:
[๋ฐฑํ
์คํ
]:
- ๋ฐ์ดํฐ: ๊ณผ๊ฑฐ 2๋
์ผ๋ด
- OOS ๊ฒ์ฆ: ์ต๊ทผ 3๊ฐ์ out-of-sample
- ๋ชฉํ: ์ฐ๋ณต๋ฆฌ 30%+, MDD 10% ๋ฏธ๋ง
[Monte Carlo]:
- ์๋ฎฌ๋ ์ด์
: 1000ํ
- ๊ฑฐ๋ ์์ ๋ฌด์์ ์
ํ
- 95% ์ ๋ขฐ๊ตฌ๊ฐ MDD ๊ณ์ฐ
- ํ์ฐ ํ๋ฅ (์๊ณ -50% ์ดํ)
[์ถ๋ ฅ]:
- matplotlib ์์ต๊ณก์ ์ฐจํธ
- ์ต์ข
์์ต๋ฅ ๋ถํฌ ํ์คํ ๊ทธ๋จ
- ํต์ฌ ์งํ ํ
์ด๋ธ
๋ชฌํ
์นด๋ฅผ๋ก
1000ํ
OOS ๊ฒ์ฆ
›
06
๐ก ์ด์ ์๋ํ & ์๋ฆผ
schedule ์ค์ผ์ค๋ฌ, ํ
๋ ๊ทธ๋จ ๋ด, SQLite ๋ก๊ทธ
์๋ํ ์ด์ ์ฝ๋ ์ถ๊ฐํด์ค:
[์ค์ผ์ค๋ฌ - schedule ๋ผ์ด๋ธ๋ฌ๋ฆฌ]:
- 8:50: ์ข
๋ชฉ ์ ์ , ์งํ ๊ณ์ฐ
- 9:00~15:30: ๋งค 1๋ถ ์ ํธ ํ์ธ/์ฃผ๋ฌธ
- 15:35: ์ผ์ผ ๋ฆฌํฌํธ ์์ฑ
[ํ
๋ ๊ทธ๋จ ๋ด]:
- ๋งค์/๋งค๋ ์ฒด๊ฒฐ ์ฆ์ ์๋ฆผ
- ์์ ๋ฐ๋ ๊ธด๊ธ ์๋ฆผ (❗)
- ์ผ์ผ ์์ต๋ฅ ์์ฝ (์ ๋
6์)
- /status ๋ช
๋ น → ํ์ฌ ํฌ์ง์
์กฐํ
[SQLite ๋ก๊ทธ]:
- trades: ์ฒด๊ฒฐ ๋ด์ญ ์ ์ฒด
- daily_pnl: ์ผ๋ณ ์์ต
- errors: ์๋ฌ ๊ธฐ๋ก
[AWS Lightsail ๋ฐฐํฌ]:
- requirements.txt
- systemd ์๋น์ค ํ์ผ
- ์๋ ์ฌ์์ ์ค์
ํ
๋ ๊ทธ๋จ
SQLite
AWS
›
07
๐ค ML ์ต์ ํ & ์
๊ทธ๋ ์ด๋
๋๋คํฌ๋ ์คํธ, Optuna ํ์ดํผํ๋ผ๋ฏธํฐ ํ๋
ML๋ก ์ ๋ต ์
๊ทธ๋ ์ด๋ ์ฝ๋ ์์ฑํด์ค:
[๋๋คํฌ๋ ์คํธ ์ ํธ ํํฐ]:
- ํผ์ฒ: RSI, BB์์น, ๊ฑฐ๋๋๋น์จ, ๋ชจ๋ฉํ
, ๋ณ๋์ฑ
- ํ๊ฒ: 5์ผ ํ ์์ต +2% ์ด์ = 1
- ํ์ต: ๊ณผ๊ฑฐ 2๋
, OOS: ์ต๊ทผ 3๊ฐ์
- ํ๋ฅ 0.65 ์ด์์ผ ๋๋ง ์ง์
[Optuna ํ์ดํผํ๋ผ๋ฏธํฐ ํ๋]:
- RSI ๊ธฐ๊ฐ: 10~20, ์๊ณ๊ฐ: 25~35/65~75
- ๋ณผ๋ฆฐ์ ๋ฐด๋: ๊ธฐ๊ฐ 15~25, ํ์คํธ์ฐจ 1.5~2.5
- ๋ณ๋์ฑ ๋ํ ๊ณ์: 0.3~0.7
[์ต์ ํ]:
- numpy ๋ฒกํฐ ์ฐ์ฐ์ผ๋ก ์๋ ๊ฐ์
- ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ (๋์ฉ๋ ๋ฐ์ดํฐ)
- ๋ชฉํ: ์ฐ์์ต 50%+ ๊ฒ์ฆ
๋๋คํฌ๋ ์คํธ
Optuna
ML ํํฐ
›
⚡
๋ฆฌ์คํฌ ๊ด๋ฆฌ ํต์ฌ ํ๋ผ๋ฏธํฐ
ํฌ์ง์
๋น ๋ฆฌ์คํฌ
2%
๋ชฉํ ์คํ๋ ์ด์ผ
2.0+
๋ชฉํ ์ฐ๋ณต๋ฆฌ ์์ต
30%+
๐ธ
์ค์ ๊ฑฐ๋ ๋น์ฉ ๊ณต์
# ์ค์ ๊ฑฐ๋ ๋น์ฉ ๋ฐ์ ๊ณต์
๋งค์ ์์๋ฃ = ๋งค์๊ฐ × 0.015% (ํํฌ์ฆ๊ถ)
๋งค๋ ์์๋ฃ = ๋งค๋๊ฐ × 0.015%
์ฆ๊ถ๊ฑฐ๋์ธ = ๋งค๋๊ฐ × 0.20% (2024๋
๊ธฐ์ค)
์ฌ๋ฆฌํผ์ง = ๊ฑฐ๋๊ฐ × 0.1% (ํธ๊ฐ ์คํ๋ ๋)
์๋ณต ๊ฑฐ๋๋น์ฉ = 0.015% × 2 + 0.20% + 0.1% × 2
≈ 0.43%
→ 1ํ ๊ฑฐ๋์์ 0.43% ์ด์ ์์ต์ด ๋์ผ ์ค์ ์์ต!
→ ์ฐ๊ฐ ๊ฑฐ๋ํ์ × 0.43% = ์ด ๋น์ฉ๋ฅ ๋ฐ๋์ ํ์ธ
๐ก️
๋ฆฌ์คํฌ ๊ด๋ฆฌ ๋ชจ๋ ํ๋กฌํํธ
๋ค์ ๋ฆฌ์คํฌ ๊ด๋ฆฌ ๋ชจ๋์ ํ์ด์ฌ์ผ๋ก ๊ตฌํํด์ค:
class RiskManager:
def position_size(self, balance, entry, stop):
"""2% ๋ฆฌ์คํฌ ๊ธฐ๋ฐ ์๋ ๊ณ์ฐ"""
risk_amount = balance * 0.02
per_share_risk = entry - stop
return int(risk_amount / per_share_risk)
def check_portfolio_limit(self):
"""ํฌํธํด๋ฆฌ์ค ๋ฆฌ์คํฌ ํ๋ ์ฒดํฌ"""
# ์ต๋ 5์ข
๋ชฉ ๋์ ๋ณด์
# ๋จ์ผ ์ข
๋ชฉ ์ต๋ 20%
# ์ผ์ผ ์์ค ํ๋: ๊ณ์ข์ 5%
# ํ๋ ์ด๊ณผ ์ ์ ๊ท ์ง์
์ฐจ๋จ
def emergency_stop(self):
"""๋น์ ์ ์ง ์กฐ๊ฑด"""
# ์ผ์ผ ์์ค 5% ์ด๊ณผ → ๋น์ผ ๋งค๋งค ์ค๋จ
# MDD 10% ์ด๊ณผ → ์ ์ฒด ์ฒญ์ฐ + ํ
๋ ๊ทธ๋จ ์๋ฆผ
# API ์๋ฌ ์ฐ์ 5ํ → ์์ ์ข
๋ฃ
๐ก
์์ต ๊ทน๋ํ ํต์ฌ ํ 4๊ฐ์ง
๐ฏ ์ ๋ต ๊ฒฐํฉ์ ํ
๋จ์ผ ์ ๋ต๋ณด๋ค RSI + ๋ณผ๋ฆฐ์ ๋ฐด๋ + ๋ณ๋์ฑ๋ํ 3๊ฐ ๊ฒฐํฉ ์ ์น๋ฅ 65%+ ๋ฌ์ฑ ๊ฐ๋ฅ. ์ ํธ ์ถฉ๋ ์ ํฌ๊ธฐ๊ฐ ์ต์ ์
๋๋ค.
๐ ๋ฐฑํ
์คํ
ํ์
๊ณผ์ต์ ํ ๋ฐฉ์ง๋ฅผ ์ํด OOS(Out-of-Sample) ์ต๊ทผ 3๊ฐ์ ๊ฒ์ฆ ํ์. ๊ณผ๊ฑฐ ์ข๋ค๊ณ ๋ฏธ๋ ๋ณด์ฅ ์์.
⚖️ ๋น์ฉ ํ์ค ๋ฐ์
์์๋ฃ + ์ธ๊ธ + ์ฌ๋ฆฌํผ์ง ์๋ณต ์ฝ 0.43%. ์ด๋ณด๋ค ๊ธฐ๋์์ต์ด ์ปค์ผ ์๋ฏธ ์์. ๋จํ๋ ํนํ ์ฃผ์.
๐จ ๋ชจ๋ํฐ๋ง ํ์
ํ
๋ ๊ทธ๋จ ๋ด์ผ๋ก 24์๊ฐ ์๋ฆผ. ๋ฌด์ธ ์ด์์ด๋ผ๋ ์ผ์ผ ํ์ธ. ์ด์ ๊ฐ์ง ์ ์ฆ์ ์๋ ์ ์ง.
๐
์ข
๋ชฉ ์ ์ ํ๋กฌํํธ
์ฝ์คํผ/์ฝ์ค๋ฅ ์๋๋งค๋งค ์ ํฉ ์ข
๋ชฉ ํํฐ๋ง ์ฝ๋ ์์ฑํด์ค:
[ํํฐ ๊ธฐ์ค]:
1. ์๊ฐ์ด์ก: 5,000์ต ์ด์ (์ ๋์ฑ ํ๋ณด)
2. ์ผํ๊ท ๊ฑฐ๋๋: 50๋ง์ฃผ ์ด์
3. ์ฃผ๊ฐ ๋ฒ์: 5,000์ ~ 500,000์
4. ์ต๊ทผ 20์ผ ๋ณ๋์ฑ: ATR/๊ฐ๊ฒฉ > 1.5%
5. 52์ฃผ ์ ๊ณ ๊ฐ ๋๋น -30% ์ด๋ด
[์ ์ธ ์กฐ๊ฑด]:
- ๊ฑฐ๋์ ์ง, ๊ด๋ฆฌ์ข
๋ชฉ, ์ฐ์ ์ฃผ ์ ์ธ
- ์ต๊ทผ 1๊ฐ์ ๊ธ๋ฑ์ฃผ (50%+) ์ ์ธ
- ์ฌ๋ฌด ๋ถ์ค ์ข
๋ชฉ ์ ์ธ
์ถ๋ ฅ: ์ ์ ์ข
๋ชฉ ๋ฆฌ์คํธ + ๊ฐ ์งํ๊ฐ DataFrame
๐งช
๋ชจ์ํฌ์ ํ
์คํธ ํ๋กฌํํธ
ํํฌ์ฆ๊ถ ๋ชจ์ํฌ์(paper trading) ํ
์คํธ ์ฝ๋ ์์ฑํด์ค:
[์ค์ ]:
- ๊ฐ์ ์๋ณธ๊ธ: 10,000,000์
- ์ค์ API ์์ธ ์ฌ์ฉ (๋ชจ์ํฌ์ ์๋ฒ)
- ์ค์ ์ฃผ๋ฌธ → ๋ชจ์ํฌ์ ๊ณ์ข๋ก ์ ์ก
[ํ
์คํธ ๊ธฐ๊ฐ]: ์ต์ 3๊ฐ์
[ํต๊ณผ ๊ธฐ์ค]:
- ์ ์์ต๋ฅ : +2% ์ด์
- ์ต๋ ๋ํญ: -5% ๋ฏธ๋ง
- ์น๋ฅ : 55% ์ด์
- ์คํ๋ ์ด์ผ: 1.5 ์ด์
[๋ฆฌํฌํธ]:
- ์ผ๋ณ/์๋ณ ์์ต ์ฐจํธ
- ์ข
๋ชฉ๋ณ ๊ธฐ์ฌ๋ ๋ถ์
- ์ ๋ต๋ณ ์ ํธ ์ ํ๋
⚠️ ํฌ์ ๊ฒฝ๊ณ — ๊ณผ๊ฑฐ ๋ฐฑํ
์คํ
๊ฒฐ๊ณผ๊ฐ ๋ฏธ๋ ์์ต์ ๋ณด์ฅํ์ง ์์ต๋๋ค. ์๋๋งค๋งค ํ๋ก๊ทธ๋จ์ ๋ฐ๋์ ๋ชจ์ํฌ์ 3๊ฐ์ ์ด์ ๊ฒ์ฆ ํ ์์ก์ผ๋ก ์์ํ์ธ์. ํฌ์ ์์ค์ ๋ํ ์ฑ
์์ ๋ณธ์ธ์๊ฒ ์์ต๋๋ค. ์ด ํฌํผ๋ ์ฝ๋ฉ ๋ณด์กฐ ๋๊ตฌ์
๋๋ค.
✅
๊ฐ๋ฐ ์์ฑ๋ ์ฒดํฌ๋ฆฌ์คํธ
✓
ํํฌ์ฆ๊ถ API ์ฑ ๋ฑ๋ก ์๋ฃ
✓
OAuth ํ ํฐ ๋ฐ๊ธ & ์๋ ๊ฐฑ์ ๊ตฌํ
✓
WebSocket ์ค์๊ฐ ๋ฐ์ดํฐ ์์ง
✓
๋ณ๋์ฑ ๋ํ + RSI + ๋ณผ๋ฆฐ์ ๋ฐด๋ ์ ๋ต ๊ตฌํ
✓
๋ฐฑํ
์คํ
์๋ฃ (์คํ๋ ์ด์ผ 2.0+ ํ์ธ)
✓
2% ๋ฆฌ์คํฌ ๊ธฐ๋ฐ ํฌ์ง์
์ฌ์ด์ง
✓
์์ (-5%) / ์ต์ (+10%) ์๋ ๋ก์ง
✓
์์๋ฃ + ์ธ๊ธ + ์ฌ๋ฆฌํผ์ง ๋ฐ์
✓
๋ชฌํ
์นด๋ฅผ๋ก ์๋ฎฌ๋ ์ด์
๋ฆฌ์คํฌ ๊ฒ์ฆ
✓
schedule ์ค์ผ์ค๋ฌ 9:00~15:30 ์ค์
✓
ํ
๋ ๊ทธ๋จ ๋ด ์๋ฆผ ์ฐ๋
✓
SQLite ๊ฑฐ๋ ๋ก๊ทธ ์ ์ฅ
✓
ML(๋๋คํฌ๋ ์คํธ) ์ ํธ ํํฐ ์ ์ฉ
✓
๋ชจ์ํฌ์ 3๊ฐ์ ์ด์ ๊ฒ์ฆ ์๋ฃ
✓
AWS/์๋ฒ ๋ฐฐํฌ & ์๋ ์ฌ์์ ์ค์
๋๊ธ
๋๊ธ ์ฐ๊ธฐ