alpaca-py StopOrderRequest bracket订单状态枚举验证错误求助
使用alpaca-py创建带止损止盈的止损订单时遇到枚举验证错误
我在使用alpaca-py库,调用创建新订单接口,尝试通过StopOrderRequest创建带止损止盈(bracket订单)的订单时,出现了如下Pydantic验证错误:
File "G:\...functions.py", line 80, in trading_client.submit_order(order_request) File "C:\...\Python\Python310\lib\site-packages\alpaca\trading\client.py", line 90, in submit_order return Order(**response) File "C:...\Python\Python310\lib\site-packages\alpaca\trading\models.py", line 182, in __init__ super().__init__(**data) File "pydantic\main.py", line 341, in pydantic.main.BaseModel.__init__ pydantic.error_wrappers.ValidationError: 2 validation errors for Order legs -> 0 -> status value is not a valid enumeration member; permitted: 'new', 'partially_filled', 'filled', 'done_for_day', 'canceled', 'expired', 'replaced', 'pending_cancel', 'pending_replace', 'accepted', 'pending_new', 'accepted_for_bidding', 'stopped', 'rejected', 'suspended', 'calculated' (type=type_error.enum; enum_values=[<OrderStatus.NEW: 'new'>, <OrderStatus.PARTIALLY_FILLED: 'partially_filled'>, <OrderStatus.FILLED: 'filled'>, <OrderStatus.DONE_FOR_DAY: 'done_for_day'>, <OrderStatus.CANCELED: 'canceled'>, <OrderStatus.EXPIRED: 'expired'>, <OrderStatus.REPLACED: 'replaced'>, <OrderStatus.PENDING_CANCEL: 'pending_cancel'>, <OrderStatus.PENDING_REPLACE: 'pending_replace'>, <OrderStatus.ACCEPTED: 'accepted'>, <OrderStatus.PENDING_NEW: 'pending_new'>, <OrderStatus.ACCEPTED_FOR_BIDDING: 'accepted_for_bidding'>, <OrderStatus.STOPPED: 'stopped'>, <OrderStatus.REJECTED: 'rejected'>, <OrderStatus.SUSPENDED: 'suspended'>, <OrderStatus.CALCULATED: 'calculated'>]) legs -> 1 -> status value is not a valid enumeration member; permitted: 'new', 'partially_filled', 'filled', 'done_for_day', 'canceled', 'expired', 'replaced', 'pending_cancel', 'pending_replace', 'accepted', 'pending_new', 'accepted_for_bidding', 'stopped', 'rejected', 'suspended', 'calculated' (type=type_error.enum; enum_values=[<OrderStatus.NEW: 'new'>, <OrderStatus.PARTIALLY_FILLED: 'partially_filled'>, <OrderStatus.FILLED: 'filled'>, <OrderStatus.DONE_FOR_DAY: 'done_for_day'>, <OrderStatus.CANCELED: 'canceled'>, <OrderStatus.EXPIRED: 'expired'>, <OrderStatus.REPLACED: 'replaced'>, <OrderStatus.PENDING_CANCEL: 'pending_cancel'>, <OrderStatus.PENDING_REPLACE: 'pending_replace'>, <OrderStatus.ACCEPTED: 'accepted'>, <OrderStatus.PENDING_NEW: 'pending_new'>, <OrderStatus.ACCEPTED_FOR_BIDDING: 'accepted_for_bidding'>, <OrderStatus.STOPPED: 'stopped'>, <OrderStatus.REJECTED: 'rejected'>, <OrderStatus.SUSPENDED: 'suspended'>, <OrderStatus.CALCULATED: 'calculated'>])
问题原因
这个错误是因为Alpaca API返回的订单legs状态值,不在当前alpaca-py版本的OrderStatus枚举定义范围内。大概率是你使用的alpaca-py版本过旧,没有兼容API新增的状态值。
解决方法
- 升级alpaca-py到最新版本:
执行以下命令更新库:pip install --upgrade alpaca-py - 检查订单创建参数:
确认创建bracket订单时,没有手动给StopOrderRequest设置status字段——订单状态是由API自动返回的,不需要用户传入。确保你的订单参数完全符合bracket订单的规范。
内容的提问来源于stack exchange,提问作者Zach Marion
相关产品推荐
相关产品推荐

