ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฐ˜์‘ํ˜•

๐Ÿ“ˆ AI ํ€€ํŠธ ํŠธ๋ ˆ์ด๋”ฉ ์‹ค์ „ ์šด์šฉ ์‹œ๋‚˜๋ฆฌ์˜ค

— ๋ฐฑํ…Œ์ŠคํŠธ → ๋ชจ๋ธ ๊ฒฐ์ • → ๋ฆฌ์Šคํฌ ์ฒดํฌ → ์ฃผ๋ฌธ ์‹คํ–‰ → ๋ชจ๋‹ˆํ„ฐ๋ง๊นŒ์ง€, ์‹ค์ œ ์šด์šฉ์‚ฌ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ทธ๋Œ€๋กœ ๋”ฐ๋ผ๊ฐ„๋‹ค

์ง€๋‚œ ๊ธ€์—์„œ๋Š” ๊ฐ•ํ™”ํ•™์Šต ๊ธฐ๋ฐ˜์˜ ์ž๊ธฐ์ง„ํ™”ํ˜• ํŠธ๋ ˆ์ด๋”ฉ AI๊นŒ์ง€ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.
์ด์ œ๋Š” ์ด ๋ชจ๋ธ์ด ์‹ค์ œ ์‹œ์žฅ์—์„œ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€,
๊ทธ๋ฆฌ๊ณ  ์šด์šฉ์‚ฌ๊ฐ€ ์‹ค์ œ๋กœ ์–ด๋–ป๊ฒŒ ์ด ์‹œ์Šคํ…œ์„ ๊ตด๋ฆฌ๋Š”์ง€๋ฅผ ์™„์ „ํžˆ ์ •๋ฆฌํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋งํ•˜์ž๋ฉด ์ด๋ฒˆ ๊ธ€์€,

“์‹ค์ œ ํ€€ํŠธ ํ—ค์ง€ํŽ€๋“œ์—์„œ ์ผํ•˜๋Š” ๋งค๋‹ˆ์ €์˜ ํ•˜๋ฃจ๋ฅผ AI๋กœ ๊ทธ๋Œ€๋กœ ์žฌํ˜„ํ•œ ๊ธ€”
์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.


๐ŸŒ… 1๏ธโƒฃ ํ•˜๋ฃจ ์‹œ์ž‘ – ์ „์ผ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘ & Pre-Market ์ฒดํฌ

์šด์šฉ์‚ฌ๋Š” ์‹œ์žฅ์ด ์—ด๊ธฐ ์ „์— ์ „์ผ ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
AI๋„ ๋˜‘๊ฐ™์Šต๋‹ˆ๋‹ค.

โœ” ์ „์ผ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘

prices = yf.download(tickers, period="60d")["Adj Close"]
returns = prices.pct_change().dropna()

โœ” ์ง€ํ‘œ ์—…๋ฐ์ดํŠธ

  • ๋ณ€๋™์„ฑ(VIX)
  • ๊ธˆ๋ฆฌ(๋ฏธ๊ตญ 10๋…„๋ฌผ)
  • ์‹œ์žฅ ์ง€์ˆ˜(S&P500, ๋‚˜์Šค๋‹ฅ, KOSPI)
  • ์›์ž์žฌ ๊ฐ€๊ฒฉ(WTI, ๊ธˆ)

โœ” ์ „์ผ ์ฃผ๋ฌธ ์‹คํ–‰ ๊ฒฐ๊ณผ ๋ฐ˜์˜

  • fill ์—ฌ๋ถ€
  • ์‹คํ˜„์†์ต
  • ์Šฌ๋ฆฌํ”ผ์ง€ ๊ณ„์‚ฐ
trade_log = pd.read_sql("trade_log", engine)
portfolio = pd.read_sql("portfolio", engine)

์‹ค๊ฑฐ๋ž˜ ๋ฐ์ดํ„ฐ๋Š” ๊ฐ•ํ™”ํ•™์Šต ๋ชจ๋ธ์˜ ๋‹ค์Œ ํ•™์Šต ์†Œ์žฌ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.


๐Ÿง  2๏ธโƒฃ ์ „๋žต ๊ฒฐ์ • ๋‹จ๊ณ„ – AI ๋ชจ๋ธ๋“ค์˜ "ํ•ฉ์˜"

ํ€€ํŠธ ํŽ€๋“œ์—์„œ๋Š” ํ•˜๋‚˜์˜ ๋ชจ๋ธ์ด ์•„๋‹ˆ๋ผ,
์—ฌ๋Ÿฌ ์ „๋žต ๋ชจ๋ธ๋“ค์ด ์„œ๋กœ ์˜๊ฒฌ์„ ๋‚ด๊ณ  → ํ•ฉ์˜์ ์„ ์ฐพ๋Š” ๋ฐฉ์‹์œผ๋กœ ์šด์šฉํ•ฉ๋‹ˆ๋‹ค.

AI ์‹œ์Šคํ…œ๋„ ์ด๋ ‡๊ฒŒ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

๋ชจ๋ธ ์—ญํ• 

๐Ÿ“Œ Transformer ์˜ˆ์ธก ๋ชจ๋ธ ๋‹จ๊ธฐ ๋ฐฉํ–ฅ์„ฑ ์˜ˆ์ธก
๐Ÿ“Œ AutoML ์ตœ์ ํ™” ๋ชจ๋ธ ์‹œ์žฅ ๊ตญ๋ฉด๋ณ„ ์ž์‚ฐ๋ฐฐ๋ถ„
๐Ÿ“Œ RL ํŠธ๋ ˆ์ด๋”ฉ ๋ชจ๋ธ ํ–‰๋™(๋งค์ˆ˜/๋งค๋„) ๊ฒฐ์ •
๐Ÿ“Œ ๋ฆฌ์Šคํฌ ๋งค๋‹ˆ์ € ๋น„์ค‘ ์กฐ์ ˆ

โœ” ์ „๋žต ์‹ ํ˜ธ ์ทจํ•ฉ

signal_ml = ml_predict(prices)
signal_rl = rl_agent.act(current_state)
signal_macro = macro_model.predict_cycle()

โœ” ์‹ ํ˜ธ ๊ฐ€์ค‘ ํ‰๊ท 

final_signal = (
    0.4 * signal_ml +
    0.4 * signal_rl +
    0.2 * signal_macro
)

“๋‹จ๊ธฐ → ์ค‘๊ธฐ → ๊ฑฐ์‹œ”๋ฅผ ๊ท ํ˜• ์žˆ๊ฒŒ ๋ฐ˜์˜ํ•œ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ์ „๋žต์ด ์™„์„ฑ๋ฉ๋‹ˆ๋‹ค.


๐Ÿ›ก 3๏ธโƒฃ ๋ฆฌ์Šคํฌ ๊ด€๋ฆฌ – VaR/CVaR ๊ธฐ๋ฐ˜ ์ž๋™ ๋น„์ค‘ ์กฐ์ ˆ

๋ฐ˜์‘ํ˜•

์ „๋žต์ด ์•„๋ฌด๋ฆฌ ์ข‹์•„๋„ ๋ฆฌ์Šคํฌ๋ฅผ ํ†ต์ œํ•˜์ง€ ๋ชปํ•˜๋ฉด ์šด์šฉ ์‹คํŒจ์ž…๋‹ˆ๋‹ค.
๋ฆฌ์Šคํฌ ๋งค๋‹ˆ์ €๋Š” ์ตœ์ข… ์‹ ํ˜ธ๋ฅผ ๋ฐ›์•„ ‘์ง€๊ธˆ ๊ณต๊ฒฉํ•ด์•ผ ํ• ์ง€, ๋ฐฉ์–ดํ•ด์•ผ ํ• ์ง€’๋ฅผ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

โœ” ์˜ˆ: CVaR ๊ธฐ์ค€ ๋น„์ค‘ ์ถ•์†Œ

var, cvar = calc_var(returns), calc_cvar(returns)
risk_score = var + 0.5 * cvar

if risk_score > 0.05:
    leverage = 0.5
elif risk_score > 0.03:
    leverage = 0.7
else:
    leverage = 1.0

position_size = final_signal * leverage

์ƒ์Šน์žฅ์—๋„ ๋ ˆ๋ฒ„๋ฆฌ์ง€ ๊ณผ๋‹ค ๋ฐฉ์ง€,
ํ•˜๋ฝ์žฅ์—๋Š” ๋น„์ค‘ ์ถ•์†Œ ํ›„ ํ˜„๊ธˆ ํ™•๋ณด.


๐Ÿ“ 4๏ธโƒฃ ์ฃผ๋ฌธ ์ƒ์„ฑ – ํฌํŠธํด๋ฆฌ์˜ค ๋ฆฌ๋ฐธ๋Ÿฐ์‹ฑ

์‹ ํ˜ธ์™€ ๋ฆฌ์Šคํฌ ์Šค์ฝ”์–ด๊ฐ€ ๊ฒฐ์ •๋˜๋ฉด AI๋Š” ์ฃผ๋ฌธ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

โœ” ํ˜„์žฌ vs ๋ชฉํ‘œ ๋น„์ค‘ ๋น„๊ต

current_alloc = portfolio_to_weights(portfolio)
target_alloc = position_size_to_weights(position_size)

diff = target_alloc - current_alloc

โœ” ์ฐจ์ด๊ฐ€ ์ผ์ • ๊ธฐ์ค€์„ ์ดˆ๊ณผํ•˜๋ฉด ์ฃผ๋ฌธ ์ƒ์„ฑ

(๋ถˆํ•„์š”ํ•œ ๊ณผ๋„ํ•œ ๋งค๋งค ๋ฐฉ์ง€)

orders = diff[abs(diff) > 0.02]

์˜ˆ:

AAPL  +4.2% → ๋งค์ˆ˜  
TSLA  -3.7% → ๋งค๋„  
GLD   +2.5% → ๋งค์ˆ˜  

๐Ÿ’ต 5๏ธโƒฃ ์ฃผ๋ฌธ ์‹คํ–‰ – Slippage + Market Impact ๋ฐ˜์˜

์‹ค์ „์—์„œ๋Š” ์ฒด๊ฒฐ๊ฐ€๋Š” ์˜ˆ์ธกํ•œ ๊ฐ€๊ฒฉ = ์‹ค์ œ ์ฒด๊ฒฐ ๊ฐ€๊ฒฉ์ด ์•„๋‹™๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ๋‹ค์Œ ์š”์†Œ๋ฅผ ์ž๋™ ๋ฐ˜์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โœ” ์Šฌ๋ฆฌํ”ผ์ง€(Slippage)
โœ” ์‹œ์žฅ ์ถฉ๊ฒฉ ๋น„์šฉ(Impact)
โœ” ์œ ๋™์„ฑ(Volume Constraint)

executed_price = round_price(
    midprice * (1 + slip_rate * side)
)

์ด๋ ‡๊ฒŒ ์ฒด๊ฒฐ๋œ ๊ฐ€๊ฒฉ์œผ๋กœ ์ตœ์ข… ํฌํŠธํด๋ฆฌ์˜ค๋ฅผ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.


๐Ÿ“Š 6๏ธโƒฃ ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง – Streamlit ๋Œ€์‹œ๋ณด๋“œ

์ด์ œ ์šฐ๋ฆฌ๊ฐ€ ๋งŒ๋“  ํ†ตํ•ฉ ๋Œ€์‹œ๋ณด๋“œ๊ฐ€ ์‚ด๋ฆฝ๋‹ˆ๋‹ค.

  • ์‹ค์‹œ๊ฐ„ PnL
  • ๋ฆฌ์Šคํฌ ์ง€ํ‘œ
  • ๋ชจ๋ธ ๋ฒ„์ „
  • ์ฃผ๋ฌธ ๋กœ๊ทธ
  • ์‹œ์žฅ ๋ณ€๋™์„ฑ ์ƒํƒœ
  • ์ž์‚ฐ๋ฐฐ๋ถ„ ์ฐจํŠธ

ํฌํŠธํด๋ฆฌ์˜ค ์ „์ฒด๊ฐ€ “ํ•˜๋‚˜์˜ ์‚ด์•„์žˆ๋Š” AI”์ฒ˜๋Ÿผ ์›€์ง์ž…๋‹ˆ๋‹ค.


๐ŸŒ™ 7๏ธโƒฃ ์žฅ ๋งˆ๊ฐ ํ›„ – ๋ฐฑํ…Œ์ŠคํŠธ & ํ•™์Šต ๋ฃจํ”„

์‹œ์žฅ์ด ๋‹ซํžŒ ํ›„ AI๋Š” ๋‹ค์Œ ์ž‘์—…์„ ํ•ฉ๋‹ˆ๋‹ค.

โœ” 1) ์ผ์ผ ๋ฐฑํ…Œ์ŠคํŠธ

์ƒˆ๋กœ์šด ์ „๋žต ์„ฑ๋Šฅ ํ‰๊ฐ€

โœ” 2) ๊ฐ•ํ™”ํ•™์Šต ์—…๋ฐ์ดํŠธ

์‹ค๊ฑฐ๋ž˜ ๋กœ๊ทธ๋ฅผ ๊ฒฝํ—˜์œผ๋กœ ์žฌํ•™์Šต

agent.remember(state, action, reward, next_state, done)
agent.train()

โœ” 3) ์ƒˆ ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ AutoML ์žฌํŠœ๋‹

์ตœ์ ์˜ ์ „๋žต ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐฑ์‹ 

โœ” 4) MLflow๋กœ ์„ฑ๋Šฅ ํ‰๊ฐ€ ํ›„

๐Ÿ”„ ์ž๋™ “์Šน๊ฒฉ or ํ๊ธฐ”


๐Ÿงฌ 8๏ธโƒฃ ์ „์ฒด ๋ฃจํ”„ ๊ตฌ์กฐ – ์™„์ „ ์ž์œจ ์šด์šฉ

[ Pre-market ]
   ↓
[ AI ์ „๋žต๊ฒฐ์ • ]
   ↓
[ ๋ฆฌ์Šคํฌ ๋งค๋‹ˆ์ € ]
   ↓
[ ์ฃผ๋ฌธ ์ƒ์„ฑ ]
   ↓
[ ์ฃผ๋ฌธ ์‹คํ–‰ ]
   ↓
[ ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง ]
   ↓
[ ์žฅ ๋งˆ๊ฐ ]
   ↓
[ ๊ฐ•ํ™”ํ•™์Šต → AutoML → ๋ชจ๋ธ ์Šน๊ฒฉ ]
   ↓
[ ๋‹ค์Œ๋‚  ๋‹ค์‹œ ์‹œ์ž‘ ]

์ธ๊ฐ„์ด ํ•˜๋Š” ๊ฑด ๋‹จ ํ•˜๋‚˜.
๋Œ€์‹œ๋ณด๋“œ ํ™•์ธ๋ฟ์ด๋‹ค.
AI๊ฐ€ ์ „์ฒด ๊ฑฐ๋ž˜ ์ƒํƒœ๊ณ„๋ฅผ ์ž๋™์œผ๋กœ ๊ตด๋ฆฐ๋‹ค.


๐Ÿง  ๋‹ค์Œ ๊ธ€ ์˜ˆ๊ณ 

๋‹ค์Œ ํŽธ์—์„œ๋Š” **“๊ฐœ์ธ ํˆฌ์ž์ž๋ฅผ ์œ„ํ•œ AI ํ€€ํŠธ ์ „๋žต ์ ์šฉ๋ฒ• – ์†Œ์•ก, ETF, ์ ๋ฆฝ์‹๊นŒ์ง€”**๋ฅผ ๋‹ค๋ฃน๋‹ˆ๋‹ค.
์—ฌ๊ธฐ๊นŒ์ง€๋Š” ๊ธฐ๊ด€๊ธ‰ ์‹œ์Šคํ…œ์ด์—ˆ์ง€๋งŒ,
๋‹ค์Œ ๊ธ€์€ ์ผ๋ฐ˜ ํˆฌ์ž์ž๋„ ๋ฐ”๋กœ ์ ์šฉ ๊ฐ€๋Šฅํ•œ ํ˜„์‹ค์ ์ธ AI ํ™œ์šฉ๋ฒ•์„ ์ „๋ถ€ ๊ณต๊ฐœํ•ฉ๋‹ˆ๋‹ค.


 

AIํŠธ๋ ˆ์ด๋”ฉ,๊ฐ•ํ™”ํ•™์Šต,ํ€€ํŠธ์šด์šฉ,๋ฐฑํ…Œ์ŠคํŠธ,๋ฆฌ์Šคํฌ๊ด€๋ฆฌ,Streamlit,MLflow,์ž๋™๋งค๋งค,ํฌํŠธํด๋ฆฌ์˜ค๊ด€๋ฆฌ,ํŠธ๋ ˆ์ด๋”ฉ์ „๋žต


 

โ€ป ์ด ํฌ์ŠคํŒ…์€ ์ฟ ํŒก ํŒŒํŠธ๋„ˆ์Šค ํ™œ๋™์˜ ์ผํ™˜์œผ๋กœ, ์ด์— ๋”ฐ๋ฅธ ์ผ์ •์•ก์˜ ์ˆ˜์ˆ˜๋ฃŒ๋ฅผ ์ œ๊ณต๋ฐ›์Šต๋‹ˆ๋‹ค.
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
ยซ   2026/02   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
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
๊ธ€ ๋ณด๊ด€ํ•จ
๋ฐ˜์‘ํ˜•