바쁜 분은 이것만
- 첫날 1,000골드 이상 유물 각인서 13종 중 11종이 내렸고, 오른 건 2종뿐
- 상승 1위 타격의 대가 +23.4%, 하락 1위 정기 흡수 -72.3%
- 가장 비싼 3종(예리한 둔기·원한·돌격대장)은 한 달 내내 거의 같이 움직였어요
10월 1일부터 로스트아크 오픈 API로 거래소 시세를 매일 모으고 있어요. 한 달이 차서, 그중 각인서 데이터만 꺼내 한 달 동안 얼마나 움직였는지 세어 봤습니다. 게임 공략이 아니라 모은 숫자를 파이썬으로 어떻게 읽는지에 가까운 글이에요.
1. 데이터: 무엇을 어떻게 모았나
수집 방법은 로스트아크 오픈API 거래소 시세 매일 자동 수집하기 (파이썬 + cron)에 정리해 두었어요. 매일 한 번 market_history.csv에 아래 줄이 쌓입니다.
date,category,name,grade,bundle,yday_avg,recent,current_min
2026-10-01,각인서,유물 원한 각인서,유물,1,109700.1,...
yday_avg는 전일 평균 거래가예요. 그래서 10/1에 받은 값은 9/30 거래, 10/31에 받은 값은 10/30 거래의 평균입니다.- 이 글은 이 전일 평균가만 씁니다. 현재 최저가는 그 순간 올라온 매물 하나라서 하루에도 크게 출렁여요.
- 빈 날이 있어요. 10/2, 10/7, 10/14는 수집이 실패한 날이고(지금은 재시도와 하루 3회 실행으로 고쳐 두었어요), 10/24는 수집되지 않은 날입니다. 그래서 31일 중 27일치예요.
2. 어떤 각인서만 볼까: 유물 + 첫날 1,000골드 이상
각인서는 유물 43종, 전설 43종이 들어 있어요. 그런데 전설 각인서는 대부분 전일 평균가가 1~70골드 사이라, 1골드에서 5골드로만 바뀌어도 +400%가 나와요. 유물 중에도 싼 것은 같은 문제가 있습니다. 실제로 유물 실드관통은 1.4골드에서 45골드가 되어 +3114%로 찍혀요.
그래서 이번엔 유물 각인서 중 10/1 수집 기준 전일 평균가 1,000골드 이상인 것만 봤어요. 그러면 13종이 남습니다. 숫자가 작은 것들의 큰 퍼센트에 순위가 묻히지 않게 하려는 기준이고, 1,000이라는 선은 제가 정한 거예요.
3. 상승·하락 Top 3
변화율은 (10/31 전일 평균가 ÷ 10/1 전일 평균가 - 1) × 100으로 셌어요. 코드는 5번에 있습니다.

유물 각인서 13종의 10월 변화율 (10/1 수집 → 10/31 수집, 전일 평균가 기준)
오른 것은 2종뿐이에요. 타격의 대가가 31,843.9골드에서 39,306.3골드로 +23.4%, 전문의가 +4.2%. 나머지 11종은 모두 내렸습니다.
하락 쪽은 정기 흡수 -72.3%(2,975.0 → 823.6골드)가 압도적이에요. 그다음이 저주받은 인형 -15.2%, 슈퍼 차지 -11.5%입니다. 정기 흡수는 13종 중 첫날 가격이 가장 낮아 1,000골드 선 바로 위에 있던 각인서라, 퍼센트가 크게 나온 면도 있어요.
4. 가장 비싼 각인서와 변동 폭
10/31 수집 기준 가장 비싼 3종은 이렇습니다.
- 예리한 둔기 108,766.7골드 (한 달 -1.1%)
- 원한 107,512.3골드 (-2.0%)
- 돌격대장 106,496.4골드 (-2.5%)
셋 다 10만 골드 언저리이고 한 달 변화도 -1~-2.5%로 작아요. 날짜별로 10/1을 100으로 맞춰 그려 보면 더 잘 보입니다.

10/1 수집값을 100으로 놓은 날짜별 전일 평균가 (빈 날은 선으로 이어 그림)
파랑·초록·노랑 세 줄(비싼 3종)이 거의 겹쳐서 같이 오르내려요. 반면 타격의 대가는 위로, 저주받은 인형은 아래로 따로 움직였습니다. 타격의 대가는 10/29 수집값 34,161.7골드에서 10/30 수집값 39,574.5골드로 하루 사이에 크게 뛰었어요. 왜 그날 올랐는지는 이 데이터만으로는 알 수 없습니다.
변동 폭은 한 달 중 최저가 대비 최고가가 몇 % 높았는지로 셌어요. 정기 흡수가 420.8%(571.2 ~ 2,975.0골드), 슈퍼 차지가 35.5%(10,681.7 ~ 14,473.9골드)로 가장 컸습니다. 정기 흡수는 최고가가 바로 첫날 값이라, 한 달 내내 내려온 모양이에요.
5. 어떻게 계산했나 (파이썬 csv 모듈)
pandas 없이 표준 라이브러리 csv만 썼어요. 이름에서 "유물 "과 " 각인서"를 떼어 짧게 만들고, {이름: {날짜: 전일 평균가}} 딕셔너리로 모았습니다.
import csv
from collections import defaultdict
FIRST, LAST = "2026-10-01", "2026-10-31"
price = defaultdict(dict) # 이름 -> {날짜: 전일 평균가}
for r in csv.DictReader(open("lostark/data/market_history.csv", encoding="utf-8")):
if r["category"] == "각인서" and r["grade"] == "유물":
price[r["name"].replace("유물 ", "").replace(" 각인서", "")][r["date"]] = float(r["yday_avg"])
print("유물 각인서:", len(price), "종 /", len(next(iter(price.values()))), "일 데이터")
big = {n: p for n, p in price.items() if p[FIRST] >= 1000} # 첫날 1,000골드 이상만
print("1,000골드 이상:", len(big), "종")
rows = []
for n, p in big.items():
vals = list(p.values())
change = (p[LAST] / p[FIRST] - 1) * 100
swing = (max(vals) - min(vals)) / min(vals) * 100 # 한 달 최저 대비 최고
rows.append((n, p[FIRST], p[LAST], change, swing))
print("\n[가장 비싼 3종] 10/31 기준")
for n, a, b, c, s in sorted(rows, key=lambda x: -x[2])[:3]:
print(f"{n:8} {b:>10,.1f}골드")
print("\n[상승 Top 3]")
for n, a, b, c, s in sorted(rows, key=lambda x: -x[3])[:3]:
print(f"{n:8} {a:>10,.1f} → {b:>10,.1f} {c:+6.1f}%")
print("\n[하락 Top 3]")
for n, a, b, c, s in sorted(rows, key=lambda x: x[3])[:3]:
print(f"{n:8} {a:>10,.1f} → {b:>10,.1f} {c:+6.1f}%")
print("\n[변동 폭 Top 2] 최저 대비 최고")
for n, a, b, c, s in sorted(rows, key=lambda x: -x[4])[:2]:
vals = big[n].values()
print(f"{n:8} {min(vals):>10,.1f} ~ {max(vals):>10,.1f} {s:5.1f}%")
up = sum(1 for r in rows if r[3] > 0)
print(f"\n오른 것 {up}종 / 내린 것 {len(rows) - up}종")
실행한 출력 그대로입니다.
$ .venv/bin/python plan/ref_code/loa_oct_engrave/engrave.py
유물 각인서: 43 종 / 27 일 데이터
1,000골드 이상: 13 종
[가장 비싼 3종] 10/31 기준
예리한 둔기 108,766.7골드
원한 107,512.3골드
돌격대장 106,496.4골드
[상승 Top 3]
타격의 대가 31,843.9 → 39,306.3 +23.4%
전문의 16,879.7 → 17,595.9 +4.2%
예리한 둔기 110,008.2 → 108,766.7 -1.1%
[하락 Top 3]
정기 흡수 2,975.0 → 823.6 -72.3%
저주받은 인형 31,761.3 → 26,925.9 -15.2%
슈퍼 차지 13,735.4 → 12,155.8 -11.5%
[변동 폭 Top 2] 최저 대비 최고
정기 흡수 571.2 ~ 2,975.0 420.8%
슈퍼 차지 10,681.7 ~ 14,473.9 35.5%
오른 것 2종 / 내린 것 11종
몇 가지 짚을 점이에요.
- 상승 Top 3의 3위가 마이너스예요. 오른 게 2종뿐이라 3위 자리에 가장 덜 내린 예리한 둔기가 들어왔습니다. 출력을 그대로 믿기 전에 부호를 꼭 보세요.
- 10/1은 수집이 두 번 돌아 같은 아이템 줄이 2개씩 있어요. 두 줄의 전일 평균가가 같아서 딕셔너리에 덮어써도 값이 바뀌지 않습니다. 현재 최저가처럼 줄마다 다른 값을 쓸 땐 따로 처리해야 해요.
- 빈 날은 그냥 키가 없을 뿐이라, 첫날·마지막 날만 있으면 변화율 계산에는 문제가 없어요. 13종 모두 27일치가 다 있었습니다.
차트는 같은 딕셔너리로 matplotlib(font.family = "AppleGothic")에서 막대(barh)와 선(plot)으로 그렸어요. 선 그래프는 각 각인서의 10/1 값으로 나눠 100을 곱한 지수라서, 10만 골드짜리와 3만 골드짜리를 한 축에 놓을 수 있습니다.
6. 이 숫자를 읽을 때 주의할 점
- 한 달, 하루 한 번 찍은 값이에요. 시작일과 끝일 하루씩만 비교하는 변화율은 그 이틀이 튀면 같이 튑니다. 그래서 선 그래프를 같이 보는 게 좋아요.
- 전일 평균가는 거래가 적은 날엔 몇 건의 거래로 정해져요. 이 데이터에는 거래량이 없어서, 얼마나 많이 거래됐는지는 알 수 없습니다.
- 오르고 내린 이유는 이 데이터에 없어요. 이 글은 숫자가 어떻게 움직였는지만 말합니다.
정리
| 항목 | 10월 값 (유물, 첫날 1,000골드 이상 13종) |
|---|---|
| 오름 / 내림 | 2종 / 11종 |
| 상승 1위 | 타격의 대가 +23.4% (31,843.9 → 39,306.3) |
| 하락 1위 | 정기 흡수 -72.3% (2,975.0 → 823.6) |
| 가장 비쌈 (10/31) | 예리한 둔기 108,766.7골드 |
| 변동 폭 1위 | 정기 흡수 420.8% (최저 대비 최고) |
| 데이터 | 27일치 (10/2·7·14·24 없음), 전일 평균가 기준 |
참고: LOST ARK Open API — Markets (/markets/items, YDayAvgPrice) / Python 공식 문서 — csv.DictReader, collections.defaultdict / Matplotlib 문서 — Axes.barh, Axes.plot
