๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

์ˆ˜์ต ์ฐฝ์ถœ์„ ์œ„ํ•œ ํŒŒ์ด์ฌ ๊ธฐ๋ฐ˜ ํ€€ํŠธ ํˆฌ์ž ์ „๋žต ๊ฐœ๋ฐœํ•˜๊ธฐ

ํ€€ํŠธ ์ „๋žต์œผ๋กœ ํˆฌ์žํ•˜๊ธฐ: Python์„ ํ™œ์šฉํ•œ ๋ฐฉ๋ฒ•

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

1. ํ•„์š”ํ•œ ํŒจํ‚ค์ง€ ์„ค์น˜ํ•˜๊ธฐ

Python์œผ๋กœ ํ€€ํŠธ ์ „๋žต์„ ์ˆ˜๋ฆฝํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ช‡ ๊ฐ€์ง€ ํ•„์ˆ˜ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ํŒจํ‚ค์ง€๋กœ๋Š” pandas, numpy, matplotlib, scikit-learn, yfinance ๋“ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•˜์„ธ์š”.

pip install pandas numpy matplotlib scikit-learn yfinance

2. ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘

ํ€€ํŠธ ์ „๋žต์˜ ์‹œ์ž‘์€ ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ์ž…๋‹ˆ๋‹ค. Yahoo Finance์™€ ๊ฐ™์€ API๋ฅผ ํ†ตํ•ด ์ฃผ์‹ ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ์ˆ˜์ง‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. yfinance ํŒจํ‚ค์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ์ฃผ์‹์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

import yfinance as yf

# ์• ํ”Œ ์ฃผ์‹ ๋ฐ์ดํ„ฐ ์ˆ˜์ง‘
data = yf.download('AAPL', start='2020-01-01', end='2023-10-01')
print(data.head())

3. ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ

์ˆ˜์ง‘ํ•œ ๋ฐ์ดํ„ฐ๋Š” ์˜ˆ์ธก ๋ชจ๋ธ์— ์ ํ•ฉํ•˜๋„๋ก ์ „์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ์ธก๊ฐ’์„ ์ฒ˜๋ฆฌํ•˜๊ณ , ํ•„์š”ํ•œ ์—ด๋งŒ ์„ ํƒํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ์ฝ”๋“œ๋Š” ๊ฒฐ์ธก๊ฐ’์„ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

# ๊ฒฐ์ธก๊ฐ’ ์ œ๊ฑฐ
data.dropna(inplace=True)

4. ํŠน์„ฑ ์ƒ์„ฑ

ํ€€ํŠธ ์ „๋žต์—์„œ๋Š” ๋‹ค์–‘ํ•œ ํŠน์„ฑ์„ ์ƒ์„ฑํ•˜์—ฌ ๋ชจ๋ธ์˜ ์˜ˆ์ธก๋ ฅ์„ ๋†’์ด๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์ด๋™ ํ‰๊ท , ์ƒ๋Œ€ ๊ฐ•๋„ ์ง€์ˆ˜(RSI) ๋“ฑ์„ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

# ์ด๋™ ํ‰๊ท  ๊ณ„์‚ฐ
data['SMA_20'] = data['Close'].rolling(window=20).mean()

5. ๋ชจ๋ธ ์„ ํƒ ๋ฐ ํ›ˆ๋ จ

ํŠน์„ฑ์„ ์ƒ์„ฑํ•œ ํ›„์—๋Š” ๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ์„ ํƒํ•˜๊ณ  ํ›ˆ๋ จ์‹œ์ผœ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ๊ฐ„๋‹จํ•œ ๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€ ๋ชจ๋ธ์„ ํ™œ์šฉํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression

# ํŠน์„ฑ๊ณผ ํƒ€๊ฒŸ ์ƒ์„ฑ
X = data[['SMA_20']]
y = (data['Close'].shift(-1) > data['Close']).astype(int)

# ๋ฐ์ดํ„ฐ ๋ถ„ํ• 
X_train, X_test, y_train, y_test = train_test_split(X, y[:-1], test_size=0.2, random_state=42)

# ๋ชจ๋ธ ํ›ˆ๋ จ
model = LogisticRegression()
model.fit(X_train, y_train)

6. ์„ฑ๋Šฅ ํ‰๊ฐ€

๋ชจ๋ธ์„ ํ›ˆ๋ จํ•œ ํ›„์—๋Š” ์„ฑ๋Šฅ์„ ํ‰๊ฐ€ํ•˜์—ฌ ์‹ค์ œ ํˆฌ์ž์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์ •ํ™•๋„์™€ ํ˜ผ๋™ ํ–‰๋ ฌ์„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

from sklearn.metrics import accuracy_score, confusion_matrix

# ์˜ˆ์ธก
y_pred = model.predict(X_test)
print('Accuracy:', accuracy_score(y_test, y_pred))
print('Confusion Matrix:\n', confusion_matrix(y_test, y_pred))

7. ์ „๋žต ์ ์šฉ ๋ฐ ๋ฐฑํ…Œ์ŠคํŠธ

๋งˆ์ง€๋ง‰์œผ๋กœ ํ€€ํŠธ ์ „๋žต์„ ์‹ค์ œ ํˆฌ์ž์— ์ ์šฉํ•˜๊ณ  ๋ฐฑํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ์„ฑ๊ณผ๋ฅผ ํ‰๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฑํ…Œ์ŠคํŠธ๋Š” ๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ „๋žต์˜ ์„ฑ๊ณผ๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.

# ์ „๋žต ์‹œ๋ฎฌ๋ ˆ์ด์…˜
data['Signal'] = model.predict(data[['SMA_20']])
data['Strategy_Return'] = data['Close'].pct_change() * data['Signal'].shift(1)
cumulative_return = (1 + data['Strategy_Return']).cumprod() - 1
print('Cumulative Return:', cumulative_return[-1])

๊ฒฐ๋ก 

Python์„ ํ™œ์šฉํ•˜์—ฌ ํ€€ํŠธ ์ „๋žต์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์œ„์˜ ๊ณผ์ •์€ ๋งค์šฐ ๊ธฐ๋ณธ์ ์ธ ์˜ˆ์‹œ์ด๋ฏ€๋กœ, ์‹ค์ œ ํˆฌ์ž์— ์ ์šฉํ•  ๊ฒฝ์šฐ ๋” ๋งŽ์€ ๋ฐ์ดํ„ฐ์™€ ๋ณต์žกํ•œ ๋ชจ๋ธ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ํ€€ํŠธ ํˆฌ์ž๋Š” ํ•ญ์ƒ ๋ฆฌ์Šคํฌ๋ฅผ ๋™๋ฐ˜ํ•˜๋ฏ€๋กœ ์‹ ์ค‘ํ•œ ์ ‘๊ทผ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„์„ํ•˜๊ณ  ์ „๋žต์„ ์„ธ์šฐ๋Š” ๊ณผ์ •์—์„œ Python์„ ํ™œ์šฉํ•ด ๋ณด์„ธ์š”. ๋‹ค์–‘ํ•œ ๊ฐ€๋Šฅ์„ฑ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.