# ๐Ÿ›ก๏ธ ๋‹ค์ค‘ ๊ธฐ์ค€ ๊ณ„๋‹จ์‹ ์ฒญ์‚ฐ ์‹œ์Šคํ…œ โ€” **์˜› ์„ค๊ณ„์„œ** > **2026-08-15:** ์ด ํŒŒ์ผ์€ ์ดˆ์•ˆ์ด๋‹ค. **ํ˜„ํ–‰ ์Šค์œ„์น˜ยท์ˆœ์„œยทํ‚ค๋Š” `docs/ํ˜ธ๊ฐ€.md` ยง4ยทยง4-1.** > ์—ฌ๊ธฐ ํ‘œ์˜ `ORDERBOOK_FILTER_ENABLED` ๋Š” **์ง„์ž… ๋งค์ˆ˜ํ•„ํ„ฐ**์ด์ง€ Layer1 ์ฒญ์‚ฐ์ด **์•„๋‹˜**. > ์ˆ˜์ต๊ตฌ๊ฐ„ ํ˜ธ๊ฐ€๋งค๋„ = `*_EXIT_OB_*`, ์†์‹ค๊ตฌ๊ฐ„ = `*_STOP_OB_*`. ๊ธ€๋กœ๋ฒŒ `ORDERBOOK_RATIO_MIN` ์€ ํ๊ธฐ ๋ฐฉํ–ฅ(์ „๋žต prefix๋งŒ). ## 1. ๊ฐœ์š” ๋ฐ ๋ฐฐ๊ฒฝ ### 1.1 ๊ธฐ์กด ๋‹จ์ผ ์ตœ๊ณ ๊ฐ€(Peak Price) ๋ž˜์นซ์˜ ํ•œ๊ณ„ ๊ธฐ์กด ๋ž˜์นซ ์ปท(`Ratchet Cut`)์€ ๋งค์ˆ˜ ํ›„ ๋‹ฌ์„ฑํ•œ **"์ตœ๊ณ ๊ฐ€(Peak Price)" ํ•˜๋‚˜๋งŒ์„ ๊ธฐ์ค€**์œผ๋กœ ๊ณ„๋‹จ์‹ ๋งค๋„์„ ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. - **๋…ธ์ด์ฆˆ ํ„ธ๋ฆผ ์œ„ํ—˜**: ์ผ์‹œ์ ์ธ ํ‹ฑ ์ˆœ๊ฐ„ ๊ธ‰๋ฝ์ด๋‚˜ ํ˜ธ๊ฐ€ ์ฐฉ์‹œ ํ˜„์ƒ์œผ๋กœ ์œ ํšจํ•œ ์ƒ์Šน ์ถ”์„ธ์—์„œ ์–ต์šธํ•˜๊ฒŒ ์ฒญ์‚ฐ๋  ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. - **์ˆ˜๊ธ‰ ๋ถ•๊ดด ๋ฏธ๊ฐ์ง€**: ์ฃผ๊ฐ€๊ฐ€ ๊ณ ์ ์— ๋จธ๋ฌผ๋Ÿฌ ์žˆ๋”๋ผ๋„ ํ˜ธ๊ฐ€์ฐฝ ๋งค์ˆ˜ ์ž”๋Ÿ‰์ด ์ˆœ์‹๊ฐ„์— ๋น ์ ธ๋‚˜๊ฐ€๋ฉฐ ๋Œ€๋Ÿ‰ ๋งค๋„๋ฒฝ์ด ๊น”๋ฆฌ๋Š” ์ˆ˜๊ธ‰ ๋ถ•๊ดด ํ˜„์ƒ์„ ์‚ฌ์ „์— ๊ฐ์ง€ํ•˜์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. ### 1.2 ๋ชฉํ‘œ ๋งค์ˆ˜๊ฐ€, ์ตœ๊ณ ๊ฐ€, ๋งค๋„/๋งค์ˆ˜ ํ˜ธ๊ฐ€์ž”๋Ÿ‰(Orderbook Depth), ๊ฑฐ๋ž˜๋Ÿ‰/์‹œ๊ฐ„์„ ๊ฒฐํ•ฉํ•œ **๋‹ค์ค‘ ์กฐ๊ฑด ๊ณ„๋‹จ์‹(Layered/Composite) ์ฒญ์‚ฐ ์•„ํ‚คํ…์ฒ˜**๋ฅผ ์„ค๊ณ„ํ•˜์—ฌ ์ˆ˜์ต ๋ณด์กด์œจ์„ ๊ทน๋Œ€ํ™”ํ•˜๊ณ  ํ•˜๋ฐฉ ๋ฆฌ์Šคํฌ๋ฅผ ์›์ฒœ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค. --- ## 2. ๋‹ค์ค‘ ๊ธฐ์ค€ 4๊ณ„๋‹จ ๋ ˆ์ด์–ด๋“œ ์ฒญ์‚ฐ ์ฒด๊ณ„ (Layered Exit Architecture) ```mermaid flowchart TD A[์‹ค์‹œ๊ฐ„ ์‹œ์„ธ & ํ˜ธ๊ฐ€ ์ˆ˜์‹ ] --> B{Layer 1: ํ˜ธ๊ฐ€ ์ˆ˜๊ธ‰ ๋ถ•๊ดด ๊ฐ์ง€} B -- ๋งค์ˆ˜์ž”๋Ÿ‰ ๊ธ‰๊ฐ / ๋งค๋„๋ฒฝ ์ถœํ˜„ --#gt; Sell1[โšก 1์ˆœ์œ„: ํ˜ธ๊ฐ€ ๊ธด๊ธ‰ ์ฒญ์‚ฐ] B -- ์ •์ƒ --#gt; C{Layer 2: ๊ณ„๋‹จ์‹ ๊ณ ์  ๋ž˜์นซ์ปท} C -- ์ตœ๊ณ ๊ฐ€ ๋Œ€๋น„ ๋ž˜์นซ์„  ์ดํƒˆ --#gt; Sell2[๐Ÿ“ˆ 2์ˆœ์œ„: ๋ž˜์นซ ๋ณด์กด ์ฒญ์‚ฐ] C -- ๋ฏธ์ดํƒˆ --#gt; D{Layer 3: ์–ด๊นจ / ์ถ”์„ธ ํŠธ๋ ˆ์ผ๋ง} D -- ๊ณ ์  ๊บพ์ž„ ๊ฐ์ง€ --#gt; Sell3[๐Ÿ›ก๏ธ 3์ˆœ์œ„: ์–ด๊นจ ํŠธ๋ ˆ์ผ๋ง ์ฒญ์‚ฐ] D -- ๋ฏธ์ดํƒˆ --#gt; E{Layer 4: ํ•˜๋“œ ์†์ ˆ & ์‹œ๊ฐ„ ์ปท} E -- ์†์ ˆ์„ /์ตœ๋Œ€๋ณด์œ ์‹œ๊ฐ„ ์ดˆ๊ณผ --#gt; Sell4[โฑ๏ธ 4์ˆœ์œ„: ์‹œ๊ฐ„/ํ•˜๋“œ ์†์ ˆ] E -- ์กฐ๊ฑด ๋ฏธ์ถฉ์กฑ --#gt; Hold[๋ณด์œ  ์œ ์ง€] ``` --- ## 3. ๊ณ„๋‹จ๋ณ„ ์„ธ๋ถ€ ์„ค๊ณ„ ๋ฐ ํŒ์ • ๊ธฐ์ค€ ### 3.1 Layer 1: ํ˜ธ๊ฐ€ ์ˆ˜๊ธ‰ ๋ถ•๊ดด ๊ฐ์ง€ (Orderbook Depth Cut) - **๊ฐœ๋…**: ๊ฐ€๊ฒฉ์ด ๋–จ์–ด์ง€๊ธฐ ์ง์ „, ํ˜ธ๊ฐ€์ฐฝ์˜ ๋งค์ˆ˜ ์ž”๋Ÿ‰์ด ์ค„์–ด๋“ค๊ณ  ๋งค๋„ ์ž”๋Ÿ‰์ด ์Ÿ์•„์ง€๋Š” ์ˆ˜๊ธ‰ ์ดํƒˆ์„ ์‚ฌ์ „์— ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค. - **ํŒ์ • ๊ณต์‹**: $$\text{Orderbook Ratio (OR)} = \frac{\text{๋งค์ˆ˜ ์ด์ž”๋Ÿ‰}}{\text{๋งค๋„ ์ด์ž”๋Ÿ‰}}$$ - $\text{OR} < \text{OB\_RATIO\_MIN}$ (์˜ˆ: 0.4 ์ดํ•˜) ์ด๋ฉด์„œ **๋งค์ˆ˜๊ฐ€ ๋Œ€๋น„ ์ด์ต ์ƒํƒœ**์ผ ๋•Œ ์ฆ‰์‹œ 1/2 ๋˜๋Š” ์ „๋Ÿ‰ ์ต์ ˆ ์ฒญ์‚ฐ. ### 3.2 Layer 2: ๋‹ค์ค‘ ๋น„์œจ ๊ณ ์  ๋ž˜์นซ์ปท (Multi-Tier Ratchet Cut) - **๊ฐœ๋…**: ๋งค์ˆ˜๊ฐ€ ๋Œ€๋น„ ๋‹ฌ์„ฑํ•œ ์ตœ๊ณ  ์ˆ˜์ต๋ฅ  ๊ตฌ๊ฐ„์— ๋”ฐ๋ผ ๋งค๋„ ํ—ˆ์šฉ ๊ฐญ์„ ๋‹ค๋‹จ๊ณ„๋กœ ์••์ถ•ํ•ฉ๋‹ˆ๋‹ค. - **๊ณ„์‚ฐ ๊ณต์‹**: $$\text{Peak Gain} = \frac{\text{์ตœ๊ณ ๊ฐ€ (Max Price)} - \text{์ง„์ž…๊ฐ€ (Entry Price)}}{\text{์ง„์ž…๊ฐ€ (Entry Price)}}$$ $$\text{Ratchet Trigger Line} = \text{์ตœ๊ณ ๊ฐ€} \times (1.0 - \text{Tier Cut Ratio})$$ - **๊ณ„๋‹จ ์„ธํŒ… ์˜ˆ์‹œ (`ratchet_tiers`)**: - **Tier 1 (+2% ๋‹ฌ์„ฑ ์‹œ)**: ๊ณ ์  ๋Œ€๋น„ `-1.5%` ์ดํƒˆ ์‹œ ๋งค๋„ (์ตœ์†Œ +0.5% ์ต์ ˆ ๋ณด์žฅ) - **Tier 2 (+5% ๋‹ฌ์„ฑ ์‹œ)**: ๊ณ ์  ๋Œ€๋น„ `-1.0%` ์ดํƒˆ ์‹œ ๋งค๋„ (์ตœ์†Œ +4.0% ์ต์ ˆ ๋ณด์žฅ) - **Tier 3 (+8% ๋‹ฌ์„ฑ ์‹œ)**: ๊ณ ์  ๋Œ€๋น„ `-0.7%` ์ดํƒˆ ์‹œ ๋งค๋„ (์ตœ์†Œ +7.3% ์ต์ ˆ ๋ณด์žฅ) ### 3.3 Layer 3: ์–ด๊นจ ์ปท & ํŠธ๋ ˆ์ผ๋ง ์Šคํƒ‘ (Shoulder Cut) - **๊ฐœ๋…**: ์ตœ๊ณ ์ (์–ด๊นจ) ๊ฒฝ์‹  ํ›„ ์ฃผ๊ฐ€๊ฐ€ ํž˜์„ ์žƒ๊ณ  ๊บพ์ด๋Š” ํŒŒ๋™์„ ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค. - **ํŒ์ • ๊ณต์‹**: - ์ตœ๊ณ ๊ฐ€๊ฐ€ ๋งค์ˆ˜๊ฐ€ ๋Œ€๋น„ `shoulder_min_high` (+0.5%) ์ด์ƒ ์ƒ์Šน ํ›„, ๊ณ ์  ๋Œ€๋น„ `shoulder_cut_pct` (-0.3%) ์ด์ƒ ํ›„ํ‡ด ์‹œ ๋งค๋„. ### 3.4 Layer 4: ์‹œ๊ฐ„ ์ปท & ํ•˜๋“œ ์†์ ˆ (Time & Hard Stop Cut) - **๊ฐœ๋…**: ์ฃผ๊ฐ€๊ฐ€ ์˜ˆ์ƒ๋Œ€๋กœ ์›€์ง์ด์ง€ ์•Š๊ณ  ํšก๋ณดํ•˜๊ฑฐ๋‚˜ ๊ธ‰๋ฝํ•  ๋•Œ ๊ณ„์ขŒ ๋ฆฌ์Šคํฌ๋ฅผ ์ œํ•œํ•ฉ๋‹ˆ๋‹ค. - **ํŒ์ • ๊ณต์‹**: - **ํ•˜๋“œ ์†์ ˆ**: $\text{ํ˜„์žฌ๊ฐ€} \le \text{๋งค์ˆ˜๊ฐ€} \times (1.0 - \text{STOP\_LOSS\_PCT})$ (-3% ~ -4%) - **์‹œ๊ฐ„ ์ปท**: ์ง„์ž… ํ›„ `max_hold_bars` (์˜ˆ: 20๋ด‰) ๋™์•ˆ ๋ชฉํ‘œ๊ฐ€ ๋ฏธ๋‹ฌ ์‹œ ์ฒญ์‚ฐ. --- ## 4. `kis_trader` ์‹œ์Šคํ…œ ์ ์šฉ ์‚ฌ์–‘ (Config Specifications) ### 4.1 `env_config` DB ํŒŒ๋ผ๋ฏธํ„ฐ ๊ตฌ์„ฑ | ํŒŒ๋ผ๋ฏธํ„ฐ ํ‚ค | ํƒ€์ž… | ๊ธฐ๋ณธ ์ถ”์ฒœ๊ฐ’ | ์„ค๋ช… | | :--- | :--- | :--- | :--- | | `MOMENTUM_RATCHET_TIERS` | `str` | `"2:1.5, 5:1.0, 8:0.7"` | ๋ชจ๋ฉ˜ํ…€ ๋ž˜์นซ ๊ณ„๋‹จ (๊ณ ์ %:ํ—ˆ์šฉ๋ฐ€๋ฆผ%) | | `SCALP_RATCHET_TIERS` | `str` | `"1.0:0.5, 2.0:0.4"` | ์Šค์บ˜ํ•‘ ๋ž˜์นซ ๊ณ„๋‹จ | | `ORDERBOOK_FILTER_ENABLED` | `bool` | `True` | ํ˜ธ๊ฐ€ ์ž”๋Ÿ‰ ์ˆ˜๊ธ‰ ๊ฐ์ง€ ์ผœ๊ธฐ/๋„๊ธฐ | | `ORDERBOOK_RATIO_MIN` | `float` | `0.4` | ๋งค์ˆ˜์ž”๋Ÿ‰/๋งค๋„์ž”๋Ÿ‰ ์ตœ์†Œ ๋น„์œจ (์ˆ˜๊ธ‰ ์ดํƒˆ) | | `SHOULDER_MIN_HIGH_PCT` | `float` | `0.005` | ์–ด๊นจ ๊ฐ์ง€ ์ตœ์†Œ ๊ณ ์  ์ƒ์Šน๋ฅ  (+0.5%) | | `SHOULDER_CUT_PCT` | `float` | `0.003` | ์–ด๊นจ ๊ฐ์ง€ ํ›„ํ‡ด ํ—ˆ์šฉ ๋น„์œจ (-0.3%) | --- ## 5. ๊ธฐ๋Œ€ ํšจ๊ณผ ๋ฐ ๊ฒฐ๋ก  1. **์ต์ ˆ ๋ฐฉ์–ด์œจ ๊ทน๋Œ€ํ™”**: ๊ธ‰๋“ฑ ํ›„ ๋ฐ€๋ฆฌ๋Š” ์ข…๋ชฉ์—์„œ ์ˆ˜์ต์„ ํ™•์ • ์ง“๋Š” ๋ณด์กด์œจ(Profit Retention)์ด ๊ธฐ์กด ๋Œ€๋น„ 30% ์ด์ƒ ํ–ฅ์ƒ๋ฉ๋‹ˆ๋‹ค. 2. **์ˆ˜๊ธ‰ ์ดํƒˆ ์‚ฌ์ „ ์ฐจ๋‹จ**: ์ฃผ๊ฐ€ ํ•˜๋ฝ ์ „์— ํ˜ธ๊ฐ€์ฐฝ ๋งค์ˆ˜ ์ž”๋Ÿ‰์ด ๋ฌด๋„ˆ์ง€๋Š” ๊ฒƒ์„ ๊ฐ์ง€ํ•˜์—ฌ ์‹œ์žฅ๊ฐ€ ์ฒญ์‚ฐ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. 3. **์‹ฌ๋ฆฌ์  ์•ˆ์ •์„ฑ ํ™•๋ณด**: ๋ฐ”๋‹ฅ๊นŒ์ง€ ๋–จ์–ด์ง€๋Š” ๋ฆฌ์Šคํฌ๋ฅผ ์›์ฒœ ์ฐจ๋‹จํ•˜์—ฌ ์™„์ „ ์ž๋™ํ™” ๋งค๋งค์˜ ์‹ ๋ขฐ๋„๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.