富途证券(香港)帮助中心-主动捕捉异常,让策略更健壮
简体中文
返回
立即开户
清空
全部
行情
资讯
课堂
帮助
全部
港股
美股
沪深
新加坡
澳洲
日股
全部
新闻
公告
研报
暂无匹配内容
操作过于频繁,请稍后再试
请检查网络设置后重试 刷新
加载中
历史记录
    行情 更多
    资讯 更多
    课堂 更多
    帮助 更多
    加载中
    新闻 更多
    公告 更多
    研报 更多

    主动捕捉异常,让策略更健壮

    如何主动捕捉异常

    量化功能的接口在调用出现异常时,会抛出 APIException 异常,该异常的 err_code 属性,会携带具体的错误码信息。我们为各种错误场景定义了一系列错误码。

    错误码枚举

    错误码枚举对应场景

    ExceedReqLimit

    请求过于频繁,触发频率限制

    ReqTimeout

    接口请求超时

    NoQuoteRight

    行情权限不足

    InvalidArgument

    无效参数(参数校验失败)

    ReqFailed

    接口请求失败

    NoDataAvailable

    无数据(返回数据是 NA)

    EmptySymbol

    参数 symbol 为空

    Unknow

    未知错误

    为了让策略更加健壮,您可以在策略的关键环节捕捉错误码,并执行自定义的处理逻辑。

    举例:为了增加下单的可靠性,使用自编码事件卡片,在发现下单失败时,反复提交订单直至成功。

    while True:
        try:
            place_limit(symbol=self.运行标的1, price=2, qty=100, side=OrderSide.BUY, time_in_force=TimeInForce.DAY)
            break  # 下单成功,跳出循环
        except APIException as ex:
            print('下单失败,2 秒后重试')
            time.sleep(2)
            continue  # 下单失败,重试

    所提供的图片并非最新图片,任何证券或输入内容仅用于说明目的,并非推荐。

     

    卡片中主动捕捉异常,与运行时的异常设置是什么关系

    卡片中采用自编码的方式捕捉异常,优先级会高于全局设置的异常处理。我们通过2个例子来看一下它们的关系:

    例 1:无主动捕捉异常

    在下图例子中,我们使用普通卡片,不采用自编码的方式主动捕捉异常错误码。全局的异常设置为“跳过本轮运行”。

    所提供的图片并非最新图片,任何证券或输入内容仅用于说明目的,并非推荐。

    假设,当策略运行到“无重试的下单开仓”卡片时,下单失败。此时会按照全局的异常设置,跳过本轮运行。因此,后面的“完成标记”卡片就不会运行到。直至下一个信号触发策略时,会再次运行“无重试的下单开仓”卡片。

    例 2:有主动捕捉异常

    在下图例子中,我们使用自编码卡片,主动捕捉异常错误码后重试提交订单直至成功。全局的异常仍设置为“跳过本轮运行”。

    所提供的图片并非最新图片,任何证券或输入内容仅用于说明目的,并非推荐。

    假设,当策略运行到“有异常重试的下单开仓”卡片时,第一次下单失败。

    按照图中代码逻辑,捕捉到异常后,重复提交订单直至下单成功。之后会运行下一张“完成标记”卡片。因此,在有捕捉异常的自编码卡片中,异常在发生后,会先被卡片捕捉到,不会再执行全局的异常设置了。

    本内容仅用作提供信息及教育之目的,不构成对任何特定证券或投资策略的推荐或认可。本内容中的信息仅用于说明目的,可能不适用于所有投资者。本内容未考虑任何特定人士的投资目标、财务状况或需求,并不应被视作个人投资建议。建议您在做出任何投资于任何资本市场产品的决定之前,应考虑您的个人情况判断信息的适当性。过去的投资表现不能保证未来的结果。投资涉及风险和损失本金的可能性。本平台对上述内容的真实性、完整性、准确性或对任何特定目的的时效性不做任何陈述或保证。

    投资课程
    看财报选好股