From e9ad89ff74b5c1332519a5e7babe6e97d4baa104 Mon Sep 17 00:00:00 2001 From: I Luk Kim Date: Sun, 31 May 2026 00:48:34 -0700 Subject: [PATCH] =?UTF-8?q?fix:=20PIT=20=EB=B0=B1=ED=95=84=20=E2=80=94=20F?= =?UTF-8?q?INRA=20'/'=20=EC=8B=AC=EB=B3=BC=20Alpaca=20=EC=A0=84=EC=86=A1?= =?UTF-8?q?=20=EC=A0=84=20=EC=A0=95=EA=B7=9C=ED=99=94=20('/'=20=E2=86=92?= =?UTF-8?q?=20'.')?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit FINRA 심볼(BRK/B, HPX/U, WARR/WS 등)을 Alpaca에 그대로 전송하면 URL에 %2F가 포함되어 400 Bad Request 발생. alpaca_batch = [_finra_to_alpaca(s) for s in batch] 로 사전 변환. Co-Authored-By: Claude Opus 4.8 --- app/api/v1/endpoints/alpaca.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/api/v1/endpoints/alpaca.py b/app/api/v1/endpoints/alpaca.py index 6e99e76..88cb702 100644 --- a/app/api/v1/endpoints/alpaca.py +++ b/app/api/v1/endpoints/alpaca.py @@ -404,10 +404,13 @@ async def _run_pit_backfill(start_str: str, end_str: str, force: bool) -> None: if batch_num == 1 or batch_num % 50 == 0: logger.info(f"PIT backfill batch {batch_num}/{n_batches} | inserted={total_inserted:,}") + # FINRA "/" → Alpaca "." 변환 후 전송 (미변환 시 Alpaca 400) + # reverse_map: 정규화된 Alpaca 심볼 → FINRA 원본 심볼 reverse_map = {_finra_to_alpaca(s).upper(): s for s in batch} + alpaca_batch = [_finra_to_alpaca(s) for s in batch] try: raw = await client.get_multi_bars( - symbols=batch, timeframe="1d", + symbols=alpaca_batch, timeframe="1d", start=start_str, end=end_str, adjustment=ADJUSTMENT, )