@@ -381,10 +381,11 @@ async def _cancel_domestic_pending_orders(
381381 # sll_buy_dvsn_cd: 01=매도, 02=매수
382382 target_code = "02" if order_type == "buy" else "01"
383383
384- # 해당 종목의 주문만 필터링
384+ # 해당 종목의 주문만 필터링 (필드명 대소문자 모두 확인)
385385 target_orders = [
386386 order for order in all_open_orders
387- if order .get ('pdno' ) == stock_code and order .get ('sll_buy_dvsn_cd' ) == target_code
387+ if (order .get ('pdno' ) or order .get ('PDNO' )) == stock_code
388+ and (order .get ('sll_buy_dvsn_cd' ) or order .get ('SLL_BUY_DVSN_CD' )) == target_code
388389 ]
389390
390391 if not target_orders :
@@ -395,9 +396,15 @@ async def _cancel_domestic_pending_orders(
395396
396397 for order in target_orders :
397398 try :
398- order_number = order .get ('ord_no' )
399- order_qty = int (order .get ('ord_qty' , 0 ))
400- order_price = int (float (order .get ('ord_unpr' , 0 )))
399+ # API 응답 필드명이 소문자 또는 대문자일 수 있음
400+ order_number = order .get ('odno' ) or order .get ('ODNO' ) or order .get ('ord_no' ) or order .get ('ORD_NO' )
401+ order_qty = int (order .get ('ord_qty' ) or order .get ('ORD_QTY' ) or 0 )
402+ order_price = int (float (order .get ('ord_unpr' ) or order .get ('ORD_UNPR' ) or 0 ))
403+
404+ if not order_number :
405+ logger .warning (f"주문번호 없음 ({ stock_code } ): order={ order } " )
406+ failed += 1
407+ continue
401408
402409 await kis .cancel_korea_order (
403410 order_number = order_number ,
@@ -1113,10 +1120,11 @@ async def _cancel_overseas_pending_orders(
11131120 # sll_buy_dvsn_cd: 01=매도, 02=매수
11141121 target_code = "02" if order_type == "buy" else "01"
11151122
1116- # 해당 종목의 주문만 필터링
1123+ # 해당 종목의 주문만 필터링 (필드명 대소문자 모두 확인)
11171124 target_orders = [
11181125 order for order in all_open_orders
1119- if order .get ('pdno' ) == symbol and order .get ('sll_buy_dvsn_cd' ) == target_code
1126+ if (order .get ('pdno' ) or order .get ('PDNO' )) == symbol
1127+ and (order .get ('sll_buy_dvsn_cd' ) or order .get ('SLL_BUY_DVSN_CD' )) == target_code
11201128 ]
11211129
11221130 if not target_orders :
@@ -1127,8 +1135,14 @@ async def _cancel_overseas_pending_orders(
11271135
11281136 for order in target_orders :
11291137 try :
1130- order_number = order .get ('odno' )
1131- order_qty = int (order .get ('ft_ord_qty' , 0 ))
1138+ # API 응답 필드명이 소문자 또는 대문자일 수 있음
1139+ order_number = order .get ('odno' ) or order .get ('ODNO' ) or order .get ('ord_no' ) or order .get ('ORD_NO' )
1140+ order_qty = int (order .get ('ft_ord_qty' ) or order .get ('FT_ORD_QTY' ) or 0 )
1141+
1142+ if not order_number :
1143+ logger .warning (f"주문번호 없음 ({ symbol } ): order={ order } " )
1144+ failed += 1
1145+ continue
11321146
11331147 await kis .cancel_overseas_order (
11341148 order_number = order_number ,
0 commit comments