使用Trading-IG Python SDK下单遇ATTACHED_ORDER_LEVEL_ERROR求助
问题原因与解决办法
问题原因
- IG平台对限价单(
LIMIT类型)有明确规则:- BUY方向的限价单,
level必须低于当前市场价格,逻辑是挂单等待价格回落至目标价时成交买入。 - 若设置
level高于当前价格,完全违背限价买入的规则,平台直接返回ATTACHED_ORDER_LEVEL_ERROR错误。
- BUY方向的限价单,
- SELL方向的限价单
level高于当前价是合理逻辑(挂单等价格上涨到目标价时卖出),所以能正常下单。
解决办法
根据你的交易需求选择对应方案:
方案1:等待价格回落至5445时买入
- 确认当前市场价格高于5445,若当前价低于该值,调整
level到当前价以下的合理价位。 - 代码无需修改订单类型,只需保证
level符合规则:
resp = ig_service.create_working_order( currency_code="GBP", direction="BUY", epic='IX.D.SPTRD.DAILY.IP', expiry='DFB', guaranteed_stop=False, level='5445', # 确保此价格低于当前市场价格 size='1', force_open='true', time_in_force="GOOD_TILL_CANCELLED", order_type="LIMIT", limit_distance='6', stop_distance='2' )
方案2:价格上涨至5445时买入(突破进场)
- 这种场景属于突破追单,需要将
order_type改为"STOP"(止损买入单,价格触发后成交):
resp = ig_service.create_working_order( currency_code="GBP", direction="BUY", epic='IX.D.SPTRD.DAILY.IP', expiry='DFB', guaranteed_stop=False, level='5445', # 此价格高于当前市场价格,触发买入 size='1', force_open='true', time_in_force="GOOD_TILL_CANCELLED", order_type="STOP", # 修改为STOP类型 limit_distance='6', stop_distance='2' )
额外注意事项
- 核对
limit_distance和stop_distance的逻辑:- BUY单:
limit_distance是止盈点(高于买入价),stop_distance是止损点(低于买入价) - SELL单:
limit_distance是止盈点(低于卖出价),stop_distance是止损点(高于卖出价)
- BUY单:
- 确保
level的数值精度符合标的要求(比如部分指数要求整数价位,部分品种需要保留小数)
内容的提问来源于stack exchange,提问作者Giampaolo Levorato
相关产品推荐
相关产品推荐

