# インサイダー保有株式リストの取得
- Python
- Proto
- C#
- Java
- C++
- JavaScript
get_insider_holder_list(code, next_key=None, num=None)
説明
米国株のインサイダー(役員/取締役/主要株主)の保有株式リストを取得します。ページングに対応しており、初回リクエスト時にはインサイダー統計サマリーも返されます。
パラメータ
パラメータ 型 説明 code str 銘柄コード 例:US.AAPL;米国株の普通株およびファンドに対応next_key str ページングキー 初回リクエスト時は不要;続きを取得する場合は前回のレスポンスの next_key を渡す;"-1" はデータなしnum int 1ページあたりの件数 デフォルト 10、範囲 1~20戻り値
パラメータ 型 説明 ret RET_CODE API 呼び出し結果 data pd.DataFrame ret == RET_OK の場合、インサイダー保有 DataFrame を返す str ret != RET_OK の場合、エラーの説明を返す DataFrame フィールドの説明:
フィールド 型 説明 holder_id int 株主 ID get_insider_trade_list および get_shareholders_holder_detail の入力として使用可能holder_quantity int 保有株式総数 単位:株holder_pct float 保有比率 パーセント記号の前の値、例:12.34 は 12.34% を意味するname str 株主名 title str 役職 all_count int 総件数 next_key str ページングキー "-1" はデータなし;続きを取得する際はそのまま next_key に渡すinsider_total_count int インサイダー総人数 初回ページ(next_key が空の場合)のみ返されるinsider_bought_count int 買い増し人数 買い増したインサイダーの人数;初回ページのみ返されるinsider_sold_count int 売却人数 売却したインサイダーの人数;初回ページのみ返される
Example
from futu import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
ret, data = quote_ctx.get_insider_holder_list("US.AAPL")
if ret == RET_OK:
print(data[['holder_id', 'name', 'title', 'holder_quantity', 'holder_pct']].to_string(index=False))
print('insider_total:', data['insider_total_count'].iloc[0])
print('next_key:', data['next_key'].iloc[0])
else:
print('error:', data)
quote_ctx.close()
2
3
4
5
6
7
8
9
10
11
- Output
holder_id name title holder_quantity holder_pct
234085 Arthur Levinson Independent Non-Executive Chairperson 4125576 0.028
169600 Timothy Cook Chief Executive Officer 3280418 0.022
626415138 Sabih Khan Officer 1105527 0.007
34123508 Katherine Adams Senior Vice President 175408 0.001
531640091 Deirdre O’Brien Senior Vice President of Retail 136810 0.000
285767 Ronald Sugar Independent Director 110566 0.000
50035778 Luca Maestri Chief Financial Officer 91304 0.000
253136 Andrea Jung Independent Director 77664 0.000
22072913 Susan Wagner Independent Director 69788 0.000
1976351584 Ben Borders Principal Accounting Officer 39987 0.000
insider_total: 17
next_key: 10
2
3
4
5
6
7
8
9
10
11
12
13
# Qot_GetInsiderHolderList.proto
説明
インサイダー保有株式リストの取得
パラメータ
message C2S
{
required Qot_Common.Security security = 1;
optional string nextKey = 2; // ページングキー;初回は不要;続きは前回の nextKey を渡す;"-1" はデータなし
optional int32 num = 3; // 1ページあたりの件数、デフォルト 10、範囲 1~20
}
message Request
{
required C2S c2s = 1;
}
2
3
4
5
6
7
8
9
10
11
- 銘柄構造については Security を参照
- 戻り値
message OwnerInsiderHolderItem
{
optional int64 holderId = 1; // 株主ID;GetInsiderTradeList および Qot_GetShareholdersHolderDetail の入力として使用可能
optional int64 holderQuantity = 2; // 保有株式総数
optional double holderPct = 3; // 保有比率;パーセント記号の前の値;例:12.34 は 12.34% を意味する
optional string name = 4; // 株主名
optional string title = 5; // 役職
}
message S2C
{
repeated OwnerInsiderHolderItem itemList = 1;
optional int32 allCount = 2; // 総件数
optional string nextKey = 3; // ページングキー;"-1" はデータなし
optional int32 insiderTotalCount = 4; // インサイダー総人数;初回リクエスト(nextKey が空)時のみ返される
optional int32 insiderBoughtCount = 5; // 買い増したインサイダーの人数;初回リクエスト時のみ返される
optional int32 insiderSoldCount = 6; // 売却したインサイダーの人数;初回リクエスト時のみ返される
}
message Response
{
required int32 retType = 1 [default = -400]; // 戻り結果、Common.RetType を参照
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
- API 呼び出し結果については RetType を参照
プロトコル ID
3241
uint GetInsiderHolderList(QotGetInsiderHolderList.Request req);
virtual void OnReply_GetInsiderHolderList(MMAPI_Conn client, uint nSerialNo, QotGetInsiderHolderList.Response rsp);
説明
インサイダー保有株式リストの取得
パラメータ
message C2S
{
required Qot_Common.Security security = 1;
optional string nextKey = 2; // ページングキー;初回は不要;続きは前回の nextKey を渡す;"-1" はデータなし
optional int32 num = 3; // 1ページあたりの件数、デフォルト 10、範囲 1~20
}
message Request
{
required C2S c2s = 1;
}
2
3
4
5
6
7
8
9
10
11
- 銘柄構造については Security を参照
- 戻り値
message OwnerInsiderHolderItem
{
optional int64 holderId = 1; // 株主ID;GetInsiderTradeList および Qot_GetShareholdersHolderDetail の入力として使用可能
optional int64 holderQuantity = 2; // 保有株式総数
optional double holderPct = 3; // 保有比率;パーセント記号の前の値;例:12.34 は 12.34% を意味する
optional string name = 4; // 株主名
optional string title = 5; // 役職
}
message S2C
{
repeated OwnerInsiderHolderItem itemList = 1;
optional int32 allCount = 2; // 総件数
optional string nextKey = 3; // ページングキー;"-1" はデータなし
optional int32 insiderTotalCount = 4; // インサイダー総人数;初回リクエスト(nextKey が空)時のみ返される
optional int32 insiderBoughtCount = 5; // 買い増したインサイダーの人数;初回リクエスト時のみ返される
optional int32 insiderSoldCount = 6; // 売却したインサイダーの人数;初回リクエスト時のみ返される
}
message Response
{
required int32 retType = 1 [default = -400]; // 戻り結果、Common.RetType を参照
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
- API 呼び出し結果については RetType を参照
- 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}\n", errCode, desc, client.GetConnectID());
if (errCode != 0)
return;
QotCommon.Security sec = QotCommon.Security.CreateBuilder()
.SetMarket((int)QotCommon.QotMarket.QotMarket_US_Security)
.SetCode("AAPL")
.Build();
QotGetInsiderHolderList.C2S c2s = QotGetInsiderHolderList.C2S.CreateBuilder()
.SetSecurity(sec)
.Build();
QotGetInsiderHolderList.Request req = QotGetInsiderHolderList.Request.CreateBuilder().SetC2S(c2s).Build();
uint seqNo = qot.GetInsiderHolderList(req);
Console.Write("Send QotGetInsiderHolderList: {0}\n", seqNo);
}
public void OnDisconnect(FTAPI_Conn client, long errCode)
{
Console.Write("Qot onDisConnect: {0}\n", errCode);
}
public void OnReply_GetInsiderHolderList(FTAPI_Conn client, uint nSerialNo, QotGetInsiderHolderList.Response rsp)
{
Console.Write("Reply: QotGetInsiderHolderList: {0} {1}\n", nSerialNo, rsp.ToString());
}
public static void Main(String[] args)
{
FTAPI.Init();
Program qot = new Program();
qot.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
55
56
- Output
sent seqNo=3
retType: 0
retMsg: ""
errCode: 0
s2c {
itemList {
holderId: 234085
holderQuantity: 4125576
holderPct: 0.028
name: "Arthur Levinson"
title: "Independent Non-Executive Chairperson"
}
itemList {
//...
}
allCount: 17
nextKey: "10"
insiderTotalCount: 17
insiderBoughtCount: 11
insiderSoldCount: 8
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int getInsiderHolderList(QotGetInsiderHolderList.Request req);
void onReply_GetInsiderHolderList(MMAPI_Conn client, int nSerialNo, QotGetInsiderHolderList.Response rsp);
説明
インサイダー保有株式リストの取得
パラメータ
message C2S
{
required Qot_Common.Security security = 1;
optional string nextKey = 2; // ページングキー;初回は不要;続きは前回の nextKey を渡す;"-1" はデータなし
optional int32 num = 3; // 1ページあたりの件数、デフォルト 10、範囲 1~20
}
message Request
{
required C2S c2s = 1;
}
2
3
4
5
6
7
8
9
10
11
- 銘柄構造については Security を参照
- 戻り値
message OwnerInsiderHolderItem
{
optional int64 holderId = 1; // 株主ID;GetInsiderTradeList および Qot_GetShareholdersHolderDetail の入力として使用可能
optional int64 holderQuantity = 2; // 保有株式総数
optional double holderPct = 3; // 保有比率;パーセント記号の前の値;例:12.34 は 12.34% を意味する
optional string name = 4; // 株主名
optional string title = 5; // 役職
}
message S2C
{
repeated OwnerInsiderHolderItem itemList = 1;
optional int32 allCount = 2; // 総件数
optional string nextKey = 3; // ページングキー;"-1" はデータなし
optional int32 insiderTotalCount = 4; // インサイダー総人数;初回リクエスト(nextKey が空)時のみ返される
optional int32 insiderBoughtCount = 5; // 買い増したインサイダーの人数;初回リクエスト時のみ返される
optional int32 insiderSoldCount = 6; // 売却したインサイダーの人数;初回リクエスト時のみ返される
}
message Response
{
required int32 retType = 1 [default = -400]; // 戻り結果、Common.RetType を参照
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
- API 呼び出し結果については RetType を参照
- 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=%b desc=%s connID=%d\n", errCode, desc, client.getConnectID());
if (errCode != 0)
return;
QotCommon.Security sec = QotCommon.Security.newBuilder()
.setMarket(QotCommon.QotMarket.QotMarket_US_Security_VALUE)
.setCode("AAPL")
.build();
QotGetInsiderHolderList.C2S c2s = QotGetInsiderHolderList.C2S.newBuilder()
.setSecurity(sec)
.build();
QotGetInsiderHolderList.Request req = QotGetInsiderHolderList.Request.newBuilder().setC2S(c2s).build();
int seqNo = qot.getInsiderHolderList(req);
System.out.printf("Send QotGetInsiderHolderList: %d\n", seqNo);
}
@Override
public void onDisconnect(FTAPI_Conn client, long errCode) {
System.out.printf("Qot onDisConnect: %d\n", errCode);
}
@Override
public void onReply_GetInsiderHolderList(FTAPI_Conn client, int nSerialNo, QotGetInsiderHolderList.Response rsp) {
if (rsp.getRetType() != 0) {
System.out.printf("QotGetInsiderHolderList failed: %s\n", rsp.getRetMsg());
}
else {
try {
String json = JsonFormat.printer().print(rsp);
System.out.printf("Receive QotGetInsiderHolderList: %s\n", 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
- Output
Qot onInitConnect: ret=0 desc= connID=7459212661260089877
Send Qot_GetInsiderHolderList: 2
Receive Qot_GetInsiderHolderList: retType: 0
retMsg: ""
errCode: 0
s2c {
itemList {
holderId: 234085
holderQuantity: 4125576
holderPct: 0.028
name: "Arthur Levinson"
title: "Independent Non-Executive Chairperson"
}
itemList {
//...
}
allCount: 17
nextKey: "10"
insiderTotalCount: 17
insiderBoughtCount: 11
insiderSoldCount: 8
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
moomoo::u32_t GetInsiderHolderList(const Qot_GetInsiderHolderList::Request &stReq);
virtual void OnReply_GetInsiderHolderList(moomoo::u32_t nSerialNo, const Qot_GetInsiderHolderList::Response &stRsp) = 0;
説明
インサイダー保有株式リストの取得
パラメータ
message C2S
{
required Qot_Common.Security security = 1;
optional string nextKey = 2; // ページングキー;初回は不要;続きは前回の nextKey を渡す;"-1" はデータなし
optional int32 num = 3; // 1ページあたりの件数、デフォルト 10、範囲 1~20
}
message Request
{
required C2S c2s = 1;
}
2
3
4
5
6
7
8
9
10
11
- 銘柄構造については Security を参照
- 戻り値
message OwnerInsiderHolderItem
{
optional int64 holderId = 1; // 株主ID;GetInsiderTradeList および Qot_GetShareholdersHolderDetail の入力として使用可能
optional int64 holderQuantity = 2; // 保有株式総数
optional double holderPct = 3; // 保有比率;パーセント記号の前の値;例:12.34 は 12.34% を意味する
optional string name = 4; // 株主名
optional string title = 5; // 役職
}
message S2C
{
repeated OwnerInsiderHolderItem itemList = 1;
optional int32 allCount = 2; // 総件数
optional string nextKey = 3; // ページングキー;"-1" はデータなし
optional int32 insiderTotalCount = 4; // インサイダー総人数;初回リクエスト(nextKey が空)時のみ返される
optional int32 insiderBoughtCount = 5; // 買い増したインサイダーの人数;初回リクエスト時のみ返される
optional int32 insiderSoldCount = 6; // 売却したインサイダーの人数;初回リクエスト時のみ返される
}
message Response
{
required int32 retType = 1 [default = -400]; // 戻り結果、Common.RetType を参照
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
- API 呼び出し結果については RetType を参照
- Example
class Program : public FTSPI_Qot, public FTSPI_Trd, 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) {
cout << "connect" << endl;
// construct request message
Qot_GetInsiderHolderList::Request req;
Qot_GetInsiderHolderList::C2S *c2s = req.mutable_c2s();
Qot_Common::Security *sec = c2s->mutable_security();
sec->set_code("AAPL");
sec->set_market(Qot_Common::QotMarket::QotMarket_US_Security);
m_pQotApi->GetInsiderHolderList(req);
cout << "GetInsiderHolderList" << endl;
}
virtual void OnReply_GetInsiderHolderList(Futu::u32_t nSerialNo, const Qot_GetInsiderHolderList::Response &stRsp){
cout << "OnReply_GetInsiderHolderList:" << endl;
// print response
// ProtoBufToBodyData and UTF8ToLocal refer to tool.h in Samples
string resp_str;
ProtoBufToBodyData(stRsp, resp_str);
cout << UTF8ToLocal(resp_str) << endl;
}
protected:
FTAPI_Qot *m_pQotApi;
};
int32_t main(int32_t argc, char** argv)
{
FTAPI::Init();
{
Program program;
program.Start();
getchar();
}
protobuf::ShutdownProtobufLibrary();
FTAPI::UnInit();
return 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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
- Output
onInitConnect: ret=0 desc=Succeed!
Send Qot_GetInsiderHolderList seqNo=3
retType: 0
retMsg: ""
errCode: 0
s2c {
itemList {
holderId: 234085
holderQuantity: 4125576
holderPct: 0.028
name: "Arthur Levinson"
title: "Independent Non-Executive Chairperson"
}
itemList {
//...
}
allCount: 17
nextKey: "10"
insiderTotalCount: 17
insiderBoughtCount: 11
insiderSoldCount: 8
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
GetInsiderHolderList(req);
説明
インサイダー保有株式リストの取得
パラメータ
message C2S
{
required Qot_Common.Security security = 1;
optional string nextKey = 2; // ページングキー;初回は不要;続きは前回の nextKey を渡す;"-1" はデータなし
optional int32 num = 3; // 1ページあたりの件数、デフォルト 10、範囲 1~20
}
message Request
{
required C2S c2s = 1;
}
2
3
4
5
6
7
8
9
10
11
- 銘柄構造については Security を参照
- 戻り値
message OwnerInsiderHolderItem
{
optional int64 holderId = 1; // 株主ID;GetInsiderTradeList および Qot_GetShareholdersHolderDetail の入力として使用可能
optional int64 holderQuantity = 2; // 保有株式総数
optional double holderPct = 3; // 保有比率;パーセント記号の前の値;例:12.34 は 12.34% を意味する
optional string name = 4; // 株主名
optional string title = 5; // 役職
}
message S2C
{
repeated OwnerInsiderHolderItem itemList = 1;
optional int32 allCount = 2; // 総件数
optional string nextKey = 3; // ページングキー;"-1" はデータなし
optional int32 insiderTotalCount = 4; // インサイダー総人数;初回リクエスト(nextKey が空)時のみ返される
optional int32 insiderBoughtCount = 5; // 買い増したインサイダーの人数;初回リクエスト時のみ返される
optional int32 insiderSoldCount = 6; // 売却したインサイダーの人数;初回リクエスト時のみ返される
}
message Response
{
required int32 retType = 1 [default = -400]; // 戻り結果、Common.RetType を参照
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
- API 呼び出し結果については RetType を参照
- Example
import ftWebsocket from "futu-api";
import { Common, Qot_Common } from "futu-api/proto";
import beautify from "js-beautify";
function QotGetInsiderHolderList(){
const { RetType } = Common
const { QotMarket } = Qot_Common
let [addr, port, enable_ssl, key] = ["127.0.0.1", 33333, false, '7522027ccf5a06b1'];
let websocket = new ftWebsocket();
websocket.onlogin = (ret, msg)=>{
if (ret) {
const req = {
c2s: {
security: {
market: QotMarket.QotMarket_US_Security,
code: "AAPL",
},
},
};
websocket.GetInsiderHolderList(req)
.then((res) => {
let { errCode, retMsg, retType,s2c } = res
console.log("GetInsiderHolderList: 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("error", msg);
}
};
websocket.start(addr, port, enable_ssl, key);
setTimeout(()=>{
websocket.stop();
console.log("stop");
}, 5000);
}
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
- Output
GetInsiderHolderList: errCode 0, retMsg , retType 0
{
"itemList": [{
"holderId": "234085",
"holderQuantity": "4125576",
"holderPct": 0.028,
"name": "Arthur Levinson",
"title": "Independent Non-Executive Chairperson"
//...
}],
"allCount": 17,
"nextKey": "10",
"insiderTotalCount": 17,
"insiderBoughtCount": 11,
"insiderSoldCount": 8
}
stop
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
API Limitations
- Maximum 30 requests per 30 seconds.
- Only meaningful for US stocks and funds.
- Supports pagination; default 10 items per page, maximum 20; the pagination key is a string type.
- The insider summary (total/bought/sold count) is only returned on the first page (when nextKey is empty).
- Python
- Proto
- C#
- Java
- C++
- JavaScript
get_insider_holder_list(code, next_key=None, num=None)
説明
米国株のインサイダー(役員/取締役/主要株主)の保有株式リストを取得します。ページングに対応しており、初回リクエスト時にはインサイダー統計サマリーも返されます。
パラメータ
パラメータ 型 説明 code str 銘柄コード 例:US.AAPL;米国株の普通株およびファンドに対応next_key str ページングキー 初回リクエスト時は不要;続きを取得する場合は前回のレスポンスの next_key を渡す;"-1" はデータなしnum int 1ページあたりの件数 デフォルト 10、範囲 1~20戻り値
パラメータ 型 説明 ret RET_CODE API 呼び出し結果 data pd.DataFrame ret == RET_OK の場合、インサイダー保有 DataFrame を返す str ret != RET_OK の場合、エラーの説明を返す DataFrame フィールドの説明:
フィールド 型 説明 holder_id int 株主 ID get_insider_trade_list および get_shareholders_holder_detail の入力として使用可能holder_quantity int 保有株式総数 単位:株holder_pct float 保有比率 パーセント記号の前の値、例:12.34 は 12.34% を意味するname str 株主名 title str 役職 all_count int 総件数 next_key str ページングキー "-1" はデータなし;続きを取得する際はそのまま next_key に渡すinsider_total_count int インサイダー総人数 初回ページ(next_key が空の場合)のみ返されるinsider_bought_count int 買い増し人数 買い増したインサイダーの人数;初回ページのみ返されるinsider_sold_count int 売却人数 売却したインサイダーの人数;初回ページのみ返される
Example
from moomoo import *
quote_ctx = OpenQuoteContext(host='127.0.0.1', port=11111)
ret, data = quote_ctx.get_insider_holder_list("US.AAPL")
if ret == RET_OK:
print(data[['holder_id', 'name', 'title', 'holder_quantity', 'holder_pct']].to_string(index=False))
print('insider_total:', data['insider_total_count'].iloc[0])
print('next_key:', data['next_key'].iloc[0])
else:
print('error:', data)
quote_ctx.close()
2
3
4
5
6
7
8
9
10
11
- Output
holder_id name title holder_quantity holder_pct
234085 Arthur Levinson Independent Non-Executive Chairperson 4125576 0.028
169600 Timothy Cook Chief Executive Officer 3280418 0.022
626415138 Sabih Khan Officer 1105527 0.007
34123508 Katherine Adams Senior Vice President 175408 0.001
531640091 Deirdre O’Brien Senior Vice President of Retail 136810 0.000
285767 Ronald Sugar Independent Director 110566 0.000
50035778 Luca Maestri Chief Financial Officer 91304 0.000
253136 Andrea Jung Independent Director 77664 0.000
22072913 Susan Wagner Independent Director 69788 0.000
1976351584 Ben Borders Principal Accounting Officer 39987 0.000
insider_total: 17
next_key: 10
2
3
4
5
6
7
8
9
10
11
12
13
# Qot_GetInsiderHolderList.proto
説明
インサイダー保有株式リストの取得
パラメータ
message C2S
{
required Qot_Common.Security security = 1;
optional string nextKey = 2; // ページングキー;初回は不要;続きは前回の nextKey を渡す;"-1" はデータなし
optional int32 num = 3; // 1ページあたりの件数、デフォルト 10、範囲 1~20
}
message Request
{
required C2S c2s = 1;
}
2
3
4
5
6
7
8
9
10
11
- 銘柄構造については Security を参照
- 戻り値
message OwnerInsiderHolderItem
{
optional int64 holderId = 1; // 株主ID;GetInsiderTradeList および Qot_GetShareholdersHolderDetail の入力として使用可能
optional int64 holderQuantity = 2; // 保有株式総数
optional double holderPct = 3; // 保有比率;パーセント記号の前の値;例:12.34 は 12.34% を意味する
optional string name = 4; // 株主名
optional string title = 5; // 役職
}
message S2C
{
repeated OwnerInsiderHolderItem itemList = 1;
optional int32 allCount = 2; // 総件数
optional string nextKey = 3; // ページングキー;"-1" はデータなし
optional int32 insiderTotalCount = 4; // インサイダー総人数;初回リクエスト(nextKey が空)時のみ返される
optional int32 insiderBoughtCount = 5; // 買い増したインサイダーの人数;初回リクエスト時のみ返される
optional int32 insiderSoldCount = 6; // 売却したインサイダーの人数;初回リクエスト時のみ返される
}
message Response
{
required int32 retType = 1 [default = -400]; // 戻り結果、Common.RetType を参照
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
- API 呼び出し結果については RetType を参照
プロトコル ID
3241
uint GetInsiderHolderList(QotGetInsiderHolderList.Request req);
virtual void OnReply_GetInsiderHolderList(MMAPI_Conn client, uint nSerialNo, QotGetInsiderHolderList.Response rsp);
説明
インサイダー保有株式リストの取得
パラメータ
message C2S
{
required Qot_Common.Security security = 1;
optional string nextKey = 2; // ページングキー;初回は不要;続きは前回の nextKey を渡す;"-1" はデータなし
optional int32 num = 3; // 1ページあたりの件数、デフォルト 10、範囲 1~20
}
message Request
{
required C2S c2s = 1;
}
2
3
4
5
6
7
8
9
10
11
- 銘柄構造については Security を参照
- 戻り値
message OwnerInsiderHolderItem
{
optional int64 holderId = 1; // 株主ID;GetInsiderTradeList および Qot_GetShareholdersHolderDetail の入力として使用可能
optional int64 holderQuantity = 2; // 保有株式総数
optional double holderPct = 3; // 保有比率;パーセント記号の前の値;例:12.34 は 12.34% を意味する
optional string name = 4; // 株主名
optional string title = 5; // 役職
}
message S2C
{
repeated OwnerInsiderHolderItem itemList = 1;
optional int32 allCount = 2; // 総件数
optional string nextKey = 3; // ページングキー;"-1" はデータなし
optional int32 insiderTotalCount = 4; // インサイダー総人数;初回リクエスト(nextKey が空)時のみ返される
optional int32 insiderBoughtCount = 5; // 買い増したインサイダーの人数;初回リクエスト時のみ返される
optional int32 insiderSoldCount = 6; // 売却したインサイダーの人数;初回リクエスト時のみ返される
}
message Response
{
required int32 retType = 1 [default = -400]; // 戻り結果、Common.RetType を参照
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
- API 呼び出し結果については RetType を参照
- 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}\n", errCode, desc, client.GetConnectID());
if (errCode != 0)
return;
QotCommon.Security sec = QotCommon.Security.CreateBuilder()
.SetMarket((int)QotCommon.QotMarket.QotMarket_US_Security)
.SetCode("AAPL")
.Build();
QotGetInsiderHolderList.C2S c2s = QotGetInsiderHolderList.C2S.CreateBuilder()
.SetSecurity(sec)
.Build();
QotGetInsiderHolderList.Request req = QotGetInsiderHolderList.Request.CreateBuilder().SetC2S(c2s).Build();
uint seqNo = qot.GetInsiderHolderList(req);
Console.Write("Send QotGetInsiderHolderList: {0}\n", seqNo);
}
public void OnDisconnect(MMAPI_Conn client, long errCode)
{
Console.Write("Qot onDisConnect: {0}\n", errCode);
}
public void OnReply_GetInsiderHolderList(MMAPI_Conn client, uint nSerialNo, QotGetInsiderHolderList.Response rsp)
{
Console.Write("Reply: QotGetInsiderHolderList: {0} {1}\n", nSerialNo, rsp.ToString());
}
public static void Main(String[] args)
{
MMAPI.Init();
Program qot = new Program();
qot.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
55
56
- Output
sent seqNo=3
retType: 0
retMsg: ""
errCode: 0
s2c {
itemList {
holderId: 234085
holderQuantity: 4125576
holderPct: 0.028
name: "Arthur Levinson"
title: "Independent Non-Executive Chairperson"
}
itemList {
//...
}
allCount: 17
nextKey: "10"
insiderTotalCount: 17
insiderBoughtCount: 11
insiderSoldCount: 8
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int getInsiderHolderList(QotGetInsiderHolderList.Request req);
void onReply_GetInsiderHolderList(MMAPI_Conn client, int nSerialNo, QotGetInsiderHolderList.Response rsp);
説明
インサイダー保有株式リストの取得
パラメータ
message C2S
{
required Qot_Common.Security security = 1;
optional string nextKey = 2; // ページングキー;初回は不要;続きは前回の nextKey を渡す;"-1" はデータなし
optional int32 num = 3; // 1ページあたりの件数、デフォルト 10、範囲 1~20
}
message Request
{
required C2S c2s = 1;
}
2
3
4
5
6
7
8
9
10
11
- 銘柄構造については Security を参照
- 戻り値
message OwnerInsiderHolderItem
{
optional int64 holderId = 1; // 株主ID;GetInsiderTradeList および Qot_GetShareholdersHolderDetail の入力として使用可能
optional int64 holderQuantity = 2; // 保有株式総数
optional double holderPct = 3; // 保有比率;パーセント記号の前の値;例:12.34 は 12.34% を意味する
optional string name = 4; // 株主名
optional string title = 5; // 役職
}
message S2C
{
repeated OwnerInsiderHolderItem itemList = 1;
optional int32 allCount = 2; // 総件数
optional string nextKey = 3; // ページングキー;"-1" はデータなし
optional int32 insiderTotalCount = 4; // インサイダー総人数;初回リクエスト(nextKey が空)時のみ返される
optional int32 insiderBoughtCount = 5; // 買い増したインサイダーの人数;初回リクエスト時のみ返される
optional int32 insiderSoldCount = 6; // 売却したインサイダーの人数;初回リクエスト時のみ返される
}
message Response
{
required int32 retType = 1 [default = -400]; // 戻り結果、Common.RetType を参照
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
- API 呼び出し結果については RetType を参照
- 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=%b desc=%s connID=%d\n", errCode, desc, client.getConnectID());
if (errCode != 0)
return;
QotCommon.Security sec = QotCommon.Security.newBuilder()
.setMarket(QotCommon.QotMarket.QotMarket_US_Security_VALUE)
.setCode("AAPL")
.build();
QotGetInsiderHolderList.C2S c2s = QotGetInsiderHolderList.C2S.newBuilder()
.setSecurity(sec)
.build();
QotGetInsiderHolderList.Request req = QotGetInsiderHolderList.Request.newBuilder().setC2S(c2s).build();
int seqNo = qot.getInsiderHolderList(req);
System.out.printf("Send QotGetInsiderHolderList: %d\n", seqNo);
}
@Override
public void onDisconnect(MMAPI_Conn client, long errCode) {
System.out.printf("Qot onDisConnect: %d\n", errCode);
}
@Override
public void onReply_GetInsiderHolderList(MMAPI_Conn client, int nSerialNo, QotGetInsiderHolderList.Response rsp) {
if (rsp.getRetType() != 0) {
System.out.printf("QotGetInsiderHolderList failed: %s\n", rsp.getRetMsg());
}
else {
try {
String json = JsonFormat.printer().print(rsp);
System.out.printf("Receive QotGetInsiderHolderList: %s\n", 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
- Output
Qot onInitConnect: ret=0 desc= connID=7459212661260089877
Send Qot_GetInsiderHolderList: 2
Receive Qot_GetInsiderHolderList: retType: 0
retMsg: ""
errCode: 0
s2c {
itemList {
holderId: 234085
holderQuantity: 4125576
holderPct: 0.028
name: "Arthur Levinson"
title: "Independent Non-Executive Chairperson"
}
itemList {
//...
}
allCount: 17
nextKey: "10"
insiderTotalCount: 17
insiderBoughtCount: 11
insiderSoldCount: 8
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
moomoo::u32_t GetInsiderHolderList(const Qot_GetInsiderHolderList::Request &stReq);
virtual void OnReply_GetInsiderHolderList(moomoo::u32_t nSerialNo, const Qot_GetInsiderHolderList::Response &stRsp) = 0;
説明
インサイダー保有株式リストの取得
パラメータ
message C2S
{
required Qot_Common.Security security = 1;
optional string nextKey = 2; // ページングキー;初回は不要;続きは前回の nextKey を渡す;"-1" はデータなし
optional int32 num = 3; // 1ページあたりの件数、デフォルト 10、範囲 1~20
}
message Request
{
required C2S c2s = 1;
}
2
3
4
5
6
7
8
9
10
11
- 銘柄構造については Security を参照
- 戻り値
message OwnerInsiderHolderItem
{
optional int64 holderId = 1; // 株主ID;GetInsiderTradeList および Qot_GetShareholdersHolderDetail の入力として使用可能
optional int64 holderQuantity = 2; // 保有株式総数
optional double holderPct = 3; // 保有比率;パーセント記号の前の値;例:12.34 は 12.34% を意味する
optional string name = 4; // 株主名
optional string title = 5; // 役職
}
message S2C
{
repeated OwnerInsiderHolderItem itemList = 1;
optional int32 allCount = 2; // 総件数
optional string nextKey = 3; // ページングキー;"-1" はデータなし
optional int32 insiderTotalCount = 4; // インサイダー総人数;初回リクエスト(nextKey が空)時のみ返される
optional int32 insiderBoughtCount = 5; // 買い増したインサイダーの人数;初回リクエスト時のみ返される
optional int32 insiderSoldCount = 6; // 売却したインサイダーの人数;初回リクエスト時のみ返される
}
message Response
{
required int32 retType = 1 [default = -400]; // 戻り結果、Common.RetType を参照
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
- API 呼び出し結果については RetType を参照
- Example
class Program : public MMSPI_Qot, public MMSPI_Trd, 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) {
cout << "connect" << endl;
// construct request message
Qot_GetInsiderHolderList::Request req;
Qot_GetInsiderHolderList::C2S *c2s = req.mutable_c2s();
Qot_Common::Security *sec = c2s->mutable_security();
sec->set_code("AAPL");
sec->set_market(Qot_Common::QotMarket::QotMarket_US_Security);
m_pQotApi->GetInsiderHolderList(req);
cout << "GetInsiderHolderList" << endl;
}
virtual void OnReply_GetInsiderHolderList(moomoo::u32_t nSerialNo, const Qot_GetInsiderHolderList::Response &stRsp){
cout << "OnReply_GetInsiderHolderList:" << endl;
// print response
// ProtoBufToBodyData and UTF8ToLocal refer to tool.h in Samples
string resp_str;
ProtoBufToBodyData(stRsp, resp_str);
cout << UTF8ToLocal(resp_str) << endl;
}
protected:
MMAPI_Qot *m_pQotApi;
};
int32_t main(int32_t argc, char** argv)
{
MMAPI::Init();
{
Program program;
program.Start();
getchar();
}
protobuf::ShutdownProtobufLibrary();
MMAPI::UnInit();
return 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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
- Output
onInitConnect: ret=0 desc=Succeed!
Send Qot_GetInsiderHolderList seqNo=3
retType: 0
retMsg: ""
errCode: 0
s2c {
itemList {
holderId: 234085
holderQuantity: 4125576
holderPct: 0.028
name: "Arthur Levinson"
title: "Independent Non-Executive Chairperson"
}
itemList {
//...
}
allCount: 17
nextKey: "10"
insiderTotalCount: 17
insiderBoughtCount: 11
insiderSoldCount: 8
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
GetInsiderHolderList(req);
説明
インサイダー保有株式リストの取得
パラメータ
message C2S
{
required Qot_Common.Security security = 1;
optional string nextKey = 2; // ページングキー;初回は不要;続きは前回の nextKey を渡す;"-1" はデータなし
optional int32 num = 3; // 1ページあたりの件数、デフォルト 10、範囲 1~20
}
message Request
{
required C2S c2s = 1;
}
2
3
4
5
6
7
8
9
10
11
- 銘柄構造については Security を参照
- 戻り値
message OwnerInsiderHolderItem
{
optional int64 holderId = 1; // 株主ID;GetInsiderTradeList および Qot_GetShareholdersHolderDetail の入力として使用可能
optional int64 holderQuantity = 2; // 保有株式総数
optional double holderPct = 3; // 保有比率;パーセント記号の前の値;例:12.34 は 12.34% を意味する
optional string name = 4; // 株主名
optional string title = 5; // 役職
}
message S2C
{
repeated OwnerInsiderHolderItem itemList = 1;
optional int32 allCount = 2; // 総件数
optional string nextKey = 3; // ページングキー;"-1" はデータなし
optional int32 insiderTotalCount = 4; // インサイダー総人数;初回リクエスト(nextKey が空)時のみ返される
optional int32 insiderBoughtCount = 5; // 買い増したインサイダーの人数;初回リクエスト時のみ返される
optional int32 insiderSoldCount = 6; // 売却したインサイダーの人数;初回リクエスト時のみ返される
}
message Response
{
required int32 retType = 1 [default = -400]; // 戻り結果、Common.RetType を参照
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
- API 呼び出し結果については RetType を参照
- Example
import mmWebsocket from "moomoo-api";
import { Common, Qot_Common } from "moomoo-api/proto";
import beautify from "js-beautify";
function QotGetInsiderHolderList(){
const { RetType } = Common
const { QotMarket } = Qot_Common
let [addr, port, enable_ssl, key] = ["127.0.0.1", 33333, false, '7522027ccf5a06b1'];
let websocket = new mmWebsocket();
websocket.onlogin = (ret, msg)=>{
if (ret) {
const req = {
c2s: {
security: {
market: QotMarket.QotMarket_US_Security,
code: "AAPL",
},
},
};
websocket.GetInsiderHolderList(req)
.then((res) => {
let { errCode, retMsg, retType,s2c } = res
console.log("GetInsiderHolderList: 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("error", msg);
}
};
websocket.start(addr, port, enable_ssl, key);
setTimeout(()=>{
websocket.stop();
console.log("stop");
}, 5000);
}
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
- Output
GetInsiderHolderList: errCode 0, retMsg , retType 0
{
"itemList": [{
"holderId": "234085",
"holderQuantity": "4125576",
"holderPct": 0.028,
"name": "Arthur Levinson",
"title": "Independent Non-Executive Chairperson"
//...
}],
"allCount": 17,
"nextKey": "10",
"insiderTotalCount": 17,
"insiderBoughtCount": 11,
"insiderSoldCount": 8
}
stop
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
API 制限
- 30 秒間に最大 30 リクエスト。
- 米国株の普通株およびファンドのみ対応。
- ページングに対応;デフォルト 1 ページあたり 10 件、最大 20 件;ページングキーは文字列型。
- インサイダー統計サマリー(総人数/買い増し人数/売却人数)は初回ページ(nextKey が空の場合)のみ返される。