ํฐ์คํ ๋ฆฌ ๋ทฐ
๐งช ๋๋ง์ AI ํํธ ์ ๋ต ๋ง๋ค๊ธฐ – ๋จ 3๊ฐ์ ์งํ๋ก ์์ฑํ๋ ์ค์ ์ ๋ต ์ค๊ณ ๊ฐ์ด๋
octo54 2025. 12. 12. 13:45๐งช ๋๋ง์ AI ํํธ ์ ๋ต ๋ง๋ค๊ธฐ – ๋จ 3๊ฐ์ ์งํ๋ก ์์ฑํ๋ ์ค์ ์ ๋ต ์ค๊ณ ๊ฐ์ด๋
— “์ฒ์๋ถํฐ ์๋ฒฝํ ํ์ ์๋ค. ๋จ์ํ๋ฉด ๋ ๊ฐํ๋ค.”
์ง๊ธ๊น์ง๋
- AI ์์ฐ๋ฐฐ๋ถ
- ์๋๋งค์
- ๋ฆฌ์คํฌ ๊ด๋ฆฌ
- ๊ฐํํ์ต ์ ๋ต
๊น์ง ๋ค๋ค์ต๋๋ค.
์ด๋ฒ ๊ธ์ ์์ฃผ ๋ค๋ฅธ ๊ด์ ์ ๋๋ค.
๐ฏ ๊ฐ์ธ ํฌ์์๊ฐ ์ฒ์์ผ๋ก ์ง์ ๋ง๋ค ์ ์๋ ‘๋๋ง์ ํํธ ์ ๋ต’
๋จ 3๊ฐ์ ์งํ๋ง์ผ๋ก ๊ตฌ์ฑํ๋ ๋งค์ฐ ๋จ์ํ๊ณ ๊ฐ๋ ฅํ ์ ๋ต์ ๋๋ค.
AI๋ก ์ ๋ต์ ๋ง๋ค ์๋ ์์ง๋ง,
์ ๋ต ์์ฒด๊ฐ ๊ฐ๋จํด์ผ AI๊ฐ ๋ ์ ํ์ต๋ฉ๋๋ค.
๊ทธ๋์ ์ด๋ฒ ๊ธ์ **“์ฌ๋์ด ์ค๊ณํ๊ณ AI๊ฐ ํ๋ํ๋ ์ ๋ต”**์ ๋ง๋๋ ๋จ๊ณ์
๋๋ค.
๐ฏ ์ด๋ฒ ๊ธ์ ํต์ฌ ๋ชฉํ
โ ์ด๋ณด์๋ ๋ฐ๋ผ ํ ์ ์๋ ์ค์ ํฌ์ ์ ๋ต์ ํ๋ ๋ง๋ ๋ค.
โ ์งํ๋ ๋จ 3๊ฐ๋ง ์ฌ์ฉํ๋ค.
โ ์กฐ๊ฑด์ → ํฌํธํด๋ฆฌ์ค → ๋ฐฑํ
์คํธ → ํ๋๊น์ง ์์ฑํ๋ค.
โ AI๊ฐ ๊ฐ์ ํฌ์ธํธ๋ฅผ ์ค์ค๋ก ์ฐพ์๊ฐ ์ ์๊ฒ ์ค๊ณํ๋ค.
๐งฉ ์ ๋ต ๊ตฌ์ฑ ์์๋ ๋จ 3๊ฐ์ง
์ถ์ธ + ๋ชจ๋ฉํ + ๋ณ๋์ฑ
์ด 3๊ฐ์ง๋ง ์์ด๋ ๊ธฐ๊ด๊ธ ์ ๋ต์ด ๋ง๋ค์ด์ง๋๋ค.
1๏ธโฃ ์ถ์ธ ํํฐ(Trend Filter)
์์ฅ ๋ฐฉํฅ์ ๋ฌด์ํ๊ณ ํฌ์ํ๋ฉด 100% ๊นจ์ง๋๋ค.
๊ทธ๋์ ๊ฐ์ฅ ๋จผ์ ์์ฅ ์ถ์ธ ํํฐ๋ฅผ ๋ก๋๋ค.
โ 20์ผ > 60์ผ ์ด๋ํ๊ท ์ด๋ฉด ๋งค์ ๊ฐ๋ฅ
(์์น ์ถ์ธ์ ์์ ๋๋ง ์ ๋ต ํ์ฑํ)
def trend_filter(prices):
ma20 = prices.rolling(20).mean().iloc[-1]
ma60 = prices.rolling(60).mean().iloc[-1]
return ma20 > ma60
๋. ๋งค์ฐ ๋จ์ํ์ง๋ง ํจ๊ณผ๋ ๊ฐ๋ ฅํฉ๋๋ค.
2๏ธโฃ ๋ชจ๋ฉํ ์ ์(Momentum Score)
๊ฐ์ฅ ๊ฐํ ์ข ๋ชฉ์ ์ ํํ๋ ๊ธฐ์ค์ ๋๋ค.
def momentum(prices):
return prices.pct_change(60).iloc[-1]
์ต๊ทผ 3๊ฐ์ ๊ฐํ๋ ์ข
๋ชฉ์ด
์์ผ๋ก๋ ๊ฐํ ํ๋ฅ ์ด ๋งค์ฐ ๋์ต๋๋ค.
(์ด๊ฒ์ ์ ์ธ๊ณ ๊ธ์ต์์ฅ์์ ์์ญ ๋
๋์ ๊ฒ์ฆ๋ ํฉํฐ์
๋๋ค.)
3๏ธโฃ ๋ณ๋์ฑ ํํฐ(Volatility Filter)
์ํํ ์์ฅ์์๋ ๋น์ค์ ์ค์ฌ ์ฑ๊ณผ์ ์์ ์ฑ์ ํ๋ณดํฉ๋๋ค.
def volatility(prices):
return prices.pct_change().std()
- ๋ณ๋์ฑ ↑ → ๋น์ค ์ถ์
- ๋ณ๋์ฑ ↓ → ๋น์ค ํ๋
์ฌ๊ธฐ๊น์ง๊ฐ ์ด๊ฐ๋จ ์ ๋ต ์ค๊ณ์ 3์์์ ๋๋ค.
๐ 4๏ธโฃ ์ ๋ต ์กฐํฉํ๊ธฐ
์ด์ ์กฐ๊ฑด ๋ช ์ค๋ก ์ ๋ต์ ์์ฑํ ์ ์์ต๋๋ค.
def strategy_signal(prices):
if not trend_filter(prices):
return 0 # ๋งค์ ๊ธ์ง
mom = momentum(prices)
vol = volatility(prices)
score = mom / vol # ์ํ ๋๋น ๊ฐ๋
return score
์ด ์ ์๊ฐ ๋์ ์ข ๋ชฉ ์์ N๊ฐ๋ฅผ ๋งค์ํ๋ฉด ๋์ ๋๋ค.
๐ 5๏ธโฃ ๋ฐฑํ ์คํธ ๋ง๋ค๊ธฐ (ํ์ด์ฌ 10์ค)
def backtest(prices_df, top_n=5):
returns = prices_df.pct_change().shift(-1)
signals = prices_df.apply(strategy_signal)
selected = signals.nlargest(top_n).index
portfolio = returns[selected].mean(axis=1)
return portfolio.cumsum()
Streamlit ๋์๋ณด๋๋ก ๊ฒฐ๊ณผ ์๊ฐํ๋ ๊ฐ๋ฅ:
st.line_chart(backtest(price_df))
๐ง 6๏ธโฃ AI ํ๋ ์ ์ฉ – Optuna๋ก ์ ๋ต ๊ฐ์
์ฌ๋์ด ๋ง๋ ์ ๋ต ๊ณจ๊ฒฉ์
AI๊ฐ ์ต์ ํํ๋๋ก ๋ง๋ค ์ ์์ต๋๋ค.
ํ๋ํ ํ๋ผ๋ฏธํฐ ์์:
- ๋ชจ๋ฉํ ๊ธฐ๊ฐ(30~120)
- ์ด๋ํ๊ท ๊ธฐ๊ฐ(20/60, 50/200 ๋ฑ)
- ๋ณ๋์ฑ ๊ณ์ฐ ๊ธฐ๊ฐ
- ์์ ์ข ๋ชฉ ์(top_n)
- ๋ฆฌ๋ฐธ๋ฐ์ฑ ์ฃผ๊ธฐ(1๋ฌ/2์ฃผ/1์ฃผ)
def objective(trial):
mom_window = trial.suggest_int("mom", 30, 120)
vol_window = trial.suggest_int("vol", 10, 40)
top_n = trial.suggest_int("top_n", 3, 10)
result = backtest_custom(mom_window, vol_window, top_n)
sharpe = result.mean() / result.std()
return -sharpe
AI๊ฐ ์๋์ผ๋ก ์ ๋ต์ ๊ฐ์ ํฉ๋๋ค.
๐ 7๏ธโฃ ์ค์ ์ ๋ต ์ฑ๋ฅ (์์ ์๋ฎฌ๋ ์ด์ ๊ฒฐ๊ณผ)
์ ๋ต ์ฐํ๊ท ์์ต๋ฅ MDD ์คํ์ง์
| S&P500 ๋จ์ ๋งค์ | 10.5% | -34% | 0.85 |
| 3์งํ ์ ๋ต(๊ธฐ๋ณธ๊ฐ) | 16.1% | -21% | 1.32 |
| AI ํ๋ ์ ๋ต | 18.7% | -18% | 1.49 |
AI๊ฐ ๋ณด์กฐํด์ฃผ๋ ์ ๋ต์ด ๊ฐ์ฅ ์ข์์ต๋๋ค.
๐ก 8๏ธโฃ ๊ฐ์ธ ํฌ์์๊ฐ ์ฆ์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ
์ ๋ต์ ๋ง๋ ๋ค, ์ด๋ ๊ฒ๋ง ์ด์ํ๋ฉด ๋ฉ๋๋ค:
โ ๋งค์ ๋ง ์๋
- Streamlit ๋์๋ณด๋๋ฅผ ์ด๊ณ
- ์ด๋ฒ ๋ฌ ์์ ์ข ๋ชฉ 5๊ฐ ํ์ธ
- ๋์ผ ๋น์ค์ผ๋ก ๋งค์
์ข
๋ชฉ์ ๋งค๋ฌ 5๊ฐ๋ง.
๋๋ฌด ๋ง์ผ๋ฉด ๊ด๋ฆฌ๊ฐ ์ ๋ฉ๋๋ค.
โ ๋ฆฌ์คํฌ ๋์ผ๋ฉด "ํ๊ธ 50%"
AI ๋ฆฌ์คํฌ ๋งค๋์ (VIX, ๋ณ๋์ฑ, ๊ธ๋ฆฌ)๋ฅผ ๋จ์ํํด์
์ํ์ด ๋์ผ๋ฉด ํ๊ธ ๋น์ค์ ์๋์ผ๋ก ๋๋ฆฝ๋๋ค.
โ ๋ํญ ์ฌํ๋ฉด ๊ฐ์ ํ๊ธํ
์ถ์ธ ํํฐ๊ฐ ๊นจ์ง ๊ฒฝ์ฐ(20 < 60)
→ ์ ๋ ํ๊ธ ๋๊ธฐ (๋จ ํ ์ค ์กฐ๊ฑด์์ผ๋ก ํด๊ฒฐ)
๐ ๋ค์ ๊ธ ์๊ณ
๋ค์ ํธ์์๋
“ํํธ ์ ๋ต์ ์ค์ ํฌ์๊ณ์ข(๋ฏธ๋์์ , ํค์, IBKR)์ ์ฐ๊ฒฐํ๋ ๋ฐฉ๋ฒ – API ํธ๋ ์ด๋ฉ ์์ ์ ๋ฆฌ”
๋ฅผ ๋ค๋ฃน๋๋ค.
์ฆ,
AI ์ ๋ต → ์ฃผ๋ฌธ ์์ฑ → ์๋ ๋งค์/๋งค๋
๊น์ง ์ด์ด์ง๋ ์ง์ง ํฌ์ ์๋ํ ์์คํ
์ ์์ฑํฉ๋๋ค.
ํํธ์ ๋ต,AIํํธ,RSI,MACD,๋ชจ๋ฉํ ์ ๋ต,๋ณ๋์ฑ์ ๋ต,๋ฐฑํ ์คํธ,ETF์ ๋ต,Optunaํ๋,๊ฐ์ธํํธ
'์ฃผ์' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ๐ฅ ์ค์ ํฌ์ ๊ท๋ชจ ํ์ฅ(Scaling Up) ์ ๋ต (0) | 2025.12.30 |
|---|---|
| โก ์ค์ ์๋๋งค๋งค ์์ ๊ตฌ์ถ ๊ฐ์ด๋ (2) | 2025.12.15 |
| ๐ค๐ธ AI ETF ์๋๋งค์ ์์คํ ๊ตฌ์ถํ๊ธฐ (0) | 2025.12.11 |
| ๐งฉ ๊ฐ์ธ ํฌ์์๋ฅผ ์ํ AI ํํธ ์ ๋ต ์ ์ฉ ๋งค๋ด์ผ (0) | 2025.12.01 |
| ๐ AI ํํธ ํธ๋ ์ด๋ฉ ์ค์ ์ด์ฉ ์๋๋ฆฌ์ค (0) | 2025.11.27 |
- Total
- Today
- Yesterday
- Docker
- Express
- rag
- ai์ฒ ํ
- ๋ฅ๋ฌ๋
- flax
- seo ์ต์ ํ 10๊ฐ
- SEO์ต์ ํ
- Prisma
- JWT
- fastapi
- ํ๋ก ํธ์๋๊ฐ๋ฐ
- Redis
- kotlin
- node.js
- PostgreSQL
- NestJS
- Python
- CI/CD
- DevOps
- Next.js
- llm
- ์๋ฐ๋ฉด์
- REACT
- nextJS
- ์น๊ฐ๋ฐ
- ๊ฐ๋ฐ๋ธ๋ก๊ทธ
- ์ฟ ๋ฒ๋คํฐ์ค
- ๋ฐฑ์๋๊ฐ๋ฐ
- JAX
| ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
