KORStockScanμ ν€μμ¦κΆ REST APIμ λ¨Έμ λ¬λ(Stacking Ensemble), κ·Έλ¦¬κ³ **μμ±ν AI(Gemini 2.5 Flash)**λ₯Ό κ²°ν©νμ¬ μ£Όμ μμ₯μ μ€μΊλνκ³ , μ€μκ° μΉμμΌμ ν΅ν΄ μ΅μ μ νμ μ μ‘μλ΄μ΄ μμ μλλ§€λ§€λ₯Ό μννλ μ§λ₯ν ννΈ νΈλ μ΄λ© λ΄μ λλ€.
μ΅μ μ λ°μ΄νΈλ₯Ό ν΅ν΄ κΈ°μ‘΄ μ½μ€νΌ μ°λμ£Ό μ€μ λ§€λ§€λ₯Ό λμ΄, μ½μ€λ₯ μ£Όλμ£Ό(νμ΄λΈλ¦¬λ)μ μ΄λ¨ν μ€μΊνκΉμ§ λμμ κ°μνλ **'3-Way λ©ν° μ€λ λ μν€ν μ²'**λ‘ μ§ννμ΅λλ€.
νΉν, μμ€ν
μ μ λμ½ μν μ νλ **'Gemini-Brain(ai_engine.py)'**μ΄ λμ
λμ΄, λ¨μν 쑰건 κ²μμ λμ΄ νΈκ°μ°½μ λμ€(Depth)μ ν± μ²΄κ²° νλ¦μ AIκ° μ€μκ°μΌλ‘ νλ
ν©λλ€. μκΈκ°λ(VPW)λΌλ κΈ°κ³μ κΈ°μ€μ AIμ μ§κ΄(Score)μ λν λμ νμ μ μ΄(Dynamic Pullback Matrix) μμ€ν
μ ν΅ν΄, μμ₯ μν©μ λ§μΆ° λ§€μ κ·Έλ¬Όμ κΉμ΄λ₯Ό μ€μ€λ‘ μ‘°μ νλ μ§μ ν μλ―Έμ 무νΈν‘ λ¬΄μΈ λ§€λ§€λ₯Ό μ§νν©λλ€.
μμ€ν
μ SniperRadar λͺ¨λμ 곡μ νμ§λ§, μμ₯μ νΉμ±κ³Ό λ§€λ§€ νΈν‘μ λ°λΌ 3κ°μ§μ λ
립μ μΈ AI μ€μΊλ μμ§μ κ°λν©λλ€. λͺ¨λ μμ§μ **Gemini 2.5 Flash κΈ°λ°μ AI λλ(ai_engine.py)**μ κ²°ν©λμ΄ μμ΅λλ€.
| κ΅¬λΆ | β‘ μ΄λ¨ν μ€μΊν + AI (Scalping) | π’ μ½μ€νΌ AI μμλΈ (KOSPI) | π μ½μ€λ₯ AI νμ΄λΈλ¦¬λ (KOSDAQ) |
|---|---|---|---|
| κ°μ λμ | μμ₯ μ 체 (000: μ½μ€νΌ + μ½μ€λ₯) |
μ½μ€νΌ λν/μ°λμ£Ό μ€μ¬ (001) |
μ½μ€λ₯ μ€μν/ν
λ§μ£Ό μ€μ¬ (101) |
| μ€μΊ μ£ΌκΈ° | 1λΆ μ£ΌκΈ° (μ΄κ³ μ ν±/νΈκ° νμ) | 15λΆ μ£ΌκΈ° (μΆμΈ λ° ν¨ν΄ λΆμ) | 15λΆ μ£ΌκΈ° (μκΈ λ° ν λ§ λΆμ) |
| λΆμ κΉμ΄ | μ€μκ° μκΈ(VPW) + Gemini-Brain ν± νλ¦ λΆμ | κΈ°μ μ μ§ν(MACD/RSI) + AI νλλ©νΈ νλ | μΈκ΅μΈ/κΈ°κ΄ μκΈ λ° μ μ©μκ³ + AI ν λ§ νλ |
| λ§€μ νμ | [μ€λ§νΈ λλ¦Όλͺ©] AI μ μ + μ§μ μ°λ κ°λ³ νμ (-0.35% λ±) | [μ€μ νμ ] 1μ°¨ μ€μΊ ν΅κ³Ό + AI νμ λ 80μ μ΄μ | [μ€μ νμ ] 1μ°¨ μ€μΊ ν΅κ³Ό + AI νμ λ 80μ μ΄μ |
| μ λ΅ νκ·Έ | SCALPING_AI (μ§λ₯ν μ΄λ¨ν) |
KOSPI_ML (μμ ν μ€μ μ μ ) |
KOSDAQ_ML (νλ ₯ν μ€μ μ μ ) |
| λ§€λ§€ λͺ©ν | +2.0% μ΅μ / -2.5% μΉΌμμ | μ λ΅λ³ κ°λ³ μ΅μ λ° νΈλ μΌλ§ μ€ν μ μ© | μ λ΅λ³ κ°λ³ μ΅μ λ° νΈλ μΌλ§ μ€ν μ μ© |
| ν΅μ¬ λͺ¨λ | scalping_scanner.py |
final_ensemble_scanner.py |
kosdaq_scanner.py |
β» Scalping 3.0: μ§λ₯ν νμ μ μ΄ μμ€ν (Dynamic Pullback Matrix) μ€μΊν λͺ¨λμ λ¨μν μ§μ λ νΌμΌνΈ(-0.5%)μμ κΈ°κ³μ μΌλ‘ λκΈ°νμ§ μμ΅λλ€. μ€μκ° μ²΄κ²°κ°λ(VPW)μ Gemini-Brainμ΄ μ°μ ν **AI νμ λ(0~100μ )**λ₯Ό μ΅ν©νμ¬, AIκ° κ°νκ² μΆμ²νλ μ’ λͺ©μ μμ λλ¦Όλͺ©(-0.1%)μμ 곡격μ μΌλ‘ λμμ±κ³ , μν μμκ° κ°μ§λ μ’ λͺ©(DROP)μ μ¬ν΄(-1.5%)λ‘ κ·Έλ¬Όμ λ΄λ € λ°©μ΄μ μΌλ‘ λμν©λλ€.
- 7κ° API μ
체 λΆμ: κ±°λλ κΈμ¦(
ka10023), νλ‘κ·Έλ¨ μλ§€μ(ka90008), 체결κ°λ μΆμ΄(ka10046) λ± 7κ° APIλ₯Ό μ‘°ν©νμ¬ μΈλ ₯μ μ§μ μ‘°μ§μ ν¬μ°©ν©λλ€. - ν¬λ§ & νλ―Έκ²½ μ λ΅: μμ₯ μ 체λ₯Ό λκ² νλ 'ν¬λ§' λ¨κ³μ κ°λ³ μ’ λͺ©μ μκΈμ μ λ° κ²μ¦νλ 'νλ―Έκ²½' λ¨κ³λ₯Ό κ±°μ³ κ³ νμ νμ λ§ μΆμΆν©λλ€.
- Stacking Ensemble: XGBoost, LightGBM λ± 4κ° λͺ¨λΈμ μμΈ‘μΉλ₯Ό λ©ν λͺ¨λΈμ΄ μ΅μ’ ν΅ν©νμ¬ λΉμΌ μμΉ νλ₯ μ μ°μΆν©λλ€.
- λ°μ΄ν° ν΅ν©: μ€μκ° μΌλ΄(OHLCV), ν¬μμλ³ μλ§€μ, μ μ© μκ³ μ¨ λ°μ΄ν°λ₯Ό κ²°ν©νμ¬ μ 체μ μΈ μ°¨νΈ λΆμμ μνν©λλ€.
- λ©ν° μ λ΅ λμ: DBμ κΈ°λ‘λ
strategyνκ·Έμ λ°λΌ μ΄λ¨ν, μ½μ€νΌ μ€μ, μ½μ€λ₯ μ€μ λ± κ°κΈ° λ€λ₯Έ λ§€λ§€ λ£°μ μ μ©ν©λλ€. - λλ¦Όλͺ© μλ μ§μ : μ€μΊν ν¬μ°© μ νμ¬κ° λλΉ μ νν νΈκ° λ¨μλ₯Ό κ³μ°νμ¬ 2νΈκ° μλμ λ§€μ λκΈ° μ£Όλ¬Έμ λ£μ΄ μμ ν μ§μ μ λλͺ¨ν©λλ€.
- μ±κ³Ό μΆμ : λ§€μ/λ§€λκ°, λ§€λ§€ μκ°, μμ΅λ₯ μ DBμ μꡬ κΈ°λ‘νμ¬ μ λ΅λ³ μΉλ₯ κ³Ό μ±κ³Όλ₯Ό κ΄λ¦¬ν©λλ€.
- Gemini 2.5 Flash λͺ¨λΈ νμ¬: μμ₯ μν©μ λν μ΄κ³ μ νλ¨ λ° μ’ λͺ© λΆμ μν.
- AI μλμ° λͺ¨λ: μ€λ§€λ§€ μ AIμ νλ¨μ κΈ°λ‘νκ³ κ²μ¦νλ λ‘μ§ μμ ν.
λ³Έ μμ€ν μ κ°μ₯ ν° νΉμ§μ λ¨μν μ§ν μ‘°κ±΄λΆ λ§€λ§€λ₯Ό λμ΄, μμ±ν AI(Gemini 2.5 Flash)κ° νΈκ°μ°½ λμ€(Depth)μ 1λΆλ΄(Micro-VWAP λ±)μ μ€μκ°μΌλ‘ μ½κ³ μ΅μ’ λ§€λ§€ μΉμΈκΆμ νμ¬νλ€λ μ μ λλ€. AIλ μ€λμ΄νΌ μμ§ λ΄μμ λ κ°μ§ ν΅μ¬ μν μ μνν©λλ€.
-
π« AI κ±°λΆκΆ (Veto Power) λ°λ
- κΈ°μ‘΄ ννΈ μ€μΊλκ° "μκΈ νλ°"μ μΈμΉλ©° λ§€μ μ¬μΈμ λ΄λλΌλ, AIκ° 1λΆλ΄μ μ꼬리λ VWAP μ΄νμ κ°μ§νμ¬ νλ°© 리μ€ν¬κ° ν¬λ€κ³ νλ¨(Score 40μ μ΄ν)νλ©΄ **μ¦κ° λ§€μ νλ‘μΈμ€λ₯Ό κ°μ μ’ λ£(Veto)**ν©λλ€.
- μΈλ ₯μ 'κ°μ§ λν(Bull Trap)' λ° 'μ€κ±°μ§ ν¨ν΄'μ λΉνλ λλλ§€λ§€λ₯Ό μμ² μ°¨λ¨νκ³ 3λΆ(180μ΄)μ μΏ¨νμμ λΆμ¬ν©λλ€.
-
π― λμ νμ μ μ΄ (Dynamic Pullback Matrix)
-
무μ¬ν AIμ κ±°λΆκΆμ ν΅κ³Όν μ’ λͺ©μ λν΄μλ, AIμ νμ λ(Score 0~100)μ μ€μκ° μ²΄κ²°κ°λ(VPW)λ₯Ό μ΅ν©νμ¬ λ§€μ κ·Έλ¬Όμ κΉμ΄λ₯Ό μ€μ€λ‘ μ‘°μ ν©λλ€.
-
κ°ν νμ (BUY): μμ λλ¦Όλͺ©(-0.1%)μμ 곡격μ μΌλ‘ λ¬Όλ ν보
-
λ³΄ν΅ μκΈ(WAIT): κΈ°λ³Έ λλ¦Όλͺ©(-0.5%)μμ 보μμ μΌλ‘ λκΈ°
-
πββοΈ μ§λ₯ν μ‘°κΈ° μ²μ° λ° λ°©μ΄ (Smart Exit & Risk-Cut)
-
λ§€μ μ΄νμλ AI μμ§μ 15μ΄ μ£ΌκΈ°λ‘ λ³΄μ μ’ λͺ©μ 1λΆλ΄ νλ¦κ³Ό μ€μκ° μ²΄κ²°κ°λλ₯Ό κ°μν©λλ€.
-
μ‘°κΈ° μ΅μ (Take-Profit μ‘°κΈ°ν): κΈ°κ³μ λͺ©ν μμ΅λ₯ (+2.0%)μ λλ¬νκΈ° μ μ΄λΌλ, λ§€μμΈκ° λνλκ³ κ³ μ μ§νκ° λ³΄μ΄λ©΄(Score < 50) μμ΅κΆ(+0.5% μ΄μ)μμ μμ¬λ΄μ§ μκ³ μ¦μ λ¬Όλμ λκΉλλ€.
-
μ§λ₯ν μΉΌμμ (Smart Stop-Loss): κΈ°κ³μ μμ μ (-2.5%)μ ν°μΉνκΈ° μ μ΄λΌλ, μΈλ ₯μ μ΄νμ΄λ ν¬λ§€ μ§νκ° ν¬μ°©λλ©΄(Score <= 35) μ¦μ λΌλ₯Ό κΉμλ΄λ μμ μ κ°ννμ¬ κ³μ’λ₯Ό λ°©μ΄ν©λλ€.
-
-
π‘οΈ λ¬΄κ²°μ μλ μ ν (Zero-Code Fallback System)
- κ΅¬κΈ API μλ² μ₯μ λ μΌμΌ μΏΌν° μμ§μΌλ‘ μΈν΄ AIκ° μλ΅νμ§ λͺ»ν κ²½μ°, μμ€ν μ μλ¬λ₯Ό λΏμΌλ©° λ©μΆμ§ μμ΅λλ€.
- AIκ° κΈ°λ³Έκ°(50μ )μ λ°ννλ©΄ μμ€ν μ μ΄λ₯Ό "AI νλ¨ λ³΄λ₯"λ‘ μΈμνμ¬ μ€λ§νΈ μ²μ°(Smart Exit) λ‘μ§μ λΆλλ½κ² μ°ν(Bypass)ν©λλ€. μ΄ν λ΄μ μ¦κ° κ°μ μ λ°°μ ν 'κΈ°κ³μ ννΈ λ§€λ λ£°(μκ°/κ°κ²© νμμμ)'λ‘ λμκ° λ§€λ§€λ₯Ό 무μ¬ν λ§λ¬΄λ¦¬ν©λλ€.
KORStockScanμ Gemini-Brainμ λ¨μν μ§μ (Buy) νμ λ§ μ‘λ κ²μ λμ΄, μ£Όμμ 보μ ν μκ°λΆν° λ§€λ(Sell)ν λκΉμ§ μ ꡬκ°μ κ±Έμ³ μ€μκ°μΌλ‘ κ°μ νλ©° κ³μ’λ₯Ό λ°©μ΄ν©λλ€.
- μ€λμ΄νΌ μμ§μ΄ μ£Όμμ λ§€μ(
HOLDINGμν)νλ©΄, AI μμ§μ 15μ΄ μ£ΌκΈ°λ‘ μ΅κ·Ό 1λΆλ΄ νλ¦κ³Ό μ€μκ° νΈκ°μ°½ λ§€λ¬Όλλ₯Ό λ€μ λΆμν©λλ€. - νμ¬ μ£Όκ°μ μΆκ° μμΉ μ¬λ ₯κ³Ό νλ°© 리μ€ν¬λ₯Ό 0~100μ (Score)μ μ μλ‘ μ§μν΄μ μ¬νκ°ν©λλ€.
- λ°λ 쑰건:
νμ¬ μμ΅ μ€(+0.5% μ΄μ) & AI μ μ 50μ λ―Έλ§ - λμ μ리: κΈ°κ³μ λͺ©νκ°(+2.0%)μ λλ¬νμ§ μμλλΌλ, AIκ° νΈκ°μ°½μ λ§€μμΈ λνλ μ°¨νΈμμ κ³ μ μ§ν(κΈ΄ μ꼬리 λ±)λ₯Ό ν¬μ°©νλ©΄ μμ¬μ λ²λ¦¬κ³ μ¦μ μμ₯κ°λ‘ μ΅μ νμ¬ μμ΅μ μμ νκ² νμ μ§μ΅λλ€.
- λ°λ 쑰건:
νμ¬ μμ€ μ€ & AI μ μ 35μ μ΄ν (DROP) - λμ μ리: κΈ°κ³μ μμ μ (-2.5%)κΉμ§ λλ €κ°λ©° κ³μ’κ° λ Ήμλ΄λ¦¬λ κ²μ λ°©μ§ν©λλ€. λ¨μν λλ¦Όλͺ©μ΄ μλ μΈλ ₯μ ν¬λ§€λ μ€κ±°μ§ ν¨ν΄μΌλ‘ νλ¨λλ©΄, μμ€μ΄ 컀μ§κΈ° μ μ λΌλ₯Ό κΉμλ΄λ μ¦κ°μ μΈ μμ μ κ°ννμ¬ μΉλͺ μμ νΌν©λλ€.
- μ₯μ λμ: κ΅¬κΈ Gemini APIμ μΌμΌ μΏΌν°κ° μμ§λκ±°λ μΌμμ μΈ ν΅μ μ₯μ κ° λ°μν κ²½μ°, μμ€ν μ΄ λ©μΆκ±°λ μ€μλνμ§ μλλ‘ μλ²½ν Fallback κ΅¬μ‘°κ° μ€κ³λμ΄ μμ΅λλ€.
- λμ μ리: ν΅μ λΆκ° μ AI μμ§μ κΈ°λ³Έκ°μΈ **
50μ **μ λ°νν©λλ€. 50μ μ μ‘°κΈ° μ΅μ (< 50)κ³Ό μ‘°κΈ° μμ (<= 35) 쑰건μ λͺ¨λ λΉκ²¨κ°λ 'ν¬λͺ λ§ν ' μ μμ λλ€. - κ²°κ³Ό: AI κ°μ λ‘μ§μ΄ μμ°μ€λ½κ² μ°ν(Bypass)λλ©°, μ€λμ΄νΌλ μ¦κ° κ°μ μ λ°°μ ν κΈ°κ³μ ννΈ λ£°(λͺ©νκ° λλ¬, μμ κ° ν°μΉ, μ₯ λ§κ° μκ° μ΄κ³Ό λ±)λ‘ μλ μ νλμ΄ μμ νκ² λ§€λ§€λ₯Ό λ§λ¬΄λ¦¬ν©λλ€.
- μκΈκ°λ(VPW) μ°λ: κ±°λλκ³Ό 체결 κ°λμ λ°λΌ λ§€μ λλ¦Όλͺ© κΉμ΄λ₯Ό μλμΌλ‘ μ‘°μ .
- νΈκ° λ¨μ(Tick) μ΅μ ν: μ’ λͺ©μ κ°κ²©λλ³ νΈκ° κ·κ²©μ κ³μ°νμ¬ μ΅μ μ 체결 κ°κ²© μ°μΆ.
- κΈ°κ³μ μ‘±μ ν΄μ (Let it Run): μ£Όκ°κ° μ€μ λ κΈ°λ³Έ λͺ©ν μμ΅λ₯ (+2.0%)μ λλ¬νλλΌλ 무쑰건 λ§€λνμ§ μμ΅λλ€.
- μ§λ₯ν νλ© (Smart Holding): AIκ° μ€μκ° νΈκ°μ°½μ κ°λ ₯ν λ§€μ λ²½ λνμ 1λΆλ΄μ μμΉ μλμ§λ₯Ό κ°μ§νμ¬ λμ νμ λ(Score >= 75)λ₯Ό μ μ§νλ€λ©΄, λ§€λλ₯Ό 보λ₯νκ³ μμ΅μ΄ +3%, +5% μ΄μμΌλ‘ κ·Ήλνλ λκΉμ§ μΆμΈλ₯Ό λκΉμ§ μΆμ ν©λλ€.
- νμ μ΅μ ν μ΅μ : μμΉ λͺ¨λ©ν μ΄ κΊΎμ΄κ±°λ λ§€λμΈκ° μΆνλμ΄ μ μκ° νλ½νλ μκ°, κ°μ₯ μ 리ν κ³ μ μμ μ¦κ° μμ₯κ°λ‘ λμ Έ μμ΅μ μ΅μ’ νμ μ§μ΅λλ€.
- μΏΌν° μμ μ₯μΉ μ°λ: AI νλ μ΄κ³Ό μ(Score 50 λ°ν) νΈλ μΌλ§ 쑰건μμ μμ°μ€λ½κ² νλ½νλ―λ‘, μ£Όμμ μ₯ μ± λ©μΆμ§ μκ³ μ¦μ 'κΈ°κ³μ 2.0% μ΅μ 'λ‘ λΆλλ½κ² 볡κ·(Fallback)ν©λλ€.
- DB λκΈ°ν 무결μ±: λ§€λ 체결 μμμ¦ μ²λ¦¬ λ‘μ§ κ°μ μΌλ‘ μ€μκ° μκ³ μ DB μν λΆμΌμΉ ν΄κ²°.
- κΆνλ³ μλ¦Ό μμ€ν : Admin λ° VIP λ±κΈμ λ°λ₯Έ μ°¨λ± ν λ κ·Έλ¨ μλ¦Ό λ°μ‘.
/KORStockScan
βββ src/
β βββ bot_main.py # π€ λ©μΈ 컨νΈλ‘€λ¬ (μμ€ν
κ°λ λ° ν
λ κ·Έλ¨ μΈν°νμ΄μ€)
β βββ signal_radar.py # π‘ SniperRadar (μ 체 μ€μΊλ μ€μΌμ€ λ° λ°μ΄ν° νλ¦ μ μ΄)
β β
β βββ ai_engine.py # π§ [NEW] AI core (Gemini 2.5 Flash API ν΅μ λ° ν둬ννΈ κ΄λ¦¬)
β βββ final_ensemble_scanner.py # π KOSPI μ€μ λΆμ (ai_engine νΈμΆ λ° κΈ°μ μ μ§ν κ²°ν©)
β βββ kosdaq_scanner.py # π KOSDAQ νμ΄λΈλ¦¬λ AI μ€μΊλ
β βββ scalping_scanner.py # π SCALPING μκΈ κΈλ±μ£Ό μΆμΆ μμ§
β β
β βββ kiwoom_sniper_v2.py # π« λ§€λ§€ μ§ν μμ§ (Scalping 2.0: μκΈ μ°λ μ€λ§νΈ λ§€λ§€)
β βββ kiwoom_websocket.py # π μ€μκ° λ°μ΄ν° μΌν° (νΈκ° μμ & '00' TR 체결 κ°μ)
β βββ kiwoom_orders.py # π μ£Όλ¬Έ ν΅μ λͺ¨λ (REST API κΈ°λ° λ§€μ/λ§€λ μ§ν)
β βββ kiwoom_utils.py # π οΈ μ νΈλ¦¬ν° (get_smart_target_price: νΈκ°/μκΈ μ΅μ ν)
β βββ db_manager.py # ποΈ SQLite ν΅ν© κ΄λ¦¬ (μν λκΈ°ν λ° VIP κΆν κ΄λ¦¬)
β βββ constants.py # π μμ€ν
μμ (λ§€λ§€ κ·μΉ λ° μ λ΅ νλΌλ―Έν° μ μ)
β
βββ data/
β βββ config_prod.json # βοΈ μ€μ νμΌ (API ν€, ADMIN_ID, λͺ¨λΈ μ€μ )
β βββ user_data.db # π€ μ¬μ©μ DB (VIP κΆν λ° ν
λ κ·Έλ¨ μ μ κ΄λ¦¬)
β βββ kospi_stock_data.db # π λ§€λ§€ DB (μΆμ² νμ€ν 리, μμ΅λ₯ , 체결 κΈ°λ‘)
β
βββ README.md # π νλ‘μ νΈ λ¬Έμ (AI λͺ¨λΈ μ¬μ λ° λ§€λ§€ λ‘μ§ κ°μ΄λ)
βββ .gitignore # π 보μ νμΌ λ° DB μΊμ μ μΈ μ€μ
- OS: Windows λλ Linux (ν€μμ¦κΆ REST API κΈ°λ°μΌλ‘ OS μ μ½μ΄ μ μ΅λλ€.)
- Python: 3.13 λ²μ μ΄μ κΆμ₯
- λ°μ΄ν°λ² μ΄μ€: SQLite3 (κΈ°λ³Έ λ΄μ₯)
μ μ₯μλ₯Ό 볡μ νκ³ νμν λΌμ΄λΈλ¬λ¦¬λ₯Ό μ€μΉν©λλ€.
git clone [https://github.com/your-username/KORStockScan.git](https://github.com/your-username/KORStockScan.git)
cd KORStockScan
pip install -r requirements.txtμ€μ νμΌ(config_prod.json) μΈν
ν, μ 체 μμ€ν
μ μ΄ μΌν°μΈ bot_main.pyλ₯Ό μ€ννλ©΄ λ©ν° μ€μΊλμ λ§€λ§€ μμ§μ΄ μ€λ λ λ°©μμΌλ‘ λμμ κ°λλ©λλ€.
- μ€μ νμΌ μμ±:
data/config_prod.jsonνμΌμ ν€μ API μ±ν€, μν¬λ¦Ών€, ν λ κ·Έλ¨ ν ν° λ±μ μ¬λ°λ₯΄κ² μ λ ₯ν©λλ€. - ν΅ν© μμ§ μ€ν: ν°λ―Έλμμ μλ λͺ
λ Ήμ΄λ₯Ό μ
λ ₯νμ¬ μμ€ν
μ μμν©λλ€.
python src/bot_main.py
- κ°λ νμΈ: ν°λ―Έλμ [μμ€ν ] μ μκ±°λμΌ - μ€λμ΄νΌ λ§€λ§€ μμ§ κ°λ μλ£ λ±μ λ©μμ§κ° λ¨λμ§ νμΈν©λλ€.
μμ€ν μ λͺ¨λ μΆμ² μ΄λ ₯κ³Ό λ§€λ§€ μ±κ³Όλ₯Ό ν¬λͺ νκ² κ΄λ¦¬νλ©°, μ λ΅λ³ μΉλ₯ λΆμμ΄ κ°λ₯νλλ‘ μ€κ³λμμ΅λλ€.
- ν΅ν© DB κ΄λ¦¬:
data/kospi_stock_data.dbλ₯Ό ν΅ν΄ λͺ¨λ μΆμ² μ΄λ ₯, λ§€μ/λ§€λκ°, μμ΅λ₯ μ ν΅ν© κ΄λ¦¬ν©λλ€. - μλ μ€ν€λ§ μ΅μ ν: μμ€ν
κ°λ μ
strategy(μ λ΅ νκ·Έ),sell_price(λ§€λκ°),profit_rate(μμ΅λ₯ ) λ± νμ 컬λΌμ μλμΌλ‘ κ²μ¬νκ³ μμ±νμ¬ DB μλ¬λ₯Ό μμ² μ°¨λ¨ν©λλ€. - μ€μκ° μ±μ ν: λ§€λ§€ 체결 μ μμ΅λ₯ μ μꡬ κΈ°λ‘νλ©°, ν λ κ·Έλ¨μ ν΅ν΄ μ±μ ν 리ν¬νΈλ₯Ό μ¦μ λ³΄κ³ ν©λλ€.
- μ€λ³΅ μΆμ² λ°©μ§: λμΌ μ’
λͺ©μ΄ λΉμΌ μ¬λ¬ λ² ν¬μ°©λλλΌλ
already_pickedλ‘μ§μ ν΅ν΄ μ€λ³΅ μλ¦Όκ³Ό λλλ§€λ§€λ₯Ό λ°©μ§ν©λλ€.
- 보쑰μ§ν μμλΈ μΆκ°: νμ¬ VWAP λ° 5-MA μ€μ¬μ μ€μΊν νμ μ RSI(14), MACD νλ½ λ€μ΄λ²μ μ€ νν° μΆκ° (1λΆλ΄ μμ§ νλ νμ₯ νμ)
- AI λμ μ²μ°(Tightening): HOLDING μνμμ AI μ€μ½μ΄ κ°μ μ λ°λ₯Έ κ°λ³μ μ΅μ /μμ μ μ μ©
λ³Έ μννΈμ¨μ΄λ κ°μΈμ μΈ ν¬μ μ°Έκ³ λ° μκ³ λ¦¬μ¦ νΈλ μ΄λ© νμ΅ λͺ©μ μΌλ‘ μ μλμμ΅λλ€.
- ν¬μ μ± μ: λͺ¨λ ν¬μ κ²°μ μ λν μ΅μ’ μ± μμ μ¬μ©μ λ³ΈμΈμκ² μμ΅λλ€. μ μμλ μ΄ νλ‘κ·Έλ¨μ μ¬μ©νμ¬ λ°μν μ΄λ ν κ²½μ μ μμ€μ λν΄μλ λ²μ μ± μμ μ§μ§ μμ΅λλ€.
- μμ€ν 리μ€ν¬: μ£Όμ κ±°λλ μκΈ μμ€μ μνμ΄ λ§€μ° ν¬λ©°, μλ λ§€λ§€ μμ€ν μ μκΈ°μΉ λͺ»ν μ€λ₯, λ€νΈμν¬ μ₯μ , λλ API ν΅μ μ§μ°μΌλ‘ μΈν΄ μμ€μ΄ λ°μν μ μμ΅λλ€.
- μ¬μ ν μ€νΈ: μ€ν¬μ μ μλ λ°λμ λͺ¨μν¬μ νκ²½μμ μΆ©λΆν ν μ€νΈλ₯Ό κ±°μΉ ν μ΄μ©νμκΈ° λ°λλλ€.