IG Trading API市价单报ATTACHED_ORDER_LEVEL_ERROR错误求助
IG点差交易模拟账户交易道指市价单返回ATTACHED_ORDER_LEVEL_ERROR拒单解决方案
报错原因
ATTACHED_ORDER_LEVEL_ERROR是IG交易API的通用参数错误,触发原因是请求中附带的止损、止盈设置不符合对应标的的交易规则,结合提交的请求和返回结果,具体问题点如下:
- IG交易接口返回200状态码和交易参考号,仅代表开仓请求通过了网关格式校验、被服务端接收,不代表订单成交,最终成交/拒单状态必须以
deal/confirms接口返回结果为准,该流程属于正常设计,不是接口异常。 - 请求中开启了保证止损(
guaranteedStop: true),设置的止损、止盈距离均为30点,但IX.D.DOW.IFS.IP(华尔街/道指现货点差合约)对保证止损的最小距离要求远高于30点,参数不满足规则直接触发拒单。返回结果中guaranteedStop字段变为false,就是系统校验不通过后重置参数的表现。 - 不同标的的最小止损/止盈距离不是固定值,会随合约类型(现货/期货)、市场波动率、是否使用保证止损动态变化,模拟盘与实盘的参数要求也存在差异,硬编码固定30点的设置很容易触发规则校验失败。
修复方案
按以下步骤调整即可解决问题:
- 开仓前先查询标的交易规则
调用/markets/{epic}接口传入要交易的epic编码IX.D.DOW.IFS.IP,从返回结果中提取两个核心参数:minStopOrProfitDistance:普通止损、止盈的最小允许距离minGuaranteedStopDistance:保证止损的最小允许距离
常规行情下,IX.D.DOW.IFS.IP的普通止损最小距离通常在10点以上,保证止损最小距离在50-80点区间,之前设置的30点达不到保证止损的最低要求。
- 按需调整开仓参数
两种可选调整方向:- 若需要使用保证止损:将
stopDistance设置为大于等于minGuaranteedStopDistance的数值,limitDistance设置为大于等于minStopOrProfitDistance的数值,参考示例:
- 若需要使用保证止损:将
const bodyS = { "epic": "IX.D.DOW.IFS.IP", "expiry": "-", "direction": "BUY", "size": 1, "orderType": "MARKET", "guaranteedStop": true, "stopDistance": 80, // 替换为实际查询到的最小保证止损距离以上的数值 "forceOpen": true, "limitDistance": 40, // 替换为实际查询到的最小止盈距离以上的数值 "currencyCode": "GBP", }
- 若不需要保证止损:直接将
guaranteedStop设为false,此时30点的止损、止盈距离通常可以满足普通止损的规则要求。
- 避免硬编码固定距离值
不要在代码中写死止损止盈距离,每次开仓前都拉取对应标的的最新规则参数——高波动行情下IG会临时上调最小止损距离,硬编码的固定值会在行情异动时再次触发同类拒单。
内容的提问来源于stack exchange,提问作者Rocketlife2810
相关产品推荐
相关产品推荐

