# Get Institution Holding List
- Python
- Proto
- C#
- Java
- C++
- JavaScript
get_institution_holding_list(market, institution_id, change_type=None, sort_field=None, sort_dir=None, count=None, page=None, keyword=None)
Description
Get institution holding list, returning the complete holding details of the specified institution (including market value, holding proportion, changes, etc.), with support for filtering by change type, multi-dimensional sorting, and keyword search.
Parameters
Parameter Type Description market Market Market type (HK/US) (required) institution_id int Institution ID (required) change_type InstitutionHoldingChangeType Filter by change type (all if not provided) sort_field InstitutionHoldingListSortField Sort field, default holding market value sort_dir RankSortDir Sort direction, default descending count int Number of results [1, 200], default 20 page str Page cursor keyword str Search keyword (stock name/code) 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 security str Stock code (e.g. 'US.AAPL')name str Stock name industry_name str Industry holding_value float Holding market value holding_pct float Holding proportion - percentage of total stock market cap (%) last_holding_pct float Previous period holding proportion (%) change_shares int Changed shares portfolio_pct float Proportion of institution total position (%) change_pct float Change percentage (%) holding_date int Holding date (timestamp) source str Disclosure source currency str Currency
- Data format:
Example
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
# First get institution ID
ret, data, _, _ = quote_ctx.get_institution_list(market=Market.US, count=1)
if ret == RET_OK and len(data) > 0:
inst_id = data.iloc[0]['institution_id']
# Query holding list
ret, data, next_page, all_count = quote_ctx.get_institution_holding_list(
market=Market.US, institution_id=inst_id, 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
13
14
15
16
17
18
19
- Output
Total count: 4430
security name industry_name holding_value holding_pct last_holding_pct change_shares portfolio_pct change_pct holding_date source currency
0 US.NVDA 英伟达 电子 3.887350e+11 7.9295 7.8996 -19284971 4.9289 -0.0796 2026-03-30 13F USD
1 US.AAPL 苹果 计算机 3.398298e+11 7.7520 7.7624 -10565359 4.3088 -0.0719 2026-03-30 13F USD
2
3
4
# Qot_GetInstitutionHoldingList.proto
Description
Get institution holding list. Returns the complete holding details of the specified institution (including market value, holding proportion, changes, etc.), with support for filtering by change type, multi-dimensional sorting, and keyword search.
Parameters
// Holding change type
enum HoldingChangeType {
HoldingChangeType_Unknown = 0;
HoldingChangeType_New = 1; // Open position
HoldingChangeType_SoldOut = 2; // Close position
HoldingChangeType_Increase = 3; // Increase position
HoldingChangeType_Decrease = 4; // Reduce position
}
// Sort field
enum SortField {
SortField_Unknown = 0; // Default (holding market value)
SortField_HoldingValue = 1; // Holding market value
SortField_HoldingPct = 2; // Holding ratio (of total stock market cap)
SortField_LastHoldingPct = 3; // Previous holding ratio
SortField_ChangeShares = 4; // Change shares
SortField_ChangePct = 5; // Change ratio
SortField_PortfolioPct = 6; // Ratio of total institutional position
SortField_Industry = 7; // Industry
SortField_HoldingDate = 8; // Holding time
}
// Sort direction
enum SortDir {
SortDir_Descending = 0; // Descending (default)
SortDir_Ascending = 1; // Ascending
}
message C2S {
required int32 market = 1; // Qot_Common.QotMarket
required int32 institutionId = 2; // Institution ID
optional int32 changeType = 3; // HoldingChangeType, filter by change type (omit=all)
optional int32 sortField = 4; // SortField
optional int32 sortDir = 5; // SortDir
optional int32 count = 6; // Count [1,200], default 20
optional string page = 7; // Page cursor, omit for first request
optional string keyword = 8; // Search keyword (stock name/code)
}
// Stock holding list data item
message HoldingListItem {
required Qot_Common.Security security = 1; // Stock
optional string name = 2; // Name
optional string industryName = 3; // Industry
optional double holdingValue = 4; // Holding market cap
optional double holdingPct = 5; // Holding ratio - of total stock market cap(%)
optional double lastHoldingPct = 6; // Previous holding ratio(%)
optional int64 changeShares = 7; // Change shares
optional double portfolioPct = 8; // Ratio of total institutional position(%)
optional double changePct = 9; // Change ratio(%)
optional string holdingDate = 10; // Holding time (yyyy-MM-dd)
optional string source = 11; // Disclosure source
}
message S2C {
repeated HoldingListItem dataList = 1; // Data list
optional int32 allCount = 2; // Total count
optional string nextPage = 3; // Next page cursor, empty=no more
optional string currency = 4; // Currency
}
message Request {
required C2S c2s = 1;
}
message Response {
required int32 retType = 1 [default = -400]; // RetType, return result
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
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
68
69
70
71
Protocol ID
3422
uint GetInstitutionHoldingList(Qot_GetInstitutionHoldingList.Request req);
virtual void OnReply_GetInstitutionHoldingList(FTAPI_Conn client, uint nSerialNo, Qot_GetInstitutionHoldingList.Response rsp);
Description
Get institution holding list. Returns the complete holding details of the specified institution (including market value, holding proportion, changes, etc.), with support for filtering by change type, multi-dimensional sorting, and keyword search.
Parameters
// Holding change type
enum HoldingChangeType {
HoldingChangeType_Unknown = 0;
HoldingChangeType_New = 1; // Open position
HoldingChangeType_SoldOut = 2; // Close position
HoldingChangeType_Increase = 3; // Increase position
HoldingChangeType_Decrease = 4; // Reduce position
}
// Sort field
enum SortField {
SortField_Unknown = 0; // Default (holding market value)
SortField_HoldingValue = 1; // Holding market value
SortField_HoldingPct = 2; // Holding ratio (of total stock market cap)
SortField_LastHoldingPct = 3; // Previous holding ratio
SortField_ChangeShares = 4; // Change shares
SortField_ChangePct = 5; // Change ratio
SortField_PortfolioPct = 6; // Ratio of total institutional position
SortField_Industry = 7; // Industry
SortField_HoldingDate = 8; // Holding time
}
// Sort direction
enum SortDir {
SortDir_Descending = 0; // Descending (default)
SortDir_Ascending = 1; // Ascending
}
message C2S {
required int32 market = 1; // Qot_Common.QotMarket
required int32 institutionId = 2; // Institution ID
optional int32 changeType = 3; // HoldingChangeType, filter by change type (omit=all)
optional int32 sortField = 4; // SortField
optional int32 sortDir = 5; // SortDir
optional int32 count = 6; // Count [1,200], default 20
optional string page = 7; // Page cursor, omit for first request
optional string keyword = 8; // Search keyword (stock name/code)
}
// Stock holding list data item
message HoldingListItem {
required Qot_Common.Security security = 1; // Stock
optional string name = 2; // Name
optional string industryName = 3; // Industry
optional double holdingValue = 4; // Holding market cap
optional double holdingPct = 5; // Holding ratio - of total stock market cap(%)
optional double lastHoldingPct = 6; // Previous holding ratio(%)
optional int64 changeShares = 7; // Change shares
optional double portfolioPct = 8; // Ratio of total institutional position(%)
optional double changePct = 9; // Change ratio(%)
optional string holdingDate = 10; // Holding time (yyyy-MM-dd)
optional string source = 11; // Disclosure source
}
message S2C {
repeated HoldingListItem dataList = 1; // Data list
optional int32 allCount = 2; // Total count
optional string nextPage = 3; // Next page cursor, empty=no more
optional string currency = 4; // Currency
}
message Request {
required C2S c2s = 1;
}
message Response {
required int32 retType = 1 [default = -400]; // RetType, return result
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
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
68
69
70
71
- For interface result, refer to RetType
Protocol ID
3422
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;
QotGetInstitutionHoldingList.C2S c2s = QotGetInstitutionHoldingList.C2S.CreateBuilder()
.SetMarket(11)
.SetInstitutionId(403413)
.SetCount(3)
.Build();
QotGetInstitutionHoldingList.Request req = QotGetInstitutionHoldingList.Request.CreateBuilder().SetC2S(c2s).Build();
uint seqNo = qot.GetInstitutionHoldingList(req);
Console.Write("Send QotGetInstitutionHoldingList: {0}
", seqNo);
}
public void OnDisconnect(FTAPI_Conn client, long errCode) {
Console.Write("Qot onDisConnect: {0}
", errCode);
}
public void OnReply_GetInstitutionHoldingList(FTAPI_Conn client, uint nSerialNo, QotGetInstitutionHoldingList.Response rsp)
{
Console.Write("Reply: QotGetInstitutionHoldingList: {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
54
- Output
Send QotGetInstitutionHoldingList: 3
Reply: QotGetInstitutionHoldingList: 3
GetInstitutionHoldingList: errCode 0, retMsg , retType 0
{
"allCount": 4431,
"currency": "USD",
"dataList": [
{ "security": { "market": 11, "code": "NVDA" }, "name": "英伟达", "holdingValue": 404647000000.0, "holdingPct": 7.9295 },
{ "security": { "market": 11, "code": "AAPL" }, "name": "苹果", "holdingValue": 339306000000.0, "holdingPct": 7.7520 },
{ "security": { "market": 11, "code": "GOOGL" }, "name": "谷歌-A", "holdingValue": 298400000000.0, "holdingPct": 6.6443 }
]
}
2
3
4
5
6
7
8
9
10
11
12
int getInstitutionHoldingList(Qot_GetInstitutionHoldingList.Request req);
onReply_GetInstitutionHoldingList(FTAPI_Conn client, int nSerialNo, Qot_GetInstitutionHoldingList.Response rsp)
Description
Get institution holding list. Returns the complete holding details of the specified institution (including market value, holding proportion, changes, etc.), with support for filtering by change type, multi-dimensional sorting, and keyword search.
Parameters
// Holding change type
enum HoldingChangeType {
HoldingChangeType_Unknown = 0;
HoldingChangeType_New = 1; // Open position
HoldingChangeType_SoldOut = 2; // Close position
HoldingChangeType_Increase = 3; // Increase position
HoldingChangeType_Decrease = 4; // Reduce position
}
// Sort field
enum SortField {
SortField_Unknown = 0; // Default (holding market value)
SortField_HoldingValue = 1; // Holding market value
SortField_HoldingPct = 2; // Holding ratio (of total stock market cap)
SortField_LastHoldingPct = 3; // Previous holding ratio
SortField_ChangeShares = 4; // Change shares
SortField_ChangePct = 5; // Change ratio
SortField_PortfolioPct = 6; // Ratio of total institutional position
SortField_Industry = 7; // Industry
SortField_HoldingDate = 8; // Holding time
}
// Sort direction
enum SortDir {
SortDir_Descending = 0; // Descending (default)
SortDir_Ascending = 1; // Ascending
}
message C2S {
required int32 market = 1; // Qot_Common.QotMarket
required int32 institutionId = 2; // Institution ID
optional int32 changeType = 3; // HoldingChangeType, filter by change type (omit=all)
optional int32 sortField = 4; // SortField
optional int32 sortDir = 5; // SortDir
optional int32 count = 6; // Count [1,200], default 20
optional string page = 7; // Page cursor, omit for first request
optional string keyword = 8; // Search keyword (stock name/code)
}
// Stock holding list data item
message HoldingListItem {
required Qot_Common.Security security = 1; // Stock
optional string name = 2; // Name
optional string industryName = 3; // Industry
optional double holdingValue = 4; // Holding market cap
optional double holdingPct = 5; // Holding ratio - of total stock market cap(%)
optional double lastHoldingPct = 6; // Previous holding ratio(%)
optional int64 changeShares = 7; // Change shares
optional double portfolioPct = 8; // Ratio of total institutional position(%)
optional double changePct = 9; // Change ratio(%)
optional string holdingDate = 10; // Holding time (yyyy-MM-dd)
optional string source = 11; // Disclosure source
}
message S2C {
repeated HoldingListItem dataList = 1; // Data list
optional int32 allCount = 2; // Total count
optional string nextPage = 3; // Next page cursor, empty=no more
optional string currency = 4; // Currency
}
message Request {
required C2S c2s = 1;
}
message Response {
required int32 retType = 1 [default = -400]; // RetType, return result
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
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
68
69
70
71
- For interface result, refer to RetType
Protocol ID
3422
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;
QotGetInstitutionHoldingList.C2S c2s = QotGetInstitutionHoldingList.C2S.newBuilder()
.setMarket(11)
.setInstitutionId(403413)
.setCount(3)
.build();
QotGetInstitutionHoldingList.Request req = QotGetInstitutionHoldingList.Request.newBuilder().setC2S(c2s).build();
int seqNo = qot.getInstitutionHoldingList(req);
System.out.printf("Send QotGetInstitutionHoldingList: %d
", seqNo);
}
@Override
public void onDisconnect(FTAPI_Conn client, long errCode) {
System.out.printf("Qot onDisConnect: %d
", errCode);
}
@Override
public void onReply_GetInstitutionHoldingList(FTAPI_Conn client, int nSerialNo, QotGetInstitutionHoldingList.Response rsp) {
if (rsp.getRetType() != 0) {
System.out.printf("QotGetInstitutionHoldingList failed: %s
", rsp.getRetMsg());
} else {
try {
String json = JsonFormat.printer().print(rsp);
System.out.printf("Receive QotGetInstitutionHoldingList: %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
68
- Output
Send QotGetInstitutionHoldingList: 3
Receive QotGetInstitutionHoldingList: {
"allCount": 4431,
"currency": "USD",
"dataList": [
{ "security": { "market": 11, "code": "NVDA" }, "name": "英伟达", "holdingValue": 404647000000.0, "holdingPct": 7.9295 },
{ "security": { "market": 11, "code": "AAPL" }, "name": "苹果", "holdingValue": 339306000000.0, "holdingPct": 7.7520 },
{ "security": { "market": 11, "code": "GOOGL" }, "name": "谷歌-A", "holdingValue": 298400000000.0, "holdingPct": 6.6443 }
]
}
2
3
4
5
6
7
8
9
10
Futu::u32_t GetInstitutionHoldingList(const Qot_GetInstitutionHoldingList::Request &stReq);
virtual void OnReply_GetInstitutionHoldingList(Futu::u32_t nSerialNo, const Qot_GetInstitutionHoldingList::Response &stRsp) = 0;
Description
Protocol request and response definition
Parameters
// Holding change type
enum HoldingChangeType {
HoldingChangeType_Unknown = 0;
HoldingChangeType_New = 1; // Open position
HoldingChangeType_SoldOut = 2; // Close position
HoldingChangeType_Increase = 3; // Increase position
HoldingChangeType_Decrease = 4; // Reduce position
}
// Sort field
enum SortField {
SortField_Unknown = 0; // Default (holding market value)
SortField_HoldingValue = 1; // Holding market value
SortField_HoldingPct = 2; // Holding ratio (of total stock market cap)
SortField_LastHoldingPct = 3; // Previous holding ratio
SortField_ChangeShares = 4; // Change shares
SortField_ChangePct = 5; // Change ratio
SortField_PortfolioPct = 6; // Ratio of total institutional position
SortField_Industry = 7; // Industry
SortField_HoldingDate = 8; // Holding time
}
// Sort direction
enum SortDir {
SortDir_Descending = 0; // Descending (default)
SortDir_Ascending = 1; // Ascending
}
message C2S {
required int32 market = 1; // Qot_Common.QotMarket
required int32 institutionId = 2; // Institution ID
optional int32 changeType = 3; // HoldingChangeType, filter by change type (omit=all)
optional int32 sortField = 4; // SortField
optional int32 sortDir = 5; // SortDir
optional int32 count = 6; // Count [1,200], default 20
optional string page = 7; // Page cursor, omit for first request
optional string keyword = 8; // Search keyword (stock name/code)
}
// Stock holding list data item
message HoldingListItem {
required Qot_Common.Security security = 1; // Stock
optional string name = 2; // Name
optional string industryName = 3; // Industry
optional double holdingValue = 4; // Holding market cap
optional double holdingPct = 5; // Holding ratio - of total stock market cap(%)
optional double lastHoldingPct = 6; // Previous holding ratio(%)
optional int64 changeShares = 7; // Change shares
optional double portfolioPct = 8; // Ratio of total institutional position(%)
optional double changePct = 9; // Change ratio(%)
optional string holdingDate = 10; // Holding time (yyyy-MM-dd)
optional string source = 11; // Disclosure source
}
message S2C {
repeated HoldingListItem dataList = 1; // Data list
optional int32 allCount = 2; // Total count
optional string nextPage = 3; // Next page cursor, empty=no more
optional string currency = 4; // Currency
}
message Request {
required C2S c2s = 1;
}
message Response {
required int32 retType = 1 [default = -400]; // RetType, return result
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
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
68
69
70
71
- For interface result, refer to RetType
Protocol ID
3422
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_GetInstitutionHoldingList::Request req;
Qot_GetInstitutionHoldingList::C2S *c2s = req.mutable_c2s();
c2s->set_market(Qot_Common::QotMarket::QotMarket_US_Security);
c2s->set_institutionid(1001); // example institution ID, obtain from GetInstitutionList
c2s->set_count(20);
m_GetInstitutionHoldingListSerialNo = m_pQotApi->GetInstitutionHoldingList(req);
}
virtual void OnReply_GetInstitutionHoldingList(Futu::u32_t nSerialNo, const Qot_GetInstitutionHoldingList::Response &stRsp) {
if (nSerialNo != m_GetInstitutionHoldingListSerialNo) return;
string resp_str;
ProtoBufToBodyData(stRsp, resp_str);
cout << UTF8ToLocal(resp_str) << endl;
}
protected:
FTAPI_Qot *m_pQotApi;
Futu::u32_t m_GetInstitutionHoldingListSerialNo = 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
42
- Output
{
"retType": 0,
"retMsg": "",
"errCode": 0,
"s2c": {
"dataList": [
{
"security": {
"market": 11,
"code": "AAPL"
},
"name": "Apple",
"industryName": "Information Technology",
"holdingValue": 157000000000.0,
"holdingPct": 5.8,
"portfolioPct": 42.5
}
],
"allCount": 50,
"currency": "USD"
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
getInstitutionHoldingList(qotGetInstitutionHoldingList)
Description
Get institution holding list. Returns the complete holding details of the specified institution (including market value, holding proportion, changes, etc.), with support for filtering by change type, multi-dimensional sorting, and keyword search.
Parameters
// Holding change type
enum HoldingChangeType {
HoldingChangeType_Unknown = 0;
HoldingChangeType_New = 1; // Open position
HoldingChangeType_SoldOut = 2; // Close position
HoldingChangeType_Increase = 3; // Increase position
HoldingChangeType_Decrease = 4; // Reduce position
}
// Sort field
enum SortField {
SortField_Unknown = 0; // Default (holding market value)
SortField_HoldingValue = 1; // Holding market value
SortField_HoldingPct = 2; // Holding ratio (of total stock market cap)
SortField_LastHoldingPct = 3; // Previous holding ratio
SortField_ChangeShares = 4; // Change shares
SortField_ChangePct = 5; // Change ratio
SortField_PortfolioPct = 6; // Ratio of total institutional position
SortField_Industry = 7; // Industry
SortField_HoldingDate = 8; // Holding time
}
// Sort direction
enum SortDir {
SortDir_Descending = 0; // Descending (default)
SortDir_Ascending = 1; // Ascending
}
message C2S {
required int32 market = 1; // Qot_Common.QotMarket
required int32 institutionId = 2; // Institution ID
optional int32 changeType = 3; // HoldingChangeType, filter by change type (omit=all)
optional int32 sortField = 4; // SortField
optional int32 sortDir = 5; // SortDir
optional int32 count = 6; // Count [1,200], default 20
optional string page = 7; // Page cursor, omit for first request
optional string keyword = 8; // Search keyword (stock name/code)
}
// Stock holding list data item
message HoldingListItem {
required Qot_Common.Security security = 1; // Stock
optional string name = 2; // Name
optional string industryName = 3; // Industry
optional double holdingValue = 4; // Holding market cap
optional double holdingPct = 5; // Holding ratio - of total stock market cap(%)
optional double lastHoldingPct = 6; // Previous holding ratio(%)
optional int64 changeShares = 7; // Change shares
optional double portfolioPct = 8; // Ratio of total institutional position(%)
optional double changePct = 9; // Change ratio(%)
optional string holdingDate = 10; // Holding time (yyyy-MM-dd)
optional string source = 11; // Disclosure source
}
message S2C {
repeated HoldingListItem dataList = 1; // Data list
optional int32 allCount = 2; // Total count
optional string nextPage = 3; // Next page cursor, empty=no more
optional string currency = 4; // Currency
}
message Request {
required C2S c2s = 1;
}
message Response {
required int32 retType = 1 [default = -400]; // RetType, return result
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
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
68
69
70
71
- For interface result, refer to RetType
Protocol ID
3422
Example
import ftWebsocket from "futu-api";
import { Common, Qot_Common } from "futu-api/proto";
import beautify from "js-beautify";
function QotGetInstitutionHoldingList(){
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, institutionId: 403413, count: 3 },
};
websocket.GetInstitutionHoldingList(req)
.then((res)=>{
let { errCode, retMsg, retType, s2c } = res
console.log("GetInstitutionHoldingList: 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);
}
QotGetInstitutionHoldingList()
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
GetInstitutionHoldingList: errCode 0, retMsg , retType 0
{
"allCount": 4431,
"currency": "USD",
"dataList": [
{ "security": { "market": 11, "code": "NVDA" }, "name": "英伟达", "holdingValue": 404647000000.0, "holdingPct": 7.9295 },
{ "security": { "market": 11, "code": "AAPL" }, "name": "苹果", "holdingValue": 339306000000.0, "holdingPct": 7.7520 },
{ "security": { "market": 11, "code": "GOOGL" }, "name": "谷歌-A", "holdingValue": 298400000000.0, "holdingPct": 6.6443 }
]
}
2
3
4
5
6
7
8
9
10
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_institution_holding_list(market, institution_id, change_type=None, sort_field=None, sort_dir=None, count=None, page=None, keyword=None)
Description
Get institution holding list, returning the complete holding details of the specified institution (including market value, holding proportion, changes, etc.), with support for filtering by change type, multi-dimensional sorting, and keyword search.
Parameters
Parameter Type Description market Market Market type (HK/US) (required) institution_id int Institution ID (required) change_type InstitutionHoldingChangeType Filter by change type (all if not provided) sort_field InstitutionHoldingListSortField Sort field, default holding market value sort_dir RankSortDir Sort direction, default descending count int Number of results [1, 200], default 20 page str Page cursor keyword str Search keyword (stock name/code) 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 security str Stock code (e.g. 'US.AAPL')name str Stock name industry_name str Industry holding_value float Holding market value holding_pct float Holding proportion - percentage of total stock market cap (%) last_holding_pct float Previous period holding proportion (%) change_shares int Changed shares portfolio_pct float Proportion of institution total position (%) change_pct float Change percentage (%) holding_date int Holding date (timestamp) source str Disclosure source currency str Currency
- Data format:
Example
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
# First get institution ID
ret, data, _, _ = quote_ctx.get_institution_list(market=Market.US, count=1)
if ret == RET_OK and len(data) > 0:
inst_id = data.iloc[0]['institution_id']
# Query holding list
ret, data, next_page, all_count = quote_ctx.get_institution_holding_list(
market=Market.US, institution_id=inst_id, 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
13
14
15
16
17
18
19
- Output
Total count: 4430
security name industry_name holding_value holding_pct last_holding_pct change_shares portfolio_pct change_pct holding_date source currency
0 US.NVDA 英伟达 电子 3.887350e+11 7.9295 7.8996 -19284971 4.9289 -0.0796 2026-03-30 13F USD
1 US.AAPL 苹果 计算机 3.398298e+11 7.7520 7.7624 -10565359 4.3088 -0.0719 2026-03-30 13F USD
2
3
4
# Qot_GetInstitutionHoldingList.proto
Description
Get institution holding list. Returns the complete holding details of the specified institution (including market value, holding proportion, changes, etc.), with support for filtering by change type, multi-dimensional sorting, and keyword search.
Parameters
// Holding change type
enum HoldingChangeType {
HoldingChangeType_Unknown = 0;
HoldingChangeType_New = 1; // Open position
HoldingChangeType_SoldOut = 2; // Close position
HoldingChangeType_Increase = 3; // Increase position
HoldingChangeType_Decrease = 4; // Reduce position
}
// Sort field
enum SortField {
SortField_Unknown = 0; // Default (holding market value)
SortField_HoldingValue = 1; // Holding market value
SortField_HoldingPct = 2; // Holding ratio (of total stock market cap)
SortField_LastHoldingPct = 3; // Previous holding ratio
SortField_ChangeShares = 4; // Change shares
SortField_ChangePct = 5; // Change ratio
SortField_PortfolioPct = 6; // Ratio of total institutional position
SortField_Industry = 7; // Industry
SortField_HoldingDate = 8; // Holding time
}
// Sort direction
enum SortDir {
SortDir_Descending = 0; // Descending (default)
SortDir_Ascending = 1; // Ascending
}
message C2S {
required int32 market = 1; // Qot_Common.QotMarket
required int32 institutionId = 2; // Institution ID
optional int32 changeType = 3; // HoldingChangeType, filter by change type (omit=all)
optional int32 sortField = 4; // SortField
optional int32 sortDir = 5; // SortDir
optional int32 count = 6; // Count [1,200], default 20
optional string page = 7; // Page cursor, omit for first request
optional string keyword = 8; // Search keyword (stock name/code)
}
// Stock holding list data item
message HoldingListItem {
required Qot_Common.Security security = 1; // Stock
optional string name = 2; // Name
optional string industryName = 3; // Industry
optional double holdingValue = 4; // Holding market cap
optional double holdingPct = 5; // Holding ratio - of total stock market cap(%)
optional double lastHoldingPct = 6; // Previous holding ratio(%)
optional int64 changeShares = 7; // Change shares
optional double portfolioPct = 8; // Ratio of total institutional position(%)
optional double changePct = 9; // Change ratio(%)
optional string holdingDate = 10; // Holding time (yyyy-MM-dd)
optional string source = 11; // Disclosure source
}
message S2C {
repeated HoldingListItem dataList = 1; // Data list
optional int32 allCount = 2; // Total count
optional string nextPage = 3; // Next page cursor, empty=no more
optional string currency = 4; // Currency
}
message Request {
required C2S c2s = 1;
}
message Response {
required int32 retType = 1 [default = -400]; // RetType, return result
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
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
68
69
70
71
Protocol ID
3422
uint GetInstitutionHoldingList(Qot_GetInstitutionHoldingList.Request req);
virtual void OnReply_GetInstitutionHoldingList(FTAPI_Conn client, uint nSerialNo, Qot_GetInstitutionHoldingList.Response rsp);
Description
Get institution holding list. Returns the complete holding details of the specified institution (including market value, holding proportion, changes, etc.), with support for filtering by change type, multi-dimensional sorting, and keyword search.
Parameters
// Holding change type
enum HoldingChangeType {
HoldingChangeType_Unknown = 0;
HoldingChangeType_New = 1; // Open position
HoldingChangeType_SoldOut = 2; // Close position
HoldingChangeType_Increase = 3; // Increase position
HoldingChangeType_Decrease = 4; // Reduce position
}
// Sort field
enum SortField {
SortField_Unknown = 0; // Default (holding market value)
SortField_HoldingValue = 1; // Holding market value
SortField_HoldingPct = 2; // Holding ratio (of total stock market cap)
SortField_LastHoldingPct = 3; // Previous holding ratio
SortField_ChangeShares = 4; // Change shares
SortField_ChangePct = 5; // Change ratio
SortField_PortfolioPct = 6; // Ratio of total institutional position
SortField_Industry = 7; // Industry
SortField_HoldingDate = 8; // Holding time
}
// Sort direction
enum SortDir {
SortDir_Descending = 0; // Descending (default)
SortDir_Ascending = 1; // Ascending
}
message C2S {
required int32 market = 1; // Qot_Common.QotMarket
required int32 institutionId = 2; // Institution ID
optional int32 changeType = 3; // HoldingChangeType, filter by change type (omit=all)
optional int32 sortField = 4; // SortField
optional int32 sortDir = 5; // SortDir
optional int32 count = 6; // Count [1,200], default 20
optional string page = 7; // Page cursor, omit for first request
optional string keyword = 8; // Search keyword (stock name/code)
}
// Stock holding list data item
message HoldingListItem {
required Qot_Common.Security security = 1; // Stock
optional string name = 2; // Name
optional string industryName = 3; // Industry
optional double holdingValue = 4; // Holding market cap
optional double holdingPct = 5; // Holding ratio - of total stock market cap(%)
optional double lastHoldingPct = 6; // Previous holding ratio(%)
optional int64 changeShares = 7; // Change shares
optional double portfolioPct = 8; // Ratio of total institutional position(%)
optional double changePct = 9; // Change ratio(%)
optional string holdingDate = 10; // Holding time (yyyy-MM-dd)
optional string source = 11; // Disclosure source
}
message S2C {
repeated HoldingListItem dataList = 1; // Data list
optional int32 allCount = 2; // Total count
optional string nextPage = 3; // Next page cursor, empty=no more
optional string currency = 4; // Currency
}
message Request {
required C2S c2s = 1;
}
message Response {
required int32 retType = 1 [default = -400]; // RetType, return result
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
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
68
69
70
71
- For interface result, refer to RetType
Protocol ID
3422
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;
QotGetInstitutionHoldingList.C2S c2s = QotGetInstitutionHoldingList.C2S.CreateBuilder()
.SetMarket(11)
.SetInstitutionId(403413)
.SetCount(3)
.Build();
QotGetInstitutionHoldingList.Request req = QotGetInstitutionHoldingList.Request.CreateBuilder().SetC2S(c2s).Build();
uint seqNo = qot.GetInstitutionHoldingList(req);
Console.Write("Send QotGetInstitutionHoldingList: {0}
", seqNo);
}
public void OnDisconnect(MMAPI_Conn client, long errCode) {
Console.Write("Qot onDisConnect: {0}
", errCode);
}
public void OnReply_GetInstitutionHoldingList(MMAPI_Conn client, uint nSerialNo, QotGetInstitutionHoldingList.Response rsp)
{
Console.Write("Reply: QotGetInstitutionHoldingList: {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
54
- Output
Send QotGetInstitutionHoldingList: 3
Reply: QotGetInstitutionHoldingList: 3
GetInstitutionHoldingList: errCode 0, retMsg , retType 0
{
"allCount": 4431,
"currency": "USD",
"dataList": [
{ "security": { "market": 11, "code": "NVDA" }, "name": "英伟达", "holdingValue": 404647000000.0, "holdingPct": 7.9295 },
{ "security": { "market": 11, "code": "AAPL" }, "name": "苹果", "holdingValue": 339306000000.0, "holdingPct": 7.7520 },
{ "security": { "market": 11, "code": "GOOGL" }, "name": "谷歌-A", "holdingValue": 298400000000.0, "holdingPct": 6.6443 }
]
}
2
3
4
5
6
7
8
9
10
11
12
int getInstitutionHoldingList(Qot_GetInstitutionHoldingList.Request req);
onReply_GetInstitutionHoldingList(FTAPI_Conn client, int nSerialNo, Qot_GetInstitutionHoldingList.Response rsp)
Description
Get institution holding list. Returns the complete holding details of the specified institution (including market value, holding proportion, changes, etc.), with support for filtering by change type, multi-dimensional sorting, and keyword search.
Parameters
// Holding change type
enum HoldingChangeType {
HoldingChangeType_Unknown = 0;
HoldingChangeType_New = 1; // Open position
HoldingChangeType_SoldOut = 2; // Close position
HoldingChangeType_Increase = 3; // Increase position
HoldingChangeType_Decrease = 4; // Reduce position
}
// Sort field
enum SortField {
SortField_Unknown = 0; // Default (holding market value)
SortField_HoldingValue = 1; // Holding market value
SortField_HoldingPct = 2; // Holding ratio (of total stock market cap)
SortField_LastHoldingPct = 3; // Previous holding ratio
SortField_ChangeShares = 4; // Change shares
SortField_ChangePct = 5; // Change ratio
SortField_PortfolioPct = 6; // Ratio of total institutional position
SortField_Industry = 7; // Industry
SortField_HoldingDate = 8; // Holding time
}
// Sort direction
enum SortDir {
SortDir_Descending = 0; // Descending (default)
SortDir_Ascending = 1; // Ascending
}
message C2S {
required int32 market = 1; // Qot_Common.QotMarket
required int32 institutionId = 2; // Institution ID
optional int32 changeType = 3; // HoldingChangeType, filter by change type (omit=all)
optional int32 sortField = 4; // SortField
optional int32 sortDir = 5; // SortDir
optional int32 count = 6; // Count [1,200], default 20
optional string page = 7; // Page cursor, omit for first request
optional string keyword = 8; // Search keyword (stock name/code)
}
// Stock holding list data item
message HoldingListItem {
required Qot_Common.Security security = 1; // Stock
optional string name = 2; // Name
optional string industryName = 3; // Industry
optional double holdingValue = 4; // Holding market cap
optional double holdingPct = 5; // Holding ratio - of total stock market cap(%)
optional double lastHoldingPct = 6; // Previous holding ratio(%)
optional int64 changeShares = 7; // Change shares
optional double portfolioPct = 8; // Ratio of total institutional position(%)
optional double changePct = 9; // Change ratio(%)
optional string holdingDate = 10; // Holding time (yyyy-MM-dd)
optional string source = 11; // Disclosure source
}
message S2C {
repeated HoldingListItem dataList = 1; // Data list
optional int32 allCount = 2; // Total count
optional string nextPage = 3; // Next page cursor, empty=no more
optional string currency = 4; // Currency
}
message Request {
required C2S c2s = 1;
}
message Response {
required int32 retType = 1 [default = -400]; // RetType, return result
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
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
68
69
70
71
- For interface result, refer to RetType
Protocol ID
3422
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;
QotGetInstitutionHoldingList.C2S c2s = QotGetInstitutionHoldingList.C2S.newBuilder()
.setMarket(11)
.setInstitutionId(403413)
.setCount(3)
.build();
QotGetInstitutionHoldingList.Request req = QotGetInstitutionHoldingList.Request.newBuilder().setC2S(c2s).build();
int seqNo = qot.getInstitutionHoldingList(req);
System.out.printf("Send QotGetInstitutionHoldingList: %d
", seqNo);
}
@Override
public void onDisconnect(MMAPI_Conn client, long errCode) {
System.out.printf("Qot onDisConnect: %d
", errCode);
}
@Override
public void onReply_GetInstitutionHoldingList(MMAPI_Conn client, int nSerialNo, QotGetInstitutionHoldingList.Response rsp) {
if (rsp.getRetType() != 0) {
System.out.printf("QotGetInstitutionHoldingList failed: %s
", rsp.getRetMsg());
} else {
try {
String json = JsonFormat.printer().print(rsp);
System.out.printf("Receive QotGetInstitutionHoldingList: %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
68
- Output
Send QotGetInstitutionHoldingList: 3
Receive QotGetInstitutionHoldingList: {
"allCount": 4431,
"currency": "USD",
"dataList": [
{ "security": { "market": 11, "code": "NVDA" }, "name": "英伟达", "holdingValue": 404647000000.0, "holdingPct": 7.9295 },
{ "security": { "market": 11, "code": "AAPL" }, "name": "苹果", "holdingValue": 339306000000.0, "holdingPct": 7.7520 },
{ "security": { "market": 11, "code": "GOOGL" }, "name": "谷歌-A", "holdingValue": 298400000000.0, "holdingPct": 6.6443 }
]
}
2
3
4
5
6
7
8
9
10
moomoo::u32_t GetInstitutionHoldingList(const Qot_GetInstitutionHoldingList::Request &stReq);
virtual void OnReply_GetInstitutionHoldingList(moomoo::u32_t nSerialNo, const Qot_GetInstitutionHoldingList::Response &stRsp) = 0;
Description
Protocol request and response definition
Parameters
// Holding change type
enum HoldingChangeType {
HoldingChangeType_Unknown = 0;
HoldingChangeType_New = 1; // Open position
HoldingChangeType_SoldOut = 2; // Close position
HoldingChangeType_Increase = 3; // Increase position
HoldingChangeType_Decrease = 4; // Reduce position
}
// Sort field
enum SortField {
SortField_Unknown = 0; // Default (holding market value)
SortField_HoldingValue = 1; // Holding market value
SortField_HoldingPct = 2; // Holding ratio (of total stock market cap)
SortField_LastHoldingPct = 3; // Previous holding ratio
SortField_ChangeShares = 4; // Change shares
SortField_ChangePct = 5; // Change ratio
SortField_PortfolioPct = 6; // Ratio of total institutional position
SortField_Industry = 7; // Industry
SortField_HoldingDate = 8; // Holding time
}
// Sort direction
enum SortDir {
SortDir_Descending = 0; // Descending (default)
SortDir_Ascending = 1; // Ascending
}
message C2S {
required int32 market = 1; // Qot_Common.QotMarket
required int32 institutionId = 2; // Institution ID
optional int32 changeType = 3; // HoldingChangeType, filter by change type (omit=all)
optional int32 sortField = 4; // SortField
optional int32 sortDir = 5; // SortDir
optional int32 count = 6; // Count [1,200], default 20
optional string page = 7; // Page cursor, omit for first request
optional string keyword = 8; // Search keyword (stock name/code)
}
// Stock holding list data item
message HoldingListItem {
required Qot_Common.Security security = 1; // Stock
optional string name = 2; // Name
optional string industryName = 3; // Industry
optional double holdingValue = 4; // Holding market cap
optional double holdingPct = 5; // Holding ratio - of total stock market cap(%)
optional double lastHoldingPct = 6; // Previous holding ratio(%)
optional int64 changeShares = 7; // Change shares
optional double portfolioPct = 8; // Ratio of total institutional position(%)
optional double changePct = 9; // Change ratio(%)
optional string holdingDate = 10; // Holding time (yyyy-MM-dd)
optional string source = 11; // Disclosure source
}
message S2C {
repeated HoldingListItem dataList = 1; // Data list
optional int32 allCount = 2; // Total count
optional string nextPage = 3; // Next page cursor, empty=no more
optional string currency = 4; // Currency
}
message Request {
required C2S c2s = 1;
}
message Response {
required int32 retType = 1 [default = -400]; // RetType, return result
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
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
68
69
70
71
- For interface result, refer to RetType
Protocol ID
3422
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_GetInstitutionHoldingList::Request req;
Qot_GetInstitutionHoldingList::C2S *c2s = req.mutable_c2s();
c2s->set_market(Qot_Common::QotMarket::QotMarket_US_Security);
c2s->set_institutionid(1001); // example institution ID, obtain from GetInstitutionList
c2s->set_count(20);
m_GetInstitutionHoldingListSerialNo = m_pQotApi->GetInstitutionHoldingList(req);
}
virtual void OnReply_GetInstitutionHoldingList(moomoo::u32_t nSerialNo, const Qot_GetInstitutionHoldingList::Response &stRsp) {
if (nSerialNo != m_GetInstitutionHoldingListSerialNo) return;
string resp_str;
ProtoBufToBodyData(stRsp, resp_str);
cout << UTF8ToLocal(resp_str) << endl;
}
protected:
MMAPI_Qot *m_pQotApi;
moomoo::u32_t m_GetInstitutionHoldingListSerialNo = 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
42
- Output
{
"retType": 0,
"retMsg": "",
"errCode": 0,
"s2c": {
"dataList": [
{
"security": {
"market": 11,
"code": "AAPL"
},
"name": "Apple",
"industryName": "Information Technology",
"holdingValue": 157000000000.0,
"holdingPct": 5.8,
"portfolioPct": 42.5
}
],
"allCount": 50,
"currency": "USD"
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
getInstitutionHoldingList(qotGetInstitutionHoldingList)
Description
Get institution holding list. Returns the complete holding details of the specified institution (including market value, holding proportion, changes, etc.), with support for filtering by change type, multi-dimensional sorting, and keyword search.
Parameters
// Holding change type
enum HoldingChangeType {
HoldingChangeType_Unknown = 0;
HoldingChangeType_New = 1; // Open position
HoldingChangeType_SoldOut = 2; // Close position
HoldingChangeType_Increase = 3; // Increase position
HoldingChangeType_Decrease = 4; // Reduce position
}
// Sort field
enum SortField {
SortField_Unknown = 0; // Default (holding market value)
SortField_HoldingValue = 1; // Holding market value
SortField_HoldingPct = 2; // Holding ratio (of total stock market cap)
SortField_LastHoldingPct = 3; // Previous holding ratio
SortField_ChangeShares = 4; // Change shares
SortField_ChangePct = 5; // Change ratio
SortField_PortfolioPct = 6; // Ratio of total institutional position
SortField_Industry = 7; // Industry
SortField_HoldingDate = 8; // Holding time
}
// Sort direction
enum SortDir {
SortDir_Descending = 0; // Descending (default)
SortDir_Ascending = 1; // Ascending
}
message C2S {
required int32 market = 1; // Qot_Common.QotMarket
required int32 institutionId = 2; // Institution ID
optional int32 changeType = 3; // HoldingChangeType, filter by change type (omit=all)
optional int32 sortField = 4; // SortField
optional int32 sortDir = 5; // SortDir
optional int32 count = 6; // Count [1,200], default 20
optional string page = 7; // Page cursor, omit for first request
optional string keyword = 8; // Search keyword (stock name/code)
}
// Stock holding list data item
message HoldingListItem {
required Qot_Common.Security security = 1; // Stock
optional string name = 2; // Name
optional string industryName = 3; // Industry
optional double holdingValue = 4; // Holding market cap
optional double holdingPct = 5; // Holding ratio - of total stock market cap(%)
optional double lastHoldingPct = 6; // Previous holding ratio(%)
optional int64 changeShares = 7; // Change shares
optional double portfolioPct = 8; // Ratio of total institutional position(%)
optional double changePct = 9; // Change ratio(%)
optional string holdingDate = 10; // Holding time (yyyy-MM-dd)
optional string source = 11; // Disclosure source
}
message S2C {
repeated HoldingListItem dataList = 1; // Data list
optional int32 allCount = 2; // Total count
optional string nextPage = 3; // Next page cursor, empty=no more
optional string currency = 4; // Currency
}
message Request {
required C2S c2s = 1;
}
message Response {
required int32 retType = 1 [default = -400]; // RetType, return result
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
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
68
69
70
71
- For interface result, refer to RetType
Protocol ID
3422
Example
import mmWebsocket from "moomoo-api";
import { Common, Qot_Common } from "moomoo-api/proto";
import beautify from "js-beautify";
function QotGetInstitutionHoldingList(){
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, institutionId: 403413, count: 3 },
};
websocket.GetInstitutionHoldingList(req)
.then((res)=>{
let { errCode, retMsg, retType, s2c } = res
console.log("GetInstitutionHoldingList: 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);
}
QotGetInstitutionHoldingList()
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
GetInstitutionHoldingList: errCode 0, retMsg , retType 0
{
"allCount": 4431,
"currency": "USD",
"dataList": [
{ "security": { "market": 11, "code": "NVDA" }, "name": "英伟达", "holdingValue": 404647000000.0, "holdingPct": 7.9295 },
{ "security": { "market": 11, "code": "AAPL" }, "name": "苹果", "holdingValue": 339306000000.0, "holdingPct": 7.7520 },
{ "security": { "market": 11, "code": "GOOGL" }, "name": "谷歌-A", "holdingValue": 298400000000.0, "holdingPct": 6.6443 }
]
}
2
3
4
5
6
7
8
9
10
API Limits
- Maximum 60 requests within 30 seconds
- Only the first page of paginated requests counts towards rate limiting