2

使用TD Ameritrade API 页面,我的 C# 应用程序成功登录并订阅,以使用小字段列表获取多个符号的数据流。

现在,我添加了第二个订阅,其中包含可能包含一些相同符号的不同字段列表。

我解析数据响应,将更新发送到我的应用程序中的适当位置。美好的。

现在要取消订阅其中一个数据请求,我正在尝试这个。例如,如果第一次询问“SMCI,INFN,TSM”,第二次询问“AMD,SMCI,INFN”,我将取消订阅第二个列表:

TDRequestQuote quoteRequest = new TDRequestQuote
{
    service = "QUOTE",
    command = "UNSUBS",
    requestid = pID.ToString(),
    account = _TDUser.accounts[0].accountId,
    source = _TDUser.streamerInfo.appId,
    parameters = new TDRequestQuoteParameters
    {
        keys = sSymbolList
    }
};
string sEndRequestQuote = JsonConvert.SerializeObject(quoteRequest, Formatting.None, new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore });
_WebSocket.Send(sEndRequestQuote); //A WebSocketSharp.WebSocket

两次心跳通知后,我收到以下消息:

{"notify":[{"service":"ADMIN","timestamp":1628966081898,"content":{"code":30,"msg":"Stop streaming due to empty subscription"}}]}

然后整个网络套接字关闭。

但是符号“TSM”应该是激活的!

API 没有显示使用命令“UNSUBS”的示例。

您如何成功取消订阅一个数据请求并保持其他数据请求处于活动状态?

4

1 回答 1

0

正如您所指出的,API 文档没有解释UNSUBS. 无论参数如何,该命令都可能取消您对所有符号的订阅。keys如果是这种情况,那么您可能必须发送一组请求 -UNSUBS后跟 aSUBS到剩余的符号。

于 2021-08-25T19:08:42.987 回答