交易
常见下单失败错误及排查方法
如果您遇到了下单失败方面的问题,请首先参考以下回答排查。若以下回答不能解决您的问题,请联系我们排查故障。
为了更快为您定位问题,建议您准备好以下信息
- 用户id
- order_id(若有),可通过get_orders()查询
- 完整错误信息及报错的代码(若在QQ群等公众平台反馈问题,请务必注意在发布前屏蔽您的隐私信息)
- 下单时段
- 账户类别(环球、综合、模拟)
- 市场及标的
- 订单类型(市价、限价等)
下单失败排查方法
若程序抛出异常,请对照下文的常见错误消息检查问题,若不能解决问题,请联系我们。若程序无报错,请根据以下方法检查被拒单的原因:
订单状态是异步更新的,因此,如果下单失败,请使用get_order再次查询订单,订单内会标记失败原因。可以根据以下示例,在create_order, place_order, get_order 三个环节之后分别查看Order对象,比较其差异,并查询下单失败原因。
1. create order 创建订单环节
没有全局id,只有账户相关的order_id,status 为 NEW
Order({'account': 'U523', 'id': None, 'order_id': 297, 'parent_id': None, 'order_time': None, 'reason': None, 'trade_time': None, 'action': 'BUY', 'quantity': 100, 'filled': 0, 'avg_fill_price': 0, 'commission': None, 'realized_pnl': None, 'trail_stop_price': None, 'limit_price': 0.1, 'aux_price': None, 'trailing_percent': None, 'percent_offset': None, 'order_type': 'LMT', 'time_in_force': None, 'outside_rth': None, 'contract': ES/None/USD, 'status': 'NEW', 'remaining': 100})
2. place order 发送订单
生成全局id,status 仍为 NEW。palce order 之后的 Order 对象中只增加了 id。如果需要获取最新的订单状态,需要使用 get_order 进行查询
Order({'account': 'U523', 'id': 154758864761483264, 'order_id': 297, 'parent_id': None, 'order_time': None, 'reason': None, 'trade_time': None, 'action': 'BUY', 'quantity': 100, 'filled': 0, 'avg_fill_price': 0, 'commission': None, 'realized_pnl': None, 'trail_stop_price': None, 'limit_price': 0.1, 'aux_price': None, 'trailing_percent': None, 'percent_offset': None, 'order_type': 'LMT', 'time_in_force': None, 'outside_rth': None, 'contract': ES/None/USD, 'status': 'NEW', 'remaining': 100})
3. get order 获取订单状态
status 变更为 REJECTED,且 reason 中增加了订单被拒绝的原因
Order({'account': 'U523', 'id': 154758864761483264, 'order_id': 297, 'parent_id': 0, 'order_time': 1550115294556, 'reason': '201:Order rejected - Reason: YOUR ORDER IS NOT ACCEPTED. MINIMUM OF 2000 USD (OR EQUIVALENT IN OTHER CURRENCIES) REQUIRED IN ORDER TO PURCHASE ON MARGIN, SELL SHORT, TRADE CURRENCY OR FUTURE', 'trade_time': 1550115294694, 'action': 'BUY', 'quantity': 100, 'filled': 0, 'avg_fill_price': 0, 'commission': 0, 'realized_pnl': 0, 'trail_stop_price': None, 'limit_price': 0.1, 'aux_price': None, 'trailing_percent': None, 'percent_offset': None, 'order_type': 'LMT', 'time_in_force': 'DAY', 'outside_rth': True, 'contract': ES, 'status': 'REJECTED', 'remaining': 100})
以下为常见错误类型列表:
1.错误提示:standard account response error(bad_request:Orders cannot be place at this moment)
错误原因1
无交易权限
解决方法
如果是新注册的账号,请先确认当前账号有没有完成手机、人脸、银行卡验证,若未验证,请先在手机端APP上完成人脸识别和国内银行卡验证
错误原因2
当前时段不可下单
解决方法
遇到此错误时,请首先检查您下单的时间,并与对应市场交易时间对照。注意:市场交易时间可能受到交易所所在地区公共节假日的影响,请结合交易所官网公告进行判断
若您使用的是模拟账户:
模拟账户目前不支持部分市场及品类的盘前盘后及预挂单交易。请暂时修改程序尝试在正常交易时段进行下单,同时可以向我们反馈问题
若您使用的是综合账户:
综合账户不支持部分订单类型的盘前、盘后交易及预挂单交易。关于支持的订单类型,请见支持的订单类型列表
2.错误提示:standard account response error(BAD_REQUEST:You cannot place market or stop order during pre-market and after-hours trading)
错误原因
盘前盘后交易时不可下市价单和止损单
解决方法
检查下单时间,请注意对应的时区,并根据交易时间更改订单类型。关于支持的订单类型及交易时段,请见支持的订单类型列表
3.错误提示:The order quantity you entered exceeds your currently available position
错误原因
下卖单数量超过您当前可用仓位
解决方法
若需要从做多调整为做空,请先调用接口检查仓位并下单平仓,在平仓后再下卖单进行做空
4.错误提示:standard account response error(bad_request:We don’t support trading of this stock now(Error Code 4))
错误原因
传入了不可交易的股票代码
解决方法
可以使用手机APP确认标的的交易状态,或通过行情接口检查股票交易状态后再进行下单操作
5.错误提示:status=illegal_price, msg=Sorry, your order price does not match the tick size: 0.05
错误原因
价格不符合minTick的最小变动单位值
解决方法
可以用综合账号或者模拟账号查询合约,合约接口返回tickSizes字段包含不同价格档位的minTick值。SDK提供StockPriceUtils工具类可以判断限价价格是否符合要求,可以向上或者向下修复价格使其符合minTick要求。示例代码:
ContractModel model = new ContractModel("00700");
ContractRequest contractRequest = ContractRequest.newRequest(
model, "402901");
Double limitPrice = 352.3344d;
ContractResponse contractResponse = client.execute(contractRequest);
if (contractResponse.isSuccess() && contractResponse.getItem().getTickSizes() != null) {
List<TickSizeItem> tickSizes = contractResponse.getItem().getTickSizes();
System.out.println(JSONObject.toJSONString(tickSizes));
boolean match = StockPriceUtils.matchTickSize(limitPrice, tickSizes);
if (!match) {
// limitPrice:352.3344, fixed limitPrice(increments the price):352.4
System.out.println("limitPrice:" + limitPrice + ", fixed limitPrice(increments the price):"
+ StockPriceUtils.fixPriceByTickSize(limitPrice, tickSizes, true));
// limitPrice:352.3344, fixed limitPrice(decrease the price):352.2
System.out.println("limitPrice:" + limitPrice + ", fixed limitPrice(decrease the price):"
+ StockPriceUtils.fixPriceByTickSize(limitPrice, tickSizes, false));
}
}
其他错误
使用合约接口获取股票合约的multiplier和minTick,去配置港股订单的total_quantity和limit_price,导致下单失败
解决方法
需要调用获取股票交易信息接口,获取每手股票数(lotSize)和股价最小变动单位(minTick)来计算total_quantity,否则可能出现不是lotSize的整数倍,导致下单失败。另外合约接口返回的multiplier实际是给期货用的,综合账户合约返回的min_tick只是简单获取了最小值,实际会根据价格段调整。
如何判断订单是部分成交状态?
如何判断综合和模拟账号的部分成交状态?
当订单状态不是Initial和Filled(有可能是PendingSubmit,Submitted,Cancelled,Invalid,Inactive其中一种)时,都有可能是部分成交的状态,可以通过订单成交数量是否大于0来判断
如何判断环球账号部分成交状态?
订单状态是 Filled,且订单成交数量大于0
支持交易的订单类型
美国
股票, ETFs
订单类型 | 时效 | 盘中 | 盘前盘后 | 预挂单 |
---|---|---|---|---|
限价单 | DAY/GTC | ✓ | ✓ | ✓ |
市价单 | DAY/GTC | ✓ | × | × |
止损限价单 | DAY/GTC | ✓ | ✓ | ✓ |
止损单 | DAY/GTC | ✓ | × | ✓ |
条件订单 | DAY/GTC | ✓ | × | × |
附加订单 | DAY/GTC | ✓ | × | × |
括号订单 | DAY/GTC | ✓ | ✓ | ✓ |
跟踪止损订单 | DAY/GTC | ✓ | × | × |
TWAP/VWAP订单 | 根据订单类型 | ✓ | × | × |
期权
订单类型 | 时效 | 盘中 | 预挂单 |
---|---|---|---|
限价单 | DAY/GTC | ✓ | ✓ |
市价单 | DAY | ✓ | × |
止损限价单 | DAY/GTC | ✓ | ✓ |
括号订单 | DAY/GTC | ✓ | ✓ |
附加订单 | 根据订单类型 | ✓ | × |
括号订单 | 根据订单类型 | ✓ | × |
期货
订单类型 | 时效 | 盘中 | 预挂单 |
---|---|---|---|
限价单 | DAY/GTC | ✓ | ✓ |
市价单 | DAY/GTC | ✓ | × |
止损限价单 | DAY/GTC | ✓ | ✓ |
止损单 | DAY/GTC | ✓ | ✓ |
条件订单 | DAY/GTC | ✓ | × |
附加订单 | DAY/GTC | ✓ | × |
括号订单 | DAY/GTC | ✓ | × |
香港
收盘后有安全时间,安全时间内不允许预挂单
股票,ETFs
订单类型 | 时效 | 盘中 | 预挂单 |
---|---|---|---|
限价单 | DAY/GTC | ✓ | ✓ |
市价单 | DAY/GTC | ✓ | × |
止损限价单 | DAY/GTC | ✓ | ✓ |
止损单 | DAY/GTC | ✓ | ✓ |
条件订单 | DAY/GTC | ✓ | × |
附加订单 | DAY/GTC | ✓ | ✓ |
括号订单 | DAY/GTC | ✓ | ✓ |
盘前竞价单 | DAY/GTC | ✓ | × |
追踪止损单 | 根据订单类型 | ✓ | × |
TWAP/VWAP订单 | 根据订单类型 | ✓ | × |
期权
订单类型 | 时效 | 盘中 | 预挂单 |
---|---|---|---|
限价单 | DAY/GTC | ✓ | ✓ |
市价单 | DAY | ✓ | × |
止损限价单 | DAY/GTC | ✓ | ✓ |
止损单 | DAY/GTC | ✓ | ✓ |
窝轮、牛熊证
订单类型 | 时效 | 盘中 | 预挂单 |
---|---|---|---|
限价单 | DAY/GTC | ✓ | ✓ |
止损限价单 | DAY/GTC | ✓ | × |
条件订单 | DAY/GTC | ✓ | × |
附加订单 | 根据订单类型 | ✓ | × |
括号订单 | 根据订单类型 | ✓ | × |
新加坡
收盘后有安全时间,安全时间内不允许预挂单
股票,ETFs
订单类型 | 时效 | 盘中 |
---|---|---|
限价单 | DAY/GTC | ✓ |
市价单 | DAY/GTC | ✓ |
止损限价单 | DAY/GTC | ✓ |
止损单 | DAY/GTC | ✓ |
条件订单 | DAY/GTC | ✓ |
附加订单 | DAY/GTC | ✓ |
括号订单 | DAY/GTC | ✓ |
追踪止损订单 | DAY/GTC | ✓ |
澳大利亚
收盘后有安全时间,安全时间内不允许预挂单
股票,ETFs
订单类型 | 时效 | 盘中 |
---|---|---|
限价单 | DAY/GTC | ✓ |
市价单 | DAY/GTC | ✓ |
止损限价单 | DAY/GTC | ✓ |
止损单 | DAY/GTC | ✓ |
条件订单 | DAY/GTC | ✓ |
附加订单 | DAY/GTC | ✓ |
括号订单 | DAY/GTC | ✓ |
追踪止损订单 | DAY/GTC | ✓ |
交易时间
A股
只有当沪深港三个交易市场都开市的情况下,才能进行沪股通、深股通的交易。 沪股通、深股通的交易时间为:沪深港3个市场都开市的交易日
上午9:30-11:30;下午13:00-15:00
美股
美东时间:
盘前:04:00-9:30;盘中:09:30-16:00;盘后:16:00-20:00。
北京时间:
夏令时:盘前:16:00-21:30;盘中:21:30-04:00;盘后:04:00-08:00
冬令时:盘前:17:00-22:30;盘中:22:30-05:00;盘后:05:00-09:00
港股
开市前时段
时段 | 交易规则 |
---|---|
输入买卖盘时段9:00-9:15 | 可以提交、修改、取消竞价市价单及竞价限价单 |
不可取消时段9:15-9:20 | 只可以提交竞价市价单和竞价限价单,不可进行撤单、改单 |
随机对盘时段9:20-9:22(对盘会按最终参考平衡价格随机于 9:20-9:22 开始) | 进行竞价时段的撮合对盘 |
暂停时段,随机对盘结束-9:30 | 竞价盘: 未完成的买卖盘会被系统取消;竞价限价盘:未完成的买卖盘若输入价格范围不偏离按盘价九倍或以上,将转为限价盘并自动转至持续交易时段 |
持续交易时段
时段 | 时间 |
---|---|
早市 | 9:30-12:00 |
中午休市 | 12:00-13:00 |
午市 | 13:00-16:00 |
注意:中午休市时段不允许进行改单,12:30-13:00允许进行撤单。
收市竞价交易时段
时段 | 交易规则 |
---|---|
收市竞价时段 16:00-16:01 | 计算及公布参考价;不可提交订单 |
输入买卖盘16:01-16:06 | 可以提交、修改、取消竞价市价单及竞价限价单,竞价限价单价格限制不得超出参考价的±5% |
不可取消 16:06-16:08 | 可以提交竞价市价单及竞价限价单,不可取消及更改;竞价限价单输入价格必须在最低沽盘价与最高买盘价之间 |
随机收市 16:08-16:10 | 随机收市时段,仍可提交竞价市价单及竞价限价单,不可取消及更改;竞价限价单输入价格必须在最低沽盘价与最高买盘价之间 |
新加坡
时段 | 全天交易 | 半天交易 |
---|---|---|
开市时间 | ||
开市前 | 8:30 - 8:58/ 8:59* | 8:30 - 8:58 /8:59* |
不可撤销 | 8:58 / 8:59 - 9:00 | 8:58 / 8:59 - 9:00 |
交易 | 9:00 - 12:00 | 9:00 - 12:00 |
午休 | ||
开市前 | 12:00 - 12:58 / 12:59* | |
不可撤销 | 12:58 / 12:59 - 13:00 | |
交易 | 13:00 - 17:00 | |
休市时间 | ||
休市前 | 17:00 - 17:04 / 17:05* | 12:00 - 12:04 / 12:05* |
不可撤销 | 17:04/ 17:05* - 17:06 | 12:04 / 12:05* - 12:06 |
休市前交易 | 17:06 - 17:16 | 12:06 - 12:16 |
休市 | 17:16 | 12:16 |
澳大利亚
澳洲市场交易时间为周一至周五,时间如下: 澳大利亚东部标准时间 10am - 4pm
期货交易时间
按照交易所的规定,不同期货品种交易时间不同,详情请在老虎交易软件中查看。具体以交易所公告为准。
美期货
芝加哥商品交易所
商品类型 | 交易时间 |
---|---|
股指期货 | 周一至周五,9:30 - 次日4:00(闭市休息:16:15 - 16:30) |
农产品期货 | 周一至周五,9:30 - 次日2:00(闭市休息:13:15 - 14:00) |
能源期货 | 周一至周五,9:00 - 次日2:30(闭市休息:13:15 - 14:00) |
金属期货 | 周一至周五,8:00 - 次日1:00(闭市休息:13:15 - 14:00) |
香港期货
商品类型 | 交易时间 |
---|---|
香港期货 | 周一至周五,9:00 - 16:30 |
日本期货
商品类型 | 交易时间 |
---|---|
日本期货 | 周一至周五,8:45 - 15:30 |
新加坡期货
商品类型 | 交易时间 |
---|---|
新加坡期货 | 周一至周五,9:00 - 17:15 |
请注意,以上交易时间仅供参考,具体的交易时间可能会根据季节变化、节假日等因素进行调整。建议您在进行交易前,查阅官方或相关交易所的最新公告以获取准确的交易时间信息