| ๐ฅ YouTube ์ฑ๋ | https://youtube.com/@programgarden |
| ๐ฌ ์นด์นด์คํก ๋จํก๋ฐฉ | https://open.kakao.com/o/gKVObqUh |
| ๐ ํ๋ก๊ทธ๋จ๋์ฐ ์๋ํ๋งค๋งค ํ๋ซํผ | https://programgarden.com |
๋ผ์ด๋ธ ๊ฐ์ ยท ์๋ฃ ยท ์๋ํ๋งค๋งค ํ ๋ก ์ ์ ์ฑ๋์์ ๋ง๋์.
LS์ฆ๊ถ API๋ฅผ ์ด์ฉํ ํฐํ ํธ๋ ์ด๋ฉ ์๋๋งค๋งค ๋ด์ ๋๋ค.
ํด์ธ์ฃผ์(๋ฏธ๊ตญ NYSE/NASDAQ), ๊ตญ๋ด์ฃผ์(KRX), ํด์ธ์ ๋ฌผ(ํ์ฝฉ HKEX) 3๊ฐ ์์ฅ์ ๋์์ ์๋ ๋งค๋งคํ๋ฉฐ, ๋์น์ ์ฑ๋ ๋ํ ๋งค์ + ATR ๊ธฐ๋ฐ ํธ๋ ์ผ๋ง ์คํ ๋งค๋ ์ ๋ต์ผ๋ก 24์๊ฐ ์๋ ์ด์๋ฉ๋๋ค. ๋ผ์ดํธ ํ ๋ง ์น ๋์๋ณด๋์ ํ ๋ ๊ทธ๋จ์ผ๋ก ์๊ฒฉ ์ ์ดํ๊ณ , 4๊ฐ ์๋ฆฌ์ฆ(ํด์ธ์ฃผ์ยท๊ตญ๋ด์ฃผ์ยทํด์ธ์ ๋ฌผยท์ฝ์คํผ์ง์) ๋์ ์์ต๋ฅ ํตํฉ ๋น๊ต ์ฐจํธ๋ฅผ ํ ํ๋ฉด์์ ๋ณผ ์ ์์ต๋๋ค.
graph TB
subgraph ๋ด["3-์์ฅ ๋ด (24์๊ฐ)"]
SS[ํด์ธ์ฃผ์ ์ค์ผ์ค๋ฌ]
KS[๊ตญ๋ด์ฃผ์ ์ค์ผ์ค๋ฌ]
FS[ํด์ธ์ ๋ฌผ ์ค์ผ์ค๋ฌ]
end
WEB[์น ๋์๋ณด๋<br/>FastAPI :8000]
TG[ํ
๋ ๊ทธ๋จ ๋ด]
DB[(SQLite<br/>trading.db)]
LS[LS์ฆ๊ถ API]
YF[yfinance<br/>^KS11]
SS -->|๋งค๋งค/์ค๋
์ท| LS
KS -->|๋งค๋งค/FOCCQ33600 ์๊ณ์ด| LS
FS -->|๋งค๋งค/์ค๋
์ท| LS
SS -->|daily_reports| DB
KS -->|krx_daily_reports| DB
FS -->|futures_daily_reports| DB
TG -->|์๋ฆผ + ๋ช
๋ น์ด| ์ฌ์ฉ์
WEB -->|ํตํฉ๋น๊ต ์ฐจํธ| YF
WEB -->|์ํ/์ค์ /๋งค๋งค๋ด์ญ| DB
WEB -->|์ค์๊ฐ ํ๊ฐ๊ธ| LS
์ฌ์ฉ์ -->|๋ธ๋ผ์ฐ์ | WEB
flowchart LR
A[์ผ๋ณ ์ ํธ ์ฒดํฌ] --> B{๋งค์ ์ ํธ ๊ธฐ๊ฐ<br/>N์ผ ์ต๊ณ ๊ฐ ๋ํ?}
B -->|๋ํ| C[๋งค์/์ง์
์ฃผ๋ฌธ]
B -->|๋ฏธ๋ํ| A
C --> D[์์ ๊ฐ = ํ์ฌ๊ฐ โ ATR ร ๋ฐฐ์]
D --> E[๋ณด์ ์ค ๊ฐ์]
E --> F{๊ฐ๊ฒฉ ๋ณ๋}
F -->|์ ๊ณ ๊ฐ ๊ฐฑ์ | G[์์ ๊ฐ ์ํฅ ์กฐ์ ] --> E
F -->|์์ ๊ฐ ์ดํ| H[๋งค๋/์ฒญ์ฐ]
E --> I{์ผ์ผ ์์ค๋ฅ }
I -->|๊ฒฝ๊ณ ํ๋ ์ด๊ณผ| J[๋ง์ด๋์ค ์ข
๋ชฉ ์ฒญ์ฐ]
I -->|๋น์ ํ๋ ์ด๊ณผ| K[์ ์ข
๋ชฉ ์ฒญ์ฐ + ๋น์ผ ๋งค๋งค ์ค๋จ]
๊ฐ ์์ฅ๋ณ ๊ฑฐ๋ ์๊ฐ (ํ๊ตญ์๊ฐ KST):
- ํด์ธ์ฃผ์ NYSE/NASDAQ: ์ ๊ท์ฅ 22:30~05:00 (์๋จธํ์ ๊ธฐ์ค)
- ๊ตญ๋ด์ฃผ์ KRX: 09:00~15:30
- ํด์ธ์ ๋ฌผ HKEX: T์ธ์
10:15
13:00 + 14:0017:30 / T+1์ธ์ (์ผ๊ฐ) 18:15~04:00
๋ผ์ดํธ ํ ๋ง ๋จ์ผ ํ์ด์ง 5๊ฐ ํญ:
| ํญ | ์ค๋ช |
|---|---|
| ๐ ํด์ธ์ฃผ์ | LS ์ค๊ณ์ข. ๋ชจ๋(DRY/LIVE) ยท ๊ณ์ข ยท ๋ณด์ ์ข ๋ชฉ ยท ์ผ๋ด์ฐจํธ ยท ์ ๋ต ยท APIํค ยท ์ค๋ ๋งค๋งค |
| ๐ฐ๐ท ๊ตญ๋ด์ฃผ์ | LS ์ค๊ณ์ข. ๋์ผ ๊ตฌ์ฑ (KRX ์ข ๋ชฉ ์ฝ๋ ๊ธฐ์ค) |
| ๐ ํด์ธ์ ๋ฌผ | LS ๋ชจ์ํฌ์. ๋์ผ ๊ตฌ์ฑ (ํ์ฝฉ HKEX 6๊ฐ ์ํ) |
| ๐ ํตํฉ๋น๊ต | 4์๋ฆฌ์ฆ ๋์ ์์ต๋ฅ ์ฐจํธ โ ํด์ธ์ฃผ์ยท๊ตญ๋ด์ฃผ์ยทํด์ธ์ ๋ฌผยท์ฝ์คํผ์ง์(^KS11) |
| ๐ ๋ก๊ทธ | ์์คํ ๋ก๊ทธ ์ค์๊ฐ ๋ณด๊ธฐ |
ํตํฉ๋น๊ต ์ฐจํธ
- ๊ธฐ๊ฐ ์ ํ: 7 / 14 / 30(๊ธฐ๋ณธ) / 60 / 90์ผ
- ์ผ๋ณ ์์ต๋ฅ ๋์ ๊ณฑ์
ฮ (1 + rแตข) โ 1โ ์ ์ถ๊ธ ์ํฅ ์ ์ธ๋ ์ ํํ ๋์ ์์ต๋ฅ - ๊ตญ๋ด์ฃผ์: LS
FOCCQ33600TR์TermErnrat์๊ณ์ด์ ๊ทธ๋๋ก ์ฌ์ฉ - ํด์ธ์ฃผ์/์ ๋ฌผ: LS API๊ฐ ์๊ณ์ด์ ์ ์ฃผ๋ฏ๋ก ๋ด์ด ๋งค์ผ ํ๊ฐ๊ธ ์ค๋ ์ท์ DB์ ๋์
- ์ฝ์คํผ์ง์: yfinance
^KS11์ข ๊ฐ, ์บ์ ์์ด ๋งค ์๋ก๊ณ ์นจ๋ง๋ค ์๋ก ์กฐํ
LS API๋ ๊ตญ๋ด์ฃผ์๋ง ์ผ๋ณ ์๊ณ์ด(FOCCQ33600)์ ์ ๊ณตํ๋ฏ๋ก, ํด์ธ์ฃผ์ยทํด์ธ์ ๋ฌผ์
๋ด์ด ์ง์ ๋งค์ผ ํ๊ฐ๊ธ์ DB์ ๋์ ์ ์ฅํฉ๋๋ค.
| ์์ฅ | ์ ์ฅ ์๊ฐ (KST) | TR |
|---|---|---|
| ํด์ธ์ฃผ์ | ๋ด ์์ ์ + ๋งค์ผ 16:10 | COSOQ00201 ์ค๋ ์ค๋
์ท |
| ํด์ธ์ ๋ฌผ | ๋ด ์์ ์ + ๋งค์ผ 18:10 | CIDBQ03000 ์ค๋ ์ค๋
์ท |
| ๊ตญ๋ด์ฃผ์ | ๋ด ์์ ์ + ๋งค์ผ 15:40 | FOCCQ33600 ์๊ณ์ด ๋ฐฑํ |
- Python 3.13+
- LS์ฆ๊ถ ๊ณ์ข + API ํค (LS์ฆ๊ถ Open API)
- ํ ๋ ๊ทธ๋จ ๋ด (์ ํ, BotFather)
git clone https://github.com/programgarden/programgarden-ls-edu.git
cd programgarden-ls-edu
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txtcp .env.example .env.env ํ์ผ์ LS์ฆ๊ถ API ํค๋ฅผ ์
๋ ฅ:
# LS์ฆ๊ถ - ํด์ธ์ฃผ์ ์ค์ ๊ณ์ข
LS_APPKEY=your_appkey_here
LS_APPSECRETKEY=your_appsecretkey_here
# LS์ฆ๊ถ - ๊ตญ๋ด์ฃผ์ ์ค์ ๊ณ์ข
APPKEY_KOREA=your_korea_appkey_here
APPSECRET_KOREA=your_korea_appsecretkey_here
# LS์ฆ๊ถ - ํด์ธ์ ๋ฌผ ๋ชจ์ํฌ์
APPKEY_FUTURE_FAKE=your_futures_paper_appkey_here
APPSECRET_FUTURE_FAKE=your_futures_paper_appsecretkey_here
# LS์ฆ๊ถ - ํด์ธ์ ๋ฌผ ์ค์ ํฌ์ (์ ํ)
FUTURES_LIVE_APPKEY=
FUTURES_LIVE_APPSECRETKEY=
# ํ
๋ ๊ทธ๋จ ๋ด (์ ํ)
TELEGRAM_BOT_TOKEN=your_bot_token_here
TELEGRAM_CHAT_ID=your_chat_id_hereAPI ํค๋ ์น ๋์๋ณด๋์์๋ ์ค์ ๊ฐ๋ฅํฉ๋๋ค (DB ์ ์ฅ). ์์ ์ DB โ config ์์๋ก ๋ก๋๋ฉ๋๋ค.
source venv/bin/activate
python3 main.py๊ธฐ๋ณธ ํฌํธ๊ฐ ์ฌ์ฉ ์ค์ด๋ฉด:
./venv/bin/python -m uvicorn main:app --host 0.0.0.0 --port 8001data/ ๋๋ ํฐ๋ฆฌ๋ ์ต์ด ์คํ ์ ์๋ ์์ฑ๋ฉ๋๋ค.
์คํํ๋ฉด ์น ๋์๋ณด๋(http://localhost:8000)์ 3๊ฐ ๋ด(ํด์ธ์ฃผ์ ยท ๊ตญ๋ด์ฃผ์ ยท ํด์ธ์ ๋ฌผ)์ด ํจ๊ป ์์๋ฉ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ ๋๋ผ์ด๋ฐ ๋ชจ๋(์ค์ ์ฃผ๋ฌธ ์์ด ์๋ฎฌ๋ ์ด์ )์ ๋๋ค.
๋ฐฑ๊ทธ๋ผ์ด๋ ์คํ:
nohup python3 main.py > data/bot.log 2>&1 &pytest| ํ๋ผ๋ฏธํฐ | ๊ธฐ๋ณธ๊ฐ | UI ํ์๋ช | ์๋ฏธ |
|---|---|---|---|
donchian_period |
20 | ๋งค์ ์ ํธ ๊ธฐ๊ฐ (์ผ) | ์ต๊ทผ N์ผ ์ค ์ต๊ณ ๊ฐ ๋ํ ์ ๋งค์/์ง์ |
atr_multiplier |
3.0 | ์์ ํญ ๋ฐฐ์ | ๊ฐ๊ฒฉ ๋ณ๋ํญ(ATR) ร ๋ฐฐ์ = ์์ ๊ฑฐ๋ฆฌ |
max_stocks |
5 | ์ต๋ ์ข ๋ชฉ/๊ณ์ฝ ์ | ๋์ ๋ณด์ ํ๋ |
capital_ratio |
50% | ์์๊ธ ๋น์จ | ๋งค๋งค์ ์ฌ์ฉํ ์์๊ธ ๋น์จ |
๋ชจ๋ 3๊ฐ ์์ฅ๋ณ๋ก ๋
๋ฆฝ ์ค์ ๊ฐ๋ฅ (donchian_period, krx_donchian_period, futures_donchian_period).
| ์์ฅ | ์ผ์ผ ์์ค ๊ฒฝ๊ณ | ์ผ์ผ ์์ค ๋น์ |
|---|---|---|
| ํด์ธ์ฃผ์ | 4% (๋ง์ด๋์ค ์ข ๋ชฉ ์ฒญ์ฐ) | 5% (์ ์ข ๋ชฉ ์ฒญ์ฐ + ๋งค๋งค ์ค๋จ) |
| ๊ตญ๋ด์ฃผ์ | 4% | 5% |
| ํด์ธ์ ๋ฌผ | 3% (์ฆ๊ฑฐ๊ธ ๋๋น) | 5% + ์ฆ๊ฑฐ๊ธ 80% ํ๋ ์ด๊ณผ ์ ์ง์ ์ฐจ๋จ |
| ๋ช ๋ น์ด | ์ค๋ช |
|---|---|
/help |
๋ช ๋ น์ด ๋ชฉ๋ก |
/status |
๋ณด์ ์ข ๋ชฉ, ๋ชจ๋, ์ํ |
/mode dry / /mode live |
๋ชจ๋ ์ ํ |
/set channel 20 |
๋งค์ ์ ํธ ๊ธฐ๊ฐ ๋ณ๊ฒฝ |
/set atr 3.0 |
์์ ํญ ๋ฐฐ์ ๋ณ๊ฒฝ |
/set stocks 5 |
์ต๋ ๋ณด์ ์ข ๋ชฉ ์ |
/set ratio 50 |
์์๊ธ ์ฌ์ฉ ๋น์จ(%) |
/settings |
์ ์ฒด ์ค์ ๊ฐ ๋ณด๊ธฐ |
/stop / /start |
๋งค๋งค ์ค๋จ / ์ฌ๊ฐ |
/report |
์ค๋ ๋งค๋งค ๋ฆฌํฌํธ |
programgarden-ls-edu/
โโโ main.py # ์์์ (FastAPI + 3๊ฐ ๋ด ํตํฉ)
โโโ config.py # ํ๊ฒฝ ์ค์ (.env + ๊ธฐ๋ณธ๊ฐ)
โโโ scheduler.py # ํด์ธ์ฃผ์ ์ค์ผ์ค๋ฌ
โโโ krx_scheduler.py # ๊ตญ๋ด์ฃผ์ ์ค์ผ์ค๋ฌ
โโโ futures_scheduler.py # ํด์ธ์ ๋ฌผ ์ค์ผ์ค๋ฌ
โโโ analyzer/
โ โโโ stock_screener.py # ํด์ธ์ฃผ์ ์ข
๋ชฉ ์คํฌ๋ฆฌ๋
โ โโโ trend_analyzer.py # ๊ธฐ์ ์ ๋ถ์
โโโ trader/
โ โโโ ls_client.py # ํด์ธ์ฃผ์ API ๋ํผ
โ โโโ engine.py / realtime.py # ํด์ธ์ฃผ์ ์์ง + ์ค์๊ฐ
โ โโโ krx_client.py # ๊ตญ๋ด์ฃผ์ API ๋ํผ (NEW)
โ โโโ krx_engine.py # ๊ตญ๋ด์ฃผ์ ๋งค๋งค ์์ง (NEW)
โ โโโ futures_client.py # ํด์ธ์ ๋ฌผ API ๋ํผ
โ โโโ futures_engine.py / futures_realtime.py
โโโ risk/
โ โโโ risk_manager.py # ํด์ธ์ฃผ์ ๋ฆฌ์คํฌ
โ โโโ futures_risk.py # ํด์ธ์ ๋ฌผ ๋ฆฌ์คํฌ
โโโ tgbot/bot.py # ํ
๋ ๊ทธ๋จ ๋ด
โโโ web/
โ โโโ api.py # REST API (KRX + ํตํฉ๋น๊ต + ์ฝ์คํผ ํฌํจ)
โ โโโ dashboard.html # ๋ผ์ดํธ ํ
๋ง ๋จ์ผ HTML (5๊ฐ ํญ)
โโโ database/
โ โโโ models.py # DB ์คํค๋ง (krx_* ํ
์ด๋ธ ์ถ๊ฐ)
โ โโโ repository.py
โโโ tests/ # ํ
์คํธ ์ฝ๋
โโโ data/ # ๋ฐํ์ (DB, ๋ก๊ทธ) โ ์๋ ์์ฑ
โโโ .env / .env.example # API ํค
โโโ requirements.txt
| ํญ๋ชฉ | ๊ธฐ์ |
|---|---|
| ์ฆ๊ถ API | programgarden-finance |
| ์น ๋์๋ณด๋ | FastAPI + uvicorn + lightweight-charts |
| ๋น๋๊ธฐ | asyncio + aiosqlite |
| ์ค์ผ์ค๋ฌ | APScheduler |
| ๋ฐ์ดํฐ๋ฒ ์ด์ค | SQLite |
| ๋ฒค์น๋งํฌ ๋ฐ์ดํฐ | yfinance (^KS11 ์ฝ์คํผ์ง์) |
| ์๋ฆผ/์ ์ด | python-telegram-bot |
- ๋๋ผ์ด๋ฐ ๋ชจ๋๋ก ๋จผ์ ์ถฉ๋ถํ ํ ์คํธ ํ ์ค์ ์ ํํ์ธ์.
- ์ค์ ๋ชจ๋์์๋ ์ค์ ์ฃผ๋ฌธ์ด ์ฒด๊ฒฐ๋ฉ๋๋ค. ์์ค ์ํ์ด ์์ต๋๋ค.
- ๋ฆฌ์คํฌ ๊ด๋ฆฌ ํ๋(์ฃผ์ 4%/5%, ์ ๋ฌผ 3%/5%)๊ฐ ์ ์ ๋์ํ๋์ง ๋ฐ๋์ ํ์ธํ์ธ์.
- API ํค๋
.envํ์ผ์๋ง ์ ์ฅํ๊ณ , ์ ๋ ์ปค๋ฐํ์ง ๋ง์ธ์. - ๋ณธ ํ๋ก์ ํธ๋ ๊ต์ก/์ฐ๊ตฌ ๋ชฉ์ ์ด๋ฉฐ, ์ด์ ์์ต์ ๋ํ ์ฑ ์์ ์ฌ์ฉ์ ๋ณธ์ธ์๊ฒ ์์ต๋๋ค.