auto: 일일 백업 2026-07-31 02:00

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
hyowons
2026-07-31 02:00:02 +09:00
parent a5f6b0ecd8
commit d7042430c3
183 changed files with 7898 additions and 2204 deletions
@@ -503,7 +503,8 @@ def validate_request(request: dict, market_data: dict) -> Result:
return r
if request['side'] not in ('BUY', 'SELL'):
return Result.REJECT('INVALID_SIDE', f'잘못된 방향: {request["side"]}')
if request['order_type'] not in ('LIMIT', 'MARKET', 'AGGRESSIVE_LIMIT', 'STOP_LIMIT'):
if request['order_type'] not in ('LIMIT', 'MARKET', 'AGGRESSIVE_LIMIT', 'STOP_LIMIT',
'TRAILING_STOP'):
return Result.REJECT('INVALID_ORDER_TYPE', f'잘못된 주문방식: {request["order_type"]}')
r = validate_trading_hours(market_data['now'], market_data.get('is_holiday', False),
market_data.get('nxt_eligible', False))
@@ -525,9 +526,10 @@ def validate_request(request: dict, market_data: dict) -> Result:
market_data['upper_limit'], market_data['lower_limit'])
if not r.ok:
return r
if request['order_type'] == 'STOP_LIMIT':
if request['order_type'] in ('STOP_LIMIT', 'TRAILING_STOP'):
# 스톱지정가: 지정가(체결가)·조건단가(트리거) 둘 다 가격제한 이내 + 매도 전용.
# 보호매도(하락 시 매도)라 트리거는 현재가보다 낮아야 함 — 아니면 즉시 발동돼 스톱 의미 없음.
# 트레일링도 키움엔 스톱지정가로 나가므로 같은 검증을 받는다 (조건단가는 자동 계산값).
if request['side'] != 'SELL':
return Result.REJECT('STOP_SELL_ONLY', '스톱지정가는 현재 매도만 지원')
stop_price = request.get('stop_price')