行情订阅
订阅调用返回 uint 请求 ID;最终结果由回调异步确认。
完整行情推送示例
以下控制台程序通过第一个命令行参数选择 Quote、Depth、Kline、Tick 或 FullTick 模式。例如:dotnet run -- FullTick。请先在用户主目录的 .tigeropen 目录中准备 SDK 配置文件。
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using Newtonsoft.Json.Linq;
using TigerOpenAPI.Config;
using TigerOpenAPI.Push;
using TigerOpenAPI.Push.Model;
using TigerOpenAPI.Quote.Pb;
enum MarketPushMode { Quote, Depth, Kline, Tick, FullTick }
sealed class MarketPushCallback : IApiComposeCallback
{
private readonly ConcurrentDictionary<int, TaskCompletionSource<string>> pending = new();
private readonly TaskCompletionSource<string> globalFailure =
new(TaskCreationOptions.RunContinuationsAsynchronously);
public TaskCompletionSource<bool> Stopped { get; } =
new(TaskCreationOptions.RunContinuationsAsynchronously);
private void Complete(int id, string result)
{
TaskCompletionSource<string> completion = pending.GetOrAdd(
id, _ => new(TaskCreationOptions.RunContinuationsAsynchronously));
try
{
JObject parsed = JObject.Parse(result);
int? code = parsed.Value<int?>("code");
if (code == 0)
completion.TrySetResult(result);
else
completion.TrySetException(new InvalidOperationException(
$"Subscription command failed: {result}"));
}
catch (Exception error)
{
completion.TrySetException(new InvalidOperationException(
$"Invalid subscription result: {result}", error));
}
}
private void Fail(int id, string error) =>
pending.GetOrAdd(id, _ => new(TaskCreationOptions.RunContinuationsAsynchronously))
.TrySetException(new InvalidOperationException(error));
private void StopWithFailure(string error)
{
globalFailure.TrySetResult(error);
Stopped.TrySetResult(true);
}
public void ThrowIfFailed()
{
if (globalFailure.Task.IsCompletedSuccessfully)
throw new InvalidOperationException(globalFailure.Task.Result);
}
public async Task<string> WaitForResultAsync(uint requestId, TimeSpan timeout)
{
int id = unchecked((int)requestId);
TaskCompletionSource<string> completion = pending.GetOrAdd(
id, _ => new(TaskCreationOptions.RunContinuationsAsynchronously));
try
{
Task delay = Task.Delay(timeout);
Task winner = await Task.WhenAny(globalFailure.Task, completion.Task, delay);
if (winner == globalFailure.Task)
throw new InvalidOperationException(await globalFailure.Task);
if (winner == delay)
throw new TimeoutException($"Timed out waiting for request {requestId}.");
return await completion.Task;
}
finally
{
pending.TryRemove(id, out _);
}
}
public void QuoteChange(QuoteBasicData data) => Console.WriteLine($"QuoteChange: {data}");
public void QuoteAskBidChange(QuoteBBOData data) => Console.WriteLine($"QuoteAskBidChange: {data}");
public void DepthQuoteChange(QuoteDepthData data) => Console.WriteLine($"DepthQuoteChange: {data}");
public void KlineChange(KlineData data) => Console.WriteLine($"KlineChange: {data}");
public void TradeTickChange(TradeTick data) => Console.WriteLine($"TradeTickChange: {data.Symbol}, ticks={data.Ticks.Count}");
public void FullTickChange(TickData data) => Console.WriteLine($"FullTickChange: {data}");
public void SubscribeEnd(int id, string subject, string result) => Complete(id, result);
public void CancelSubscribeEnd(int id, string subject, string result) => Complete(id, result);
public void ConnectionAck() => Console.WriteLine("ConnectionAck");
public void ConnectionAck(int serverSendInterval, int serverReceiveInterval) => Console.WriteLine($"ConnectionAck: send={serverSendInterval}, receive={serverReceiveInterval}");
public void ConnectionClosed() => StopWithFailure("Connection closed.");
public void ConnectionKickout(int errorCode, string errorMsg) =>
StopWithFailure($"Connection kickout {errorCode}: {errorMsg}");
public void Error(string errorMsg) => StopWithFailure(errorMsg);
public void Error(int id, int errorCode, string errorMsg)
{
Fail(id, $"Error {errorCode}: {errorMsg}");
Stopped.TrySetResult(true);
}
public void HearBeat(string heartBeatContent) => Console.WriteLine($"HearBeat: {heartBeatContent}");
public void ServerHeartBeatTimeOut(string channelId) =>
StopWithFailure($"Server heartbeat timed out for channel {channelId}.");
public void OrderStatusChange(OrderStatusData data) { }
public void OrderTransactionChange(OrderTransactionData data) { }
public void PositionChange(PositionData data) { }
public void AssetChange(AssetData data) { }
public void OptionChange(QuoteBasicData data) { }
public void OptionAskBidChange(QuoteBBOData data) { }
public void FutureChange(QuoteBasicData data) { }
public void FutureAskBidChange(QuoteBBOData data) { }
public void StockTopPush(StockTopData data) { }
public void OptionTopPush(OptionTopData data) { }
public void GetSubscribedSymbolEnd(SubscribedSymbol subscribedSymbol) { }
}
static class Program
{
private static async Task WaitForCancelAsync(
MarketPushCallback callback, uint requestId)
{
string result = await callback.WaitForResultAsync(requestId, TimeSpan.FromSeconds(10));
Console.WriteLine($"CancelSubscribeEnd: id={unchecked((int)requestId)}, result={result}");
}
public static async Task Main(string[] args)
{
if (args.Length == 0 || !Enum.TryParse(args[0], true, out MarketPushMode mode))
{
Console.Error.WriteLine("Usage: dotnet run -- Quote|Depth|Kline|Tick|FullTick");
return;
}
var config = new TigerConfig
{
ConfigFilePath = Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.UserProfile), ".tigeropen"),
UseFullTick = mode == MarketPushMode.FullTick
};
var callback = new MarketPushCallback();
PushClient client = PushClient.GetInstance()
.Config(config)
.ApiComposeCallback(callback);
var symbols = new HashSet<string> { "AAPL" };
bool connected = false;
try
{
connected = await client.ConnectAsync();
if (!connected)
throw new InvalidOperationException("Market-push connection failed.");
Console.CancelKeyPress += (_, eventArgs) =>
{
eventArgs.Cancel = true;
callback.Stopped.TrySetResult(true);
};
uint requestId = mode switch
{
MarketPushMode.Quote => client.SubscribeQuote(symbols),
MarketPushMode.Depth => client.SubscribeDepthQuote(symbols),
MarketPushMode.Kline => client.SubscribeKline(symbols),
MarketPushMode.Tick or MarketPushMode.FullTick => client.SubscribeTradeTick(symbols),
_ => 0
};
if (requestId == 0)
throw new InvalidOperationException("The subscription request was not sent.");
string result = await callback.WaitForResultAsync(requestId, TimeSpan.FromSeconds(10));
Console.WriteLine($"SubscribeEnd: id={unchecked((int)requestId)}, result={result}");
Console.WriteLine("Press Ctrl+C to stop.");
await callback.Stopped.Task;
callback.ThrowIfFailed();
}
finally
{
try
{
if (client.IsConnected())
{
uint cancelRequestId = mode switch
{
MarketPushMode.Quote => client.CancelSubscribeQuote(symbols),
MarketPushMode.Depth => client.CancelSubscribeDepthQuote(symbols),
MarketPushMode.Kline => client.CancelSubscribeKline(symbols),
MarketPushMode.Tick or MarketPushMode.FullTick => client.CancelSubscribeTradeTick(symbols),
_ => 0
};
if (cancelRequestId != 0)
await WaitForCancelAsync(callback, cancelRequestId);
}
}
finally
{
client.Disconnect();
}
}
}
}ConnectAsync 会一直重试,直到 TCP 连接成功。若要在连接成功前停止程序,请终止进程;连接成功后,按 Ctrl+C 会触发取消订阅和断开连接。连接关闭、被踢下线、服务端心跳超时或无请求 ID 的全局错误会记录为全局失败并结束等待;无论全局失败发生在请求等待之前还是期间,WaitForResultAsync 都会抛出异常。带 ID 的错误使对应请求失败,并结束主等待。停止等待后,ThrowIfFailed() 会再次检查全局失败,避免没有活动请求时静默退出。清理阶段仅在连接仍然有效时取消订阅,但只要执行进入 finally,其中的 Disconnect() 就会执行。
订阅和取消方法返回 uint 请求 ID;SubscribeEnd、CancelSubscribeEnd 和带 ID 的 Error 回调中的 int id 携带同一个 32 位请求标识符。应使用 unchecked((int)requestId) 比较其未经检查的 32 位位模式,不能按有符号数值比较。回调和等待方都使用 GetOrAdd,因此即使回调先于 WaitForResultAsync 到达,也不会丢失结果;带 ID 的错误会由等待方以异常形式抛出。非零 ID 仅表示请求已发送;示例会解析回调 result JSON,只有结果 JSON 的 code 字段为 0 才完成成功,否则抛出异常。完整逐笔与普通逐笔都调用 SubscribeTradeTick;UseFullTick = true 只需在连接之前设置,此时数据进入 FullTickChange,普通模式则进入 TradeTickChange。
订阅股票行情
操作名
PushClient.SubscribeQuote. 已连接通道上的订阅、取消订阅或订阅状态查询命令。发送成功不等于服务端确认成功。
请求
uint SubscribeQuote(ISet<string> symbols)参数
symbols 必须实现 ISet 泛型接口(元素为 string);取消方法传 null 表示取消该主题全部代码。
返回
Return: uint 请求 ID。订阅和取消结果分别进入 SubscribeEnd / CancelSubscribeEnd 完整字段表。
示例
连接、订阅、取消与退出处理参见完整行情推送示例(选择 Quote 模式)。
订阅完成回调
SubscribeEnd(int id, string subject, string result)
数据回调
QuoteChange(QuoteBasicData data)(BASIC,详见 完整字段表)和 QuoteAskBidChange(QuoteBBOData data)(BBO,详见 完整字段表)
Protobuf JSON 表示
基本行情(BASIC):
{
"symbol": "AAPL",
"type": "BASIC",
"timestamp": "1684766012120",
"serverTimestamp": "1684766012129",
"avgPrice": 174.1721,
"latestPrice": 174.175,
"latestPriceTimestamp": "1684766011918",
"latestTime": "05-22 10:33:31 EDT",
"preClose": 175.16,
"volume": "12314802",
"amount": 2144365591.41,
"open": 173.98,
"high": 174.71,
"low": 173.45,
"marketStatus": "Trading",
"mi": {
"p": 174.175,
"a": 174.1721,
"t": "1684765980000",
"v": "57641",
"o": 174.21,
"h": 174.22,
"l": 174.14
}
}最优报价(BBO):
{
"symbol": "AAPL",
"type": "BBO",
"timestamp": "1676992715509",
"askPrice": 149.96,
"askSize": "200",
"askTimestamp": "1676992715367",
"bidPrice": 149.94,
"bidSize": "700",
"bidTimestamp": "1676992715367"
}字段类型、可选字段和嵌套 Mi 的完整定义见 QuoteChange 字段表;BBO 字段见 QuoteAskBidChange 字段表。
取消订阅
操作名
PushClient.CancelSubscribeQuote. 已连接通道上的订阅、取消订阅或订阅状态查询命令。发送成功不等于服务端确认成功。
请求
uint CancelSubscribeQuote(ISet<string>? symbols = null)参数
symbols 必须实现 ISet 泛型接口(元素为 string);取消方法传 null 表示取消该主题全部代码。
返回
Return: uint 请求 ID。订阅和取消结果分别进入 SubscribeEnd / CancelSubscribeEnd 完整字段表。
示例
uint requestId = client.CancelSubscribeQuote(new HashSet<string> { "AAPL" });取消订阅完成回调
CancelSubscribeEnd(int id, string subject, string result)
订阅逐笔成交
操作名
PushClient.SubscribeTradeTick. 已连接通道上的订阅、取消订阅或订阅状态查询命令。发送成功不等于服务端确认成功。
请求
uint SubscribeTradeTick(ISet<string> symbols)参数
symbols 必须实现 ISet 泛型接口(元素为 string);取消方法传 null 表示取消该主题全部代码。
返回
Return: uint 请求 ID。订阅和取消结果分别进入 SubscribeEnd / CancelSubscribeEnd 完整字段表。
示例
连接、订阅、取消与退出处理参见完整行情推送示例(选择 Tick 模式)。
订阅完成回调
SubscribeEnd(int id, string subject, string result)
数据回调
TradeTickChange(TradeTick data),详见 完整字段表。
JSON 表示
{
"symbol": "AAPL",
"secType": "STK",
"quoteLevel": "usQuoteBasic",
"timestamp": 1676993925700,
"ticks": [
{
"sn": 116202,
"volume": 50,
"tickType": "*",
"price": 149.665,
"time": 1676993924289,
"cond": "US_REGULAR_SALE"
}
]
}普通 TradeTickChange 回调中的 Cond 是 SDK 解码后的名称,详见逐笔成交条件。完整逐笔模式下,FullTickChange 返回单字符条件代码,详见逐笔成交条件。
字段类型见 TradeTickChange 字段表。
完整逐笔成交
完整逐笔与普通逐笔使用相同的 SubscribeTradeTick(ISet<string> symbols) 和 CancelSubscribeTradeTick(ISet<string>? symbols = null) 方法。区别是连接前设置 TigerConfig.UseFullTick = true,数据回调改为 FullTickChange(TickData data)(详见 完整字段表);订阅完成回调仍为 SubscribeEnd(int id, string subject, string result)。完整流程参见完整行情推送示例(选择 FullTick 模式)。
Protobuf JSON 表示
{
"symbol": "AAPL",
"timestamp": "1676993925700",
"source": "",
"ticks": [
{
"sn": "116202",
"time": "1676993924289",
"price": 149.665,
"volume": 50,
"type": "*",
"cond": "@",
"partCode": "Q"
}
]
}字段类型见 FullTickChange 字段表。
取消订阅
操作名
PushClient.CancelSubscribeTradeTick. 已连接通道上的订阅、取消订阅或订阅状态查询命令。发送成功不等于服务端确认成功。
请求
uint CancelSubscribeTradeTick(ISet<string>? symbols = null)参数
symbols 必须实现 ISet 泛型接口(元素为 string);取消方法传 null 表示取消该主题全部代码。
返回
Return: uint 请求 ID。订阅和取消结果分别进入 SubscribeEnd / CancelSubscribeEnd 完整字段表。
示例
uint requestId = client.CancelSubscribeTradeTick(new HashSet<string> { "AAPL" });取消订阅完成回调
CancelSubscribeEnd(int id, string subject, string result)
订阅期权行情
操作名
PushClient.SubscribeOption. 已连接通道上的订阅、取消订阅或订阅状态查询命令。发送成功不等于服务端确认成功。
请求
uint SubscribeOption(ISet<string> symbols)参数
symbols 必须实现 ISet 泛型接口(元素为 string);取消方法传 null 表示取消该主题全部代码。
返回
Return: uint 请求 ID。订阅和取消结果分别进入 SubscribeEnd / CancelSubscribeEnd 完整字段表。
示例
uint requestId = client.SubscribeOption(new HashSet<string> { "AAPL 260821C00200000" });订阅完成回调
SubscribeEnd(int id, string subject, string result)
数据回调
OptionChange(QuoteBasicData data)(详见 完整字段表)和 OptionAskBidChange(QuoteBBOData data)(详见 完整字段表)
Protobuf JSON 表示
{
"symbol": "AAPL 20230317 150.0 CALL",
"type": "BASIC",
"timestamp": "1676994444927",
"latestPrice": 4.83,
"preClose": 6.21,
"volume": "3181",
"amount": 939117.01,
"open": 4.85,
"high": 5.6,
"low": 4.64,
"identifier": "AAPL 230317C00150000",
"openInt": "82677"
}取消订阅
操作名
PushClient.CancelSubscribeOption. 已连接通道上的订阅、取消订阅或订阅状态查询命令。发送成功不等于服务端确认成功。
请求
uint CancelSubscribeOption(ISet<string>? symbols = null)参数
symbols 必须实现 ISet 泛型接口(元素为 string);取消方法传 null 表示取消该主题全部代码。
返回
Return: uint 请求 ID。订阅和取消结果分别进入 SubscribeEnd / CancelSubscribeEnd 完整字段表。
示例
uint requestId = client.CancelSubscribeOption(new HashSet<string> { "AAPL 260821C00200000" });取消订阅完成回调
CancelSubscribeEnd(int id, string subject, string result)
订阅期货行情
操作名
PushClient.SubscribeFuture. 已连接通道上的订阅、取消订阅或订阅状态查询命令。发送成功不等于服务端确认成功。
请求
uint SubscribeFuture(ISet<string> symbols)参数
symbols 必须实现 ISet 泛型接口(元素为 string);取消方法传 null 表示取消该主题全部代码。
返回
Return: uint 请求 ID。订阅和取消结果分别进入 SubscribeEnd / CancelSubscribeEnd 完整字段表。
示例
uint requestId = client.SubscribeFuture(new HashSet<string> { "ES2609" });订阅完成回调
SubscribeEnd(int id, string subject, string result)
数据回调
FutureChange(QuoteBasicData data)(详见 完整字段表)和 FutureAskBidChange(QuoteBBOData data)(详见 完整字段表)
Protobuf JSON 表示
{
"symbol": "ESmain",
"type": "BASIC",
"timestamp": "1684766824130",
"avgPrice": 4206.476,
"latestPrice": 4202.5,
"preClose": 4204.75,
"volume": "557570",
"open": 4189,
"high": 4221.75,
"low": 4186.5,
"marketStatus": "Trading",
"preSettlement": 4204.75,
"minTick": 0.25
}取消订阅
操作名
PushClient.CancelSubscribeFuture. 已连接通道上的订阅、取消订阅或订阅状态查询命令。发送成功不等于服务端确认成功。
请求
uint CancelSubscribeFuture(ISet<string>? symbols = null)参数
symbols 必须实现 ISet 泛型接口(元素为 string);取消方法传 null 表示取消该主题全部代码。
返回
Return: uint 请求 ID。订阅和取消结果分别进入 SubscribeEnd / CancelSubscribeEnd 完整字段表。
示例
uint requestId = client.CancelSubscribeFuture(new HashSet<string> { "ES2609" });取消订阅完成回调
CancelSubscribeEnd(int id, string subject, string result)
订阅深度行情
操作名
PushClient.SubscribeDepthQuote. 已连接通道上的订阅、取消订阅或订阅状态查询命令。发送成功不等于服务端确认成功。
请求
uint SubscribeDepthQuote(ISet<string> symbols)参数
symbols 必须实现 ISet 泛型接口(元素为 string);取消方法传 null 表示取消该主题全部代码。
返回
Return: uint 请求 ID。订阅和取消结果分别进入 SubscribeEnd / CancelSubscribeEnd 完整字段表。
示例
连接、订阅、取消与退出处理参见完整行情推送示例(选择 Depth 模式)。
订阅完成回调
SubscribeEnd(int id, string subject, string result)
数据回调
DepthQuoteChange(QuoteDepthData data),详见 完整字段表。
Protobuf JSON 表示
{
"symbol": "AAPL",
"timestamp": "1676993368405",
"ask": {
"price": [149.69, 149.70, 149.71],
"volume": ["100", "200", "185"]
},
"bid": {
"price": [149.68, 149.67, 149.66],
"volume": ["84", "100", "100"]
}
}字段类型见 DepthQuoteChange 字段表。
取消订阅
操作名
PushClient.CancelSubscribeDepthQuote. 已连接通道上的订阅、取消订阅或订阅状态查询命令。发送成功不等于服务端确认成功。
请求
uint CancelSubscribeDepthQuote(ISet<string>? symbols = null)参数
symbols 必须实现 ISet 泛型接口(元素为 string);取消方法传 null 表示取消该主题全部代码。
返回
Return: uint 请求 ID。订阅和取消结果分别进入 SubscribeEnd / CancelSubscribeEnd 完整字段表。
示例
uint requestId = client.CancelSubscribeDepthQuote(new HashSet<string> { "AAPL" });取消订阅完成回调
CancelSubscribeEnd(int id, string subject, string result)
订阅 K 线
操作名
PushClient.SubscribeKline. 已连接通道上的订阅、取消订阅或订阅状态查询命令。发送成功不等于服务端确认成功。
请求
uint SubscribeKline(ISet<string> symbols)参数
symbols 必须实现 ISet 泛型接口(元素为 string);取消方法传 null 表示取消该主题全部代码。
返回
Return: uint 请求 ID。订阅和取消结果分别进入 SubscribeEnd / CancelSubscribeEnd 完整字段表。
示例
连接、订阅、取消与退出处理参见完整行情推送示例(选择 Kline 模式)。
订阅完成回调
SubscribeEnd(int id, string subject, string result)
数据回调
KlineChange(KlineData data),详见 完整字段表。
Protobuf JSON 表示
{
"symbol": "AAPL",
"time": "1712584560000",
"open": 168.9779,
"high": 169.0015,
"low": 168.9752,
"close": 169.0,
"avg": 168.778,
"volume": "3664",
"count": 114,
"amount": 617820.6508,
"serverTimestamp": "1712584569746"
}字段类型见 KlineChange 字段表。
取消订阅
操作名
PushClient.CancelSubscribeKline. 已连接通道上的订阅、取消订阅或订阅状态查询命令。发送成功不等于服务端确认成功。
请求
uint CancelSubscribeKline(ISet<string>? symbols = null)参数
symbols 必须实现 ISet 泛型接口(元素为 string);取消方法传 null 表示取消该主题全部代码。
返回
Return: uint 请求 ID。订阅和取消结果分别进入 SubscribeEnd / CancelSubscribeEnd 完整字段表。
示例
uint requestId = client.CancelSubscribeKline(new HashSet<string> { "AAPL" });取消订阅完成回调
CancelSubscribeEnd(int id, string subject, string result)
订阅整体市场行情
操作名
PushClient.SubscribeMarketQuote. 已连接通道上的订阅、取消订阅或订阅状态查询命令。发送成功不等于服务端确认成功。
请求
uint SubscribeMarketQuote(Market market, QuoteSubject subject)参数
market 与 QuoteSubject 必填;主题必须与取消命令匹配。
返回
Return: uint 请求 ID。订阅和取消结果分别进入 SubscribeEnd / CancelSubscribeEnd 完整字段表。
示例
uint requestId = client.SubscribeMarketQuote(Market.US, QuoteSubject.Quote);订阅完成回调
SubscribeEnd(int id, string subject, string result)
数据回调
具体数据回调由 QuoteSubject 决定:Quote 对应 QuoteChange / QuoteAskBidChange 字段表;Option 对应 OptionChange / OptionAskBidChange 字段表;Future 对应 FutureChange / FutureAskBidChange 字段表;QuoteDepth 对应 DepthQuoteChange 字段表;TradeTick 根据 UseFullTick 对应 TradeTickChange 字段表 或 FullTickChange 字段表;Kline 对应 KlineChange 字段表;StockTop 对应 StockTopPush 字段表;OptionTop 对应 OptionTopPush 字段表。
取消订阅
操作名
PushClient.CancelSubscribeMarketQuote. 已连接通道上的订阅、取消订阅或订阅状态查询命令。发送成功不等于服务端确认成功。
请求
uint CancelSubscribeMarketQuote(Market market, QuoteSubject subject)参数
market 与 QuoteSubject 必填;主题必须与取消命令匹配。
返回
Return: uint 请求 ID。订阅和取消结果分别进入 SubscribeEnd / CancelSubscribeEnd 完整字段表。
示例
uint requestId = client.CancelSubscribeMarketQuote(Market.US, QuoteSubject.Quote);取消订阅完成回调
CancelSubscribeEnd(int id, string subject, string result)
订阅股票榜单
操作名
PushClient.SubscribeStockTop. 已连接通道上的订阅、取消订阅或订阅状态查询命令。发送成功不等于服务端确认成功。
请求
uint SubscribeStockTop(Market market, ISet<Indicator>? indicators = null)参数
market 必填;indicators 可为 null,非 null 时转换为指标名称集合。
返回
Return: uint 请求 ID。订阅和取消结果分别进入 SubscribeEnd / CancelSubscribeEnd 完整字段表。
示例
uint requestId = client.SubscribeStockTop(Market.US);订阅完成回调
SubscribeEnd(int id, string subject, string result)
数据回调
StockTopPush(StockTopData data),详见 完整字段表。
Protobuf JSON 表示
{
"market": "US",
"timestamp": "1687271010482",
"topData": [
{
"targetName": "changeRate",
"item": [
{"symbol": "ICAD", "latestPrice": 1.63, "targetValue": 0.393162}
]
},
{
"targetName": "volume",
"item": [
{"symbol": "TSLA", "latestPrice": 263.21, "targetValue": 40190416}
]
}
]
}取消订阅
操作名
PushClient.CancelSubscribeStockTop. 已连接通道上的订阅、取消订阅或订阅状态查询命令。发送成功不等于服务端确认成功。
请求
uint CancelSubscribeStockTop(Market market, ISet<Indicator>? indicators = null)参数
market 必填;indicators 可为 null,非 null 时转换为指标名称集合。
返回
Return: uint 请求 ID。订阅和取消结果分别进入 SubscribeEnd / CancelSubscribeEnd 完整字段表。
示例
uint requestId = client.CancelSubscribeStockTop(Market.US);取消订阅完成回调
CancelSubscribeEnd(int id, string subject, string result)
订阅期权行情 Top
操作名
PushClient.SubscribeOptionTop. 已连接通道上的订阅、取消订阅或订阅状态查询命令。发送成功不等于服务端确认成功。
请求
uint SubscribeOptionTop(Market market, ISet<Indicator>? indicators = null)参数
market 必填;indicators 可为 null,非 null 时转换为指标名称集合。
返回
Return: uint request ID. 订阅结果进入 SubscribeEnd;取消结果进入 CancelSubscribeEnd。
示例
uint requestId = client.SubscribeOptionTop(Market.US);订阅完成回调
SubscribeEnd(int id, string subject, string result)
数据回调
OptionTopPush(OptionTopData data),详见 完整字段表。
Protobuf JSON 表示
{
"market": "US",
"timestamp": "1687277160445",
"topData": [
{
"targetName": "volume",
"item": [
{
"symbol": "SPY",
"expiry": "20230620",
"strike": "435.0",
"right": "PUT",
"totalVolume": 212478
}
]
}
]
}取消订阅
操作名
PushClient.CancelSubscribeOptionTop. 已连接通道上的订阅、取消订阅或订阅状态查询命令。发送成功不等于服务端确认成功。
请求
uint CancelSubscribeOptionTop(Market market, ISet<Indicator>? indicators = null)参数
market 必填;indicators 可为 null,非 null 时转换为指标名称集合。
返回
Return: uint request ID. 订阅结果进入 SubscribeEnd;取消结果进入 CancelSubscribeEnd。
示例
uint requestId = client.CancelSubscribeOptionTop(Market.US);取消订阅完成回调
CancelSubscribeEnd(int id, string subject, string result)
查询已订阅标的
操作名
PushClient.GetSubscribedSymbols. 已连接通道上的订阅、取消订阅或订阅状态查询命令。发送成功不等于服务端确认成功。
请求
uint GetSubscribedSymbols()参数
无参数;查询当前连接的行情代码订阅集合。
返回
Return: uint 请求 ID。结果进入 GetSubscribedSymbolEnd 完整字段表,但该回调参数不含 ID,因此返回值不能用于关联查询结果。同一连接上一次只发起一个此类查询,或由应用自行串行化查询。
示例
uint requestId = client.GetSubscribedSymbols();
// GetSubscribedSymbolEnd 仅返回 SubscribedSymbol,不返回 requestId。查询完成回调
GetSubscribedSymbolEnd(SubscribedSymbol subscribedSymbol),详见 完整字段表。
Updated about 1 month ago
