# Get Industrial Chain List
- Python
- Proto
- C#
- Java
- C++
- JavaScript
get_industrial_chain_list(market, keyword=None, count=None, page=None)
Description
Get the industrial chain list, returning industrial chain information for the specified market (including chain type, market cap, number of constituent stocks, etc.), with support for keyword search and cursor-based pagination.
Parameters
Parameter Type Description market Market Market type (required) keyword str Search keyword count int Number of results [1, 50], default 20 page str Page cursor Return
Parameter Type Description ret RET_CODE API call result data pd.DataFrame When ret == RET_OK, returns data str When ret != RET_OK, returns error description - Data format:
Field Type Description chain_id int Industrial chain ID chain_type str Industrial chain type ("CHAIN"/"PARALLEL"/"UP_MID_DOWN") name str Industrial chain name detail str Detail description market_cap float Market cap stocks_num int Number of constituent stocks relation_security_list list Related stock code list "CHAIN" Serial type "PARALLEL" Parallel type "UP_MID_DOWN" Upstream-midstream-downstream type
- Data format:
Example
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
ret, data, next_page, all_count = quote_ctx.get_industrial_chain_list(market=Market.US, count=2)
if ret == RET_OK:
print(f'Total count: {all_count}')
print(data)
else:
print('error:', data)
quote_ctx.close()
2
3
4
5
6
7
8
9
10
11
12
- Output
Total count: 70
chain_id chain_type name detail market_cap stocks_num relation_security_list
0 9610020 UP_MID_DOWN AI AIGC(Artificial Intelligence Generated Content... 4.801784e+13 329 [US.NVDA, US.AAPL]
1 9610085 UP_MID_DOWN 商业航天 2.590359e+12 155 [US.GE, US.RTX]
2
3
4
# Qot_GetIndustrialChainList.proto
Description
Get the industrial chain list. Returns industrial chain information for the specified market (including chain type, market cap, number of constituent stocks, etc.), with support for keyword search and cursor-based pagination.
Parameters
// Industry chain type
enum IndustrialChainType {
IndustrialChainType_Chain = 1; // Serial type
IndustrialChainType_Parallel = 2; // Parallel type
IndustrialChainType_UpMidDown = 3; // Upstream-midstream-downstream type
}
message C2S {
required int32 market = 1; // Qot_Common.QotMarket
optional string keyword = 2; // Search keyword (optional)
optional int32 count = 3; // Count [1,50], default 20
optional string page = 4; // Page cursor, omit for first request
}
message IndustrialChainInfo {
optional int64 chainId = 1; // Industry chain ID
optional int32 chainType = 2; // IndustrialChainType
optional string name = 3; // Name
optional string detail = 4; // Detail description
optional double marketCap = 5; // Market cap
optional int64 stocksNum = 6; // Number of constituent stocks
repeated Qot_Common.Security relationSecurityList = 7; // Related stocks
}
message S2C {
repeated IndustrialChainInfo dataList = 1;
optional int32 allCount = 2;
optional string nextPage = 3;
}
message Request {
required C2S c2s = 1;
}
message Response {
required int32 retType = 1 [default = -400];
optional string retMsg = 2;
optional int32 errCode = 3;
optional S2C s2c = 4;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Protocol ID
3427
uint GetIndustrialChainList(Qot_GetIndustrialChainList.Request req);
virtual void OnReply_GetIndustrialChainList(FTAPI_Conn client, uint nSerialNo, Qot_GetIndustrialChainList.Response rsp);
Description
Get the industrial chain list. Returns industrial chain information for the specified market (including chain type, market cap, number of constituent stocks, etc.), with support for keyword search and cursor-based pagination.
Parameters
// Industry chain type
enum IndustrialChainType {
IndustrialChainType_Chain = 1; // Serial type
IndustrialChainType_Parallel = 2; // Parallel type
IndustrialChainType_UpMidDown = 3; // Upstream-midstream-downstream type
}
message C2S {
required int32 market = 1; // Qot_Common.QotMarket
optional string keyword = 2; // Search keyword (optional)
optional int32 count = 3; // Count [1,50], default 20
optional string page = 4; // Page cursor, omit for first request
}
message IndustrialChainInfo {
optional int64 chainId = 1; // Industry chain ID
optional int32 chainType = 2; // IndustrialChainType
optional string name = 3; // Name
optional string detail = 4; // Detail description
optional double marketCap = 5; // Market cap
optional int64 stocksNum = 6; // Number of constituent stocks
repeated Qot_Common.Security relationSecurityList = 7; // Related stocks
}
message S2C {
repeated IndustrialChainInfo dataList = 1;
optional int32 allCount = 2;
optional string nextPage = 3;
}
message Request {
required C2S c2s = 1;
}
message Response {
required int32 retType = 1 [default = -400];
optional string retMsg = 2;
optional int32 errCode = 3;
optional S2C s2c = 4;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
- For interface result, refer to RetType
Protocol ID
3427
Example
public class Program : FTSPI_Qot, FTSPI_Conn {
FTAPI_Qot qot = new FTAPI_Qot();
public Program() {
qot.SetClientInfo("csharp", 1); //设置客户端信息
qot.SetConnCallback(this); //设置连接回调
qot.SetQotCallback(this); //设置行情回调
}
public void Start() {
qot.InitConnect("127.0.0.1", (ushort)11111, false);
}
public void OnInitConnect(FTAPI_Conn client, long errCode, String desc)
{
Console.Write("Qot onInitConnect: ret={0} desc={1} connID={2}
", errCode, desc, client.GetConnectID());
if (errCode != 0)
return;
QotGetIndustrialChainList.C2S c2s = QotGetIndustrialChainList.C2S.CreateBuilder()
.SetMarket(11)
.SetCount(3)
.Build();
QotGetIndustrialChainList.Request req = QotGetIndustrialChainList.Request.CreateBuilder().SetC2S(c2s).Build();
uint seqNo = qot.GetIndustrialChainList(req);
Console.Write("Send QotGetIndustrialChainList: {0}
", seqNo);
}
public void OnDisconnect(FTAPI_Conn client, long errCode) {
Console.Write("Qot onDisConnect: {0}
", errCode);
}
public void OnReply_GetIndustrialChainList(FTAPI_Conn client, uint nSerialNo, QotGetIndustrialChainList.Response rsp)
{
Console.Write("Reply: QotGetIndustrialChainList: {0}
", nSerialNo);
if (rsp.RetType == 0 && rsp.HasS2C)
Console.Write("{0}
", rsp.ToString());
}
public static void Main(String[] args) {
FTAPI.Init();
Program program = new Program();
program.Start();
while (true)
Thread.Sleep(1000 * 600);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
- Output
Send QotGetIndustrialChainList: 3
Reply: QotGetIndustrialChainList: 3
GetIndustrialChainList: errCode 0, retMsg , retType 0
{
"allCount": 70,
"dataList": [
{ "chainId": "9610020", "name": "AI", "chainType": 1, "stocksNum": 329 },
{ "chainId": "9610085", "name": "商业航天", "chainType": 1, "stocksNum": 155 },
{ "chainId": "9610033", "name": "半导体", "chainType": 1, "stocksNum": 256 }
]
}
2
3
4
5
6
7
8
9
10
11
int getIndustrialChainList(Qot_GetIndustrialChainList.Request req);
onReply_GetIndustrialChainList(FTAPI_Conn client, int nSerialNo, Qot_GetIndustrialChainList.Response rsp)
Description
Get the industrial chain list. Returns industrial chain information for the specified market (including chain type, market cap, number of constituent stocks, etc.), with support for keyword search and cursor-based pagination.
Parameters
// Industry chain type
enum IndustrialChainType {
IndustrialChainType_Chain = 1; // Serial type
IndustrialChainType_Parallel = 2; // Parallel type
IndustrialChainType_UpMidDown = 3; // Upstream-midstream-downstream type
}
message C2S {
required int32 market = 1; // Qot_Common.QotMarket
optional string keyword = 2; // Search keyword (optional)
optional int32 count = 3; // Count [1,50], default 20
optional string page = 4; // Page cursor, omit for first request
}
message IndustrialChainInfo {
optional int64 chainId = 1; // Industry chain ID
optional int32 chainType = 2; // IndustrialChainType
optional string name = 3; // Name
optional string detail = 4; // Detail description
optional double marketCap = 5; // Market cap
optional int64 stocksNum = 6; // Number of constituent stocks
repeated Qot_Common.Security relationSecurityList = 7; // Related stocks
}
message S2C {
repeated IndustrialChainInfo dataList = 1;
optional int32 allCount = 2;
optional string nextPage = 3;
}
message Request {
required C2S c2s = 1;
}
message Response {
required int32 retType = 1 [default = -400];
optional string retMsg = 2;
optional int32 errCode = 3;
optional S2C s2c = 4;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
- For interface result, refer to RetType
Protocol ID
3427
Example
public class QotDemo implements FTSPI_Qot, FTSPI_Conn {
FTAPI_Conn_Qot qot = new FTAPI_Conn_Qot();
public QotDemo() {
qot.setClientInfo("javaclient", 1); //设置客户端信息
qot.setConnSpi(this); //设置连接回调
qot.setQotSpi(this); //设置行情回调
}
public void start() {
qot.initConnect("127.0.0.1", (short)11111, false);
}
@Override
public void onInitConnect(FTAPI_Conn client, long errCode, String desc)
{
System.out.printf("Qot onInitConnect: ret=%d desc=%s connID=%d
", errCode, desc, client.getConnectID());
if (errCode != 0)
return;
QotGetIndustrialChainList.C2S c2s = QotGetIndustrialChainList.C2S.newBuilder()
.setMarket(11)
.setCount(3)
.build();
QotGetIndustrialChainList.Request req = QotGetIndustrialChainList.Request.newBuilder().setC2S(c2s).build();
int seqNo = qot.getIndustrialChainList(req);
System.out.printf("Send QotGetIndustrialChainList: %d
", seqNo);
}
@Override
public void onDisconnect(FTAPI_Conn client, long errCode) {
System.out.printf("Qot onDisConnect: %d
", errCode);
}
@Override
public void onReply_GetIndustrialChainList(FTAPI_Conn client, int nSerialNo, QotGetIndustrialChainList.Response rsp) {
if (rsp.getRetType() != 0) {
System.out.printf("QotGetIndustrialChainList failed: %s
", rsp.getRetMsg());
} else {
try {
String json = JsonFormat.printer().print(rsp);
System.out.printf("Receive QotGetIndustrialChainList: %s
", json);
} catch (InvalidProtocolBufferException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
FTAPI.init();
QotDemo qot = new QotDemo();
qot.start();
while (true) {
try {
Thread.sleep(1000 * 600);
} catch (InterruptedException exc) {
}
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
- Output
Send QotGetIndustrialChainList: 3
Receive QotGetIndustrialChainList: {
"allCount": 70,
"dataList": [
{ "chainId": "9610020", "name": "AI", "chainType": 1, "stocksNum": 329 },
{ "chainId": "9610085", "name": "商业航天", "chainType": 1, "stocksNum": 155 },
{ "chainId": "9610033", "name": "半导体", "chainType": 1, "stocksNum": 256 }
]
}
2
3
4
5
6
7
8
9
Futu::u32_t GetIndustrialChainList(const Qot_GetIndustrialChainList::Request &stReq); virtual void OnReply_GetIndustrialChainList(Futu::u32_t nSerialNo, const Qot_GetIndustrialChainList::Response &stRsp) = 0;
Description
Protocol request and response definition
Parameters
// Industry chain type
enum IndustrialChainType {
IndustrialChainType_Chain = 1; // Serial type
IndustrialChainType_Parallel = 2; // Parallel type
IndustrialChainType_UpMidDown = 3; // Upstream-midstream-downstream type
}
message C2S {
required int32 market = 1; // Qot_Common.QotMarket
optional string keyword = 2; // Search keyword (optional)
optional int32 count = 3; // Count [1,50], default 20
optional string page = 4; // Page cursor, omit for first request
}
message IndustrialChainInfo {
optional int64 chainId = 1; // Industry chain ID
optional int32 chainType = 2; // IndustrialChainType
optional string name = 3; // Name
optional string detail = 4; // Detail description
optional double marketCap = 5; // Market cap
optional int64 stocksNum = 6; // Number of constituent stocks
repeated Qot_Common.Security relationSecurityList = 7; // Related stocks
}
message S2C {
repeated IndustrialChainInfo dataList = 1;
optional int32 allCount = 2;
optional string nextPage = 3;
}
message Request {
required C2S c2s = 1;
}
message Response {
required int32 retType = 1 [default = -400];
optional string retMsg = 2;
optional int32 errCode = 3;
optional S2C s2c = 4;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
- For interface result, refer to RetType
Protocol ID
3427
Example
class Program : public FTSPI_Qot, public FTSPI_Conn
{
public:
Program() {
m_pQotApi = FTAPI::CreateQotApi();
m_pQotApi->RegisterQotSpi(this);
m_pQotApi->RegisterConnSpi(this);
}
~Program() {
if (m_pQotApi != nullptr) {
m_pQotApi->UnregisterQotSpi();
m_pQotApi->UnregisterConnSpi();
FTAPI::ReleaseQotApi(m_pQotApi);
m_pQotApi = nullptr;
}
}
void Start() {
m_pQotApi->InitConnect("127.0.0.1", 11111, false);
}
virtual void OnInitConnect(FTAPI_Conn* pConn, Futu::i64_t nErrCode, const char* strDesc) {
Qot_GetIndustrialChainList::Request req;
Qot_GetIndustrialChainList::C2S *c2s = req.mutable_c2s();
c2s->set_market(Qot_Common::QotMarket::QotMarket_US_Security);
c2s->set_count(20);
m_GetIndustrialChainListSerialNo = m_pQotApi->GetIndustrialChainList(req);
}
virtual void OnReply_GetIndustrialChainList(Futu::u32_t nSerialNo, const Qot_GetIndustrialChainList::Response &stRsp) {
if (nSerialNo != m_GetIndustrialChainListSerialNo) return;
string resp_str;
ProtoBufToBodyData(stRsp, resp_str);
cout << UTF8ToLocal(resp_str) << endl;
}
protected:
FTAPI_Qot *m_pQotApi;
Futu::u32_t m_GetIndustrialChainListSerialNo = 0;
};
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
- Output
{
"retType": 0,
"retMsg": "",
"errCode": 0,
"s2c": {
"dataList": [
{
"chainId": 1001,
"chainName": "AI Supply Chain",
"plateCount": 8
}
],
"allCount": 120
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
getIndustrialChainList(qotGetIndustrialChainList)
Description
Get the industrial chain list. Returns industrial chain information for the specified market (including chain type, market cap, number of constituent stocks, etc.), with support for keyword search and cursor-based pagination.
Parameters
// Industry chain type
enum IndustrialChainType {
IndustrialChainType_Chain = 1; // Serial type
IndustrialChainType_Parallel = 2; // Parallel type
IndustrialChainType_UpMidDown = 3; // Upstream-midstream-downstream type
}
message C2S {
required int32 market = 1; // Qot_Common.QotMarket
optional string keyword = 2; // Search keyword (optional)
optional int32 count = 3; // Count [1,50], default 20
optional string page = 4; // Page cursor, omit for first request
}
message IndustrialChainInfo {
optional int64 chainId = 1; // Industry chain ID
optional int32 chainType = 2; // IndustrialChainType
optional string name = 3; // Name
optional string detail = 4; // Detail description
optional double marketCap = 5; // Market cap
optional int64 stocksNum = 6; // Number of constituent stocks
repeated Qot_Common.Security relationSecurityList = 7; // Related stocks
}
message S2C {
repeated IndustrialChainInfo dataList = 1;
optional int32 allCount = 2;
optional string nextPage = 3;
}
message Request {
required C2S c2s = 1;
}
message Response {
required int32 retType = 1 [default = -400];
optional string retMsg = 2;
optional int32 errCode = 3;
optional S2C s2c = 4;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
- For interface result, refer to RetType
Protocol ID
3427
Example
import ftWebsocket from "futu-api";
import { Common, Qot_Common } from "futu-api/proto";
import beautify from "js-beautify";
function QotGetIndustrialChainList(){
const { RetType } = Common
let [addr, port, enable_ssl, key] = ["127.0.0.1", 11111, false, "xxxxxx"];
let websocket = new ftWebsocket();
websocket.onlogin = (ret, msg)=>{
if (ret) {
const req = {
c2s: { market: 11, count: 3 },
};
websocket.GetIndustrialChainList(req)
.then((res)=>{
let { errCode, retMsg, retType, s2c } = res
console.log("GetIndustrialChainList: errCode %d, retMsg %s, retType %d", errCode, retMsg, retType);
if(retType == RetType.RetType_Succeed){
let data = beautify(JSON.stringify(s2c), { indent_size: 2, space_in_empty_paren: true });
console.log(data);
}
})
.catch((error)=>{ console.log("error:", error); });
} else {
console.log("start error", msg);
}
};
websocket.start(addr, port, enable_ssl, key);
setTimeout(()=>{ websocket.stop(); process.exit(); }, 5000);
}
QotGetIndustrialChainList()
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
- Output
GetIndustrialChainList: errCode 0, retMsg , retType 0
{
"allCount": 70,
"dataList": [
{ "chainId": "9610020", "name": "AI", "chainType": 1, "stocksNum": 329 },
{ "chainId": "9610085", "name": "商业航天", "chainType": 1, "stocksNum": 155 },
{ "chainId": "9610033", "name": "半导体", "chainType": 1, "stocksNum": 256 }
]
}
2
3
4
5
6
7
8
9
API Limits
- Maximum 60 requests within 30 seconds
- Only the first page of paginated requests counts towards rate limiting
- Python
- Proto
- C#
- Java
- C++
- JavaScript
get_industrial_chain_list(market, keyword=None, count=None, page=None)
Description
Get the industrial chain list, returning industrial chain information for the specified market (including chain type, market cap, number of constituent stocks, etc.), with support for keyword search and cursor-based pagination.
Parameters
Parameter Type Description market Market Market type (required) keyword str Search keyword count int Number of results [1, 50], default 20 page str Page cursor Return
Parameter Type Description ret RET_CODE API call result data pd.DataFrame When ret == RET_OK, returns data str When ret != RET_OK, returns error description - Data format:
Field Type Description chain_id int Industrial chain ID chain_type str Industrial chain type ("CHAIN"/"PARALLEL"/"UP_MID_DOWN") name str Industrial chain name detail str Detail description market_cap float Market cap stocks_num int Number of constituent stocks relation_security_list list Related stock code list "CHAIN" Serial type "PARALLEL" Parallel type "UP_MID_DOWN" Upstream-midstream-downstream type
- Data format:
Example
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
ret, data, next_page, all_count = quote_ctx.get_industrial_chain_list(market=Market.US, count=2)
if ret == RET_OK:
print(f'Total count: {all_count}')
print(data)
else:
print('error:', data)
quote_ctx.close()
2
3
4
5
6
7
8
9
10
11
12
- Output
Total count: 70
chain_id chain_type name detail market_cap stocks_num relation_security_list
0 9610020 UP_MID_DOWN AI AIGC(Artificial Intelligence Generated Content... 4.801784e+13 329 [US.NVDA, US.AAPL]
1 9610085 UP_MID_DOWN 商业航天 2.590359e+12 155 [US.GE, US.RTX]
2
3
4
# Qot_GetIndustrialChainList.proto
Description
Get the industrial chain list. Returns industrial chain information for the specified market (including chain type, market cap, number of constituent stocks, etc.), with support for keyword search and cursor-based pagination.
Parameters
// Industry chain type
enum IndustrialChainType {
IndustrialChainType_Chain = 1; // Serial type
IndustrialChainType_Parallel = 2; // Parallel type
IndustrialChainType_UpMidDown = 3; // Upstream-midstream-downstream type
}
message C2S {
required int32 market = 1; // Qot_Common.QotMarket
optional string keyword = 2; // Search keyword (optional)
optional int32 count = 3; // Count [1,50], default 20
optional string page = 4; // Page cursor, omit for first request
}
message IndustrialChainInfo {
optional int64 chainId = 1; // Industry chain ID
optional int32 chainType = 2; // IndustrialChainType
optional string name = 3; // Name
optional string detail = 4; // Detail description
optional double marketCap = 5; // Market cap
optional int64 stocksNum = 6; // Number of constituent stocks
repeated Qot_Common.Security relationSecurityList = 7; // Related stocks
}
message S2C {
repeated IndustrialChainInfo dataList = 1;
optional int32 allCount = 2;
optional string nextPage = 3;
}
message Request {
required C2S c2s = 1;
}
message Response {
required int32 retType = 1 [default = -400];
optional string retMsg = 2;
optional int32 errCode = 3;
optional S2C s2c = 4;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Protocol ID
3427
uint GetIndustrialChainList(Qot_GetIndustrialChainList.Request req);
virtual void OnReply_GetIndustrialChainList(FTAPI_Conn client, uint nSerialNo, Qot_GetIndustrialChainList.Response rsp);
Description
Get the industrial chain list. Returns industrial chain information for the specified market (including chain type, market cap, number of constituent stocks, etc.), with support for keyword search and cursor-based pagination.
Parameters
// Industry chain type
enum IndustrialChainType {
IndustrialChainType_Chain = 1; // Serial type
IndustrialChainType_Parallel = 2; // Parallel type
IndustrialChainType_UpMidDown = 3; // Upstream-midstream-downstream type
}
message C2S {
required int32 market = 1; // Qot_Common.QotMarket
optional string keyword = 2; // Search keyword (optional)
optional int32 count = 3; // Count [1,50], default 20
optional string page = 4; // Page cursor, omit for first request
}
message IndustrialChainInfo {
optional int64 chainId = 1; // Industry chain ID
optional int32 chainType = 2; // IndustrialChainType
optional string name = 3; // Name
optional string detail = 4; // Detail description
optional double marketCap = 5; // Market cap
optional int64 stocksNum = 6; // Number of constituent stocks
repeated Qot_Common.Security relationSecurityList = 7; // Related stocks
}
message S2C {
repeated IndustrialChainInfo dataList = 1;
optional int32 allCount = 2;
optional string nextPage = 3;
}
message Request {
required C2S c2s = 1;
}
message Response {
required int32 retType = 1 [default = -400];
optional string retMsg = 2;
optional int32 errCode = 3;
optional S2C s2c = 4;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
- For interface result, refer to RetType
Protocol ID
3427
Example
public class Program : MMSPI_Qot, MMSPI_Conn {
MMAPI_Qot qot = new MMAPI_Qot();
public Program() {
qot.SetClientInfo("csharp", 1); //设置客户端信息
qot.SetConnCallback(this); //设置连接回调
qot.SetQotCallback(this); //设置行情回调
}
public void Start() {
qot.InitConnect("127.0.0.1", (ushort)11111, false);
}
public void OnInitConnect(MMAPI_Conn client, long errCode, String desc)
{
Console.Write("Qot onInitConnect: ret={0} desc={1} connID={2}
", errCode, desc, client.GetConnectID());
if (errCode != 0)
return;
QotGetIndustrialChainList.C2S c2s = QotGetIndustrialChainList.C2S.CreateBuilder()
.SetMarket(11)
.SetCount(3)
.Build();
QotGetIndustrialChainList.Request req = QotGetIndustrialChainList.Request.CreateBuilder().SetC2S(c2s).Build();
uint seqNo = qot.GetIndustrialChainList(req);
Console.Write("Send QotGetIndustrialChainList: {0}
", seqNo);
}
public void OnDisconnect(MMAPI_Conn client, long errCode) {
Console.Write("Qot onDisConnect: {0}
", errCode);
}
public void OnReply_GetIndustrialChainList(MMAPI_Conn client, uint nSerialNo, QotGetIndustrialChainList.Response rsp)
{
Console.Write("Reply: QotGetIndustrialChainList: {0}
", nSerialNo);
if (rsp.RetType == 0 && rsp.HasS2C)
Console.Write("{0}
", rsp.ToString());
}
public static void Main(String[] args) {
MMAPI.Init();
Program program = new Program();
program.Start();
while (true)
Thread.Sleep(1000 * 600);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
- Output
Send QotGetIndustrialChainList: 3
Reply: QotGetIndustrialChainList: 3
GetIndustrialChainList: errCode 0, retMsg , retType 0
{
"allCount": 70,
"dataList": [
{ "chainId": "9610020", "name": "AI", "chainType": 1, "stocksNum": 329 },
{ "chainId": "9610085", "name": "商业航天", "chainType": 1, "stocksNum": 155 },
{ "chainId": "9610033", "name": "半导体", "chainType": 1, "stocksNum": 256 }
]
}
2
3
4
5
6
7
8
9
10
11
int getIndustrialChainList(Qot_GetIndustrialChainList.Request req);
onReply_GetIndustrialChainList(FTAPI_Conn client, int nSerialNo, Qot_GetIndustrialChainList.Response rsp)
Description
Get the industrial chain list. Returns industrial chain information for the specified market (including chain type, market cap, number of constituent stocks, etc.), with support for keyword search and cursor-based pagination.
Parameters
// Industry chain type
enum IndustrialChainType {
IndustrialChainType_Chain = 1; // Serial type
IndustrialChainType_Parallel = 2; // Parallel type
IndustrialChainType_UpMidDown = 3; // Upstream-midstream-downstream type
}
message C2S {
required int32 market = 1; // Qot_Common.QotMarket
optional string keyword = 2; // Search keyword (optional)
optional int32 count = 3; // Count [1,50], default 20
optional string page = 4; // Page cursor, omit for first request
}
message IndustrialChainInfo {
optional int64 chainId = 1; // Industry chain ID
optional int32 chainType = 2; // IndustrialChainType
optional string name = 3; // Name
optional string detail = 4; // Detail description
optional double marketCap = 5; // Market cap
optional int64 stocksNum = 6; // Number of constituent stocks
repeated Qot_Common.Security relationSecurityList = 7; // Related stocks
}
message S2C {
repeated IndustrialChainInfo dataList = 1;
optional int32 allCount = 2;
optional string nextPage = 3;
}
message Request {
required C2S c2s = 1;
}
message Response {
required int32 retType = 1 [default = -400];
optional string retMsg = 2;
optional int32 errCode = 3;
optional S2C s2c = 4;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
- For interface result, refer to RetType
Protocol ID
3427
Example
public class QotDemo implements MMSPI_Qot, MMSPI_Conn {
MMAPI_Conn_Qot qot = new MMAPI_Conn_Qot();
public QotDemo() {
qot.setClientInfo("javaclient", 1); //设置客户端信息
qot.setConnSpi(this); //设置连接回调
qot.setQotSpi(this); //设置行情回调
}
public void start() {
qot.initConnect("127.0.0.1", (short)11111, false);
}
@Override
public void onInitConnect(MMAPI_Conn client, long errCode, String desc)
{
System.out.printf("Qot onInitConnect: ret=%d desc=%s connID=%d
", errCode, desc, client.getConnectID());
if (errCode != 0)
return;
QotGetIndustrialChainList.C2S c2s = QotGetIndustrialChainList.C2S.newBuilder()
.setMarket(11)
.setCount(3)
.build();
QotGetIndustrialChainList.Request req = QotGetIndustrialChainList.Request.newBuilder().setC2S(c2s).build();
int seqNo = qot.getIndustrialChainList(req);
System.out.printf("Send QotGetIndustrialChainList: %d
", seqNo);
}
@Override
public void onDisconnect(MMAPI_Conn client, long errCode) {
System.out.printf("Qot onDisConnect: %d
", errCode);
}
@Override
public void onReply_GetIndustrialChainList(MMAPI_Conn client, int nSerialNo, QotGetIndustrialChainList.Response rsp) {
if (rsp.getRetType() != 0) {
System.out.printf("QotGetIndustrialChainList failed: %s
", rsp.getRetMsg());
} else {
try {
String json = JsonFormat.printer().print(rsp);
System.out.printf("Receive QotGetIndustrialChainList: %s
", json);
} catch (InvalidProtocolBufferException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
MMAPI.init();
QotDemo qot = new QotDemo();
qot.start();
while (true) {
try {
Thread.sleep(1000 * 600);
} catch (InterruptedException exc) {
}
}
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
- Output
Send QotGetIndustrialChainList: 3
Receive QotGetIndustrialChainList: {
"allCount": 70,
"dataList": [
{ "chainId": "9610020", "name": "AI", "chainType": 1, "stocksNum": 329 },
{ "chainId": "9610085", "name": "商业航天", "chainType": 1, "stocksNum": 155 },
{ "chainId": "9610033", "name": "半导体", "chainType": 1, "stocksNum": 256 }
]
}
2
3
4
5
6
7
8
9
moomoo::u32_t GetIndustrialChainList(const Qot_GetIndustrialChainList::Request &stReq); virtual void OnReply_GetIndustrialChainList(moomoo::u32_t nSerialNo, const Qot_GetIndustrialChainList::Response &stRsp) = 0;
Description
Protocol request and response definition
Parameters
// Industry chain type
enum IndustrialChainType {
IndustrialChainType_Chain = 1; // Serial type
IndustrialChainType_Parallel = 2; // Parallel type
IndustrialChainType_UpMidDown = 3; // Upstream-midstream-downstream type
}
message C2S {
required int32 market = 1; // Qot_Common.QotMarket
optional string keyword = 2; // Search keyword (optional)
optional int32 count = 3; // Count [1,50], default 20
optional string page = 4; // Page cursor, omit for first request
}
message IndustrialChainInfo {
optional int64 chainId = 1; // Industry chain ID
optional int32 chainType = 2; // IndustrialChainType
optional string name = 3; // Name
optional string detail = 4; // Detail description
optional double marketCap = 5; // Market cap
optional int64 stocksNum = 6; // Number of constituent stocks
repeated Qot_Common.Security relationSecurityList = 7; // Related stocks
}
message S2C {
repeated IndustrialChainInfo dataList = 1;
optional int32 allCount = 2;
optional string nextPage = 3;
}
message Request {
required C2S c2s = 1;
}
message Response {
required int32 retType = 1 [default = -400];
optional string retMsg = 2;
optional int32 errCode = 3;
optional S2C s2c = 4;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
- For interface result, refer to RetType
Protocol ID
3427
Example
class Program : public MMSPI_Qot, public MMSPI_Conn
{
public:
Program() {
m_pQotApi = MMAPI::CreateQotApi();
m_pQotApi->RegisterQotSpi(this);
m_pQotApi->RegisterConnSpi(this);
}
~Program() {
if (m_pQotApi != nullptr) {
m_pQotApi->UnregisterQotSpi();
m_pQotApi->UnregisterConnSpi();
MMAPI::ReleaseQotApi(m_pQotApi);
m_pQotApi = nullptr;
}
}
void Start() {
m_pQotApi->InitConnect("127.0.0.1", 11111, false);
}
virtual void OnInitConnect(MMAPI_Conn* pConn, moomoo::i64_t nErrCode, const char* strDesc) {
Qot_GetIndustrialChainList::Request req;
Qot_GetIndustrialChainList::C2S *c2s = req.mutable_c2s();
c2s->set_market(Qot_Common::QotMarket::QotMarket_US_Security);
c2s->set_count(20);
m_GetIndustrialChainListSerialNo = m_pQotApi->GetIndustrialChainList(req);
}
virtual void OnReply_GetIndustrialChainList(moomoo::u32_t nSerialNo, const Qot_GetIndustrialChainList::Response &stRsp) {
if (nSerialNo != m_GetIndustrialChainListSerialNo) return;
string resp_str;
ProtoBufToBodyData(stRsp, resp_str);
cout << UTF8ToLocal(resp_str) << endl;
}
protected:
MMAPI_Qot *m_pQotApi;
moomoo::u32_t m_GetIndustrialChainListSerialNo = 0;
};
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
- Output
{
"retType": 0,
"retMsg": "",
"errCode": 0,
"s2c": {
"dataList": [
{
"chainId": 1001,
"chainName": "AI Supply Chain",
"plateCount": 8
}
],
"allCount": 120
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
getIndustrialChainList(qotGetIndustrialChainList)
Description
Get the industrial chain list. Returns industrial chain information for the specified market (including chain type, market cap, number of constituent stocks, etc.), with support for keyword search and cursor-based pagination.
Parameters
// Industry chain type
enum IndustrialChainType {
IndustrialChainType_Chain = 1; // Serial type
IndustrialChainType_Parallel = 2; // Parallel type
IndustrialChainType_UpMidDown = 3; // Upstream-midstream-downstream type
}
message C2S {
required int32 market = 1; // Qot_Common.QotMarket
optional string keyword = 2; // Search keyword (optional)
optional int32 count = 3; // Count [1,50], default 20
optional string page = 4; // Page cursor, omit for first request
}
message IndustrialChainInfo {
optional int64 chainId = 1; // Industry chain ID
optional int32 chainType = 2; // IndustrialChainType
optional string name = 3; // Name
optional string detail = 4; // Detail description
optional double marketCap = 5; // Market cap
optional int64 stocksNum = 6; // Number of constituent stocks
repeated Qot_Common.Security relationSecurityList = 7; // Related stocks
}
message S2C {
repeated IndustrialChainInfo dataList = 1;
optional int32 allCount = 2;
optional string nextPage = 3;
}
message Request {
required C2S c2s = 1;
}
message Response {
required int32 retType = 1 [default = -400];
optional string retMsg = 2;
optional int32 errCode = 3;
optional S2C s2c = 4;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
- For interface result, refer to RetType
Protocol ID
3427
Example
import mmWebsocket from "moomoo-api";
import { Common, Qot_Common } from "moomoo-api/proto";
import beautify from "js-beautify";
function QotGetIndustrialChainList(){
const { RetType } = Common
let [addr, port, enable_ssl, key] = ["127.0.0.1", 11111, false, "xxxxxx"];
let websocket = new mmWebsocket();
websocket.onlogin = (ret, msg)=>{
if (ret) {
const req = {
c2s: { market: 11, count: 3 },
};
websocket.GetIndustrialChainList(req)
.then((res)=>{
let { errCode, retMsg, retType, s2c } = res
console.log("GetIndustrialChainList: errCode %d, retMsg %s, retType %d", errCode, retMsg, retType);
if(retType == RetType.RetType_Succeed){
let data = beautify(JSON.stringify(s2c), { indent_size: 2, space_in_empty_paren: true });
console.log(data);
}
})
.catch((error)=>{ console.log("error:", error); });
} else {
console.log("start error", msg);
}
};
websocket.start(addr, port, enable_ssl, key);
setTimeout(()=>{ websocket.stop(); process.exit(); }, 5000);
}
QotGetIndustrialChainList()
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
- Output
GetIndustrialChainList: errCode 0, retMsg , retType 0
{
"allCount": 70,
"dataList": [
{ "chainId": "9610020", "name": "AI", "chainType": 1, "stocksNum": 329 },
{ "chainId": "9610085", "name": "商业航天", "chainType": 1, "stocksNum": 155 },
{ "chainId": "9610033", "name": "半导体", "chainType": 1, "stocksNum": 256 }
]
}
2
3
4
5
6
7
8
9
API Limits
- Maximum 60 requests within 30 seconds
- Only the first page of paginated requests counts towards rate limiting