跳转到内容

请求 FA 组和配置

requestFA() 用来向 TWS 请求财务顾问账户的分配配置。它只读取配置,不会修改账户组,也不会提交订单。

这个接口只有在账户具备 FA 能力时才会返回 XML。普通个人账户连接成功后,通常会收到 321 权限错误。

官方参考:

app.requestFA(faData)
参数类型中文含义常见取值
faDataint要请求的 FA 数据类型1 账户组,3 账户别名;2 是旧 Profile 兼容项,新项目不要围绕它设计。

在 Python 代码里建议定义成可读常量:

FA_GROUPS = 1
FA_ALIASES = 3
FA_PROFILES_LEGACY = 2
def request_fa_config(app):
# 请求账户组配置。新项目主要围绕 Group 设计。
app.requestFA(FA_GROUPS)
# 请求账户别名,便于把账户编号映射成更易读的名称。
app.requestFA(FA_ALIASES)
# 旧 Profile 配置只用于维护老系统。TWS 983+ 后新项目通常不用它。
app.requestFA(FA_PROFILES_LEGACY)

请求结果不会从 requestFA() 返回值里拿到,而是异步进入 receiveFA()。如果账户没有权限,则进入 error()

from ibapi.client import EClient
from ibapi.wrapper import EWrapper
class FAApp(EWrapper, EClient):
def __init__(self):
EClient.__init__(self, self)
def nextValidId(self, orderId):
# 连接初始化完成后再发 FA 请求。
self.requestFA(1)
self.requestFA(3)
def receiveFA(self, faDataType, cxml):
# cxml 是 TWS 返回的 XML 字符串。
print("收到 FA 配置类型:", faDataType)
print(cxml)
def error(self, reqId, errorTime, errorCode, errorString, advancedOrderRejectJson=""):
print("错误:", reqId, errorCode, errorString)
REQUEST_FA_SENT=1
REQUEST_FA_SENT=3
REQUEST_FA_SENT=2
CONNECTED=True
FA_CALLBACK_COUNT=0
INFO_CODES=2104,2106,2158
NON_INFO_ERROR_COUNT=3
ERROR=reqId=-1;code=321;msg=确认请求时出错。:-'X':导致- FA data operations ignored for non FA customers.

判断方式:

现象含义
CONNECTED=TrueTWS Socket 连接正常。
INFO_CODES 只有 210421062158行情服务器/历史数据服务器连接提示,不是失败。
FA_CALLBACK_COUNT=0没有收到 FA XML。
code=321 且包含 non FA customers账户不是 FA 账户,不能读取 FA 配置。

如果是 FA 账户,预期会收到 receiveFA(faDataType, cxml),其中 cxml 是解析、备份和替换配置的核心数据。不要在没有收到 XML 的情况下构造 replaceFA() 请求。