KBO 판타지 룰북
2026 시즌 · 정식 규정 (2026-09-06 판)
축구 판타지 게임의 얼개를 KBO로 옮긴 게임입니다. 스물한 명을 사서 화요일 저녁에 잠그고, 그 주 내내 그 선수들이 실제로 친 안타와 잡은 아웃으로 점수를 받습니다.
| 스쿼드 | 21명 (150억 예산) |
| 매주 출전 | 야수 9명 + 투수 9명 = 18명 (야수 3명 벤치) |
| 마감 | 화요일 18:30, 주 1회 고정 |
| 정산 | 매일 밤, 그날 경기 종료 후 |
| 참가비 | 없음 |
2026 시즌 잔여분부터 시작하는 사설 리그입니다. 상금은 없고, 처음엔 1인 플레이로 돌린 뒤 참가자가 모이면 확장합니다.
제1조 — 스쿼드를 짠다
150억으로 스물한 명.
| 포지션 | 보유 | 매주 출전 | 비고 |
|---|---|---|---|
| 포수 | 2 | 1 | — |
| 내야수 | 5 | 4 | 1·2·3루·유격 각 1 |
| 외야수 | 5 | 3 | 좌·중·우 각 1 |
| 지명타자 | — | 1 | 포지션 자격 불문, 아무 야수나 |
| 선발투수 | 5 | 5 | 전원 출전, 순위를 매긴다 |
| 구원투수 | 4 | 4 | 전원 출전, 순위를 매긴다 |
| 합계 | 21 | 18 | 야수 3명은 벤치 |
선수 몸값은 3.5억에서 15억 사이입니다. 최저가 스물한 명을 채우는 데 73.5억이 드니, 남은 76.5억을 어디에 몰아줄지가 첫 번째 고민이 됩니다. 15억짜리 특급 둘을 사면 나머지 열아홉 명을 120억으로 메워야 합니다.
보유 제한이 셋 있습니다.
| 제한 | 상한 | 왜 |
|---|---|---|
| 한 구단 | 3명 | KBO는 열 개 구단뿐이라, 제한이 없으면 그해 1위 팀 라인업을 통째로 복사하는 게 정답이 된다. 세 명이면 최소 다섯 구단에서 뽑아야 한다 |
| 응원팀 | 4명 | 참가자마다 응원팀을 하나 고르고, 그 구단만 한 명 더 데려올 수 있다. 내 팀 선수를 못 쓰는 판타지는 재미가 없다 |
| 외국인 | 3명 | 외국인과 아시아쿼터를 합쳐 세 명까지. KBO 구단은 넷을 쓰지만 판타지에서는 셋으로 묶는다 |
응원팀은 편성실에서 언제든 바꿀 수 있지만, 그 구단을 네 명 데리고 있는 동안에는 못 옮깁니다. 옮기는 순간 세 명 상한을 넘겨버리기 때문입니다.
몸값은 산 값으로 고정됩니다. 데려올 때의 몸값이 그 선수의 내 장부가이고, 나중에 시장 몸값이 바뀌어도 내 예산 계산에는 산 값이 쓰입니다. 내보내면 그 장부가는 사라지고, 같은 선수를 다시 데려올 때는 그날의 몸값으로 삽니다.
제2조 — 타자는 실제 라인업처럼 짜고, 타순이 배율이 된다
야수는 매주 아홉 명을 냅니다. 유틸 자리는 없습니다. 실제 야구 라인업과 똑같이 포수 / 1루수 / 2루수 / 3루수 / 유격수 / 좌익수 / 중견수 / 우익수를 한 명씩 채우고, 지명타자 한 자리만 포지션 자격과 무관하게 아무 야수나 넣습니다. 남는 두 명이 벤치입니다.
그리고 아홉 명에게 1번부터 9번까지 타순을 매깁니다. 타순은 장식이 아니라 배율입니다. 타자 점수를 두 성분으로 쪼갠 뒤, 타순마다 다른 배율을 겁니다.
- 출루 성분 — 볼넷·사구·단타·도루, 그리고 삼진·아웃 감점
- 장타 성분 — 2루타·3루타·홈런
| 타순 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 합 |
|---|---|---|---|---|---|---|---|---|---|---|
| 출루 | 1.40 | 1.30 | 1.05 | 0.85 | 0.90 | 0.90 | 0.85 | 0.80 | 0.95 | 9.0 |
| 장타 | 0.80 | 0.85 | 1.25 | 1.40 | 1.20 | 1.05 | 0.90 | 0.85 | 0.70 | 9.0 |
두 줄 모두 합이 9.0입니다. 평균이 1.0이라, 타순을 어떻게 짜든 총점의 눈금 자체는 변하지 않고 배치를 잘했느냐만 반영됩니다.
감점을 왜 출루 배율에 묶었나. 장타 배율만 올리고 감점을 그대로 두면 4번 자리가 공짜 이득이 되어 전원 거포를 4번에 앉히는 게 정답이 됩니다. 감점까지 출루 배율에 태우면 1번 자리는 "삼진 먹지 말고 나가라"를 요구받게 되는데, 야구적으로도 정확히 그렇습니다.
제3조 — 투수는 벤치 대신 순위를 매긴다
이 게임에만 있는 규칙입니다.
야수는 벤치가 있지만 투수는 없습니다. 선발 다섯 명, 구원 네 명이 매주 전원 출전하고, 대신 1번부터 순위를 매깁니다. 위쪽에 앉힌 투수일수록 점수를 더 많이 쳐줍니다.
| 순위 | 1번 | 2번 | 3번 | 4번 | 5번 | 합 |
|---|---|---|---|---|---|---|
| 선발투수 | 1.4 | 1.2 | 1.0 | 0.8 | 0.6 | 5.0 |
| 구원투수 | 1.3 | 1.1 | 0.9 | 0.7 | — | 4.0 |
타순 배율과 같은 원리로, 배율의 합이 인원수와 정확히 같습니다.
그래서 무엇을 예측해야 하나. KBO는 5인 로테이션이라, 어떤 주엔 우리 에이스가 두 번 던지고 어떤 주엔 한 번만 던집니다. 이번 주에 두 번 등판할 선발을 1번 자리에 앉히는 것이 이 게임의 핵심 기술입니다. 6연전 배치, 우천취소로 밀린 일정, 감독의 로테이션 조정을 읽어야 합니다.
제4조 — 포지션 자격
2026 시즌에 그 포지션으로 선발 5경기 이상 나갔으면 자격이 생깁니다. 실제 출장 기록(lineups)에서 자동으로 산출합니다.
여러 포지션을 소화한 선수는 자격을 여러 개 갖습니다. 이게 스쿼드 유연성이라는 실제 자산이 됩니다 — 2루와 유격을 모두 볼 수 있는 선수 하나가 매주 라인업을 다르게 짤 여지를 만들어 줍니다.
지명타자 자리만은 자격을 보지 않습니다. 어느 야수든 넣을 수 있습니다.
제5조 — 한 주는 이렇게 돈다
KBO의 월요일 휴식일이 판타지 게임의 리듬과 정확히 맞아떨어집니다.
| 월 | 화 | 수 | 목 | 금 | 토 | 일 |
|---|---|---|---|---|---|---|
| 리그 휴식 | 18:30<br>스쿼드 잠금 | 경기 | 경기 | 경기 | 경기 | 경기<br>주간 마감 |
화요일 18시 30분, 그 주 첫 경기가 시작되는 순간 라인업·타순·투수 순위·캡틴·칩이 모두 잠기고 일요일까지 손댈 수 없습니다.
왜 월요일이 아니라 화요일 저녁에 잠그느냐면, KBO가 선발투수를 보통 전날 예고하기 때문입니다. 월요일 오전에 잠그면 화요일 선발이 누군지도 모르는 채로 짜야 합니다. 화요일 저녁이면 최소한 첫 경기 선발은 확정된 상태에서 결정하고, 수요일 이후는 여전히 예측의 영역으로 남습니다.
이적 창구는 상시 열려 있습니다. 언제 넣든 화요일 18:30 스냅샷 시점에 발효됩니다. 18시 31분에 넣은 교체는 그 주엔 아무 일도 일어나지 않고 다음 주 화요일에 발효됩니다.
점수는 매일 밤 나옵니다. 화요일 저녁 마감은 엔트리를 고치는 마지막 시각일 뿐이고, 그날 경기가 끝나면 23:30에 그날 점수가 바로 정산됩니다. 연장이나 서스펜디드로 늦게 끝난 경기는 새벽 2시에 한 번 더 보정합니다.
제6조 — 점수는 세 층으로 쌓인다
기록지에 남는 것, 상황이 얹어준 것, 그날의 주인공.
| 층 | 비중 (목표 / 실측) | 무엇을 보상하나 |
|---|---|---|
| 1층 기본 | 50% / 51.8% | 안타·볼넷·삼진 같은 결과에 붙는 점수. 배점은 KBO 실제 데이터에서 뽑은 득점 가치를 쓴다. |
| 2층 상황 | 30% / 28.2% | 만루에서 친 2루타는 주자 없을 때보다 더, 1사 1·3루 병살은 더 크게. RE24에서 1층 기대값을 뺀 상황 프리미엄만 따로 계산한다. |
| 3층 보너스 | 20% / 20.0% | 경기별 RE24 합계 상위 세 명에게 3·2·1점. 기록지에 잘 안 남는 불펜의 위기 탈출이 여기서 보상된다. |
실측은 2026 시즌 전 타석을 실제로 돌려 나온 값입니다. 1층과 2층은 같은 배율을 씁니다 — 1층이 그 결과의 평균 득점가치이고 2층이 실제값에서 그 평균을 뺀 나머지라, 둘을 더하면 그 타석의 실제 RE24가 되어야 하기 때문입니다. 배율을 따로 걸면 이 항등식이 깨져서 주자 없을 때의 홈런 같은 타구가 부당하게 깎입니다. 그래서 50 : 30 은 억지로 맞추지 않고 데이터가 준 51.8 : 28.2 를 그대로 받았습니다. 1.8%p 차이를 없애려고 게임의 셈법을 비틀 이유가 없습니다.
1층 배점을 남의 리그에서 빌려오지 않습니다
흔한 판타지 야구 게임은 홈런 4점, 안타 1점처럼 눈대중으로 배점을 정합니다. 이 게임은 다릅니다. 2026 시즌 전 경기의 모든 타석을 모아, "주자 1·3루 1아웃" 같은 24가지 상황마다 그 뒤로 실제 몇 점이 났는지를 직접 세서 배점을 만듭니다.
그래서 볼넷과 안타의 점수 차이, 삼진과 일반 아웃의 감점 차이가 전부 KBO의 실제 득점 환경에서 나옵니다. 미국 리그 숫자를 가져다 쓰지 않습니다.
투수는 자기가 통제한 것으로 평가합니다
투수가 실제로 통제하는 건 삼진·볼넷·피홈런 세 가지뿐이고, 인플레이 타구의 결과는 상당 부분 수비와 운의 몫입니다. 실점을 그대로 감점하면 수비가 나쁜 팀 투수를 산 사람이 부당하게 손해를 봅니다. 그래서 FIP 성분(삼진·볼넷·피홈런)에 7, 실점에 3의 비중을 둡니다.
수비는 포수만 봅니다
야수 실책은 점수에 넣지 않습니다. 기록 데이터가 "3루수 실책"이라고만 알려주고 그게 누구였는지는 알려주지 않기 때문입니다. 포수는 예외입니다.
| 포수 전용 항목 | 점수 |
|---|---|
| 도루 저지 | +2 |
| 도루 허용 | −0.5 |
| 포일 | −1 |
KBO 주전 포수는 열 명뿐이고 타격은 대체로 약합니다. 포수를 강제 슬롯으로 두면서 이 항목까지 없애면 그 자리가 그냥 세금이 되어버립니다.
판정 방법 — 도루 저지는 문자중계 텍스트의 포수-> 표기로 투수 견제사와 구분합니다. 그 순간 마스크를 쓰고 있던 포수가 누구인지는 교체 이벤트를 순서대로 적용해 특정합니다.
캡틴
매주 한 명을 캡틴으로 지정하면 그 주 점수가 2배가 됩니다. 부캡틴도 지정하는데, 캡틴이 그 주 한 경기도 못 나왔을 때만 승계합니다.
제6조의2 — 확정 배점표
2026 정규시즌 656경기 51,725타석을 전부 돌려 확정했습니다. 여기 적힌 값은 슬롯 눈금 계수를 곱하기 전의 원점수입니다. 마지막에 제7조의 계수를 한 번 곱하면 실제로 받는 점수가 됩니다.
1층 — 타석 결과 배점
출장 기본점 +0.98 (그날 타석에 한 번이라도 서면 지급). 여기에 타석마다 아래 점수를 더합니다.
| 결과 | 점수 | 시즌 표본 |
|---|---|---|
| 홈런 | +2.15 | 1,238 |
| 3루타 | +1.53 | 189 |
| 2루타 | +1.12 | 2,119 |
| 단타 | +0.67 | 8,582 |
| 볼넷 | +0.44 | 4,789 |
| 고의4구 | +0.32 | 121 |
| 몸에 맞는 공 | +0.46 | 763 |
| 삼진 후 출루(낫아웃) | +0.08 | 41 |
| 실책 출루 | +0.60 | 447 |
| 야수선택 | +0.13 | 1,599 |
| 희생플라이 | -0.21 | 401 |
| 희생번트 | -0.11 | 570 |
| 일반 아웃 | -0.38 | 19,980 |
| 삼진 | -0.42 | 9,919 |
| 병살타 | -1.18 | 959 |
2층 — 상황이 얹거나 깎는 점수
같은 결과라도 주자와 아웃카운트에 따라 실제로 만든 득점가치가 다릅니다. 그 차이만 따로 계산해 얹습니다.
| 상황 | 1층 | 2층 | 합 |
|---|---|---|---|
| 무사 만루 홈런 | +2.15 | +0.62 | +2.77 |
| 2사 주자 없이 홈런 | +2.15 | -0.86 | +1.29 |
| 1사 만루 2루타(2타점) | +1.12 | +1.10 | +2.22 |
| 무사 주자 없이 2루타 | +1.12 | -0.24 | +0.88 |
| 2사 2·3루 단타(2타점) | +0.67 | +1.38 | +2.06 |
| 무사 주자 없이 단타 | +0.67 | -0.12 | +0.55 |
| 1사 1·3루 병살 | -1.18 | -0.55 | -1.73 |
| 무사 1루 병살 | -1.18 | +0.02 | -1.16 |
| 2사 만루 삼진 | -0.42 | -0.74 | -1.16 |
| 무사 주자 없이 삼진 | -0.42 | +0.06 | -0.36 |
투수 배점
FIP 성분에 1.4, 실점에 0.6을 이미 곱한 값입니다 (룰북의 7 : 3).
| 항목 | 점수 |
|---|---|
| 아웃 1개 (=1/3이닝) | +1.60 |
| 선발 등판 | +2.00 |
| 탈삼진 | +0.56 |
| 볼넷·몸에 맞는 공 | -3.50 |
| 피홈런 | -11.20 |
| 자책점 | -0.60 |
| 승리 | +1.00 |
| 세이브 | +2.00 |
| 홀드 | +1.50 |
희생플라이·희생번트가 일반 아웃보다 덜 깎이는 이유 — 셋 다 아웃이지만 주자를 진루시키거나 불러들인 만큼 남은 이닝의 기대득점이 덜 줄어듭니다. 그 차이가 그대로 배점 차이가 됩니다. 반대로 이 값들이 플러스가 아닌 이유도 같습니다. 무사 3루에서 희생플라이로 1점을 뽑아도, 애초에 무사 3루라는 상황이 품고 있던 기대득점(1.51점)보다는 적게 거둔 것이기 때문입니다.
투수 배점이 타자보다 큰 것처럼 보이는 이유 — 투수는 한 경기에 아웃을 15~20개 잡으니 원점수 자체가 크게 나옵니다. 이 격차는 제7조의 슬롯 계수(선발 0.49)가 마지막에 정리합니다.
득점기대값 행렬 — 2층의 근거
1층 배점도 2층 상황 점수도 전부 이 표에서 나옵니다. 2026 시즌 51,717타석에서 직접 셌습니다.
| 주자 | 0아웃 | 1아웃 | 2아웃 |
|---|---|---|---|
| 주자 없음 | 0.580 | 0.302 | 0.110 |
| 1루 | 1.008 | 0.599 | 0.255 |
| 2루 | 1.261 | 0.841 | 0.366 |
| 3루 | 1.514 | 1.115 | 0.400 |
| 1·2루 | 1.576 | 1.108 | 0.497 |
| 1·3루 | 1.926 | 1.343 | 0.541 |
| 2·3루 | 2.281 | 1.580 | 0.662 |
| 만루 | 2.435 | 1.859 | 0.895 |
이 표를 만들 때 한 번 크게 틀렸습니다. 그 타석 자체로 난 득점을 빼고 세는 바람에 만루 무사가 1.65점, 2사 3루가 0.17점으로 나왔습니다. 3루 주자를 불러들이는 값이 통째로 사라진 겁니다. 그 위에서 뽑은 배점은 상황을 거의 반영하지 못했습니다 — 2사 만루 삼진의 감점이 주자 없을 때 삼진과 사실상 같았습니다. 2026-09-05에 바로잡았습니다.
하루 점수를 실제로 계산해보면
어느 내야수가 하루에 무사 만루 홈런 하나, 무사 주자 없이 단타 하나, 삼진 둘(하나는 주자 없이, 하나는 2사 만루)을 기록했다고 합시다.
| 계산 | |
|---|---|
| 출장 기본점 | +0.98 |
| 장타 성분 | 만루 홈런 +2.77 |
| 출루 성분 | 단타 +0.55, 삼진 −0.36, 삼진 −1.16 → −0.96 |
여기에 타순 배율이 붙습니다. 출장 기본점에는 배율을 태우지 않습니다.
| 타순 | 계산 | 원점수 | 내야 계수 ×1.30 |
|---|---|---|---|
| 4번 | 0.98 + 0.85×(−0.96) + 1.40×2.77 | 4.04 | 5.27점 |
| 3번 | 0.98 + 1.05×(−0.96) + 1.25×2.77 | 3.43 | 4.47점 |
| 1번 | 0.98 + 1.40×(−0.96) + 0.80×2.77 | 1.85 | 2.41점 |
같은 날, 같은 기록인데 4번에 앉혔으면 5.27점이고 1번에 앉혔으면 2.41점입니다. 거포를 1번에 두면 손해라는 것이 규칙이 아니라 산수로 나옵니다.
배점표를 다시 뽑으려면python3 calibrate.py(층 계수·슬롯 계수 재적합) →python3 pricing.py(몸값 재산정) →python3 export_prices.py순서로 돌립니다. 위 표는python3 scoresheet.py --md의 출력을 그대로 붙인 것이라 사람이 손으로 옮겨 적는 자리가 없습니다.
제7조 — 슬롯 눈금 계수
포수 1.85 / 내야 1.30 / 외야 1.37 / 선발 0.49 / 구원 1.15
그냥 두면 열 팀이 보유할 계층의 주당 평균이 선발 16.3점, 포수 4.3점으로 네 배 벌어집니다. 자리 하나의 무게가 세 배 차이 나면 포수 슬롯은 자리만 채우는 칸이 됩니다.
슬롯마다 계수를 곱해 평균을 8점으로 맞추면, 자리 안의 순서는 하나도 안 바뀌고 자리 끼리 비교하는 눈금만 맞습니다. 타순 배율과 투수 순위 배율에서 합을 인원수에 맞춘 것과 똑같은 처리입니다.
⚠️ 계수는 가격이 아니라 배점에 겁니다. 값만 깎고 점수를 그대로 두면 그 자리가 '싸고 많이 주는' 자리가 되어 오히려 더 몰립니다. 실제로 그렇게 짜봤다가 선발이 예산의 35%로 점수의 52%를 먹었습니다.
검산 — 계수 적용 후 다섯 슬롯의 보유계층 주당 평균이 정확히 8.00점으로 모입니다. 다섯 자리가 예산도 점수도 고르게 나눠 갖고, 버려지는 자리가 없습니다.
외야 계수는 정원을 넷에서 다섯으로 늘리면서 1.21에서 1.37로 올랐습니다. 열 팀이 보유할 계층이 마흔 명에서 쉰 명으로 넓어져 그 계층의 평균이 내려간 만큼을 되돌린 것입니다.
제8조 — 이적과 칩
이적은 주 6명까지 무료이고, 그보다 많이 하면 한 명당 4점을 깎습니다. 이적권 소진은 신청 시점이 아니라 발효 기준으로 셉니다 — 마감 직전에 몰아 넣어 두 주치를 한꺼번에 쓰는 편법을 막기 위해서입니다. 파는 값은 산 값 그대로입니다.
| 칩 | 장수 | 효과 |
|---|---|---|
| 에이스 등판 | 1 | 그 주 캡틴 점수가 2배 대신 3배 |
| 리빌딩 | 2 | 그 주 이적 횟수 제한 해제 (전반기 1장, 후반기 1장) — 2027 시즌부터 |
리빌딩은 2026에는 열지 않습니다. 반기별 한 장인데 2026은 잔여 시즌만 도니 통째로 후반기라 실제로는 한 장뿐이고, 시즌 중에 선수 구성을 통째로 바꾸는 재미를 반 시즌짜리에 억지로 끼워넣을 이유가 없다고 봤습니다.
칩은 적게 시작합니다. 한번 준 걸 나중에 뺏기가 어려워서입니다. 확대 엔트리·임시 엔트리·더블헤더 칩은 다음 시즌 후보로 남겨뒀습니다.
제9조 — 몸값은 어떻게 매기나
2026-09-05에 실제 숫자를 보고 세 군데를 고쳤습니다.
1. 주당 기대점수부터 뽑습니다. 2026 정규시즌 656경기를 점수 엔진으로 돌려 선수별 주당 기대점수를 냅니다. (주당 = 총점 × 6 ÷ 그 선수 소속 구단이 소화한 경기 수) 세 층과 포수 수비를 모두 합산합니다 — 처음엔 3층 보너스를 빼고 세는 바람에 점수의 20%가 몸값에 반영되지 않았고, 기록지에 잘 안 남고 3층에서 보상받는 불펜 유형이 통째로 저평가됐습니다.
2. 표본은 자르지 않고 당깁니다. 150타석을 하한으로 잘랐더니 포수 풀이 11명으로 줄어 스쿼드가 아예 안 짜였습니다 — 백업 포수는 150타석을 못 채웁니다. 그래서 두 단계로 나눴습니다.
| 기준 | |
|---|---|
| 풀 진입 | 타자 50타석 / 투수 10이닝 |
| 완전 신뢰 | 타자 150타석 / 투수 30이닝 |
| 그 사이 | w = n / (n + 기준)으로 풀 중앙값 쪽으로 당긴다 |
소표본 백업이 반짝 활약으로 1위를 먹는 사고를 막는 장치입니다.
3. 값은 등수가 아니라 대체수준 대비(VORP)로 매깁니다. 슬롯별 백분위 방식은 포수 1위와 내야 1위를 똑같이 15억으로 만드는데, 주당 점수는 11점 대 20점입니다. 그 상태로 최적화를 돌리면 포수·구원을 최저가로 버리는 게 언제나 이겼습니다. 슬롯 하나가 통째로 세금이 되는 겁니다.
대체수준은 열 팀이 다 채우고 난 자리, 즉 슬롯별 (10 × 정원)번째 선수로 잡습니다. 얕은 풀은 대체수준이 낮아 상위 선수 값이 저절로 올라가므로 포수 희소성은 그대로 살아 있습니다.
price = 3.5 + 11.5 × (VORP / 리그 최대 VORP)
4. 시즌 전 산정은 이걸로 끝이고 다시 하지 않습니다. 시즌 중에는 아래 제9조의2대로 매주 조금씩만 움직입니다. 이미 데려온 선수는 산 값으로 고정되므로(제1조), 시세가 움직여도 짜둔 스쿼드가 예산 초과로 깨지는 일은 없습니다.
제9조의2 — 시즌 중 몸값은 매주 이렇게 움직인다
한 주가 끝나면 그 주 성적으로 몸값을 조정합니다. 잘했으면 오르고 못했으면 내리는데, 기준은 기대점수가 아니라 순위입니다.
기대점수보다 잘했으면 올리는 방식을 실제 데이터로 재봤더니 동전 던지기였습니다. 한 주에 한 번 등판한 구원투수가 기대의 7.8배를 내고 다른 구원투수가 마이너스 1.8배를 냈습니다. 선발이 그 주에 두 번 던졌느냐 한 번 던졌느냐 하는 우연이 그대로 몸값이 되어버립니다.
그래서 자리별 순위로 가릅니다. 그 주에 실제로 나온 선수만 모아 포수는 포수끼리, 선발은 선발끼리 그 주 원점수로 줄을 세웁니다.
| 구간 | 몸값 |
|---|---|
| 상위 30% | 오름 |
| 가운데 40% | 그대로 |
| 하위 30% | 내림 |
| 그 주 미출장 | 그대로 |
폭은 2026 잔여 시즌은 0.2억, 2027 정식 시즌부터는 0.1억입니다. 넉 주밖에 안 남은 해에 0.1억씩 움직이면 아무 일도 안 일어나기 때문입니다. 몸값은 3.5억 아래로도 15억 위로도 가지 않습니다. 상·하한에 걸린 선수 때문에 한쪽만 많이 움직이는 일이 없도록 오르는 인원과 내리는 인원은 항상 같게 맞춥니다 — 그러지 않으면 리그 전체 몸값이 슬금슬금 인플레됩니다.
안 나온 선수는 건드리지 않습니다. 부상은 그 선수가 못해서가 아니고, 결장을 깎으면 하위 30%가 전부 결장자로 채워져 정작 나와서 못한 선수가 안 내려갑니다.
효력은 다음 화요일 18:30 마감부터입니다. 이적이 발효되는 시점과 같아서 마감 한 번에 몸값과 스쿼드가 함께 바뀝니다. 첫 효력일은 2026년 9월 15일이고, 그날 반영되는 것은 9월 8일부터 14일까지 한 주의 성적입니다.
파는 값은 산 값에 오른 만큼의 절반을 얹습니다. 8억에 산 선수가 9억이 됐으면 8.5억을 받습니다. 값이 떨어졌으면 떨어진 값 그대로 받습니다. 손해는 온전히 지고 이익은 절반만 가져가는 구조라, 사고팔기를 반복해 돈을 불리는 길은 막히고 싸게 잘 주워온 사람은 실제로 이득을 봅니다.
제10조 — KBO에만 있는 변수 셋
축구 판타지를 그대로 옮기면 여기서 깨집니다.
우천취소 — 보정하지 않습니다. 스쿼드가 잠긴 상태에서 우리 팀 경기가 비로 날아가면 그냥 손해입니다. 일기예보와 일정 편성을 읽는 것까지가 실력이라고 봅니다. 규칙이 단순해지고, 축구 판타지에서도 연기된 경기는 보정해주지 않습니다.
1군 말소 — 자동 교체가 작동합니다. KBO는 부진하거나 다치면 2군에 내려가고, 그러면 최소 열흘은 못 올라옵니다. 잠긴 스쿼드에 이런 일이 생기면 그 자리가 0점짜리 구멍이 되므로, 벤치 야수에게 미리 순번을 매겨두고 그 주 한 경기도 못 나온 선수가 생기면 자동으로 메웁니다. 캡틴이 그런 경우면 부캡틴이 승계합니다.
다만 아무나 올리지 않습니다. 대타가 아니라 대수비입니다. 중견수가 결장했으면 그 자리를 실제로 볼 수 있는 선수가 벤치에 있어야 메울 수 있고, 없으면 그 자리는 결장으로 남아 0점입니다. 벤치에 좋은 타자가 놀고 있어도 자격이 없으면 못 올립니다.
대신 한 칸 옮겨서 풀리면 옮깁니다. 중견수가 결장했는데 벤치에 중견수 자격자가 없고, 우리 우익수가 중견수도 볼 수 있으며 벤치에는 우익수를 볼 수 있는 선수가 있다면 — 우익수를 중견수로 옮기고 벤치를 우익수에 넣습니다. 두 칸 세 칸 이어지는 연쇄도 자동으로 찾습니다. 자리를 최대한 많이 채우는 배치를 계산하되, 굳이 안 옮겨도 되면 아무도 안 옮깁니다.
옮겨도 타순은 그대로입니다. 이미 뛰고 있던 선수는 자리를 옮겨도 자기 타순을 지키고, 결장한 선수의 타순은 새로 올라온 벤치 선수가 물려받습니다. 남의 결장 때문에 멀쩡히 뛴 선수의 타순 배율이 바뀌면 안 되기 때문입니다.
선발 예고 — 그래서 예측이 실력이 됩니다. 화요일 마감 시점엔 그 주 후반 선발이 누구일지 모릅니다. 이게 진입장벽이 되지 않도록, 구단별 예상 로테이션을 참고 정보로 함께 띄웁니다.
제11조 — 정산은 이렇게 한다
규칙을 코드로 옮기면서 룰북이 말하지 않고 넘어간 자리가 드러났습니다. 실제로 계산하려면 정해야 하는 것들이라 여기서 정합니다.
한 주는 화요일 마감부터 다음 월요일까지 이레입니다. 룰북은 일요일을 주간 마감으로 적었지만 KBO는 우천 순연 경기를 월요일에 끼워 넣습니다. 이레로 잡아야 어느 주에도 안 들어가고 사라지는 경기가 없습니다. 월요일에 편성된 순연 경기는 직전 화요일 엔트리로 채점합니다.
타순 배율은 타석 결과에만 걸립니다. 1층과 2층은 출루·장타 성분으로 쪼개 배율을 태우지만, 출장 기본점과 3층 보너스, 포수 수비 항목은 배율 없이 그대로 더합니다. 셋 다 타석의 결과가 아니라 '나왔다' 또는 '그 경기에서 컸다'에 대한 보상이라 타순과 아무 상관이 없습니다. 출장 기본점에 배율을 걸면 1번 타순이 공짜로 이득을 봅니다.
투수의 순위 배율은 그 주에 받은 점수 전부에 걸립니다. 야수의 타순과 달리 성분을 쪼갤 자리가 없고, '위쪽에 앉힌 투수를 더 쳐준다'가 규칙의 전부이기 때문입니다.
자동 승격은 그 주에 실제로 나온 벤치 선수만 올립니다. 순번이 앞이어도 그 선수 역시 말소돼 있으면 자리를 메우는 뜻이 없으니 다음 순번으로 넘어갑니다. 포지션 자격은 깨지 않고, 지명타자 자리만 자격을 보지 않습니다.
자격 때문에 직접 못 메우는 자리는 한 칸 옮겨서 풀리는지 먼저 봅니다. 우리 야수 중에 그 자리를 겸할 수 있는 선수가 있고 그 선수가 비우는 자리를 벤치가 메울 수 있으면, 그렇게 두 칸을 동시에 움직입니다. 세 칸 이상 이어지는 연쇄도 찾습니다. 자리를 최대한 많이 채우는 배치를 계산하되, 굳이 안 옮겨도 되면 아무도 안 옮깁니다. 그래도 못 메우는 자리는 결장으로 남습니다.
타순은 사람에게 붙습니다. 자리를 옮긴 선수는 자기 타순을 그대로 들고 가고, 결장한 선수의 타순은 새로 올라온 벤치 선수가 물려받습니다. 남의 결장 때문에 멀쩡히 뛴 선수의 타순 배율이 바뀌면 안 되기 때문입니다.
캡틴 승계는 원래 앉혀둔 선수를 기준으로 판정합니다. 캡틴이 말소돼 그 자리를 대타가 뛰었다면, 룰북이 정한 승계 대상은 대타가 아니라 부캡틴입니다. 캡틴과 부캡틴이 둘 다 그 주 무출장이면 그 주는 캡틴 배율이 없습니다 — 0점짜리 자리를 두 배로 만들어봐야 0점이고, 룰북은 그 이상의 승계를 정하지 않았습니다.
칩은 한 주에 한 장만 냅니다. 리빌딩은 전반기 1장·후반기 1장이라 반기별로 셉니다. 그래서 2026 잔여 시즌만 도는 첫 시즌에 실제로 쓸 수 있는 리빌딩은 한 장뿐입니다. 통째로 후반기이기 때문입니다. 에이스 등판은 시즌 한 장입니다.
초과 이적 감점은 선수가 아니라 팀 총점에서 뺍니다. 누구 한 명의 점수를 깎을 근거가 없습니다.
정산 순서 — ① 그 주 날짜의 선수별 점수를 성분으로 나눠 뽑고 ② 무출장 야수를 벤치에서 메우고 ③ 타순·순위 배율을 걸고 ④ 슬롯 눈금 계수를 곱하고 ⑤ 캡틴 배율을 걸고 ⑥ 초과 이적 감점을 팀 총점에서 뺍니다.python3 settle.py가 이 순서를 그대로 실행하고,--dry를 붙이면 저장하지 않고 계산만 보여줍니다.
제12조 — 가을 컵 (준플레이오프 · 플레이오프 · 한국시리즈)
정규시즌 리그는 10월 7일 최종전으로 끝나고 거기서 순위를 확정합니다. 포스트시즌은 별도 대회로 돌리고, 세 라운드 합계로 가을 컵 챔피언을 따로 뽑습니다. 트로피가 둘입니다.
정규시즌 점수와 합산하지 않습니다. 포스트시즌은 다 합쳐야 스무 경기 안팎인데 정규시즌은 여섯 달입니다. 합산하면 마지막 4주가 여섯 달을 뒤집을 수 있고, 그건 리그가 아니라 복권입니다. 따로 떼면 정규시즌 순위가 일찍 굳어도 마지막까지 볼 이유가 남습니다.
와일드카드 결정전은 넣지 않습니다. 최대 두 경기짜리 라운드에 스쿼드를 한 벌 짜게 하는 것은 품이 아깝습니다. 준플레이오프부터입니다.
라운드마다 새로 짭니다
어느 라운드든 뛰는 팀은 둘뿐입니다. 20인 스쿼드에 구단 최대 3명이라, 그대로 끌고 가면 한국시리즈 쯤엔 살아 있는 선수가 여섯도 안 되고 열네 자리가 0점짜리 구멍이 됩니다. 이적을 무제한으로 열어 메우나 새로 짜나 결과가 같으니, 새로 짜는 쪽이 규칙이 짧습니다.
| 고를 수 있는 선수 | 그 라운드에 뛰는 두 팀 소속 전원 |
| 정원 | 8명 — 포수 1 · 내야 2 · 외야 1 · 지명타자 1 · 선발 2 · 구원 1 |
| 예산 | 55억 (몸값은 정규시즌 산정값 그대로) |
| 구단 제한 | 한 팀 최대 5명 |
| 마감 | 그 라운드 1차전 당일 13:00 |
| 벤치·이적·칩 | 없음. 여덟 명이 전부 나갑니다 |
포지션을 그대로 강제하는 데는 이유가 있습니다. 슬롯 눈금 계수는 강제 슬롯을 전제로 자리끼리 눈금을 맞춘 값이라, 포지션을 풀면 계수가 제일 높은 포수만 여덟 명 뽑는 것이 언제나 이깁니다. 다만 정규시즌과 달리 수비 위치까지는 강제하지 않습니다 — 내야 두 자리에 2루수 둘을 넣어도 됩니다. 두 팀 60여 명 풀에서 여덟 자리를 세부 포지션까지 맞추라고 하면 편성이 산수가 됩니다.
예산 55억은 실측으로 잡았습니다. 두 팀 풀에서 살 수 있는 최강 8인이 대진에 따라 71억에서 82억이라, 55억이면 그 70% 남짓입니다. 반드시 두세 명은 포기해야 합니다.
배점은 그대로, 배율만 인원수에 맞춥니다
점수는 제6조의2의 확정 배점표를 그대로 씁니다. 포스트시즌 스무 경기로 배점을 다시 잡으면 표본이 모자라 눈금이 흔들립니다. 슬롯 눈금 계수도 정규시즌 값 그대로입니다.
타순과 투수 순위 배율만 인원수에 맞춰 재정규화합니다. 정규시즌에서 합을 인원수에 맞춰 눈금을 고정한 것과 똑같은 처리입니다.
| 타순 | 1 | 2 | 3 | 4 | 5 | 합 |
|---|---|---|---|---|---|---|
| 출루 | 1.27 | 1.18 | 0.95 | 0.77 | 0.83 | 5.00 |
| 장타 | 0.73 | 0.77 | 1.14 | 1.27 | 1.09 | 5.00 |
투수는 선발 둘과 구원 하나에 하나의 순위를 매깁니다. 1번 1.17 / 2번 1.00 / 3번 0.83, 합 3.00입니다.
캡틴 2배와 부캡틴 승계는 그대로입니다. 칩은 열지 않습니다 — 라운드가 셋뿐인데 칩까지 넣으면 규칙이 게임보다 커집니다.
데이터
네이버는 포스트시즌도 같은 kbo 카테고리로 내려주고, game_id 앞 네 자리가 라운드입니다 (4444 와일드카드 · 3333 준플레이오프 · 5555 플레이오프 · 7777 한국시리즈). 수집기도 파서도 고칠 것이 없습니다.
⚠️ 포스트시즌 경기는 배점 계산에서 반드시 빼야 합니다. 같은 events 테이블에 쌓이므로, 갈라두지 않으면 10월에 가을야구를 수집하는 순간 득점기대값 행렬과 배점이 스무 경기에 오염됩니다. games.phase 로 단계를 표시하고, 배점·몸값을 뽑는 모든 경로가 기본으로 정규시즌만 보도록 해뒀습니다. 가을 컵 정산만 라운드를 명시해서 부릅니다.
데이터 출처 — 네이버 스포츠의 KBO 일정·이닝별 문자중계·박스스코어. 문자중계에 투구 시점의 아웃카운트·주자 상황·스코어가 모두 들어 있어 2층의 RE24 상황 점수를 직접 계산할 수 있습니다. 원본 JSON은 raw/에 캐시해 두므로 파싱 규칙을 고쳐도 재수집할 필요가 없습니다.
이 문서의 상태 — 2026-09-05 판. 규칙도 배점도 확정입니다. 2026 정규시즌 656경기 전체로 층 계수·슬롯 계수·배점표·몸값을 모두 확정했습니다. 확정 규칙 원문은 RULES.md, 선수별 가격은 몸값표.md에 있습니다.
정산 모듈(settle.py)과 가을 컵(cup.py)에 이어 자동 운영까지 걸었습니다(2026-09-06). 화요일부터 일요일까지 23:30에 그날 경기를 수집해 정산하고, 다음날 02:00에 연장·서스펜디드를 보정합니다. 화요일 18:30에는 마감 처리가 돌아 끝난 주를 확정하고 이적을 발효한 뒤 몸값을 움직입니다. 결과는 스쿼드 봇이 참가자에게 한 통씩 알립니다.
부록 — AI에게 팀을 짜게 하려면
이 룰북과 선수 자료는 로그인 없이 열립니다. 주소 두 개를 클로드 같은 AI에게 그대로 던지면 규칙을 지킨 스쿼드를 짜줍니다.
| 주소 | 내용 |
|---|---|
/rules | 이 문서 전문 |
/api/players | 몸값이 매겨진 선수 전원 (JSON) |
선수 자료는 자리를 아끼려고 이름표를 한 글자로 줄여 뒀습니다. 읽는 법은 이렇습니다.
| 키 | 뜻 | 예 |
|---|---|---|
id | 선수 고유번호 | 53123 |
n | 이름 | 오스틴 |
t | 소속 구단 | LG |
s | 몸값이 매겨진 자리 — 포수 / 내야 / 외야 / 선발 / 구원 | 내야 |
p | 몸값 (억) | 15.0 |
w | 주당 기대점수 — 2026 정규시즌 전체를 점수 엔진으로 돌린 값 | 18.22 |
pc | 같은 자리 안에서의 백분위 (100이 그 자리 최고) | 100 |
e | 실제로 설 수 있는 수비 위치 — 2026 선발 5경기 이상 (제4조) | ["1루수","지명타자"] |
f | 1이면 외국인·아시아쿼터 (제1조 상한 3명) | 1 |
d | 지난 마감에 오르내린 폭 (억). 없으면 안 움직인 것 | -0.2 |
st | 2026 누적 기록. 타자는 g ab h hr rbi bb k sb, 투수는 g outs k bb hr er sv |
s와 e를 헷갈리면 안 됩니다. 스쿼드 정원(포수 2 · 내야 5 · 외야 5 · 선발 5 · 구원 4)은 s로 세고, 매주 라인업의 아홉 자리는 e로 채웁니다. 지명타자만 e를 보지 않고 아무 야수나 넣을 수 있습니다.
프롬프트는 이 정도면 됩니다.
이 룰북(/rules)과 선수 자료(/api/players)를 읽고 스쿼드를 짜줘. 150억 안에서 21명이고 포수 2 · 내야 5 · 외야 5 · 선발 5 · 구원 4야. 한 구단에서 3명까지(응원팀만 4명), 외국인은 3명까지. 주당 기대점수 합이 최대가 되게 짜고, 라인업 아홉 자리와 타순, 투수 순위까지 채워줘.
다만 w는 시즌 누적 평균입니다. 최근 컨디션도, 부상도, 남은 일정의 상대도 모릅니다. 숫자로 뽑은 팀을 그대로 쓰면 딱 그만큼만 갑니다. 그 위에 무엇을 얹느냐가 이 게임입니다.