"ํด๊ฒฐ์ด ๊ฐ๊น์ธ์๋ก ๋น์ธ๊ฒ, ๋ฉ์๋ก ์ธ๊ฒ๋ง favorite์ ์ฐ๋ค" โ ์์ฌ ์๊ฐ์ ๋น๋กํ 3๋จ ํ๋ฅ ๋ฐด๋(์ฌ๋ค๋ฆฌ)๋ก ์ฌ์ ํด๊ฒฐ ์๋ ด(pre-resolution convergence)์ ์ํํ๋ค.
favorite = YES/NO ์ค ํ๋ฅ ๋์ ์ชฝ, p = favorite ๊ฐ๊ฒฉ, h = ํด๊ฒฐ๊น์ง ์์ฌ ์๊ฐ
BUY if ( 6 < h โค 24 AND 0.80 โค p โค 0.95) # ๋ฐด๋1
or ( 24 < h โค 72 AND 0.75 โค p โค 0.92) # ๋ฐด๋2
or ( 72 < h โค 168 AND 0.70 โค p โค 0.88) # ๋ฐด๋3
AND ฮp(์ต๊ทผ 6h) โฅ -0.01 # ๋ชจ๋ฉํ
๊ฒ์ดํธ: ํ๋ฝ ์ถ์ธ ์๋Favorite-longshot bias. ์์ธก์์ฅ ์ฐธ๊ฐ์๋ ๋ณต๊ถ์ฑ longshot์ ๊ณผ๋ํ๊ฐํ๊ณ favorite์ ๊ณผ์ํ๊ฐํ๋ค. 70~95% ๊ตฌ๊ฐ์ favorite์ ์คํ ํ๋ฅ ๋๋น ๊ตฌ์กฐ์ ์ผ๋ก ์ ํ๊ฐ๋์ด ์์ด favorite ๋งค์๋ +EV๋ค.
์ฌ์ ํด๊ฒฐ ์๋ ด. ํด๊ฒฐ์ด ๊ฐ๊น์์ง์๋ก ๋ถํ์ค์ฑ์ด ์ฌ๋ผ์ง๋ฉฐ ๊ฐ๊ฒฉ์ด 1.0์ผ๋ก ์๋ ดํ๋ค. cherry๊ฐ ์ธ์ฉํ Dune Analytics ๋ฐ์ดํฐ์ ๋ฐ๋ฅด๋ฉด ํด๊ฒฐ 24h ์ ์ ํ๋ 88.6% โ 4h ์ 94.2%. ์ด ๋ง์ง๋ง ์๋ ด ๊ตฌ๊ฐ์ "์๊ฐ๊ฐ์น ์๋ฉธ"์ด ์์ต ์์ฒ์ด๋ค.
์๊ฐ-ํ์ ๋น๋ก. ์์ฌ ์๊ฐ์ด ๊ธธ์๋ก ๋ฐ์ ๋ฆฌ์คํฌ๊ฐ ํฌ๋ค. ๊ฐ์ 0.93์ง๋ฆฌ favorite์ด๋ผ๋ ํ๋ฃจ ๋ค ํด๊ฒฐ๊ณผ ์ผ์ฃผ์ผ ๋ค ํด๊ฒฐ์ ๊ธฐ๋๊ฐ์ด ๋ค๋ฅด๋ค โ ๊ทธ๋ฐ๋ฐ cherry๋ ๊ฐ์ ๋ฐด๋๋ก ๊ฐ์ ๊ฐ๊ฒฉ์ ์ง๋ถํ๋ค. date๋ ์ด๋ฅผ ์๊ฐ ์ฌ๋ค๋ฆฌ๋ก ๊ต์ ํ cherry ๊ณ ๋ํ ์ ๋ต์ด๋ค.
cherry์์ ๋ฐฐ์ด ๊ฒ โ ์์ ํ 5๊ฐ์ง ํ์ :
| # | cherry ํ์ | date์ ์์ |
|---|---|---|
| โ | ์์ฌ ์๊ฐ๊ณผ ๋ฌด๊ดํ ๊ณ ์ ํ๋ฅ ๋ฐด๋ (30์ผ ๋จ์ 0.92๋ ๋งค์) | ์๊ฐ ์ฌ๋ค๋ฆฌ: ๋ฉ์๋ก ๋ฎ์ ๋ฐด๋๋ง ํ์ฉ |
| โก | --yes-only ์ด์์ผ๋ก NO-favorite ์์ฅ ์ ๋ฐ์ ๋ฒ๋ฆผ | ๊ธฐ๋ณธ์ favorite side ์๋ ์ ํ (YES/NO ์ค ๋์ ์ชฝ). --yes-only๋ A/B์ฉ ์ต์
์ผ๋ก ์ ์ง |
| โข | ํ๋ฝ ์ค์ธ favorite๋ ๋งค์ (๋จ์ด์ง๋ ์นผ๋ ) | ๋ชจ๋ฉํ ๊ฒ์ดํธ: ์ต๊ทผ 6h favorite ๋ณํ โฅ -0.01 ์ด์ด์ผ ์ง์ |
| โฃ | rapid_jump ์๊ตฌ skip (๊ธฐํ ์๊ตฌ ์์ค) | skip ๊ธฐ๋ก์ timestamp๋ฅผ ๋๊ณ 24h ์ฟจ๋ค์ด ํ ์ฌํ๊ฐ |
| โค | ํด๊ฒฐ 12h ์ ์ฒญ์ฐ โ ์ ํ๋๊ฐ ๊ฐ์ฅ ์ฌ๋ผ๊ฐ๋ ๋ง์ง๋ง ์๋ ด ๊ตฌ๊ฐ ํฌ๊ธฐ | time exit์ ํด๊ฒฐ 2h ์ ์ผ๋ก ์ฐ์ฅ |
banana์์ ๋ฐฐ์ด ๊ฒ. ๊ฐ์ ๊ธฐ๋ฐ ์ค๋
์ท ์๋์ฐ๋ Jenkins ์ค๋จ ์ "15๋ถ ์๋์ฐ"๊ฐ ๋ช ์๊ฐ์ ์ปค๋ฒํ๋ ๋ฒ๊ทธ โ timestamp ๊ธฐ๋ฐ ์๋์ฐ + ์ปค๋ฒ๋ฆฌ์ง ๊ฒ์ฆ์ผ๋ก ์์ . cold-start ์ ๊ด๋ํ ํด๋ฐฑ์ด ์ฌ์ค์ ๋ฌด์ ๋ต ํดํ๋ก ์ด์ด์ง๋ ๋ฌธ์ ๋ ์๋์ฐ invalid๋ฉด ์ง์
ํ์ง ์๋ ์์น์ผ๋ก ๊ต์ฒดํ๊ณ , ๋์ CLOB prices-history ๋ฐฑํ๋ก cold start ์์ฒด๋ฅผ ์ค์ธ๋ค.
| ์กฐ๊ฑด | ๊ฐ (๊ธฐ๋ณธ) | ์ด์ |
|---|---|---|
| ์ ๋์ฑ / 24h ๊ฑฐ๋๋ | liquidity โฅ $15,000 AND volume24hr โฅ $5,000 | ์ฒด๊ฒฐ ๊ฐ๋ฅ์ฑ ํ๋ณด, ์ ์ ๋์ฑ์ ๊ฐ์ง ๊ฐ๊ฒฉ ๋ฐฐ์ |
| favorite side ์ ํ | YES/NO ์ค ํ๋ฅ ๋์ ์ชฝ (--yes-only ์ index 0๋ง) | NO-favorite ์์ฅ ์ ๋ฐ์ ๋ฒ๋ฆฌ์ง ์๋๋ค (cherry ํ์ โก) |
| ์๊ฐ ์ฌ๋ค๋ฆฌ (์์ฌ h, favorite ๊ฐ๊ฒฉ p) | 6 < h โค 24: p โ [0.80, 0.95] / 24 < h โค 72: p โ [0.75, 0.92] / 72 < h โค 168: p โ [0.70, 0.88] (์๋ ํฌํจ) | ์์ฌ ์๊ฐ์ด ๊ธธ์๋ก ๋ฐ์ ๋ฆฌ์คํฌ๊ฐ ํฌ๋ฏ๋ก ๋ฉ์๋ก ๋ฎ์ ๋ฐด๋๋ง ํ์ฉ (cherry ํ์ โ ) |
| ๋ชจ๋ฉํ ๊ฒ์ดํธ | ์ต๊ทผ 6h ์๋์ฐ favorite ๊ฐ๊ฒฉ ๋ณํ โฅ -0.01. ์๋์ฐ invalid(ํฌ์ธํธ < 5 ๋๋ ์ปค๋ฒ๋ฆฌ์ง < 3h)๋ฉด ๋ฐฑํ ์๋, ๊ทธ๋๋ invalid๋ฉด ์ง์ ๊ธ์ง | ๋จ์ด์ง๋ ์นผ๋ ํํผ (cherry ํ์ โข), ๋ฌด์ ๋ต ํดํ ๋ฐฉ์ง (banana ๊ตํ) |
| ์ฌ์ง์ ์ฟจ๋ค์ด | HOLDING ์์ AND ๋ง์ง๋ง ๋งค๋/skip์ด 24h ์ด์ | ์์ ์งํ ๋ฐ๋ณต ์ง์ ๋ฐฉ์ง, ์๊ตฌ skip ๋์ ์ฌํ๊ฐ ํ์ฉ (cherry ํ์ โฃ) |
| ์ฃผ๋ฌธ ์ฌ๊ฒ์ฆ | ์ฃผ๋ฌธ ์ง์ midpoint ์ฌ์กฐํ, ๋ฐด๋ ์ํ ์ด๊ณผ ์ rapid_jump skip (์ฟจ๋ค์ด TTL), ํํ ๋ฏธ๋ฌ ์ ๋จ์ skip, 5์ฃผ ์ต์ ์ฃผ๋ฌธ ์ถฉ์กฑ | ์ค์บ๊ณผ ์ฃผ๋ฌธ ์ฌ์ด์ ๊ฐ๊ฒฉ ๋ณ๋ ๋์ |
์ฐ์ ์์ ์์ผ๋ก ๋งค ์ฌ์ดํด ๊ฒ์ฌํ๋ค.
| ์ฐ์ ์์ | ์กฐ๊ฑด | ๊ฐ | exit_reason |
|---|---|---|---|
| 1 | ์์ | P&L โค -8% | stop_loss |
| 2 | ์ต์ | ํ์ฌ๊ฐ โฅ min(๋งค์๊ฐ ร 1.12, 0.99) | take_profit |
| 3 | ํธ๋ ์ผ๋ง ์คํ | ํ์ฌ๊ฐ < ์ต๊ณ ๊ฐ ร 0.95 | trailing_stop |
| 4 | ์๊ฐ ์ฒญ์ฐ | ํด๊ฒฐ๊น์ง < 2h | time_exit |
| - | ํด๊ฒฐ๋ ์์ฅ leak | midpoint ์กฐํ ์คํจ + endDate 24h ์ด์ ๊ฒฝ๊ณผ โ EXPIRED ๋ง๊ฐ (P&L ๋ฏธํ์ , ์๋ redeem) | resolved_unredeemed |
| env | ๊ธฐ๋ณธ | ์๋ฏธ |
|---|---|---|
POLYBOT_BUY_AMOUNT | 5.0 | 1ํ ๋งค์ USDC |
POLYBOT_MIN_LIQUIDITY | 15000 | ์ต์ ์ ๋์ฑ $ |
POLYBOT_MIN_VOLUME_24H | 5000 | ์ต์ 24h ๊ฑฐ๋๋ $ |
POLYBOT_ENTRY_HOURS_MIN | 6 | ์ง์ ์ต์ ์์ฌ ์๊ฐ (์ดํ ๊ธ์ง) |
POLYBOT_LADDER_H1 / H2 / H3 | 24 / 72 / 168 | ์ฌ๋ค๋ฆฌ ๊ตฌ๊ฐ ์ํ ์๊ฐ |
POLYBOT_BAND1_MIN / BAND1_MAX | 0.80 / 0.95 | ๋ฐด๋1 (6~24h) |
POLYBOT_BAND2_MIN / BAND2_MAX | 0.75 / 0.92 | ๋ฐด๋2 (24~72h) |
POLYBOT_BAND3_MIN / BAND3_MAX | 0.70 / 0.88 | ๋ฐด๋3 (72~168h) |
POLYBOT_MOMENTUM_LOOKBACK_HOURS | 6 | ๋ชจ๋ฉํ ์๋์ฐ |
POLYBOT_MOMENTUM_MIN_CHANGE | -0.01 | favorite ๋ณํ ํํ |
POLYBOT_TAKE_PROFIT | 0.12 | ์ต์ % (๋ชฉํ๊ฐ 0.99 ์บก) |
POLYBOT_STOP_LOSS | -0.08 | ์์ % |
POLYBOT_TRAILING_STOP_ENABLED | true | ํธ๋ ์ผ๋ง on/off |
POLYBOT_TRAILING_STOP_PERCENT | 0.05 | ์ต๊ณ ์ ๋๋น ํ๋ฝ๋ฅ |
POLYBOT_EXIT_HOURS | 2 | ์๊ฐ ์ฒญ์ฐ ๊ธฐ์ค |
POLYBOT_REENTRY_COOLDOWN_HOURS | 24 | ์ฌ์ง์ ์ฟจ๋ค์ด |
POLYBOT_HISTORY_BACKFILL | true | prices-history ๋ฐฑํ |
POLYBOT_MAX_POSITIONS | -1 | ์ต๋ ๋์ ํฌ์ง์ |
POLYBOT_EXCLUDED_CATEGORIES | "" | ์ ์ธ ์นดํ ๊ณ ๋ฆฌ (๋น ๊ฐ = ๋นํ์ฑ) |
POLYBOT_YES_ONLY | false | Yes(index 0) ํ ํฐ๋ง ๋งค์ (CLI --yes-only๊ฐ ์ฐ์ ) |
LOG_LEVEL | INFO | ๋ก๊ทธ ๋ ๋ฒจ |
max_positions๋ ์ด๋ ์ ํ์ผ ๋ฟ์ด๋ค.1) ์๋ฎฌ๋ ์ด์
โ uv run python main.py run --simulate --job sim์ Jenkins 3~5๋ถ ์ฃผ๊ธฐ๋ก 1~2์ฃผ ์ถ์ . data/sim/trades_sim.db + ์๋ณ CSV์์ ์ง์
์ฌ์ ๋ณ ์ฑ๊ณผ๋ฅผ ๋ถ๋ฆฌ ์ง๊ณํ๋ค. ํ๊ณ ์ ์ฉ ์ปฌ๋ผ(strategy_name="date", mode="live"/"sim", volume_24h_at_buy, ladder_band_at_buy 1/2/3, momentum_at_buy)์ด tradesยทCSV์ ํจ๊ป ๊ธฐ๋ก๋๋ฏ๋ก entry_reason ๋ฌธ์์ด ํ์ฑ ์์ด ์ฌ๋ค๋ฆฌ ๋จ๋ณยท๋ชจ๋ฉํ
๊ตฌ๊ฐ๋ณ ์ง๊ณ๊ฐ ๊ฐ๋ฅํ๋ค.
2) ์์ก ์ค์ โ POLYBOT_BUY_AMOUNT=5๋ก ์ค์ฃผ๋ฌธ 2์ฃผ. ์๋ฎฌ๋ ์ด์
๊ณผ์ ์ฒด๊ฒฐ ํธ์ฐจ(midpoint ๊ฐ์ vs ์ค์ )๋ฅผ ํ์ธํ๋ค.
3) ํ๋จ ๊ธฐ์ค โ 4์ฃผ, 30+ ๊ฑฐ๋ ๊ธฐ์ค:
exit_reason ๋ถํฌ: trailing_stop์ด ๊ณผ๋ฐ์ด๋ฉด whipsaw ์์ฌ โ ํธ๋ ์ผ๋ง ์ง์ฐ/์ํ ๊ฒํ 4) cherry์์ A/B โ ๊ฐ์ ๊ธฐ๊ฐ cherry ๊ณ์ ์ฑ๊ณผ์ ๋น๊ต. ๋์ผ GTC midpoint ์ฒด๊ฒฐ ๊ฐ์ ์ ์ ์งํ์ผ๋ฏ๋ก ํ๊ณ ๊ธฐ์ค์ด ๊ฐ๋ค.
๋ฒ ๋ฆฌ์์ด์ ํ๋ณด (job ๋ถ๋ฆฌ๋ก ๋์ ์ด์ ๊ฐ๋ฅ):
| ์ | ์ด๋ฆ | ๋ณ๊ฒฝ env |
|---|---|---|
| A-1 | date-1: ์ฌ๋ค๋ฆฌ ์ข๊ฒ (๋จ๊ธฐ ์ง์ค) | POLYBOT_LADDER_H3=24 (๋ฐด๋1๋ง ์ฌ์ฉ, h โค 24๋ง ์ง์
) |
| A-2 | date-2: YES-only | CLI --yes-only ๋๋ POLYBOT_YES_ONLY=true (cherry ์ด์ ๋ชจ๋์ ์ง์ ๋น๊ต) |
| A-3 | date-3: trailing off + ํ๋ | POLYBOT_TRAILING_STOP_ENABLED=false (์๋ ด์ 2h ์ ๊น์ง ๋๊น์ง ํ์ฐ๊ณ -8% ์์ ๋ง ์ฌ์ฉ) |
#!/bin/bash export POLYBOT_BUY_AMOUNT=20 export POLYMARKET_PRIVATE_KEY=<Jenkins credential> export POLYMARKET_FUNDER_ADDRESS=<Jenkins credential> export LOG_LEVEL=INFO # ์ ๋ต ์ฃผ์ env ์์ export POLYBOT_MOMENTUM_MIN_CHANGE=-0.01 export POLYBOT_REENTRY_COOLDOWN_HOURS=24 export POLYBOT_TRAILING_STOP_PERCENT=0.05 cd ./golden-date uv sync uv run python ./main.py run
Jenkins job๋ณ๋ก DB/๋ก๊ทธ๋ฅผ ๋ถ๋ฆฌํ๋ ค๋ฉด --job <์ด๋ฆ>์ ๋ถ์ธ๋ค. YES ํ ํฐ๋ง ๋งค์ํ๋ ค๋ฉด --yes-only๋ฅผ ์ถ๊ฐํ๋ค.