7κ° AI μμ΄μ νΈκ° νλ ₯ν΄ μμ₯μ λΆμνκ³ μμ¨μ μΌλ‘ λ§€λ§€ν©λλ€. νκ΅ μ£Όμ(KIS API) + λ―Έκ΅ μ£Όμ(KIS ν΄μΈ) λμ μ΄μ. Anthropic / OpenAI / Gemini μ§μ.
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β kitty-trader (νκ΅μ£Όμ 09:00~15:30 KST) β
β kitty-night-trader (λ―Έκ΅μ£Όμ 21:00~06:00 KST) β
β β
β β ν¬μμ±ν₯κ΄λ¦¬μ β 5μ°¨μΓ6λ¨κ³ μ±ν₯ μ§μΉ¨ μμ± β
β β‘ μΉν°λΆμκ° β κ±°μ μμ₯Β·μΉν° λΆμ β
β β’ μ’
λͺ©νκ°κ° β 보μ μ’
λͺ© HOLD/SELL νλ¨ β
β β£ μ’
λͺ©λ°κ΅΄κ° β μ κ· λ§€μ ν보 μ μ β
β β€ μμ°μ΄μ©κ° β μ΅μ’
μ£Όλ¬Έ 리μ€νΈ κ²°μ β
β β₯ λ§€μμ€νκ° β μ€λ§νΈ λΆν λ§€μ β
β β¦ λ§€λμ€νκ° β μ€λ§νΈ λΆν λ§€λ β
ββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββββ
β commands/ (IPC) logs/ (read-only)
ββββββββββββββββΌβββββββββββββββββββββββββββββββββββββββ
β kitty-monitor :8080 β
β π± Kitty β π Night λ·° μ ν | μ±μ νΒ·κ΄λ¦¬Β·μ±ν
β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
Telegram Bot ββ μ¬μ©μ
| μλΉμ€ | μκ° (KST) | μ¬μ΄ν΄ | λΉκ³ |
|---|---|---|---|
| kitty-trader | 08:50~15:30 | 5λΆ | νκ΅ μ κ·μ₯ |
| kitty-night-trader | 21:00~06:00 | 15λΆ | λ―Έκ΅ NYSE/NASDAQ, DST μλ λμ |
| kitty-monitor | 24/7 | β | λμ보λ νμ μ κ·Ό |
EC2λ 24/7 μμ κ°λ. 3κ° μ»¨ν
μ΄λ λͺ¨λ restart: unless-stopped.
| κΈ°λ₯ | μ€λͺ |
|---|---|
| π€ λ©ν° μμ΄μ νΈ | 7κ° μ λ¬Έ μμ΄μ νΈ λΆμ Β·νλ ₯ (νκ΅/λ―Έκ΅ κ°κ° λ 립 μμ΄μ νΈ μΈνΈ) |
| π― ν¬μ μ±ν₯ | 5μ°¨μΓ6λ¨κ³ λ 벨 μλ μ‘°μ (μ₯ λ§κ° ν AI κ°±μ ) |
| π λ§€λ§€μΌμ§ | νμ¬ λ·°Β·λͺ¨λ κΈ°μ€ μλ νν° β Live/Paper κ±°λ λΆλ¦¬ νμ |
| π‘οΈ μμ€ μ΅μν | μννΈ μ€ν(νλ μμ 50%) + νΈλ μΌλ§ μ€ν + μμ΅λΉ(R:R) 2.5:1 νν° |
| π‘ μμ¨ μ’ λͺ© μ μ | κ³ μ watchlist μμ. μ€μκ° μμ₯ λ°μ΄ν° κΈ°λ° |
| β‘ μ€λ§νΈ μ£Όλ¬Έ | λΆν μ£Όλ¬Έ + μ§μ κ°βμμ₯κ° μ ν (νκ΅ 5μ£Ό/λ―Έκ΅ 10μ£Ό κΈ°μ€) |
| π μκΈ°κ°μ | λμ νΌλλ°± μμ€ν β λ°λ³΅ μ΄μ μλ νμ§ + κ²μ¦λ ν¨ν΄ κ°ν β λ§€ μ¬μ΄ν΄ λ°μ |
| π AI λ°±μλ | Anthropic Claude / OpenAI GPT / Google Gemini |
| π¬ Telegram | 21κ° λͺ λ Ήμ΄ μ격 μ μ΄ + λͺ¨λν°λ§ |
| π λμ보λ | kitty-monitor β π±/π λ·° μ ν, μ±μ νΒ·λ§€λ§€μΌμ§, Agent κ΄λ¦¬, μμ€ν (ν¬μλͺ¨λΒ·LLM) |
| π ν¬μ λͺ¨λ | Paper β Live λ°νμ μ ν, 컨ν μ΄λ μ¬μμ ν λͺ¨λ μλ 볡μ |
kitty/ # νκ΅μ£Όμ νΈλ μ΄λ
βββ agents/ # 7κ° μμ΄μ νΈ (tendency~sell_executor)
βββ broker/kis.py # KIS κ΅λ΄ API
βββ evaluator/ # μ±κ³Ό νκ° μμ§
βββ feedback/ # νΌλλ°± μ μ₯μ
βββ telegram/bot.py # Telegram λ΄ (21κ° λͺ
λ Ήμ΄)
βββ config.py # Pydantic μ€μ
βββ main.py # λ©μΈ 루ν (5λΆ μ¬μ΄ν΄)
βββ report.py # μΌλ³ 리ν¬νΈ
kitty_night/ # λ―Έκ΅μ£Όμ νΈλ μ΄λ (μμ λ
립)
βββ agents/ # 7κ° Night μμ΄μ νΈ
βββ broker/kis_overseas.py # KIS ν΄μΈ API
βββ evaluator/ # Night μ±κ³Ό νκ°
βββ telegram/bot.py # Night Telegram (λ©μμ§ μ μ©)
βββ config.py # NIGHT_ prefix νκ²½λ³μ
βββ main.py # MarketPhase κΈ°λ° λ£¨ν (15λΆ μ¬μ΄ν΄)
βββ report.py # Night μΌλ³ 리ν¬νΈ
βββ market_calendar.py # NYSE μΊλ¦°λ + DST μ²λ¦¬
monitor/
βββ app.py # FastAPI λμ보λ (π±/π λ·° μ ν)
βββ Dockerfile
start.sh # EC2 λΆν
μ€ν¬λ¦½νΈ
docker-compose.yml # 3κ° μλΉμ€ (kitty + night + monitor)
Dockerfile # kitty-trader
Dockerfile.night # kitty-night-trader
- Python 3.11+
- νκ΅ν¬μμ¦κΆ Open API κ³μ (κ΅λ΄ + ν΄μΈ)
- Telegram Bot Token
- AI API ν€ (Anthropic / OpenAI / Google μ€ 1κ°)
# νκ²½λ³μ μ€μ
cp .env.example .env # νκ΅μ£Όμ
cp .env.night.example .env.night # λ―Έκ΅μ£Όμ
# μ 체 μ€ν
docker compose up -d# λ‘컬μμ μν΄λ¦ λ°°ν¬
EC2_IP=$(aws ec2 describe-instances --filters "Name=tag:Name,Values=kitty-trader" \
--query 'Reservations[0].Instances[0].PublicIpAddress' --output text)
ssh -i ~/kitty-key.pem ec2-user@$EC2_IP \
"cd /home/ec2-user/kitty && git pull origin main && bash start.sh"μμΈ λ°°ν¬ μ μ°¨λ deployments.md μ°Έμ‘°.
AI_PROVIDER=openai
AI_MODEL=gpt-4o
TRADING_MODE=paper
KIS_APP_KEY= # μ€μ
KIS_PAPER_APP_KEY= # λͺ¨μ
TELEGRAM_BOT_TOKEN=
TELEGRAM_CHAT_ID=
MAX_BUY_AMOUNT=1000000 # μ
MAX_POSITION_SIZE=5000000 # μNIGHT_AI_PROVIDER=openai
NIGHT_AI_MODEL=gpt-4o
NIGHT_TRADING_MODE=paper
NIGHT_KIS_APP_KEY= # ν΄μΈ μ€μ
NIGHT_KIS_PAPER_APP_KEY= # ν΄μΈ λͺ¨μ
OPENAI_API_KEY=
TELEGRAM_BOT_TOKEN=
TELEGRAM_CHAT_ID=μ 체 ν€ λͺ©λ‘μ
.env.example/.env.night.exampleμ°Έμ‘°.
| λΆλ₯ | λͺ λ Ήμ΄ | μ€λͺ |
|---|---|---|
| μ‘°ν | /status /portfolio /balance /analysis /report /dashboard |
μνΒ·μκ³ Β·λΆμ·리ν¬νΈ |
| μ μ΄ | /pause /resume /cycle /stop |
μΌμμ μ§Β·μ¬κ°Β·μ¦μμ€ν |
| μ€μ | /setmode <paper|live> /setbuy <κΈμ‘> |
λͺ¨λΒ·νλ μ ν |
| μλ | /buy <μ½λ> <μλ> /sell <μ½λ> <μλ> |
μλ λ§€λ§€ |
| AWS | /deploy /restart /shutdown /startall |
μ격 λ°°ν¬Β·μ μ΄ |
Kittyλ λ¨μ μμ κΈ°μ€ μΈμ λ€μΈ΅ λ°©μ΄ κ΅¬μ‘°λ‘ μμ€ νμ μ νν©λλ€.
| λ¨κ³ | νΈλ¦¬κ±° | λμ |
|---|---|---|
| β μννΈ μ€ν | νλ μμ κΈ°μ€μ 50% μμ€ | μΉν° μ½μΈμ΄λ©΄ PARTIAL_SELL μ¦μ μ€ν |
| β‘ νλ μ€ν | μμ μκ³μΉ μ΄κ³Ό | PARTIAL_SELL ~50% 무쑰건 μ€ν |
| β’ λΉμ μ€ν | μμ κΈ°μ€ 2λ°° μ΄κ³Ό | μ λ SELL |
| β£ νΈλ μΌλ§ μ€ν | TP 50% λ¬μ± ν λ°λ© μ | PARTIAL_SELLλ‘ μμ΅ λ³΄μ |
| β€ κ±°λλ μ΄ν | λΉμΌ -1.5%β + μΉν° μ½μΈ | μμ μ μ΄λΌλ PARTIAL_SELL κ³ λ € |
| β₯ μλ³Έλ³΄νΈ λͺ¨λ | ν¬νΈν΄λ¦¬μ€ ν©μ° -3% μ΄μ | μ κ· λ§€μ μ λ©΄ μ€λ¨, μμ μ°μ |
| β¦ λ§€μ μ μκ³ κ²μ¦ | μ£Όλ¬Έ κ°λ₯ κΈμ‘ μ€μκ° νμΈ | μκ³ λΆμ‘± μ μλ μλ μ‘°μ λλ μ€ν΅ |
| β§ λ§€λ μ 보μ κ²μ¦ | 보μ μλ μ€μκ° νμΈ | μ΄κ³Ό λ§€λ λ°©μ§ + μ€λ³΅ λ§€λ μ°¨λ¨ |
R:R νν°: μ κ· λ§€μ μ’ λͺ©μ μμ μμ΅λΉ(TPΓ·SL) 2.5:1 μ΄μμΈ κ²½μ°μλ§ μΉμΈν©λλ€.
| μ°¨μ | L1 (곡격) | L2 | L3 | L4 | L5 | L6 (보μ) |
|---|---|---|---|---|---|---|
| μ΅μ | +5% | +8% | +12% | +18% | +25% | +35% |
| μμ | -1.5% | -2.5% | -3.5% | -5% | -7.5% | -10% |
| R:R (L2) | 3.2:1 |
κΈ°λ³Έ ν리μ
aggressive = L2 κΈ°μ€: μ΅μ +8%, μμ -2.5%, R:R 3.2:1
- λͺ¨μν¬μ(
paper)λ‘ λ¨Όμ κ²μ¦νμΈμ. κΈ°λ³Έκ°μpaperμ λλ€. .env/.env.nightνμΌμ μ λ Gitμ 컀λ°νμ§ λ§μΈμ.- AI μμ΄μ νΈμ νλ¨μ μ°Έκ³ μ©μ΄λ©°, ν¬μ μμ΅μ μ± μμ μ¬μ©μμκ² μμ΅λλ€.