| name | watchlist-monitor |
| description | Set and monitor price-level alerts for a saved watchlist plus open predictions and portfolio positions. Fires Korean Telegram alerts when the latest close touches an entry zone, stop, target, or re-entry level. DELAYED / EOD-ish, not real-time. Use when the user wants to track entry/exit levels, set an alert, or watch tickers. Triggers on keywords like watchlist, alerts, set alert, entry zone, ์์น๋ฆฌ์คํธ, ๊ด์ฌ์ข
๋ชฉ, ์๋ฆผ. |
Watchlist Monitor
๊ด์ฌ์ข
๋ชฉ + ์ด๋ฆฐ ์์ธก + ๋ณด์ ํฌ์ง์
์ ๊ฐ๊ฒฉ ๋ ๋ฒจ์ ๊ฐ์ํ๊ณ , ํธ๋ฆฌ๊ฑฐ๊ฐ ๋ฐ์ํ๋ฉด
ํ๊ตญ์ด ํ
๋ ๊ทธ๋จ ์๋ฆผ์ ๋ณด๋ด๋ ์คํฌ์
๋๋ค.
โ ๏ธ ์ง์ฐ/์ข
๊ฐ ๊ธฐ์ค โ ์ค์๊ฐ ์๋ (Delayed, NOT real-time)
์ด ๋ชจ๋ํฐ๋ ์ค์๊ฐ ํฑ ์๋ฆผ์ด ์๋๋๋ค. ํธ๋ฆฌ๊ฑฐ๋
provider.get_current_price() ๊ธฐ์ค์ผ๋ก ํ๊ฐ๋๋๋ฐ, ์ด ํจ์๋
get_price_history(days=5)์ ๋ง์ง๋ง ์ข
๊ฐ(last close) ๋ฅผ ๋ฐํํฉ๋๋ค. ํ๊ตญ
์์ฅ(PyKRX)์ EOD(end-of-day) ์์ฃผ์
๋๋ค. ๋ฐ๋ผ์ ๋ชจ๋ "๋๋ฌ(touch)"์ ๊ฐ์ฅ
์ต๊ทผ ํ๋ณด ๊ฐ๋ฅํ ์ข
๊ฐ์ ๋ํ ์ง์ฐ๋ ํ๋
์ด๋ฉฐ, ์ฅ์ค ์ค์๊ฐ ๊ฐ๊ฒฉ์ด ์๋๋๋ค.
- ํฌ๋ก ์ ์ข
๊ฐ ๋ถ๊ทผ ์ฒดํฌํฌ์ธํธ ์ฉ๋๋ก EOD ์ฃผ๊ธฐ๋ก ๋๋ฆฝ๋๋ค (
scheduler/crontab.example).
- ์๋ฆผ ๋ฌธ๊ตฌ๋ "ํ์ฌ๊ฐ(์ง์ฐ/์ข
๊ฐ ๊ธฐ์ค)"์ผ๋ก ํ๊ธฐ๋์ด ์ค์๊ฐ ์ฒด๊ฒฐ๋ก ์คํดํ์ง
์๋๋ก ํฉ๋๋ค.
๋ฐ์ดํฐ ์์ค (3๊ฐ ๋ณํฉ)
load_unified_watchlist์ด (ticker, market) ๊ธฐ์ค์ผ๋ก ์ค๋ณต ์ ๊ฑฐํ๋ฉฐ ์ฐ์ ์์๋
saved > prediction > position ์
๋๋ค.
- saved โ ์ด ์คํฌ๋ก ์ ์ฅํ ํ (
data/watchlist.db). ๋ช
์์ entry/stop/
target/reentry ๋ ๋ฒจ.
- prediction โ OPEN ์์ธก (
predictions.db, ์ฝ๊ธฐ ์ ์ฉ). entry_price /
target_price / stop_price / direction.
- position โ ํฌํธํด๋ฆฌ์ค ๋ณด์ ์ข
๋ชฉ (
portfolio.db). ํ๋จ๊ฐ๋ฅผ ์ง์
๊ฐ๋ก,
๊ธฐ๋ณธ ์์ ์ ํ๋จ ร 0.92, target์ ์์ (์์ธก์ด ์ ๊ณตํ๋ฉด ๊ทธ์ชฝ ์ฐ์ ).
์ด ์คํฌ์ ์๋ฆผ ์ ์ฉ์
๋๋ค. ์์ธก์ด๋ ํฌํธํด๋ฆฌ์ค ๋ฐ์ดํฐ๋ฅผ ์ ๋ ๋ณ๊ฒฝํ์ง
์์ต๋๋ค. HIT/MISS/EXPIRED ๊ธฐ๋ก์ outcome tracker๋ง ๋ด๋นํฉ๋๋ค.
์ํฌํ๋ก์ฐ (watch add/remove/list/check)
./bin/stock-cli watch add --ticker NVDA --market US \
--entry-low 100 --entry-high 105 --stop 95 --target 130 --reentry 110 \
--note "๋ฒ ์ด์ค ๋ํ ๋๊ธฐ"
./bin/stock-cli watch add --ticker TSLA --market US --direction BEAR \
--stop 260 --target 200
./bin/stock-cli watch list --market US
./bin/stock-cli watch remove 3
./bin/stock-cli watch check --market US --dry-run --force
--dry-run : ํ๊ฐ๋ง ํ๊ณ ํ
๋ ๊ทธ๋จ์ ๋ณด๋ด์ง ์์ (์ํ๋ ์ ํํ ๊ฐฑ์ ).
--force : ์ฅ ์๊ฐ ๊ฒ์ดํธ๋ฅผ ๋ฌด์ํ๊ณ ๊ฐ์ ์คํ.
--market : US / KR ํ์ชฝ๋ง. ์๋ตํ๋ฉด ์์ชฝ ๋ชจ๋ (๊ฐ์ ์ฅ ์๊ฐ ๊ฒ์ดํธ ์ ์ฉ).
ํธ๋ฆฌ๊ฑฐ ๊ท์น
BULL ๊ธฐ๋ณธ, BEAR๋ ๋ฏธ๋ฌ๋ง๋ฉ๋๋ค. ๊ฐ๊ฒฉ P ๊ธฐ์ค:
| ํธ๋ฆฌ๊ฑฐ | BULL | BEAR | ๋น๊ณ |
|---|
| ENTRY | entry_low โค P โค entry_high | ๋์ผ (๋ฐฉํฅ ๋ฌด๊ด) | saved๋ ๊ตฌ๊ฐ, ์์ธก/ํฌ์ง์
์ ์ง์
๊ฐ ยฑ1% ๋ฐด๋ |
| STOP | P โค stop | P โฅ stop | |
| TARGET | P โฅ target | P โค target | |
| REENTRY | reentry ์๋์ ์๋ค๊ฐ ๋ค์ ์๋ก ๊ต์ฐจ (P โฅ reentry) | ๋์ผ | saved ์ ์ฉ |
์ค๋ณต ์ ๊ฑฐ / ์ฌ๋ฌด์ฅ (dedup / re-arm)
- ์ํ๊ฐ "๋ฏธ์ถฉ์กฑ โ ์ถฉ์กฑ"์ผ๋ก ๋ฐ๋๋ ์์น ์ฃ์ง(rising edge) ์์๋ง 1ํ ๋ฐํ.
- ์ถฉ์กฑ ์ํ๊ฐ ์ง์๋๋ฉด ์ฌ๋ฐํํ์ง ์์. ํ ๋ฒ ๋ฒ์ด๋ฌ๋ค๊ฐ ๋ค์ ์ง์
ํ๋ฉด ์ฌ๋ฌด์ฅ.
- 6์๊ฐ ์ฟจ๋ค์ด ๋ฐฑ์คํฑ: ์ง์ง ์์น ์ฃ์ง๋ผ๋ ์ง์ ์๋ฆผ์ผ๋ก๋ถํฐ 6์๊ฐ ์ด๋ด๋ฉด ์ต์ .
- ์ํ๋
state/watchlist_alerts.json์ ํค {source}:{ticker}:{market}:{trigger}๋ก
์ ์ฅ (์์์ ์ฐ๊ธฐ: temp + os.replace). ์ฌ๋ผ์ง ํญ๋ชฉ์ ํค๋ ์ ๋ฆฌ๋จ.
์ฅ ์๊ฐ ๊ฒ์ดํธ (๊ฑฐ๋์ ํ์ง ์๊ฐ, DST ์๋ ๋ฐ์)
- KR: 09:00โ15:30 KST, ํ์ผ (Asia/Seoul).
- US: 09:30โ16:00 ET + ๋ง๊ฐ ํ 30๋ถ EOD grace, ํ์ผ (America/New_York).
๊ฑฐ๋์ ํ์ง ์๊ฐ์ผ๋ก ํ๊ฐํ๋ฏ๋ก EDT/EST ์ ํ์ด ์๋ ๋ฐ์๋ฉ๋๋ค (EDT๋ ๋๋ต
22:30โ05:30 KST, EST๋ ๋๋ต 23:30โ06:30 KST์ ํด๋น).
- ๋ซํ ์์ผ๋ฉด ๊น๋ํ๊ฒ no-op (
--force๋ก ๋ฌด์ ๊ฐ๋ฅ).
ํ๊ตญ์ด ์๋ฆผ ํ์
ํธ๋ฆฌ๊ฑฐ๋น ํ ๊ฑด์ ํ๊ตญ์ด ํ
๋ ๊ทธ๋จ ๋ฉ์์ง. 4๊ฑด ์ด๊ณผ ๋ฐ์ ์ ํ ๊ฑด์ ๋ฌถ์
๋ค์ด์ ์คํธ๋ก ์ ์กํฉ๋๋ค (์ฑํ
๊ณผ๋ค ๋ฐฉ์ง).
๐ฅ ์ง์
๊ตฌ๊ฐ ๋๋ฌ | NVDA (US)
ํ์ฌ๊ฐ(์ง์ฐ/์ข
๊ฐ ๊ธฐ์ค): 102.30
๊ธฐ์ค์ : 100.00โ105.00
์ด๋ชจ์ง: ENTRY ๐ฅ ยท REENTRY ๐ ยท TARGET ๐ฏ ยท STOP โ ๏ธ
์ฝ๋ ์์น
scheduler/watchlist_store.py โ ์ ์ฅ DB + ํตํฉ ์์น๋ฆฌ์คํธ ๋ณํฉ.
scheduler/watchlist_monitor.py โ ํธ๋ฆฌ๊ฑฐ ํ๊ฐ + dedup + ๊ฒ์ดํธ + ์ ์ก.
scheduler/telegram_sender.py โ send_watch_alert (ENTRY/REENTRY ์ด๋ชจ์ง).
stock_cli.py โ watch add/remove/list/check ์๋ธ์ปค๋งจ๋.
scheduler/crontab.example โ EOD ์ฃผ๊ธฐ ํฌ๋ก ํญ๋ชฉ.