원자재 가격 CSV 다운로드: 금속 가격 이력 받기

bars 엔드포인트에 요청을 한 번 보내면 원자재의 일별 시가, 고가, 저가, 종가가 반환되고, 짧은 스크립트가 이를 CSV로 저장합니다. 2026년 10월 1일부터 23일까지의 금에는 일별 행이 17개 있습니다. 주말에는 바가 없습니다.

API로 일별 금 바 가져오기

USD 기준 금에는 GET /v1/commodities/spot/XAU/USD/bars를 사용합니다. 각 바에는 timestamp와 open, high, low, close의 10진수 문자열이 들어 있습니다. 스크립트는 이 가격 필드를 그대로 CSV에 쓰고, 날짜는 타임스탬프에서 가져옵니다. 출력 열은 date, open, high, low, close입니다.

  1. 환경 변수에 API 키 저장 무료 API 키를 받아 환경 변수 NARWHAL_API_KEY에 보관하세요. 스크립트는 이 변수를 읽어 Authorization: Bearer YOUR_KEY 헤더로 키를 보냅니다.
  2. 날짜와 간격 설정하기 start와 end는 모두 필수인 ISO 타임스탬프입니다. 이 예시는 2026-10-01T00:00:00Z부터 2026-10-24T00:00:00Z까지를 사용하고 interval을 1d로 설정해, 2026년 10월 1일부터 23일까지의 일별 금 바를 가져옵니다.
  3. 스크립트를 bars.py로 저장하기 CSV 헤더와 바 필드의 순서를 같게 유지하세요. 스크립트는 https://api.narwhalapi.com으로 요청을 보내고 받은 행을 표준 출력에 쓰므로, 다음 단계의 명령으로 이를 파일에 저장할 수 있습니다.
    Python, 일별 금 바를 CSV로 저장 (실행 방법: python bars.py > gold.csv)
    import csv, os, sys
    import requests
    
    H = {"Authorization": f"Bearer {os.environ['NARWHAL_API_KEY']}"}
    params = {
        "start": "2026-10-01T00:00:00Z",
        "end": "2026-10-24T00:00:00Z",
        "interval": "1d",
        "limit": 500,
    }
    out = csv.writer(sys.stdout)
    out.writerow(["date", "open", "high", "low", "close"])
    cursor = None
    while True:
        if cursor:
            params["cursor"] = cursor
        body = requests.get(
            "https://api.narwhalapi.com/v1/commodities/spot/XAU/USD/bars",
            params=params,
            headers=H,
            timeout=15,
        ).json()
        for b in body["bars"]:
            out.writerow([b["timestamp"][:10], b["open"], b["high"], b["low"], b["close"]])
        cursor = body.get("next_cursor")
        if not cursor:
            break
    
  4. gold.csv 쓰기 CSV 파일을 쓰려면 python bars.py > gold.csv를 실행하세요. 2026년 10월 1일부터 23일까지는 출력에 헤더 아래로 일별 데이터 행이 17개 들어갑니다.

루프 앞의 out.writerow가 헤더를 만듭니다. 루프 안에서는 out.writerow를 호출할 때마다 그 헤더의 순서대로 바가 한 행씩 추가됩니다. 가격 필드는 응답의 10진수 문자열 그대로이고, 날짜는 b["timestamp"][:10]에서 가져옵니다. 시트나 모델에서 일별 종가를 쓰려면 필요한 날짜의 행에서 close 값을 가져오세요. 그 바의 시가, 고가, 저가도 같은 행에 있습니다. 시간 단위나 분 단위로 내보내도 이 스크립트는 각 타임스탬프의 날짜 부분만 씁니다.

이력 표를 쓰거나 시트로 가져오기

스크립트를 작성하지 않고 표를 쓰려면 금 상품 페이지에서 가격 이력을 여세요. 로그인한 계정은 상품 페이지에서 이력을 CSV로 내려받을 수도 있습니다.

스크립트가 만든 CSV를 Excel로 가져오려면 데이터 > 텍스트/CSV에서를 사용하세요. Google 스프레드시트에서는 파일 > 가져오기를 사용합니다. 파일에는 날짜와 각 바의 시가, 고가, 저가, 종가가 함께 들어 있어, 내보낸 같은 이력을 시트나 모델의 입력으로 쓸 수 있습니다. 행을 가져올 때는 날짜 열을 가격과 함께 두세요.

다운로드 방법과 간격 고르기

상황적합한 방법이유
빠르게 확인하기웹사이트 차트상품 페이지에서 금 가격 이력 보기
반복 가능한 다운로드 또는 모델 입력스크립트요청한 바를 CSV로 쓰기
시간 단위 또는 분 단위 데이터interval을 1h 또는 1m으로 설정한 스크립트필요한 간격을 요청하고 기간 줄이기

bars 엔드포인트의 interval은 1m, 1h, 1d를 받습니다. 일별 이력에는 1d를 그대로 두세요. 시간 단위나 분 단위 데이터가 필요하면 이 매개변수를 바꾸고 요청하는 기간을 줄이세요. 샘플의 날짜와 CSV 예시는 일별 바를 기준으로 합니다.

금 가격 이력에 주말이 빠져 있는 이유는 무엇인가요?

현물 금은 주말에 시장이 닫혀 있으면 바가 없습니다. 2026년 10월 1일부터 23일까지는 달력상 23일이지만 일별 바는 17개이고, 모두 평일입니다. CSV의 날짜는 반환된 바의 날짜로 읽으세요. 일별 간격에서는 주말 행이 파일에 추가되지 않습니다.

요청 한 번에 바가 몇 개 반환되나요?

각 요청은 최대 limit개의 바를 반환하며, 스크립트에서는 500입니다. 루프는 next_cursor가 null이 될 때까지 따라가며 각 응답의 바를 같은 CSV에 씁니다. 날짜나 간격을 바꿀 때도 이어지는 페이지까지 내보낼 수 있도록 이 루프를 그대로 두세요. 더 긴 기간에서는 커서가 다음 페이지를 고르는 동안에도 start, end, interval을 유지하세요. 스크립트는 다음 요청을 보내기 전에 그 커서를 params에 추가합니다. 헤더는 루프 밖에 있으므로 모든 페이지가 같은 열 이름을 공유합니다.

409 cursor_expired는 커서 없이 처음부터 다시 시작해야 한다는 뜻입니다. 스크립트 처음처럼 cursor = None으로 내보내기를 다시 시작하고, 그 새 요청에서 파일을 쓰세요.

시작일이 시계열이 시작되기 전이면 어떻게 되나요?

모든 계정이 전체 이력을 조회할 수 있습니다. CSV가 어디서 시작하는지 반환된 첫 날짜로 확인하세요. 시계열은 요청한 시작일보다 늦게 시작할 수 있습니다.

실제 예시: 2026년 10월 금

샘플의 2026년 10월 일별 요청으로 시작합니다. 반환되는 날짜는 2026-10-01에서 시작해 2026-10-23에서 끝나며 데이터 행은 17개입니다. CSV 헤더를 쓰고, 각 바의 날짜와 가격 필드를 그 헤더의 순서대로 쓰세요. 첫 종가는 2026년 10월 1일의 4177.4458입니다. 이 값은 첫 데이터 행의 close 열에 들어가며, 날짜, 시가, 고가, 저가 다음에 옵니다.

날짜다음을 여세요:최고최저닫기
2026-10-014156.83524192.52154139.77874177.4458
2026-10-024177.21834225.64974125.92324141.5280

에 게시되었습니다.

다음 단계